From cad1804e87444dbe6c3957e121e52ef658ad9e2d Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Tue, 19 Apr 2016 13:07:20 +0300 Subject: [PATCH] [ios] Removed old report a problem. --- iphone/Maps/Classes/MWMPlacePage.h | 1 - iphone/Maps/Classes/MWMPlacePage.mm | 5 - iphone/Maps/Classes/MWMPlacePageViewManager.h | 1 - .../Maps/Classes/MWMPlacePageViewManager.mm | 5 - iphone/Maps/Classes/MWMReportBaseController.h | 13 -- .../Maps/Classes/MWMReportBaseController.mm | 52 ------ .../Maps/Classes/MWMReportProblemController.h | 5 - .../Classes/MWMReportProblemController.mm | 57 ------- .../MWMReportProblemExtendedController.h | 5 - .../MWMReportProblemExtendedController.mm | 39 ----- iphone/Maps/Classes/MapViewController.h | 1 - iphone/Maps/Classes/MapViewController.mm | 12 -- iphone/Maps/Maps.xcodeproj/project.pbxproj | 32 ---- iphone/Maps/Mapsme.storyboard | 151 ------------------ 14 files changed, 379 deletions(-) delete mode 100644 iphone/Maps/Classes/MWMReportBaseController.h delete mode 100644 iphone/Maps/Classes/MWMReportBaseController.mm delete mode 100644 iphone/Maps/Classes/MWMReportProblemController.h delete mode 100644 iphone/Maps/Classes/MWMReportProblemController.mm delete mode 100644 iphone/Maps/Classes/MWMReportProblemExtendedController.h delete mode 100644 iphone/Maps/Classes/MWMReportProblemExtendedController.mm diff --git a/iphone/Maps/Classes/MWMPlacePage.h b/iphone/Maps/Classes/MWMPlacePage.h index 911aef78b0..35839f9520 100644 --- a/iphone/Maps/Classes/MWMPlacePage.h +++ b/iphone/Maps/Classes/MWMPlacePage.h @@ -29,7 +29,6 @@ - (void)changeBookmarkDescription; - (void)editPlace; - (void)addBusiness; -- (void)reportProblem; - (void)share; - (void)route; - (void)reloadBookmark; diff --git a/iphone/Maps/Classes/MWMPlacePage.mm b/iphone/Maps/Classes/MWMPlacePage.mm index a32ffe50f4..fd334e53f7 100644 --- a/iphone/Maps/Classes/MWMPlacePage.mm +++ b/iphone/Maps/Classes/MWMPlacePage.mm @@ -143,11 +143,6 @@ static NSString * const kPlacePageViewCenterKeyPath = @"center"; [self.manager addBusiness]; } -- (void)reportProblem -{ - [self.manager reportProblem]; -} - - (void)share { [self.manager share]; diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.h b/iphone/Maps/Classes/MWMPlacePageViewManager.h index 5153d12ac0..08c23b7c2e 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.h +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.h @@ -26,7 +26,6 @@ - (void)share; - (void)editPlace; - (void)addBusiness; -- (void)reportProblem; - (void)addBookmark; - (void)removeBookmark; - (void)apiBack; diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.mm b/iphone/Maps/Classes/MWMPlacePageViewManager.mm index 72865727db..6da93e3749 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.mm @@ -263,11 +263,6 @@ extern NSString * const kBookmarksChangedNotification; [self.delegate addBusinessToPoint:self.entity.mercator]; } -- (void)reportProblem -{ - [static_cast(self.ownerViewController) showReportController]; -} - - (void)addBookmark { [Statistics logEvent:kStatEventName(kStatPlacePage, kStatBookmarks) diff --git a/iphone/Maps/Classes/MWMReportBaseController.h b/iphone/Maps/Classes/MWMReportBaseController.h deleted file mode 100644 index 19990fedb1..0000000000 --- a/iphone/Maps/Classes/MWMReportBaseController.h +++ /dev/null @@ -1,13 +0,0 @@ -#import "MWMTableViewController.h" - -#include "geometry/point2d.hpp" - -@interface MWMReportBaseController : MWMTableViewController - -- (void)configNavBar NS_REQUIRES_SUPER; -- (void)sendNote:(string const &)note NS_REQUIRES_SUPER; - -- (void)setPoint:(m2::PointD const &)point NS_REQUIRES_SUPER; -- (m2::PointD const &)point; - -@end diff --git a/iphone/Maps/Classes/MWMReportBaseController.mm b/iphone/Maps/Classes/MWMReportBaseController.mm deleted file mode 100644 index 9dfb59e403..0000000000 --- a/iphone/Maps/Classes/MWMReportBaseController.mm +++ /dev/null @@ -1,52 +0,0 @@ -#import "LocationManager.h" -#import "MapsAppDelegate.h" -#import "MapViewController.h" -#import "MWMAuthorizationCommon.h" -#import "MWMMapViewControlsManager.h" -#import "MWMPlacePageEntity.h" -#import "MWMReportBaseController.h" -#import "Statistics.h" - -#include "indexer/osm_editor.hpp" - -@implementation MWMReportBaseController -{ - m2::PointD m_point; -} - -- (void)configNavBar -{ - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:L(@"editor_report_problem_send_button") - style:UIBarButtonItemStylePlain target:self action:@selector(send)]; -} - -- (void)send -{ - [self doesNotRecognizeSelector:_cmd]; -} - -- (void)sendNote:(string const &)note -{ - NSAssert(!note.empty(), @"String can't be empty!"); - auto const & featureID = MapsAppDelegate.theApp.mapViewController.controlsManager.placePageEntity.info.GetID(); - auto const latLon = ToLatLon(m_point); - osm::Editor::Instance().CreateNote(latLon, featureID, note); - [Statistics logEvent:kStatEditorProblemReport withParameters:@{kStatEditorMWMName : @(featureID.GetMwmName().c_str()), - kStatEditorMWMVersion : @(featureID.GetMwmVersion()), - kStatProblem : @(note.c_str()), - kStatLat : @(latLon.lat), - kStatLon : @(latLon.lon)}]; - [self.navigationController popToRootViewControllerAnimated:YES]; -} - -- (void)setPoint:(m2::PointD const &)point -{ - m_point = point; -} - -- (m2::PointD const &)point -{ - return m_point; -} - -@end diff --git a/iphone/Maps/Classes/MWMReportProblemController.h b/iphone/Maps/Classes/MWMReportProblemController.h deleted file mode 100644 index 2728c1f9f9..0000000000 --- a/iphone/Maps/Classes/MWMReportProblemController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "MWMReportBaseController.h" - -@interface MWMReportProblemController : MWMReportBaseController - -@end diff --git a/iphone/Maps/Classes/MWMReportProblemController.mm b/iphone/Maps/Classes/MWMReportProblemController.mm deleted file mode 100644 index 32cd7086f6..0000000000 --- a/iphone/Maps/Classes/MWMReportProblemController.mm +++ /dev/null @@ -1,57 +0,0 @@ -#import "MWMReportProblemController.h" -#import "SelectableCell.h" - -#include "indexer/osm_editor.hpp" - -@interface MWMReportProblemController () - -@property (weak, nonatomic) IBOutlet SelectableCell * placeDoesntExistCell; -@property (nonatomic) BOOL isCellSelected; - -@end - -@implementation MWMReportProblemController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.placeDoesntExistCell.accessoryType = UITableViewCellAccessoryNone; - [self configNavBar]; -} - -- (void)configNavBar -{ - [super configNavBar]; - self.title = L(@"editor_report_problem_title"); -} - -- (void)send -{ - if (!self.isCellSelected) - return; - [self sendNote:osm::Editor::kPlaceDoesNotExistMessage]; -} - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender -{ - MWMReportBaseController * dvc = segue.destinationViewController; - NSAssert([dvc isKindOfClass:[MWMReportBaseController class]], @"Incorrect destination controller!"); - dvc.point = self.point; -} - -#pragma mark - UITableView - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; - [cell setSelected:NO animated:YES]; - - if (indexPath.row > 0) - return; - - self.isCellSelected = !self.isCellSelected; - self.placeDoesntExistCell.accessoryType = self.isCellSelected ? UITableViewCellAccessoryCheckmark : - UITableViewCellAccessoryNone; -} - -@end diff --git a/iphone/Maps/Classes/MWMReportProblemExtendedController.h b/iphone/Maps/Classes/MWMReportProblemExtendedController.h deleted file mode 100644 index 2b59ea1670..0000000000 --- a/iphone/Maps/Classes/MWMReportProblemExtendedController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "MWMReportBaseController.h" - -@interface MWMReportProblemExtendedController : MWMReportBaseController - -@end diff --git a/iphone/Maps/Classes/MWMReportProblemExtendedController.mm b/iphone/Maps/Classes/MWMReportProblemExtendedController.mm deleted file mode 100644 index 458d095357..0000000000 --- a/iphone/Maps/Classes/MWMReportProblemExtendedController.mm +++ /dev/null @@ -1,39 +0,0 @@ -#import "MWMReportProblemExtendedController.h" - -@interface MWMReportProblemExtendedController () - -@property (weak, nonatomic) IBOutlet UITextView * textView; - -@end - -@implementation MWMReportProblemExtendedController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - [self configNavBar]; -} - -- (void)configNavBar -{ - [super configNavBar]; - self.title = L(@"editor_report_problem_title"); -} - -- (void)send -{ - if (!self.textView.text.length) - return; - [self sendNote:self.textView.text.UTF8String]; -} - -#pragma mark - UITableView - -- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section -{ - NSAssert(section == 0, @"Invalid section!"); - return [NSString stringWithFormat:@"%@\n\n%@", L(@"editor_report_problem_desription_1"), - L(@"editor_report_problem_desription_2")]; -} - -@end diff --git a/iphone/Maps/Classes/MapViewController.h b/iphone/Maps/Classes/MapViewController.h index 018496dac4..e07f9aaba1 100644 --- a/iphone/Maps/Classes/MapViewController.h +++ b/iphone/Maps/Classes/MapViewController.h @@ -35,7 +35,6 @@ namespace search { struct AddressInfo; } - (void)openBookmarks; - (void)openMapsDownloader; - (void)openEditor; -- (void)showReportController; - (void)refreshAd; diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 43d405384b..809c5c674a 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -18,7 +18,6 @@ #import "MWMMapViewControlsManager.h" #import "MWMPageController.h" #import "MWMPlacePageEntity.h" -#import "MWMReportBaseController.h" #import "MWMStorage.h" #import "MWMTableViewController.h" #import "MWMTextToSpeech.h" @@ -77,7 +76,6 @@ NSString * const kDownloaderSegue = @"Map2MapDownloaderSegue"; NSString * const kMigrationSegue = @"Map2MigrationSegue"; NSString * const kEditorSegue = @"Map2EditorSegue"; NSString * const kUDViralAlertWasShown = @"ViralAlertWasShown"; -NSString * const kReportSegue = @"Map2ReportSegue"; } // namespace @interface NSValueWrapper : NSObject @@ -568,11 +566,6 @@ NSString * const kReportSegue = @"Map2ReportSegue"; [self performSegueWithIdentifier:kEditorSegue sender:self.controlsManager.placePageEntity]; } -- (void)showReportController -{ - [self performSegueWithIdentifier:kReportSegue sender:self.controlsManager.placePageEntity]; -} - - (void)processMyPositionStateModeEvent:(location::EMyPositionMode)mode { [m_predictor setMode:mode]; @@ -853,11 +846,6 @@ NSString * const kReportSegue = @"Map2ReportSegue"; MWMMapDownloaderViewController * dvc = segue.destinationViewController; dvc.parentCountryId = @(GetFramework().Storage().GetRootId().c_str()); } - else if ([segue.identifier isEqualToString:kReportSegue]) - { - MWMReportBaseController * dvc = segue.destinationViewController; - dvc.point = static_cast(sender).mercator; - } else if ([segue.identifier isEqualToString:kMap2FBLoginSegue]) { MWMAuthorizationWebViewLoginViewController * dvc = segue.destinationViewController; diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 76bba75af9..ea915928fa 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -658,12 +658,6 @@ F607C1891C032A8800B53A87 /* resources-hdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = F607C1841C032A8800B53A87 /* resources-hdpi_dark */; }; F607C18A1C032A8800B53A87 /* resources-hdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = F607C1841C032A8800B53A87 /* resources-hdpi_dark */; }; F607C18E1C047FDC00B53A87 /* MWMSegue.mm in Sources */ = {isa = PBXBuildFile; fileRef = F607C18D1C047FDC00B53A87 /* MWMSegue.mm */; }; - F60F02E11C904E08003A0AF6 /* MWMReportProblemController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */; }; - F60F02E41C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */; }; - F60F02E51C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */; }; - F60F02E61C904E86003A0AF6 /* MWMReportProblemController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */; }; - F60F02E91C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */; }; - F60F02EA1C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */; }; F61579341AC2CE9A0032D8E9 /* MWMRateAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F61579331AC2CE9A0032D8E9 /* MWMRateAlert.mm */; }; F61579361AC2CEB60032D8E9 /* MWMRateAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F61579351AC2CEB60032D8E9 /* MWMRateAlert.xib */; }; F6172FA51BBD5A3E0081D325 /* MWMiPadRoutePreview.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6172FA41BBD5A3E0081D325 /* MWMiPadRoutePreview.xib */; }; @@ -1325,12 +1319,6 @@ F607C1841C032A8800B53A87 /* resources-hdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-hdpi_dark"; path = "../../data/resources-hdpi_dark"; sourceTree = ""; }; F607C18C1C047FDC00B53A87 /* MWMSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSegue.h; sourceTree = ""; }; F607C18D1C047FDC00B53A87 /* MWMSegue.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSegue.mm; sourceTree = ""; }; - F60F02DF1C904E08003A0AF6 /* MWMReportProblemController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportProblemController.h; sourceTree = ""; }; - F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportProblemController.mm; sourceTree = ""; }; - F60F02E21C904E3E003A0AF6 /* MWMReportProblemExtendedController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportProblemExtendedController.h; sourceTree = ""; }; - F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportProblemExtendedController.mm; sourceTree = ""; }; - F60F02E71C904F40003A0AF6 /* MWMReportBaseController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportBaseController.h; sourceTree = ""; }; - F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportBaseController.mm; sourceTree = ""; }; F61579321AC2CE9A0032D8E9 /* MWMRateAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMRateAlert.h; sourceTree = ""; }; F61579331AC2CE9A0032D8E9 /* MWMRateAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRateAlert.mm; sourceTree = ""; }; F61579351AC2CEB60032D8E9 /* MWMRateAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMRateAlert.xib; sourceTree = ""; }; @@ -1683,7 +1671,6 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( - F60F02DE1C904DE8003A0AF6 /* ReportProblem */, 34479C741C60C6130065D261 /* Framework */, 34CE8A641C7740CF00F4351A /* Storage */, 34ABA61D1C2D514A00FE1BEC /* Input Validators */, @@ -2540,19 +2527,6 @@ name = Segue; sourceTree = ""; }; - F60F02DE1C904DE8003A0AF6 /* ReportProblem */ = { - isa = PBXGroup; - children = ( - F60F02E71C904F40003A0AF6 /* MWMReportBaseController.h */, - F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */, - F60F02DF1C904E08003A0AF6 /* MWMReportProblemController.h */, - F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */, - F60F02E21C904E3E003A0AF6 /* MWMReportProblemExtendedController.h */, - F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */, - ); - name = ReportProblem; - sourceTree = ""; - }; F613FA741AB330AF002394D4 /* MapViewController */ = { isa = PBXGroup; children = ( @@ -3577,7 +3551,6 @@ 34F9FB8B1C438ADB00F71201 /* MWMStreetEditorViewController.mm in Sources */, EED10A4511F78D120095FAD4 /* MapViewController.mm in Sources */, 34CCFDD11C21945500F28959 /* MWMPlacePageOpeningHoursDayView.mm in Sources */, - F60F02E41C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */, F61579341AC2CE9A0032D8E9 /* MWMRateAlert.mm in Sources */, F6BB6CC61BB18C0900DF1DF2 /* MWMRoutePointCell.m in Sources */, A3CC2CD41A1C723900B832E1 /* LocationPredictor.mm in Sources */, @@ -3701,7 +3674,6 @@ 34BC72241B0DECAE0012A34B /* MWMMapViewControlsManager.mm in Sources */, F6B2E61F1C3D5F31005562DF /* MWMNightModeController.mm in Sources */, F6BD33791B62400E00F2CE18 /* MWMNavigationDashboard.mm in Sources */, - F60F02E91C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */, F6BD1D201CA412920047B8E8 /* MWMOsmAuthAlert.mm in Sources */, 347FD8891C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, 34CD81C31C91C281007D2A60 /* MWMWhatsNewNightModeController.mm in Sources */, @@ -3729,7 +3701,6 @@ F64F4B6D1B46A51F0081A24A /* MWMDownloaderDialogCell.mm in Sources */, 3491E7CB1C06F1F10042FE24 /* MWMPlacePageButtonCell.mm in Sources */, 97508423199522D300A7457D /* SettingsAndMoreVC.mm in Sources */, - F60F02E11C904E08003A0AF6 /* MWMReportProblemController.mm in Sources */, 341F99D91C6B1165001C67B8 /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */, 341F99D51C6B1165001C67B8 /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */, 347FD86F1C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */, @@ -3829,7 +3800,6 @@ 6741A9D01BF340DE002C974C /* MWMPlacePage.mm in Sources */, 3492CC131C6DF00F0057D8E8 /* (null) in Sources */, 6741A9D21BF340DE002C974C /* MWMBookmarkDescriptionViewController.mm in Sources */, - F60F02E61C904E86003A0AF6 /* MWMReportProblemController.mm in Sources */, 3476B8CC1BFDCB6700874594 /* MWMTTSSettingsViewController.mm in Sources */, 6741A9D41BF340DE002C974C /* MWMAlertViewController.mm in Sources */, F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm in Sources */, @@ -3917,8 +3887,6 @@ 34CCFDE11C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.mm in Sources */, 6741AA0D1BF340DE002C974C /* LocalNotificationManager.mm in Sources */, 347FD88A1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, - F60F02E51C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */, - F60F02EA1C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */, 6741AA0E1BF340DE002C974C /* AppInfo.mm in Sources */, F6BD1D211CA412920047B8E8 /* MWMOsmAuthAlert.mm in Sources */, 6741AA0F1BF340DE002C974C /* MWMSearchHistoryMyPositionCell.mm in Sources */, diff --git a/iphone/Maps/Mapsme.storyboard b/iphone/Maps/Mapsme.storyboard index 17390d52f4..f3ad7c9313 100644 --- a/iphone/Maps/Mapsme.storyboard +++ b/iphone/Maps/Mapsme.storyboard @@ -30,7 +30,6 @@ - @@ -1008,156 +1007,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -