From e9428aa499a75ca11f9d8892ed0dc6eee1eeee8a Mon Sep 17 00:00:00 2001 From: ape0108792 Date: Sat, 11 Nov 2017 12:17:13 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=95=EC=9D=98=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 강의 프로젝트 파일 추가 --- .../Contents.swift" | 30 + .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../Contents.swift" | 40 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../ControlFlow.playground/Contents.swift" | 55 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../Contents.swift" | 119 ++++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../timeline.xctimeline" | 28 + .../Enumeration.playground/Contents.swift" | 88 +++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../timeline.xctimeline" | 16 + .../Function.playground/Contents.swift" | 54 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../FunctionType.playground/Contents.swift" | 43 ++ .../contents.xcplayground" | 4 + .../KBOHallOfFame.xcodeproj/project.pbxproj" | 333 +++++++++ .../contents.xcworkspacedata" | 7 + .../KBOHallOfFame/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Assets.xcassets/Contents.json" | 6 + .../haetae_tigers.imageset/Contents.json" | 21 + .../haetae_tigers.imageset/haetae_tigers.png" | Bin 0 -> 43041 bytes .../leejongbum.imageset/Contents.json" | 21 + .../leejongbum.imageset/leejongbum.png" | Bin 0 -> 179316 bytes .../Base.lproj/LaunchScreen.storyboard" | 25 + .../KBOHallOfFame/Base.lproj/Main.storyboard" | 144 ++++ .../KBOHallOfFame/HitterTableViewCell.swift" | 42 ++ .../KBOHallOfFame/Info.plist" | 45 ++ .../KBOTableViewController.swift" | 160 +++++ .../KBOHallOfFame/ViewController.swift" | 25 + .../MoneyConverter.xcodeproj/project.pbxproj" | 561 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../MoneyConverter/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 93 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../Base.lproj/Main.storyboard" | 67 ++ .../MoneyConverter/MoneyConverter/Info.plist" | 45 ++ .../MoneyConverter/Money.swift" | 62 ++ .../MoneyConverter/ViewController.swift" | 52 ++ .../MoneyConverterTests/Info.plist" | 22 + .../MoneyConverterTests.swift" | 36 + .../MoneyConverterUITests/Info.plist" | 22 + .../MoneyConverterUITests.swift" | 36 + .../Optional.playground/Contents.swift" | 37 + .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../Optional.playground/timeline.xctimeline" | 12 + .../Optional_quiz.playground/Contents.swift" | 47 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../String&numbers.playground/Contents.swift" | 43 ++ .../contents.xcplayground" | 4 + .../timeline.xctimeline" | 11 + .../Contents.swift" | 39 ++ .../contents.xcplayground" | 4 + .../closure.playground/Contents.swift" | 27 + .../closure.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../currying.playground/Contents.swift" | 54 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../filter.playground/Contents.swift" | 22 + .../filter.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../instance_class.playground/Contents.swift" | 45 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../timeline.xctimeline" | 16 + .../Contents.swift" | 97 +++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../timeline.xctimeline" | 16 + .../Contents.swift" | 33 + .../contents.xcplayground" | 4 + .../timeline.xctimeline" | 16 + .../interaction.xcodeproj/project.pbxproj" | 557 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../interaction/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 93 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../interaction/Base.lproj/Main.storyboard" | 47 ++ .../interaction/interaction/Info.plist" | 45 ++ .../interaction/ViewController.swift" | 30 + .../interaction/interactionTests/Info.plist" | 22 + .../interactionTests/interactionTests.swift" | 36 + .../interactionUITests/Info.plist" | 22 + .../interactionUITests.swift" | 36 + .../let&var.playground/Contents.swift" | 20 + .../let&var.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../map.playground/Contents.swift" | 36 + .../map.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../meetingRooms.xcodeproj/project.pbxproj" | 561 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 56 ++ .../meetingRooms/meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 105 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 561 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 56 ++ .../meetingRooms_2/meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 104 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 561 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 56 ++ .../meetingRooms_3/meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 112 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 561 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 56 ++ .../meetingRooms_4/meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 125 ++++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 573 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 259 +++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 66 ++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 111 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 597 ++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 52 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 632 +++++++++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 154 ++++ .../meetingRooms/EquipmentDefault.plist" | 30 + .../EquipmentsListViewController.swift" | 120 ++++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 117 ++++ .../ReservationListViewController.swift" | 120 ++++ .../ReserveRoomViewController.swift" | 154 ++++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../TintColorViewController.swift" | 76 ++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 577 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 389 ++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 66 ++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 111 +++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 585 ++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 617 ++++++++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 84 +++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 117 ++++ .../ReservationListViewController.swift" | 114 +++ .../ReserveRoomViewController.swift" | 148 ++++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 573 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 137 ++++ .../BranchListViewController.swift" | 105 +++ .../meetingRooms/DataCenter.swift" | 66 ++ .../meetingRooms_nav/meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 111 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 597 ++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 50 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 632 +++++++++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 84 +++ .../meetingRooms/EquipmentDefault.plist" | 30 + .../EquipmentsListViewController.swift" | 120 ++++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 117 ++++ .../ReservationListViewController.swift" | 119 ++++ .../ReserveRoomViewController.swift" | 154 ++++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../TintColorViewController.swift" | 76 ++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 573 +++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 253 +++++++ .../BranchListViewController.swift" | 107 +++ .../meetingRooms/DataCenter.swift" | 66 ++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 111 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 585 ++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 46 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 619 ++++++++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 84 +++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 117 ++++ .../ReservationListViewController.swift" | 119 ++++ .../ReserveRoomViewController.swift" | 154 ++++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../meetingRooms.xcodeproj/project.pbxproj" | 589 ++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../meetingRooms/AppDelegate.swift" | 51 ++ .../AppIcon.appiconset/Contents.json" | 98 +++ .../Base.lproj/LaunchScreen.storyboard" | 25 + .../meetingRooms/Base.lproj/Main.storyboard" | 662 ++++++++++++++++++ .../BranchListViewController.swift" | 119 ++++ .../meetingRooms/DataCenter.swift" | 84 +++ .../meetingRooms/Info.plist" | 45 ++ .../MeetingRoomListViewController.swift" | 117 ++++ .../ReservationListViewController.swift" | 119 ++++ .../ReserveRoomViewController.swift" | 154 ++++ .../RoomInfoViewController.swift" | 98 +++ .../ServiceListViewController.swift" | 113 +++ .../TintColorViewController.swift" | 76 ++ .../meetingRooms/ViewController.swift" | 25 + .../meetingRoomsTests/Info.plist" | 22 + .../meetingRoomsTests.swift" | 36 + .../meetingRoomsUITests/Info.plist" | 22 + .../meetingRoomsUITests.swift" | 36 + .../methods.playground/Contents.swift" | 130 ++++ .../methods.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../methods.playground/timeline.xctimeline" | 16 + .../reduce.playground/Contents.swift" | 44 ++ .../reduce.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../reduce.playground/timeline.xctimeline" | 16 + .../sort.playground/Contents.swift" | 39 ++ .../sort.playground/contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../sort.playground/timeline.xctimeline" | 16 + .../Contents.swift" | 110 +++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../hanme quiz.playground/Contents.swift" | 89 +++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../my quiz answer.playground/Contents.swift" | 50 ++ .../contents.xcplayground" | 4 + .../contents.xcworkspacedata" | 7 + .../timeline.xctimeline" | 11 + 341 files changed, 28225 insertions(+) create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/haetae_tigers.png" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/leejongbum.imageset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/leejongbum.imageset/leejongbum.png" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/HitterTableViewCell.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/KBOTableViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Money.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/interactionTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/interactionUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentDefault.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentsListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReservationListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReserveRoomViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/TintColorViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReservationListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReserveRoomViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentDefault.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentsListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReservationListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReserveRoomViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/TintColorViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReservationListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReserveRoomViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.pbxproj" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/AppDelegate.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/LaunchScreen.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/Main.storyboard" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/BranchListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/DataCenter.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/MeetingRoomListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReservationListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReserveRoomViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/RoomInfoViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ServiceListViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/TintColorViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ViewController.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/meetingRoomsTests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/Info.plist" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/meetingRoomsUITests.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/timeline.xctimeline" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100755 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/Contents.swift" create mode 100755 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/Contents.swift" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/contents.xcplayground" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" create mode 100644 "\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/timeline.xctimeline" diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/Contents.swift" new file mode 100644 index 0000000..e6632cb --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/Contents.swift" @@ -0,0 +1,30 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//배열의 선언 +var meetingRoom:Array = ["A","B","P","S","E"] +var groups:[Int] = [10, 8, 8, 6] + +meetingRoom += ["R"] + +//배열의 추가1 +var currentSpeed = 20 +var speedHistory:[Int] = [] +speedHistory += [currentSpeed] +let gps = 114.1 +let gps2 = 220.2 + +//배열의 추가2 +speedHistory.append(Int(gps)) + +//배열의 추가3 +speedHistory.insert(Int(gps2), at: 0) + +speedHistory[0] +speedHistory.first + +//배열의 복제. 바로 되지 않고 둘 중 하나의 값이 변경이 될 때 복제된다 +let historyBackup = speedHistory +speedHistory += [130] +historyBackup diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_array.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/Contents.swift" new file mode 100644 index 0000000..5dac720 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/Contents.swift" @@ -0,0 +1,40 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//Dictionary. [key:value] +var roomCapacity:[String:Int] = ["A":10, "B":20, "P":8, "S":10, "E":30] + +//딕셔너리의 추가 +roomCapacity["R"] = 40 +roomCapacity["A"] + +//let roomNames = roomCapacity.keys +//let capacity = roomCapacity.values + +//딕셔너리에서 값을 배열로 가지고 오는 방법 +let roomNames = [String](roomCapacity.keys) +let capacity = [Int](roomCapacity.values) + +//set. 순서를 가지지 않는 컬렉션. 집합연산이 필요한 경우. intersection, Subtract, Union, symmetricDifference +let subway2:Set = ["사당", "방배", "서초", "교대", "강남", "삼성", "신도림", "신림"] +let subway3:Set = ["사당", "블라", "몰리", "서초", "강남", "모름", "가라", "거나나"] + +let transfer = subway2.intersection(subway3) + +//영웅들로 구성된 파티를 만들어, 상대방의 파티와 싸우는 게임을 만드려고 합니다. 기존 파티 heros에 새로운 영웅 newHero를 파티의 맨 앞에 영입하는 완성하세요. heros에 새로운 항목을 추가할 수 있도록 만든 뒤, newHero를 맨 앞에 추가하면 됩니다. +var heros = ["프린스", "마녀", "해골 군대", "고블린 통"] +let newHero = "흑룡" + +heros.insert(newHero, at: 0) + +print(heros) + +//상대방의 영웅 파티가 나타났습니다. 상대방과 겨룰 때에는 서로 겹치는 영웅들끼리만 대전을 할 수 있습니다. 내가 가진 영웅 heros과 상대의 영웅 oppHeros끼리 겹치는 영웅으로 이루어진 Set인 intersectHeros를 구하세요. +let heros2:Set = ["프린스", "마녀", "해골 군대", "고블린 통"] +let oppHeros2:Set = ["자이언트 해골", "고블린 통", "대형석궁", "프린스"] + +// 상대와 겹치는 영웅들로 이뤄진 set을 완성하세요 +let intersectHeros = heros2.intersection(oppHeros2) + +print(intersectHeros) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Collection_dictionary.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/Contents.swift" new file mode 100644 index 0000000..879e1f9 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/Contents.swift" @@ -0,0 +1,55 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//for문과 if문 +let subway2:Set = ["사당", "방배", "서초", "교대", "강남", "삼성", "신도림", "신림"] +let subway3:Set = ["사당", "블라", "몰리", "서초", "강남", "모름", "가라", "거나나"] +let transfer = subway2.intersection(subway3) + +if transfer.count > 0 { + print("환승역은 \(transfer)입니다") +} else { + print("환승역은 없습니다") +} + +for station in subway3 { + print("이번 역은 \(station)입니다") +} + +//switch문 +//딕셔너리를 for문으로 돌릴 때, 튜플로 받아 올 수 있다. +var roomCapacity:[String:Int] = ["A":10, "B":20, "P":8, "S":10, "E":30, "G":40, "C":4] + +for (roomName, capacity) in roomCapacity { + let roomDescription:String + switch capacity { + case 4: + roomDescription = "\(roomName)은 스터디룸이며 정원은 \(capacity)명입니다." + case 5...10: + roomDescription = "\(roomName)은 팀세미나룸이며 정원은 \(capacity)명입니다." + case 11...30: + roomDescription = "\(roomName)은 그룹세미나룸이며 정원은 \(capacity)명입니다." + case _ where capacity > 30: + roomDescription = "\(roomName)의 정원은 \(capacity)이며 별도의 신청이 필요합니다." + default: + roomDescription = "\(roomName)의 정보를 다시 확인해주세요." + } +} + + +//그마트에서는 아이템 수량에 따라 계산 카운터를 안내하는 차세대 카트를 도입하려고 합니다. 카트에 담긴 맥주 수량에 따라3병 이하는 소량 계산대로 보내고, 4병부터 50병까지는 일반 계산대로 보내고, 51병 부터 100병까지의 구매는 매니저에게 연락하고, 100병 이상은 경찰에 신고하는 switch문을 완성해 주세요. + +typealias ShopingItem = (name:String, amount:Int) +let cart = ShopingItem("beer", 1) + +switch cart { +case ("beer", 0...3) : //맥주 3병 이하 + print("Guide to small item counter") +case ("beer", 51...100) : //맥주 51병이상 100병 까지 + print("Call manager") +case ("beer", let amount) where amount > 100 : //맥주 100병 초과 + print("Call police") +default: //나머지(맥주 4병 이상 50병 이하) + print("Make wait in line") +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/ControlFlow.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/Contents.swift" new file mode 100644 index 0000000..aa09ce4 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/Contents.swift" @@ -0,0 +1,119 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*TaskType이라는 이너머레이션에 Associated Value를 설정 + Task 구조체 안에 선언한 doBasicTask( )라는 메소드 + Task의 타입 값에 따라 switch 문을 통해 각각 다른 작업을 수행 + .Call 이면 전화 번호를 number 상수로 + .Report이면 receiver와 time이라는 값 + .Meet과 .Support의 경우 적당한 상수값 + */ + +struct Task { + var title:String + var time:Int? + + var owner:Employee + //var participant:Employee? + + var type:TaskType + enum TaskType { + case Call(number:String) + case Report(to:Employee, when:String) + case Meet(with:Employee, location:String) + case Support(who:Employee, duration:Int) + + var typeTitle:String { + get { + let titleString:String + switch self { + case .Call: + titleString = "Call" + case .Report: + titleString = "Report" + case .Meet: + titleString = "Meet" + case .Support: + titleString = "Support" + } + return titleString + } + } + } + + init(type:TaskType, owner:Employee) { + self.type = type + self.title = type.typeTitle + self.owner = owner + self.time = nil + //self.participant = nil + } + + func doBasicTask() -> String { + let taskDescription:String + switch type { + case .Call(let number): + taskDescription = "\(owner.name!) make a call to \(number)" + case .Report(let reciever, let time): + taskDescription = "\(owner.name!) report to \(reciever.name!) at \(time)" + case .Meet(let participant, let location): + taskDescription = "\(owner.name!) meet \(participant.name!) at \(location)" + case .Support(let taskOwner, let duration): + taskDescription = "\(owner.name!) support \(taskOwner.name!) for \(duration) days" + default: + taskDescription = "Need more information" + } + return taskDescription + } +} + +class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? + + init (name:String) { + self.name = name + } + + init(name:String, phone:String) { + self.name = name + self.phoneNumber = phone + } + + func report() { + if let myBoss = boss { + print("\(name!) reported to \(myBoss).") + } else { + print("\(name!) don't have a boss.") + } + } + + func callTaskToBoss() -> Task? { + if let myBoss = boss, let callTo = myBoss.phoneNumber { + let callTask = Task(type: .Call(number: callTo), owner:self) + return callTask + } + return nil + } +} +var todayTask:[Task] = [] + +let me:Employee = Employee(name: "Alex", phone:"010-3398-8792") +let toby = Employee(name: "Toby") +toby.phoneNumber = "010-3392-8765" +me.boss = toby + +var reportTask = Task(type:.Report(to:toby, when:"afternoon"), owner:me) +reportTask.doBasicTask() +todayTask += [reportTask] + +if let callTask = me.callTaskToBoss() { + todayTask += [callTask] + callTask.doBasicTask() +} + +todayTask[1].time = 15*60 + +print("Today task = \(todayTask)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/timeline.xctimeline" new file mode 100644 index 0000000..1993bf2 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enum associated value.playground/timeline.xctimeline" @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/Contents.swift" new file mode 100644 index 0000000..f1084d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/Contents.swift" @@ -0,0 +1,88 @@ +//: Playground - noun: a place where people can play + +import UIKit + +struct Task { + var title:String + var time:Int? + + var owner:Employee + var participant:Employee? + + /*연관성 있는 값들의 그룹을 만들어 Type-Safe 하게 사용하는 것이다. + + 여러 다른 언어에서 일련의 값에 일대일 대응되는 Enum을 정의해서 사용 + + Task의 상태 값을 나타내기 위해 0, 1, 2등의 정수값을 사용 + 보다 직관적으로 0은 READY, 1은 COUNTING, 2는 PAUSED, 3은 DONE과 같이 Enum으로 정의해서 사용하는 방식 + Swift에서 Enumeration은 더욱 강력한 기능을 가진다 + + 1st class type + 매개변수나 리턴타입으로 사용 + 메소드를 가진다거나 프로토콜을 준수 + */ + var type:TaskType + enum TaskType { + case Call + case Report + case Meet + case Support + + var titleString:String { + get { + let titleString:String + switch self { + case .Call: + titleString = "Call" + case .Report: + titleString = "Report" + case .Meet: + titleString = "Meet" + case .Support: + titleString = "Support" + } + return titleString + } + } + } +} + +class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? +} + +let me:Employee = Employee() +me.name = "Alex" +me.phoneNumber = "010-3398-9879" + +let toby = Employee() +toby.name = "Toby" +toby.phoneNumber = "010-3392-8765" + +//열거형의 사용 +var callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby, type:.Call) +var reportTask = Task(title: "report to Boss", time: nil, owner:me, participant:nil, type:Task.TaskType.Report) + +var todayTask:[Task] = [] +todayTask += [callTask, reportTask] +todayTask[1].time = 15*60 + +callTask.title = "Call to Toby" + +print("Today task = \(todayTask)") + + +//자동차는 저마다 사용하는 연료의 종류가 다릅니다. 자동차를 크게 휘발유를 쓰는 차, 경유를 쓰는 차, 가스를 쓰는 차로 이렇게 3가지로 분류할 수 있습니다. 연료를 다음과 같이 Fuel이라는 enum으로 추상화 했을 때, 경유를 쓰는 자동차 mini01, 휘발유를 쓰는 자동차 mini02를 enum으로 표현해 보세요 +enum Fuel { + case Gasoline // 휘발유 + case Diesel // 경유 + case LPG // 가스 +} + +// 빈 칸을 enum을 써서 채워보세요 +let mini01Fuel = Fuel.Diesel +let mini02Fuel = Fuel.Gasoline + +print("mini01은 연료로 \(mini01Fuel)을 쓰고, mini02는 연료로 \(mini02Fuel)을 씁니다") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/timeline.xctimeline" new file mode 100644 index 0000000..bf46b29 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Enumeration.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/Contents.swift" new file mode 100644 index 0000000..3176309 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/Contents.swift" @@ -0,0 +1,54 @@ + //: Playground - noun: a place where people can play + +import UIKit + +var title = "Tutorial for swift" +var ratings:[Double]? = nil +var supportUrl:String! = nil + +supportUrl = "www.DJ.com" +ratings = [2.0, 3.5, 4.5, 5.0, 3.5] + +//함수 +func ratingRecord (history:[Double]) -> (average:Double, min:Double, max:Double) { + var sum = 0.0, min = history[0], max = history[0] + + for value in history { + if min > value {min = value} + if max < value {max = value} + sum += value + } + let average = sum / Double(history.count) + return (average, min, max) +} + +var bookDescription:String = "\(title)" +if let theRating = ratings { + let record = ratingRecord(history: theRating) + bookDescription += " has \(theRating.count) ratings, \r\naverage is \(record.average), from \(record.min) to \(record.max)" +} + +bookDescription += "\r\nsupport webpage : \(supportUrl)" + +print(bookDescription) + + +//Time타입의 인자를 2개 받아, 둘을 더 한 시간을 리턴하는 함수를 만들어주세요. 시간을 나타내는 타입 Time은 typealias로 정의되어 있습니다. +typealias Time = (minute:Int, second:Int) + +let lunch = (16, 37) +let walk = (18, 48) + +// 함수의 인자와 리턴 타입을 명시해주세요 +func addTime (time1:Time, time2:Time) -> Time { + let secondSum = time1.second + time2.second + let second = secondSum % 60 + let minute = time1.minute + time2.minute + (secondSum / 60) + + // minute과 second를 이용해서 적절한 값을 리턴해주세요 + return Time(minute, second) +} + +//atNoon의 값은 (35, 25) 이어야 합니다. +let atNoon = addTime(time1:lunch, time2:walk) +print(atNoon) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Function.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/Contents.swift" new file mode 100644 index 0000000..6f4da1d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/Contents.swift" @@ -0,0 +1,43 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*함수는 1등 시민 + 함수는 어디든 갈 수 있는 권리가 있다 + 변수에 할당 + 매개변수로 사용 + 리턴타입으로 사용 + + 우리가 알고 있는 타입들 + String, Double, Int 같은 기본 타입들 + Array, Dictionary, Set 같은 컬렉션 타입 + UIView, UILabel, UItableView 같은 코코아 클래스 타입 + + +  함수타입 + () -> Void 또는 (Int, Int) -> Int 같은 함수타입 + */ + +func addVAT (source:Double) -> Double { + return source * 1.1 +} + +func couponDiscount (source:Double) -> Double { + return source * 0.9 +} + +//함수타입의 변수 선언 +var additional:(Double) -> Double + +let transaction1023 = 300.5 +//함수를 변수에 할당 +additional = addVAT + +let price1023 = additional(transaction1023) + +//함수를 매개변수로 받는 함수 +func finalPrice (source:Double, additional:(Double) -> Double) -> Double { + let price = additional(source) + return price +} + +let price1024 = finalPrice(source: 350.0, additional: couponDiscount) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/FunctionType.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..bf1a0dc --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.pbxproj" @@ -0,0 +1,333 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + 2C042DF31F9C635D00979B56 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C042DF21F9C635D00979B56 /* AppDelegate.swift */; }; + 2C042DF51F9C635D00979B56 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C042DF41F9C635D00979B56 /* ViewController.swift */; }; + 2C042DF81F9C635D00979B56 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C042DF61F9C635D00979B56 /* Main.storyboard */; }; + 2C042DFA1F9C635D00979B56 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C042DF91F9C635D00979B56 /* Assets.xcassets */; }; + 2C042DFD1F9C635D00979B56 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C042DFB1F9C635D00979B56 /* LaunchScreen.storyboard */; }; + 2C042E051F9C64FF00979B56 /* KBOTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C042E041F9C64FF00979B56 /* KBOTableViewController.swift */; }; + 2C042E111FA819F900979B56 /* HitterTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C042E101FA819F900979B56 /* HitterTableViewCell.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2C042DEF1F9C635D00979B56 /* KBOHallOfFame.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KBOHallOfFame.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2C042DF21F9C635D00979B56 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 2C042DF41F9C635D00979B56 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 2C042DF71F9C635D00979B56 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2C042DF91F9C635D00979B56 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 2C042DFC1F9C635D00979B56 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 2C042DFE1F9C635D00979B56 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2C042E041F9C64FF00979B56 /* KBOTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KBOTableViewController.swift; sourceTree = ""; }; + 2C042E101FA819F900979B56 /* HitterTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HitterTableViewCell.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2C042DEC1F9C635D00979B56 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2C042DE61F9C635D00979B56 = { + isa = PBXGroup; + children = ( + 2C042DF11F9C635D00979B56 /* KBOHallOfFame */, + 2C042DF01F9C635D00979B56 /* Products */, + ); + sourceTree = ""; + }; + 2C042DF01F9C635D00979B56 /* Products */ = { + isa = PBXGroup; + children = ( + 2C042DEF1F9C635D00979B56 /* KBOHallOfFame.app */, + ); + name = Products; + sourceTree = ""; + }; + 2C042DF11F9C635D00979B56 /* KBOHallOfFame */ = { + isa = PBXGroup; + children = ( + 2C042DF21F9C635D00979B56 /* AppDelegate.swift */, + 2C042DF41F9C635D00979B56 /* ViewController.swift */, + 2C042DF61F9C635D00979B56 /* Main.storyboard */, + 2C042E101FA819F900979B56 /* HitterTableViewCell.swift */, + 2C042E041F9C64FF00979B56 /* KBOTableViewController.swift */, + 2C042DF91F9C635D00979B56 /* Assets.xcassets */, + 2C042DFB1F9C635D00979B56 /* LaunchScreen.storyboard */, + 2C042DFE1F9C635D00979B56 /* Info.plist */, + ); + path = KBOHallOfFame; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2C042DEE1F9C635D00979B56 /* KBOHallOfFame */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2C042E011F9C635D00979B56 /* Build configuration list for PBXNativeTarget "KBOHallOfFame" */; + buildPhases = ( + 2C042DEB1F9C635D00979B56 /* Sources */, + 2C042DEC1F9C635D00979B56 /* Frameworks */, + 2C042DED1F9C635D00979B56 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = KBOHallOfFame; + productName = KBOHallOfFame; + productReference = 2C042DEF1F9C635D00979B56 /* KBOHallOfFame.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2C042DE71F9C635D00979B56 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = LingoStar; + TargetAttributes = { + 2C042DEE1F9C635D00979B56 = { + CreatedOnToolsVersion = 9.0; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 2C042DEA1F9C635D00979B56 /* Build configuration list for PBXProject "KBOHallOfFame" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 2C042DE61F9C635D00979B56; + productRefGroup = 2C042DF01F9C635D00979B56 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2C042DEE1F9C635D00979B56 /* KBOHallOfFame */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2C042DED1F9C635D00979B56 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C042DFD1F9C635D00979B56 /* LaunchScreen.storyboard in Resources */, + 2C042DFA1F9C635D00979B56 /* Assets.xcassets in Resources */, + 2C042DF81F9C635D00979B56 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2C042DEB1F9C635D00979B56 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C042E051F9C64FF00979B56 /* KBOTableViewController.swift in Sources */, + 2C042DF51F9C635D00979B56 /* ViewController.swift in Sources */, + 2C042DF31F9C635D00979B56 /* AppDelegate.swift in Sources */, + 2C042E111FA819F900979B56 /* HitterTableViewCell.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2C042DF61F9C635D00979B56 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2C042DF71F9C635D00979B56 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2C042DFB1F9C635D00979B56 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2C042DFC1F9C635D00979B56 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2C042DFF1F9C635D00979B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 2C042E001F9C635D00979B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2C042E021F9C635D00979B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = KBOHallOfFame/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.KBOHallOfFame; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2C042E031F9C635D00979B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = KBOHallOfFame/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.KBOHallOfFame; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2C042DEA1F9C635D00979B56 /* Build configuration list for PBXProject "KBOHallOfFame" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2C042DFF1F9C635D00979B56 /* Debug */, + 2C042E001F9C635D00979B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2C042E011F9C635D00979B56 /* Build configuration list for PBXNativeTarget "KBOHallOfFame" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2C042E021F9C635D00979B56 /* Debug */, + 2C042E031F9C635D00979B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2C042DE71F9C635D00979B56 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..9ef4953 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/AppDelegate.swift" new file mode 100644 index 0000000..f60b22e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// KBOHallOfFame +// +// Created by LingoStar on 2017. 10. 22.. +// Copyright © 2017년 LingoStar. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/Contents.json" new file mode 100644 index 0000000..da4a164 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/Contents.json" new file mode 100644 index 0000000..3a3a0d0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "haetae_tigers.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/haetae_tigers.png" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Assets.xcassets/haetae_tigers.imageset/haetae_tigers.png" new file mode 100644 index 0000000000000000000000000000000000000000..b4df90b47d42db4c7bfb5d7518011863f666e75e GIT binary patch literal 43041 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

9(|!a0L6x|J=coF zird-!C6_3Cq5uTG@-XwpyIJF6mP;=|^4S}vgbouPz57$c9MqYQSmoL*nN8V=!JP&KJkMN-c+ zJzJV2!RrQs^=|W<_!?QB$EK*r&mW%;R=RFF-0PA_iZxx!=~I{hT;>%B{HB(T!mmw2 zn->X&$)0kqDBzNWZJ}~wbbgdf(sooNn z3M$_!8z(urm+V1e+fV6^&nu9;6>SiCPpOPUi2aXa*;lko+n22zh-BQbetdH^n(DnK zXJuPkwXQtgiwKEkUxo?GGz_V zF>9y+9O_7rlYpZ)-gPv>H<{Mk%Hv7eFpSU)%L9>RTfS*lt!a~@6^@zEvXqY4rstIf zW3_KQ=jn|IB`i73e?Yd;Pj7@m+;oUv>nfNVe0-N>=8; zG>g_u=`ygVUrpqoW(T%{5S;GfairvK!ES)stdv>2k?5Ssc+%8eYjUCm8gXaigixHm zOQ-5vuO7-1hTq?Hc+T?^1Fl0r0hLdJhhSdgC7}L>@ub z9UUaY%5ewa0uh}F54Xh~b%&V2^!s@ryS3j41#MdKTVJOVBWy6UpAM<)1c?M~>(Rz3 z;B4NGC%sFm4ww`a5Pj#@(T`#hm1tv3KN4i75t~iZlDPG6t=mNyvg`$GAKICkm%sNZ zL!y5%ZKK-h{@B4>a)Eggp?Dm6_7uLB8kzqD+aJ9`cG1kXNipaC?Mwe=5hhU zl+59`xjY5Rv(4B3`Vb+ub=Q14!P6}L0j~^NDbpR#ouD)2$OeIoGeKG-@1({8c!)3dp2 zmkX>rnugB~n+RPdNrXTXO^YW8GlI8hH_*tEMDFn65EH&W74NFD(KaDb;g@pE2;J3f zKxpvppIkHM{T8b`PbmJ~cK0b45jVo1|1x;`NAfl}7Kk`Xpn!GMC9YEs%;Q?6x&FGA z`PJ9*lCa@(_X4%MkuI`WC|#=I)1I3YBNKR2YD1BC`52EhP93pK9o>bzo&ChR<3b!> zXTYNiVYeh3{k1)bGzcV|CmUl&YMyuyMJ?P2`K)^w4$ueEtNk12CVd`>lfc^1CR0%e z;-6Ts{}R7jA?|U>T|)EI^*Dmx4@pB6OGL`>dS_={Gma7?y!O&8)TfV3ttEq~IVo$s z;_|MqS5SvD!B=AT@QxY!0D$z6`2`PpA9vBCr1p$r<0+LytlJKvhIe(uleb`ZqV=!1WBKZkV_wBmpXv__7YPn-R%%m215ITksdZS>yR)1hX_hgt zmyX=e4k$m2+Ai>ACL18ff}`co-sS3tkzZu1E(lJ#(;H~uT4++a2ICV$O4_m+3Gig zHwGn!4G`l)3qE2$z-GE3wMgGhUYm5H0SSZ~8mrKL3)OJ26Dtjm^3~BebnG&e61pF6 zO(6!+);JC!4okA-Z6S1WddA9+%2qpMJ*K*m09WVfL6VEhiJ@^*ps1R}>R;@m4{khN zm#c`j=LSf-PiYPpjTP&bE`ZI>Zr_Z_#s7ScrIsQHXQS@R-mZ!jMBXvLM$ZxOA8LE6 zH+bpoJQlU@Jp;=`Z&uez^rPd8r{(91IV9>N+;UG(fu`JHm$$+vC@j6D{7K%^U?N!B!PQ!t>gYh zI7N;TGUyj{$w6D{gk3ajg4Y^!yJrV^TVrpYjcvt_D>F6KvcTu%4a=re$3HG^+}9+q zPz09uF$0MPZsBND-B1df28O+&C2DF})gR(X!1Uw&6QwfBB-E(TYn(@~mO-BnS`pn) zyia8@y)D(-w~OFxQyeDRz9_gDnh)e_bDo505LgY1DehMEtx?WiONo4pf;1`Q!+XF4 z-4Y}lS&XHC%9kT4(nrR?%+2i;QK!ai`bEK5ZMOu-~K)bUmm=t6};Fx zrN{>q%$$f`gid-Ei98=TWFv{VV%V{pgVDBSjhFl2H~m!%WV9;f>^8ZEOUaFQ+m53W zia7k9lYog&FRl%*cky$pC)4Z$7@_Gu;g_j;k=5n%WwI{44iCjqx;RAuyFaDL5=xZy zrEpp|&^2tWKl(Fbk6t7jBlcVl*qIb-e4Hpo8Wsa=wqyfeOKHxi0Bfc0su?=Ezn zUhPl5&zbbHd2ZExGMfX;6fZnuE<1_L1Ae4-s)!F&@Bfx#GciRFd4_Mx3-lE6fR$5I zKH`--ZmzgzWRZJSL8r>HQ&~WQqdjxi?}8^k{Q-l@9@Upfxo^`B$qehb)5HwNls;kh z*}YY9pTNZV(=*ObtA)Yg5U7@^Y<>lQ+cg}MNw2bdxMyH=7&v=aps4wafY#(Ky2@%; ze6&=#J@!Z>_OYE*)I=37l1;LUb{^7|E~y}nQ&Ty3 ziKU7dQ_UQGR1Mp2gt2e$SexsQm6BX$z=16Jh$hrd*kJ1NDi=h5Ke%th+i@lzs~R9~ zkfpuB!@9@Z`{k)LbyWiQ9o0Ti1hCcQHE?$Y^F>K3xQNgSiI|Ek|IqS8EW=}WJu>zx z4kl?Y8CVj|YHeZ4?wr!bJtsIRM<2v@(vvok4AC0e(oX>1XRoI%jtg?WQcw}UuSt`4 z2ShM9^h%m~lO5cQ$Y_Yc)H#Z%yg8*6_cAM&D?gWVuWW-4NQ6S+ib(TK*z)&>V z;5!nR7blPINRdN)-a)7?<9$RKpk+$S{;6Z)y9)Ezzf_?)C6z<{uJ&%Z{1gV^pI0R7 zN134K;MjH_z$ugRc{4JlL1Il!%mB)KXwv;!oy0lzqwjhcByyr|HPr`$_l^X$O2dCW zJe9Wyblrf=9>aUUR;pvWs*NajUTewmq;KJ6MoNFhRh)i*C`TEShFno|7SBe>NQBwk z)ZRtd#`KO1VsVsqBU>*gI$?4|Pl0)T(Zxgo5d>ElPG=e6Q>g{%zN`$?eVqTyOkkY5 z#PJ6PdsnKpS8P3YD6KTE>lDH(>mz+#Xdbwz@(l%EuL7li<_g+%Tu|~_1IsL{uo$f zT%45689MhrtTr2CN30L9z-C2=p&fqLJFLMAeS7@Azf*b;P)CS7l@~jg=~$1!+A*|2 z%Y@8-hj!CA8vUICs-E>N7Brmt)9naFmGu+`Q)+^*%XMW+Y6#+0RxQbcZiR$bBd1#H z7u25MM^p-8x!vcN)PoB#3>dfb>|KWZCuf?S((7paeqFC4I10ta$p=HRw-1Kt4~iPB z-oqA4vEQ+Wh$&oMNWhE8Kjks1?v$|~ubXucSb4YzSpK@Ll6%$jb?xqu)!&~DCS%dT zVtFxA{qPU(4`Ax$6eyW03aPlRoSr*HtNS31v2$CEBSysLzIMIRu1jPU9iceMC*RN4 zX#nFAxFeP~PmGRTw&onUh@-c2)QK{%(%eA99cJKaqQv&jnkFUr4Dsf8vj`G+1oOy6 zGSJX1G-e4mLl9e>t5Zn)j=2z0=o-uY2JeTamr7=s0_dL`-nNXP7NtxS@9jOd-rF_B zJ0vZ8fWIj~yAdg8OH*8x_94wFdjW0SF@C_6ki83qvIW_Cx06q*E3^;vrMF-IHlOM9 zx`ET7a=z?Ycy&om5CxZrjzflg=sA^^Kie1bCEn@|W(RLc;WMV0 zBB}+4fKQnX_q}a~jFuE5F-eADB_>>Oa|axWePIVlv1h%fe6)@6mtR2{qURbr4ka;W zt~8q-!vt$`j*i@(9huV~g%dn)OM?}nkJRErIO2l-usnGFAnwGhBh}5Wg_V$0FB|)p z^BK$#DPCn*)0vA#W;^MvI(uCTR@Nk8(6=BZl;Y9)gTcfSEmrThvlCovC{4j@g99{H zW0pziydGz%OK&J*_fhQPeaP}aN_I&0*Dka9h2^MLxI^>z)7QJrlKWD&?NZ6zg;e5r zoHyo-2*55tDg*iSB1))<)9y+Mc^(ILoeK3wO3hIeIHG!Z;Fnu=xH7m6FO>-eVL9H) zviZsEwVqmhsnJ+(4m}z7EBPs*WqEFI9yT4P z43}FT`S7d`t`8`1I@m|7k3rdq0Uah`mzum97LU0(o#Zb9LPs>)XWwFhe{o>6B!xK= zx`ljxqP~=@Z>}^GY@MFmTE4yv+R#B(wNb(*yQP5J4i_*z%_ru8wk*m>gk5YK6p5!xx>7#BxYQU(NYeC zt1gBFq62zf$Njq-coxc^3fc`KeD7#yD$<@dW`gaTR}PC&VbNm!{OL%N8&|QMD%oBS z1t(8dQ*JA3zInQGt1zIhdGwsW_($k{4f6ApY@82^37;MWolno7B5y@<%mEC(@8@zF zeix-FbmwUFtRqYTl3V~wY96u9ylq`-X~zNg?)*|s7z2#>KuA2>jjGd7x z&y%^jb;W`YRM#&es^1?Sx<8J&J%ER`t6tNj7ejF}~m zf&h{;c=NlPM7W8epJlwBSEQbllZjdXa-?B^`_@Ut4%2p-jg~d)DzT54()5Yh} zirV@%u^3>^AB$rKj|b#@*o6$eaVT0Alh-|2e0|m0AqR5o(g;-7|I5y(1x7#sz<#Z73Nm&C#{d%#vPz>><`m$@6Gsw{Qt*JXs+Y*M z&s69;y&NoY<1U0#JwD|#M>K9o?-pKgj^$|h?XA)$!&i$W)?4)0^l#x&Dejk&Q8c*I zT0_;~shbHi85}z;_%^m>xg8yQOR$6gjZ`Hk`2Izt%R1 z))%X)HS|mPl@J|M?*b6EblDcj_=fu^i16MyoPPakQ+FF89dl{8Oi{oWFj$U6_WKQ; z#wBKDJjQb-+KHC&l{;ylWcQJOl`VZB=(KMI&n&iX`}XqNJ@^W{zKD&jnhnkwSAPUX z;EAz$L%n|^M&CVg`upzvC z2X-Vg0x{AXCNu4FiqyHecP*zeSH1&A*FDwG)WPKiynSdB_nl6j-H3Hf8FlkkYtTTC zErEYb6BWd)J+@wNH%aS3&A*vMVJ~&i8=?7JND|oPqBYzmsPG8aeV*ksQJE~d;tb%8 zyd$#ii);M19RPtxHO*9D1j(c~QRL4TupAlfiSay0M2SN*?RcUMc<-w2_ zC9&c-rCHC7|M2(dX2SC4E95xCFQ5|iK|xOk6>(}z&_Dj%7OY6 z5J^|@8XuAURs7rFg0LZ=4mSl~0_>rcG-EbklmNF#UP*S6Y8SNTo2g3l$wo7c|K(4Qz*tZ*Z*+x?ep!jwtl;3#D-%ja0i$4BEXhu$0sxWH&w^ElpfNxI z928HC;e2Ex(l?-_=fkPUx?6rUr>RXGZIS^yXtt+rv83Z(w2CX`(ex+`Ir;B1(Z){# zG`?3l{wo!T(Wq*ak|htgjNRmwwcOjvUeXvr&s&;V;|n3Vk$TOKl|5*Pw}#dYjF_+fLu;^<=MLLT?7v7!${bMAe_Fr>Sp zwXMv&S+&2(8&+RvM;NwlZkM?+%-q@HK!9G%ktFJt%Cl=E<{7{bD2*;f}v8%_cf@%e|kf*w3d=x}ba8$=@|6cPx$z0mh&*L6cQ zc}9iavazBcXC74Ga>DD$98T=Z$@P=B38@TKSU`}}60G%Mu5y^!SO2cP2 z5a-X{Q4CKsUt^WO*gBgLHAJRK9j6b}qf3_{(1y{_9z3S1l0hCN6&yxA$JGz1nc`fl5t~4eLw_2KZ6MP;- zWt2ViJB5t>eV|2o?}_9G@CvrIV0Z5?n?Or}zkaBL7Qk|a4QzItc`|{NNZ-cnh*n4Q z`?6$|Lv7*Qyz9-hrVL1Jy12bqppU>*vx~MGU*)n|icLC6CCK92lAkW2W-3U*9cvzC zeB8Iz|1LCHL?TRp0G~J{nK3*Gj1?U7p(^#<4`OckUJgT3jz(1YV*~ZQlkYjQbseuI zZ7%=3RK%pH^iSi(ic*f#Mg{#FV|KaL3c)9LEf@D4X#hsCNO`zra3fRTH#2M}D#F31 z6&EXZquQ;T8lKLm$Uyo(DyW<9kvs_t<}Auo_DV%^jq{lCUjA=?<%#Ouj5nCAA(;`k zxJFzj&&}Vx%-~m8M zWQ53Zrr6(Tq`<~Y<6S>WqSYBI~bDJ^p(RVrxQwtx#Y(>S9d z2>oQ{{5e#ZO~`jgs$xNsV_#6@eE@t8?UigqWtxDK;|?M1RmZIQOe9Cnf*mqSV86UF z9$`qCmila2efXCALp^{pXR83?3Xx}BSvfD(ZhEC1BJS*0|zVK}E zd)QU-%9xpLcuo(-t`>S5I11K;A5rbx8v)kL=rY$|6NFi3*NV7ufJv#OFW6QTp;3vp ziYD!|LDi=&9aNJA^ZtH|F!Cl$B{ zst`xoqAUtiV47R9H&q6HU6_v)p6 zz!Hfs7H+*2kjwx4-?wS%Q!rlAd|Jx{k}saI3)wOfT-vw^}wqVz24 z5KL-2C_#OJj73AW`a|UrYYPp)h_z#KcU)|adg3&eLY&QhopogUh z#CCMzV&sguPUzKhF?8`%$dDmE$?(U~5^ImM-K*C_E3DGixoQho5hbBA%3-TPU`su( zPnexO24_j4^BBB4=pBaL>~uOBR2j){OZ97<$OaM+iUpM3v&oG}1t%I0!l-C^=g(TJ4j&O2F;Q z)Tvz*EQ*ptzNWU(6w1x)u3a9^ZF0RYUy~M0Fis5kGrOFcJO zt1~#IpVimCru*!jIqb*Kvwf7fVD!-j`g?kTO@*Uo|6N9>-Ajv2H=!Y8nm zjyWT}F;SCIJq#bBV$JF=?<#HW;Y z8&4WtXLOZ~)+m-zDbH>|P%}AP$Piv^tuvs+{k7ud2T;LsT}B~>RGSq_Eyi>2O8?sz z*oB*6$(JXTKR*-iL0x9Jbo#h^u&+}$2)@#v$!=eK%3HT#@N5LKi5w`5Z3^|}D(!D0 zr&6}6b+fWwwmwRB=Ayv46TZ<${{xm)|M#sLYpNB)U#M4FI;ljKy-~IUD{+84Hqk(N zgxoZsPhrDw9mxuW4(chRXia=rBRY`phN=gARunMlLr#HMJ#F9WFB*Y|c#3Z()o}F@<-~8x;~>s}&3$5L0WtV}88Y#RKItA_~~HTAP7^r0qwT z+0(X5#Cwc@Lk#V=#4TN5Geot+mJ0ZRB%u1)i^Fi_Xrh_4@|j6I#a!FXbZaE!0Im32 zs5YK6J$~>+?*<_<2POpTtc4RM6X%r3wqT!>?)MZJ0R}k8xb@zi)g(7r&WibIJ{?z> zmJUM@PAGG5EPlR}Osgg;U8lX*%Yy1K@A+v1M1ylj@x;lM5Z21+<4-y2pwLe)oyB_p zDj6OIO%*NYigkeIA^3ut<=*5GS~@BoAMyhwm|2wqt%;b`0GIu>eSWMW#wXjtgu{KQa)3+ibe zsx{hj0O#SGHf`nV*v;Vv$6oR)@|>J z`}L?l7!x4?gsGj@WIVlFEppz~MjNMz$e{$3e7jFaeDuDlNyA8^GE*l^iAe3x${w^Q zf9VOCY!;kUU&1o+?%GOG`kvlaYws{R*A@k4sX?{d@33`OZL9tx!zKN8n!^_7IxRk; zf}T4I+R8!hTg&0r*t1Uq@XoCH@5UkRR0kz{r_^r<2+>ea$Gvvv-FA_^5g{EYvl4kq`C}j{ zsXnjxWwoI@PZ#KiLcb{Vm){RO?0SGQEg`e6TXr_7ReyG$+e{C`Z+q&{7QUmZViSyo zJVU)#rPUEcObuPlx&ccg6nv@N^`&(^#HYk`DHsx%Tr2eA8-I~29EqQfEwCu~0Zh{$ z>r_nJe%^5~bbpZyJKpfAWlaL4u)zpV8DOgEZ6H>9oWj`pk^k+7ro{Vc(5}6O&B~!y z;CAdy1`ShaHxC${uz3f8SKhtJ zZdLW$^JB;{;WwhOZLS*A@S7S6mgt3*ba$^lLDr4rRsM(sh;QpLN>p;(9kSBTmsDa3 z_{^5JhF=|O3@oT`Dxh>5%2O zO`b@aN;+%H0>;c#mrVK%Us`V!?C(^I-hJ=qvEbmz?9%*`RZ}r{Q0fKEq3+dLM2J^I zG}>$LSCa%;ztQU9B&ij%nTo9;{&x(pOj$LCt-vkY3n9xQKYzv3Q9=zYNk7|SeGbh(=Ny%%)rs}DhY(PRd+ z$$)|7s7jiDM+*BW9F@uZT_eP9Ly~(cyNHL{uWx(MGAZy3*YoOE*Y}*OUAQgpqy5gZ z2BmxfoD;O6;Pf64AwDmlklDAFhMPh4`^z=@V9q^)k6m5)WxTV_PlRm3R zd*XF_Mi6|;A#F${);r0vM96Bt*|h98-PtH;M+EBkt;bNxDtFnR!^;iZXx;ltYEDjx zn}^)r-0qGacihNEFZ9N=?8UN*hMw)DM=t9v3)QLgxaGe#&xP=U&aamm5|oiPzdJ5g zXb3eCp;u*ZGuok)aubCK>^Wo@&o2)xZ8_PdYG0jJ{jB3m5zfc3R98ZmBNeYKdoXDVm z2t>MCc+D&INxp{ST6bF?OsDOpLH)R(ZABG@Oh9s5RM9^R%{eQR&hh4uzYX90Q)ZL- ze*kkpjK4%xHaLLt`a2qJZvyZjI7yuY9c6-1F?GxYu5j7-T>GO;pF|V2lui+OPusmn z8+tS)@3>De4r?KsjN}PvckaK%3;}EtXi1&nr}wL4^`8?tE{h;O5btIAvlfXK zCJlfI#=Pxb^}a;{0$6`>$|Q`Dww^@fZ|joTg}Js-1gJ}-jbg+rp`+;t=h%Qv)4?UT zTF#_$+E6iQB}u6e6`Rs{qTFxOlE6jPL-2xvl}r09UzL~kCD&xqzSt@vR-@k0@cZ#Y&1Q6d znw_Wt_|?;3?d@b=ai>Kl*uhZ!Gk@;Z=DjIg`6X?#H7t-E$TMWyUoKXZzNNhgaJCou zXl?b%jnXsi-*ORZhuWw4>OEKvstEwV7=tm0W8;CI#5F%gm_Z}!#2#E+N(Z+2!bet^ z3AFQ0ZnKSK1wfFuF#0xc6!%1Iyv~)N6k)yb1>2y!bxYkt{wDFVHITN+QGJ{wfL9Ak z3$@oj{Aq<)kz$kC?6EN|0e1BcAx;^yk&gTkIU@|Q6ZNbLs@s;E$(roXx<$JyP>#(R z*Z&#at+}^s$qM7T5axZkN_lNA3s+1I!?;O5GMT?}byLQY95^22gQI?6ZNsS5Ry}o9 zyfc%`l}~PRSti*JgTHiXuiel*RSHxneK8T3)C*VjgioFzQc4sbCMRB4)MJ+daBDDi zCoLz1qRMLoXm2M^w{K!?%~sO1>^1rB z*0J)FZihLA!&cj4*B0xzA6yW>LC6NIiUbBmDaki!S<2GRoA45r7GTlYd|!AKYOm-` ziwqIFE~3#0ENLhBdkV~y;r?D8-)y`d|E&s0U@jWWX_UHWbi{c{hZt}y;qdNLGKg~e zy9(hATPTiz((3ELt@@*fe$#(SbpTr`X+f4_`3GA2;JuoKwdW7O+F*Ys`K3}2L)F3a z$+wBz%+I3qhq*6k-vI&uW!r4%4V!J)5cb=5Q8?wS31)Hvd*@&OsDPh|39za=e)mTX zQ^ZE3Wzbev2^c^&QTSSPs%CAMR=Reqfgxbk55K>~I3vIO&5E$&JF=T>H2}Wp8Y`(G zce=mnokinhTz1QN+qHAMmbq%vPJT84vU~s%ur*T5-99wg0DJ0W^r)4C!CC^5G1rRU zYVFHUXfzj5KaKgtR0Ef0maG&I%cmT4PIlhPDitSY7Ki$O=Hgbmwt3E0He!Lx=FW@PjzEhe6}Abd zwwVqNfKA`4fA4=RPJGg(jU=Zv7HU;p^C;lH1rY(^S68N;Bn z*@SP5@ki)OB$()1aDBzqw=$AKzX8#l1PJ0dym5mr2}MMwPVSa~r_RL1SYMqWg&(*M zT*G(CO%2BOLbqhvR3#-FU<#lx=N{ST5RYnY@6-W`)RmXy=!=fUL`_y48hvpiQJID# zY1?cry%`}%a{!4DA7m8mcTP@a|HnLFS*{c|ne>1F06+jqL_t(tgL(lHT2l?kvhfG` zeqFaLOr4@xWVBKFBSnje$lJ-ds2s_{3{ zabWSQ=M&*}$ULZ1#lqnY9Wv!m5d@Dk4C&x4vtA7Q?>Q#?e*TKE!_n>GgJ&Vm)$u1? z(=kaz>)Uo+X`)@QI`*y+O`rOKPLt+wi@^g|>uzzKQb7c~{if>KI!>(=!mXEg3X@44 zbp@TP(RIM)$zSG%+a@}rma}~$Su)S${`7x7(xRo+g-GKzK{Bc8VR6cCW{Xknm(}U5 zZCT?eEM+X?jwJO~BO>r99v7I-Jf_L?W772YuBNm6bGHowrO3{U zZAsgdzFVIFnEpp)0dRCQPC8r%2&BmKozDi7T0(19ILAWrM5Mg) zR*m7QKla)kiSVyaK5ns;@>N~!(z&hc;GLEQjL9R~=l(!urP@(XA6b{oyC~X2KC6Jy>u!=yy7ge7GPK0LMnR>x$68 ze4}H^@^9J+?(6CNi9hu8c5hTcS*Id_ef)Q_ZVEw{O(=vj+ysWs`5*r5XBJ7#h_k_x zA$v_oU#3~Ixe^>LJd9wb<&nxA?csdocR!cR3i{L?@5&1{B6Wyr#vV9u;L9QL&1quF zr;g~(;7~E^_-m%EvLj!X+T-ejPPChFMVHTl9Q6yBoimg; zCLJ~fowtr30+9pv7KX;SCeidq`_8_oRYERe#JYIB;!~@T;&8r_c2$VklYTO+t()4A z1lwd&$(G*9jcgT*rDVUEAE$w)PSVVfn=1~>86S>h6BG2tyLyZTN?$T*a7;+-AKD%$ z6HIuWV+84{EYLNDhY4$|spgWpWHYRM^?t+d>7 z<%Lb02p_R1bqbw%(W(8`nP~HYp_S&qf*(GZ8o>nKEc%@7~$$2{4Cjj&>;zCO76L(l$^p(!}~{(r7Zl zZ=Ut>MODcW%TL9fbBS&>mO3$~?s0>*F9U3@9z6B9#&Fa-Wbj{>Sa*3-t05i`2og)~ zmTXevAv20nf8dTD`k(WaXe?IN)rvI@LaYz$zpKV`tvm0xwBW)(;HHCpU_5Fcof5~) zyK?o8x|XZ{%0=ZUCS>0K5`OBKX5r z3zM5WeB#nx*%m8XV}N?>HRlSbfZ257lerv|AC~HE_pUNPOjnB-qsp%^8mj?U@o_{B zYgoq}5xH8vqMUPy)FvQ1tFYRhsqd6GUbosn&t!WEy7VstoD7`tcF&jx??_e6F) z3p)~VJSUwBVZZ6hNA0}lF&+PlRAKB7qMbzAjujALIn0DxDo z=wYP>XsFN*0>yCZK>a) zdh18fVm8TWDIc&UZRMU!1C%NVg-L?yDST~owxd(xY7RgbAOhH%$ow0uS#!(@{W%8) z!OYAH`$||F00)?z4fw;KXBvxX88$)tO}`y7$0ul>A}W1l*i)0~o7WeNzw6#A?nJ?$JkbsE^xX2>h%#no~0^`*I#dA5u)X!>(N z_u%|DymK~OU`fb;2Y=NePKfdVGL#;Y<2}OKrc5M~n=7vwe8K^6be-Ac0vJvoV`~Kq zTTYV1GW9LzOZ$I)M;kKQQ=_j@U*K@_qQzX?O2S-UkXhD71{}b~fkY6JrTJ2Kba~L# zp8rDmBo6f=9g~|hcKx;z+N7kqNtv9n{La~B62%G|%^#I-dq69r#)OVt8W(pOQvvy- zS-I87n`Ii|%|SaTlXUR2cLs|?u4+yk_=>U&5~5Gmc*DS1+tc%*($NtWYc?MH26bt$LK;;lOR^qNgt|Ke}5E2J)q6p z##5u-dp?>2JR9rTH^%G3E%AVeWe?iH9^~Q63YBJ>HF*G3j0=7C8#2q>+a0hmVv|CE z8{5%uLNhcv@7ML&@nnyXf+_-bCk|I5vLW4XuZ)B$7roBjd<;tHqU^EG>NLE9H7G{H z5F6~4cNL^c2EnB`mEYcGf0m-@1!>($$Mr-SQsp2fcX2d=74Eq#9nMvmC~rk}9D^?* zhi*ScqKIQ+%)DSicxFEO-|}EZ0kaY&0AU4!Z+^|$;@9seAkm6e%aIpGhODe4Qnfa) zdd$`BZ4Z2_7>)mA`Lc?Dt&coq0~r?rNPA6?M4gPJ%JOAW{PPY=>nUTxsyCn5mcdxO3M@E)Z1E{ss0w0u#dyTUz?TlQgQZ}bU7;NZQcZP`# zMP^GlNIYA*nc)>q{?NsrIaVux29|QpyFn~H2{TN*tmu9?m!y6e*Z9H)sJ-GwWXrV3 z6ii8=I?8E#se}^A5-Z%sd$Nto-MNz(Qu^f|Cyw(!6c>tFozJZ zqtY>n0yDs-KFSwTe$Lz`1MK78t+SsQZJckDeY1Lq969|P@p4y>Q_;2zuzPet4nmkb zV3P*GMt>d$$7VpkScu?4b!2HoCV_DuWD!n^0NC70{K(a->=ac6d6=bNYmaPR)+%pM z;P#nXEAiU&hmCgU1G;iU!Vhes3~&MfMC0s{8I1Suw>8oRA0~I}fbw1ioyKh~3A50rX#BpJ79g0}V@;b%ld|ErW|o8~m@dvRYel`%4;2qN(lN$oWvq0$De@Pl>gnOi?xN}1U^G9?7p#56 zr^gt1L461GL#aHe9jMRf2c(iwA{)yC9$5(xZ8m_i1RMx(klFzl90srxF91#Ez=mekR2w@C$$)h@$cr;hM6zTX7G*iM zznB3SkKA|KiVz@r&Df|mNuEqrVD{M4&NySD zXlc>2Aj)h4c|D+oZ@pY*mk&_z{8KOl3D4vAuMH)z1a9?eFWQ(GpsBxPdtTQcZ4E<9yMdwn{gcS zxvZma>)#Tjmnvbv4G<3i_rkh=-+?;Vq0X>dG$2#=yq@tolA^@POGsYGQo=0 z&aQ!Nk15qL04>tU$F9eun+!*4P>l>gOfIXgOafMF^5Vb%SeupPoGW^yfm<};$j>f` z^e1Vt9sZxcTprneUOzpV1Z>(KRymlQGtBA$n8dSJ!4}vSt;pF|a{WlGhs_j#(Ek(} zeewFH_JA=WyI&I$C&`zI&xNn1IhdjQJTfbfe>@Vm+cxS$tw2xxQBR!8!`ws35K#18 zuYSvIQvXDhR$0Gtgi8PQMEd#q?-#~Yy(fX&Sj@U!iJ zFljRf9sH&@G=|4+C>yW0pjxY;fD;-S6LOfyP$jG$o}WE6hLA&>PHqT~U9&72Bhtj9 z4Q4zii(H|moB5T2xtyb6V(#g=I0r=s7kQO^0<^=En_Br3o zxDXj;1z^~uo^ebu-21H;Y-LDk;i`Qqz=meWM1`rGYPB-wlSTDm1;F;=p1X_*tQu}> zk$CjS(KEB5RZ>VexF>^;tuj?P)R(iZOkxZpq32Ee;Skv|H&%u91h8qVwTYEATVU{G zI`7rymWntevnx&7Tfs*Aa97n=nbM3T+?r#_G*jRpA0U$*VJy}NZuvMDdHKNE1C>e7~7*y;nHMX!8lLatIhcit(M!6~T*9U!GGMr+fz z>#-{%=2*!J;KnN-p`tD7uywU0*o$y8?IIa89pLKn%bJapqWhF%JyKgpDP4 zyDS7#1CU}fAk}NsKouLtgwknt1#to&Wh{(da#0ijUnuBD1HDYD7{?tUAboejR?7kB z;R0+7>P*v8PFmDe;nv*o_3kJcRQZloEBZ430br{=7#5m+C1xr#Yg7lgG$s|)>)g4k zbd0Ob?%vsWBW*~X)8ct44^GQG_guHB61(@)e-c-ZvCG_G0FK=gyP{iw%*9ysMO~bw zllwbwxBiIOy&bilj-&?wcdZ2L)L*qkhkLwObu7~-oF@odE=UmDZ@jdXKxQ1$HAv7+ zV%)8c5)(@I1$3uH{~AdltlFd7zjPsk*|UQ!h6AW0eXWeLO$nRL9p2oi8y0dl`ACuh z_&Yu^DctvHG-5wTw;W*1{t`(iKX}MOBQ1uct*vzZC{F;JbCp~aiy63B;TVCsz+awq zdb4b0zhItV=)7ZvyX)b2{*gYxR7NOthB@t(br7?8#?cwj*=m+^ZA42B&&9+N;yOlbT~ol-38K9gF6wr& z#m2b-Q`<2^$ClY-$YoLb1h5g)A3ZaK4RqfQv@gJfG!*t5o8t3M*6k5fgsoHZCYfkV z5QHwb->*5}B6AbEZo3N@RX#5*S!MS7iaLxun1kejb2Mf0Vms{2o&jqE`%hP&RhdkK z<+aYk)YMl7=2k`jEc#C-O9pPp0AhFPJAS!uSNbVouQ)F(o-Ne^eKh)Z*rFxea`AFg z$@Q!ac=Q1si;C#uzg?x}x)?rucwPBcVkbcy=!O7l@@6v%FFUgQs8GEyZm$9LVFwh$ zCuZm#pshs`sO(wrlqVDUjQv=kML$`K4XaPsK{|Pk_FIo?3(LD3MSk>(kN#3=gK8v*fEv=koUpMw4@>hRjE%5gY6Z&=Ui$dPzHsoK z+2vLa)PlF+xF?>Dq?%1?HrX0s>im*;)J}p`%g6fzAr%)^!DYhjB6WhGF%*=S%tPlxM6B9MjBRwkGL)>?Z8FH!>2`+b(}ou>weLOn91dqG+16pB{2ntJ-vks`|J!N z_U*Xy<>q_D4bjbI8%X7}!8TM;1a3TCWd=>lO~iKXbqynv03!m8`!2~ga{!*wf_agQ z-thDOaK-mg*b>W4d|@V)JG2;2II~@Kl3hSZ3?2G~yx>+d?65q1eZQTqhXv^LbOrg5 zn`EAEwI^oY(2t2uB$jQm#Y|FPMZSGGRSFbwqbbwHB0)@;l}*55Z-~p;uJbo<7qD9i z+_|d7h~8Pbz_sxypaP2={b@-Pb-r)T^F_O|W4G=4!{;aDzvTkGv2)gvXiFriHpz?IvRO;a#xiN*z3mCt+kS*pLN ztKnDWabL@n$#D`GcSB_is%Zn-d8l3H!-sP-{2uehl-%w7Ca=}-iGZLHB6eM8$a=yuFT9eHQ`q3j^z%$h3! zS>N-zUOUwrAXX#v!%L+rrj5;W7b>H!<*#faVeN=p7_K^NWl2g{6(GPisq=}br?KS} z1|13az#RU=0O%~XNe;QW_|#ebQgcOUBkNXz0+$>v6YDMV+6B-PTSEUrWiFwU8{diS zy@K)S8H!zwWU}gd?E}SshP~(Y^#Vum1Z&Uwu7ptHvm5&pR)K2f>IU%~I2(z9&cuuW}NHnQXIp6zepStU1P1x_)m2z*w~m0LcHUMi}S` zw#I1CAs^n*^jO%Sj%x=aMpe@}&r7%@vgC{t8;yQm_@H>o4?G`wf4wwZa+)NbqVo~L z7`!P>Tq%);irkvnZ`=~w;DRk*hJ#i=O?C&-+G7Gyo|m;;y5@1EQlqtT#`)O#Gx||@ zW3-&L8k3B?)|pEXx3^8(wMxfKuE6G%!RzD;)k_1)mk9tbtI{e9@&|Liu>T%>5^Sx$ zkq`*s3Yv!T!q*Ufd*dRrqJ`NtCZls0I6j7oE82(gOs4=W)9?f1Z;$~vCWuGmvVL$L zxtWYmU43H+*2cAIV`~a$*{u)8U9zB*6pcX7^@FM2&4}u=E+fb4mnJk-arhko-0QNQ z)yf8|U2&Tv9SrE&z$y+n!iccycAwEFt^?QdMf!Bki+u*H4_vL&G~bvX_MI*zD%HzK z9O~zPdc_Y_)SrJlOAi@i(ns<#{Vp?y_U=;~j2~@ntkwysU)B$-C>(R+mWpUH0=B4V zicD~Y_}vWRds+tqfLni#-3Uf9$tHbp_JU`$zCCG7)~H<7)_dTl!=HXe8%wZv26(wP zthrCmU(dr&fd{RVIFk0&*EgE_D)+5JYCNS|A&h&X&FfGTj?F4YI&b`PW+WdVgFkOQ zFJ7$pm++yFIb)n{42NutfYvv*JBV)Qd?$w>;>u7?4Tof_P0Q@S44IcAICcZl5#H>% z(<@KJZu`hmi^?xPaR&gm2b7~GZ$9{m*V=fUD7972E5a2RHK(>gzcPt-J#td`@qOYv zNY4X@U6F(LYz%+=@hWKuW(Rr+iorupIxx7|5ZCPz9GWnfVN&{=Re_s|St%ej26K=~ z9H`jwh@zQD`;D&V!~P%KnEcpbUXI(B%~4)fX6cy~1ltg`;8J@s|Mm6Z7N^P+w6dn| zZ@`^)iU(9iUx#1n^9?ts4?nm^8(lEva2%5`n}}dJ{_NZRlc$9XU=UNIZo1u3_2G~6 zIzxMVv#>SfLu5g6;>PIdYMWXI@pZW zvmQQE7`9og)v+NS+i(Ky$Lh8JCb|k5#hT- zf``Z&vInyf+?;FoF6siNxzDeX>Etot(le!vhZ%!mkRYCK)u-yjvA3DWwnl5J0%rP} zKIc?9*n67pnudnH^P3&fL|LW*XaXipDm(3SWv}RTZuFJaTMjEI4(bWdJ;&8~5lce~ z?Yn1&v8z_5>}fU+56a>)iH0#z%c0=#|{@kWSu+rN~L313oNsZttI9=98)EJ-=!S=U>(( zz4fT^H)n1!oc-@=jDQ%xzwW24W+RcfICQX~p-opo->4^y8(@Da0tPArhy6=DXkm%h z_aBjtWs6f8iKjYOL&_CGoN5u)d0RF8IyXWydAqK@F530i6GSW)3L0U# z7LE;y{AkkI!TTOzleFBF{^3q^>T2rfbQ-5Uq9!(U{eAK;G@EGzbh6u|?|kGzb>Y)8 zrG|Jsz0y0&;N?FOtjM){r+-V=VULw(u{qp!+1zm9W$|in4o(2zSIT7Y>>E`--452) z`ch~g+YnlX=~oKNZ@;xJ&eBDwHtB@XFaLqA#I~#RqOLj?W{rjx{BnB*uB2?{Es!_I z=(rDb%hzWl$$E^nAs=b)Pkt(EyL0@Et2d_lvnJ+VpD?&91T~6W=oH%u>;GY;kAyEx z{*-BC6E({+Rgac$-7B-*mXT;(sFU0;Ea;Y1CNu$K`c{!DT=dF)m|UY_KrMh7iS)91 z*XDe^x_Ta?yB^Q^wscN3@#e^S7WV_4{JzD~kJ0IQ*+Q8*u3mRj>OAK-MYguEaUj3` zuvi)c*M43GEZIlMU3TmE@QjTAK++Hi5@*ky<6&OYud!H!P=N^OnU}3n@7Yh}5(k}! zyPxsIYw1ZlF->vv?JeP3H`bf2#CUS5vMtrBGXS_9d;7CmqP60eV7kk0P&L~$Y72Yq zD!8Nf?xb40!W93~adxO`1O$VQ4itUL%Oftih*zv}sf~<`TCiSBK zm~xnLNVDz=61l|2R(YWg5bv;2gA@-9z_t-^)R6A-qGz@wF>-W#Nk6&>;&41+8q|8a!j1W$lP5;%`LCdRKo90PaCCb_Nh> zW~26=mBk=pQ*Yiv-2p$bPr4XVJ7uhMm}cj#vzpMNo)=9c5Fj2(+s-uLB4tx<%4oJz zc~dX67q6CqO|JI--p{(i$=dvKqW?!<^AD&F$I3PqBFE)0xK%&aO>^EuL8I|0s-sXWeuhtN4|Zj z4U}Ql8fvMo9OYvjYQ$UT?VixZHYZHL08onkyvvzov71)J(;Bs+l`dPqw^rQNNRS(;@PPBI+jMK*QwtG9n zb$3ZiP{uLG*LQ~7X3sH`Xuo>0-j049`St}76AQ4>MLF@aI<-GJ16VMaFgyTz?7@nV zBS~V*V;r!1Z(o-t7UYdKrMVSw)O#s`A-G;l!tZF`5b0@5Y{)E~q{3s1jp0KA-S7gGW01yBgiJ{Tryp#`c8`aN^R)=&KyCE&wXI>+71)>2b%z-}y@`$teWAM$ z{-5~vtpZ*L>U?{^*|x%8+Z(XPL7p!`&KHi)D&YXjWcZy99qR}l%eQf7WRR0f zZtb|+TBNn1r)d}J4JVw{5w?=K3fQ52YFk14{as~Y>2}=!ea~ODubLAZ0ALU027}QG z;9hSq^-wJuNw@>wNS=e`pXQUs8>v6zC*V8sz%G#!dKYPdeh8+I8GOg6=#pbwd#__A zgp<$LeLEN$5~eoR9%HZN*+l5_H>`MCHiZ^(@!_gWf`4wD20uy(}OmL2Y!f8HxW z)C6JZg7~`Z_&D>~ZxT%3JSu_wl|cWaQJ^{#?>l!0C9v7oio_AG9M&J)5eyAoa)w0q zWSMW9yw;dg`%Gm(?Zb-J1==KXmk%0@Y!ZvY;vW#`MS5BnXsIp3!P3L2UkbxM&j+Pl zhLh>vWgG`i0Kwmf)6iORQ~&H8mfmqk^n~kg*T!;;xECs@rJn0QWLQUkNGr`591Ck3 zWM-9sV<1|3GaaHh<{(K_okOI&(e=h?y>B{EYyIL;K=mj(m7DUXjh#4w0R49XQ5dy-O19 z-~sXAgk;Xc{F^6NlU(>&mUu}SGa4Ei{WBLwv(8{`p8y{`B*WSy%(rPZFuC!k1xaSN zT&u+uKh!;)J>pM`>;R~D)rp{wbk>Kr{8g9C4zfw4S|f5I$so{xTO4rgFwA=ibB`#~ zS0k^n9sm(@TfvrFOt4#g(GINb@?jcOZ7xk{y z7l7L3)d*o?XfilZ!@)5#7x#)k-PjwJ>R6j>T!nWu%dWRLA=}So#aMlMdO&T`iO(#S zb41O1okP6`q~G|x>efOJXk3naR}`I(q%;mE-}<#eNvE5%VC~sA)|n6l5{L2JKzb+p z?@;knJqMhXb`7gzv7T2Rmx6Pf_Pz=BBY6utpr8m5B ze*YS!sY~_9UK~^B{rRrY3dAFYeA}(y`KlY89&mD6v@$laF%4nXYOOSu+B~KvAo^p0 z_0U85!@<+bcDli&a3yA67FA=}InJ3^kbbx}o0)QyVQet(%W%%0zW%Pp@RiHsMz&*& zZn2QiWfRfU!{JZAjACmiNyw5)xK%GX&F#?d&vI^bZlq_*ey_fbMh_s4KXC6!;o)CL zgP$duJ69OkxVKm4;U?%dh|`iyq~bx2yz6whB7$B)F&vUzx9ig(X4xLBDz(gIo_;11 zfK8&)(^uc#BLhCGLStKlFm+wnNjC|9T=x(;JxvyCit~|Hr|SCsTAu#Zh-i@CusS0y4tf zVUV@I9OYE-{Rv!3L=rt(j)BYCp1JnVqRcwZ&r@(LFRj$6sDnN=uXnWs3A3n!l6 zVOOdYxJE?|_1H5$tm{6M=db{qy6Dd~iFzV9+VL>xX&JPCQ1rCejnLCaH#de~cQ%Jh zrNlJa^t3f(u%8^&29O(q)_jBfs-U@F#oB}PbFU1#^| za8D3Imra_A;Y0z;N1v0iPhn}?S|dHIw2}Q7fIH3YN!^og?@$l>hklM0VCOqk<#7Mw z86R%eeU@CVic(aRE@EnV*6AUfJR@GsXINHJNKWjZ^G(=(F*A(wbN~CJx}P1OEpbMe zL^lGQP;$N1Bmi$DD#DSzxEeGjzp)}$mcSC!TNtVGP}H?_Uu^gAV#fLc4z z0WQHZ1H#rf4+qF9gF39Ldiq+CbKxxKj%jNpaSUBETmc+p0OLM8hwK0JAt>HsyFxhs z>pfA~2``n6WD}k4ndin!QKKh9oq}1z_2Y7-vZ!x1enxs!(9@#d5!36kth$MXuy;dq zI93wPU7v+Fy&hxgjL%&O*tA#}LE!r;Swdgr02Qy1x)O%;gg&W8ns*i-J1OU#EGt{8 z9LLg1r;3y>G&UAzPdHQJc{3cO!PI}Q`kr-qoyZocy>eK=T~-&vMqjh{bVN zP=js>)i`8ydn<0s=b}@Cw=_dcQhQpC_QcQPxVjR`rDz zL2OGV;HssfV5}06Efv6B3%z?`uRhm<9>`WtSb^LaeDU{0Pv58uT32<;zDG2NfY4=@ zt})zah(osPL2Ig30ib?-!@6*_tbtwK(-p>b_n9e&#%ArNxq@X77hyO?r~vLf#&+^# zki1?ETAMwcY7hF`|FA;xFm?%sw zslS|lv}vq2zy`Q$>p(>qjuW5)xbx$bMzpY3Y3_U%js7g>G3j! z06kr=-Q$tkBpxE+jvK9crO?x0XdLyuZd!e~tU*BCwJMC)+?;Bphk!UUT~Y36gZ2up z2w_fj)WqE73|@U(=RE*Wi{I19}=Gkl5v3B7-|d zPiKb$Ua9o7W9o+{7sHJb^{4doRFr58k(UA6d({Egzx_EB%$9(=RtBEYtItvF0mwbM zN_tvrGe#geWUKK`>1iiB{25cPzrO%Abp@!us*7iTwsK_{ze?6_jr0)BRf6Zz%di?V z6wH=@JD=N7vmzh=)$fY=dxzr z%PVQ^r*fb!)6)WK9jTiNG#ea838U9+C}1VtNZ_(2a1W;-uhgs05%z%7(~>q`c8k-~ zV&$Pft)p8qmlsZx5>sllh7w*$nA(Ld*9vR@ty>0p{(pO40_<5)-rI9$xwA0CEP=Vh zW(mnt6hRTHf=jS4rZ8&cDd?1iJPi*;i3(55Q_%Q`EG|({q*x+^06|2y1R@m62oC`( z3^5>rq=Y;mGAw~XVfH(7-}mc2zdm30>F#s>|GUh+yDIL?62K)DHY19s z>+>C*-jv%TZx8fZ1K6gD`#o@}`uA_Z9_e8-3;U<%%f9J>nd5V5O|L@s0Z-H8{-x8+ zIfI+cjq=@+g&Q}RrRb%_oTiHvu%x`DJksmpTjd@rVqF;iF2V2s1LmhMxNOjVv25Nn zcXHgwLdBoSmjbLkEq8m&9gjrN>tBVahc^g>eCZn3g_E66?0P~|V+t5qf`DtZOV-pkX>2-3c`lm$eX-|U>Z0V_B zPeY;MXixv0Jdl{5UML^W8iG<=8v_tBP}F7!k}4M~q18S05I9{#Lhq(YP1_MHnk4`Z zoNB-zeS5?zHk6u|s-JfLM)^LC*wfXe>U+ul=~IRW%whjoU#gC3n@URU?CI&|yiGFY zv1z*W(&(wB5U`=0K31B5fnya^Uafp}BGc$2$2}N$RuV*N)J7H_Jrm++4%=r-Ty0?11A`^0y}MV+^=03mVXl&oqS}uX$))P+2B(?B<>RT=o_@?- zhcH!44-}9}ecf)-OAl-@_imE;Y1szg>}gR9rAMwp?$<1?%I>1zKp>SnU{&}=^_bzo1+c2l>B30jj; zY9beWYu#Ff!&Md3z&rx<5Du_fCmpWRXow^ms~oKLf72dLDrr>~Il!L733vg10L_24F^swcOKExli@P+`H4PNfTT z#x~ZS2NYg)#GL1*IJtr_f1CD|J^g)UPuu+-vek5OMtI0J9w1KE9-3_irH1Ko-E6s> zURDwxm6?x)vXyp7dN}t2uVxFhekAN;t!zbo@pS55R^w8xR2uS_UgSX{^gT~W5Vnok z62kq?_?1%Q(wd8ZFxQ;>{b}Y`viaZI(}_zUW2K%7_4LBx0mDPK&x%4XTQBxBlp5nI zQQ*|KcARoGOQ)3$FmO7}VbltZcu7&4xD|!OgXMBcf63R$Ra9;YUm`ap^F*QHcxesn z=^xx6_w3n2w$j)OMl&kAQAR74h3AYL5^;TLgVDP-ELa-aJ6DlDQX&Z zUY$lIWr~K0^9TdKD;#mCcN&j*z4%4tcEojG-wWwU2#a1?%};;xsu6STKTeZFw(HES z1v9L&`$GYf{SwGT^~Uz}Epord!u4W$NDn=2x+rj_DNBm!@`Rb7+s@SX*3RCB2vk7$ zB{~$B@QnBFOCjQC(U*%EC~Gxa0tP9;kT&HVdTB8y?ItEU6cEl&o9fbirT_qLkv)X;oW8QQ)eF1Uktiglc#P*7le1l%WC7<#e#DnNTUYjfXr)4T{mRMfPXU#F6kXuoA6MGtNs`S#3Rom0Nv}S1SjB00|G_GA9 zhr+p6y>4jW=UfcubU-O?6^wNwj;H7YhV;9@$8Uq)a9uA=94(Jb5!403D*>*XKn`|m z{pHg5>X%}B+8wf8G-tXwM)psCXw6Ks+tZt@LQfT?rs=^=OqXohXjaL$X>iEat|ZEZ z^XTntgDQg|Zs0i1wnBQ^$-`pvsGK2Gj$R1mVp@l~;B|c8q8127y6{ZszIVOVBDyrt}MJ074z#11gLC;NM@HL=LANMe(^TgRh0oA27 z?o#y;`BH$~#3ZvGJIEp1_!3CqO!gicGQvTrX-{7#*E&41@nti#K@Sog9R8w_y0iu1 zYD^bO;WAAt4bzCvJeSVYv`<|6X{h$p7(b3X3a+7Cb zP{y!aF&*O3XFlU0J=;eUq~QY=4!FU0C>xODoxonY+V4@@(;MYuMsjHl4h6^;1ZYq1 z_xR?Y*YY=}`tDS}|r$()YG%%nQ+bLU=^#mmJ&2N*FfK1N;j(6lCp2DxYS9JX zc)|Sicdwjde)Qut{v$5i_ZlU8itXc=@Ec_{}N^3nNLxlc*w&xCHWLYkJ_kr$1yn#R2Cg7}+jWM?F!gzrOo`{qokM*u*qEO%4UXNrNW7 z>B9O?H6+vMTPi_!94Z58S$2K=X~l<5Y8|b3X!$hTT)Kvd!;k^4gd4-8V6Ae;8Lb73 zrD=;-y)?d$$V0X#eN#q@^TJEj?fkTS2{%4u+eUseiUZpV0pfR>hbzb+9vCZPP3@FI!oN$(-S0V?c^N5EuILxVcbNSn*^q7LYtZ&O- zQ5P9e2J+4EES9q}e}Vxe8IpLBK#psiUMcp!Jm~g&TyvW!wG5(uPrm2!ybPxfoGZ)Y za%s(BVo%derCATi><`&WFTGHTXRj86rlQfr%hjW+ZhntdX}stz9@_jA9R=2?EjdvKc|X9qY7wx(4NMnHA~jHqg%FCZ5J$stlBKs z5RHa~QmA%L;l=F|$5Ty|gGtek@pHH_TrLiL@`?Q%PA*-`!Z2wDIH*T)$pIx0;7Gtm zI{v}z#)w=cr!Q4svPAZK$W&fnPfzhpOy8Y3!#uJ>KYzZjcijULba?ZydFi>|Fxv1JE?sQ#!RMuyUNW24%80#k>*S3| zw`9>`Giz2;2IOzpu)#dP`h}#7#D`CMsj?t{?xG#c;NYN@=eNK8Z6FKs>E`dWqnSQ{ zuK`c9yw|RNnOWWkuN~&jGYfW<@2IHyjqBFNtNf&LYXncd6oBbbU0QR_-_DjVZ*7uK z7+067%g(&r<)fdchz)w!6tt(&OT+Qf8f#B)mJLi|O4<2oy#K16B2{lr;T-_NGiJ>+ zmt1m*S+izMvPRE7`)srN`4?;+=xKZ?_8zZzg*p1Kk51wu@ymbpS5{Fr%AJ14|F09w zuDkAg;{ayZC3d-02KSM|9+S`;J^cQa$n(xAAZ>U!=;y5g+1+z(~}R=ym|A? zg%@6E9)9Q{vsn%=AM(dLfBkE7*0;_y3l_*nH4Q0x+qB*8@DHP>8YzVn^$*qmdIImXPHW3T&ZK(1W5(meRU&+S9-`q#fc z%lj9<_=P$3)KhKwK!nOnKPDUuDC11V2hh#C_OeOb#B|f`i_AsWyGtPL{T_1C8aJCB zDu)7iY0cW|rlP50Q?sY84+V(nVXs2aLwZyL>clCni?M>74~0bUsU3R78Pm)C$?&ku z=dW4YP&!R#Ji{w4=ZsOzduLrAA147>XI=btx=7cUM0 zTVm*)QV!|+?6XfQYnw>JgWuIrv2~q?xUSQ&-3WnQ@9Z-4s2x4`>K6vh`ByJ6xl17b zNMzehExPcv9x|O=G4|51r*Ub`WwJE>;ug77UACJ#dzveWb#LtJ3KfK^a#{WrxwT7( z0o+t{kh>QJr()AjmD#@|Es(TS2rSo#$$h3^4|SA2`023iaim=uHa8o_0$1avwd;q?I%&YQvif%DoLSDEmM;ZN zMSB_#o&NIH66vLJv#Cj3S`*X-U@{JHVdZ83CwVf;u(ez-y*As0K4jKmmccLLq%!?$ zSIT^(T&jM|nrVUQK_ZjgXK!6!S|fu*JC%o8k*8j)k7)zwf>DyD61%$LvU0k#y8gDN zlBA_;Pvygjx%QHK>Zzy9#TQ>}cGzKu5}3_<;Qsp!=F>5A)8=|LOF)k@$F!Ml%@Rg5 z5F2ZwJk9&hon=m$qAQ6!6kre8N?C^1sY3y_z}(w`NK>(q%KEXLcZbf6bqCz3;wbaW zYt!@ZEC=SAPd@o%yP(3foDYTVY9jU0bCVxsW}H6Lg8?NQkwCFOS?%ap&f1$E59Dysva$LJPVw@yAZqg-wtSb>aru&vE=4E0K?h5YdtpF%A9OkF5l8+SKC^H|JpSJci28h<|kj+_8s-6(azA*S zrt@_ei$%RTS9ho!$kxT-Ef&_1d-&bZq#lD%*}Kr}1t#R3#teGyG|1#m)%LW#v}S`` z$Ri6!{-jIQZvL7swxcf=TFFNwz(%SYNayClY(#bt@UhA`UA{jFhk5S<4miMk;R|0d z?|a|-a%2ov4$nL9Jafirr`v@b{aWA5uefHhjeU3u*^MkKFJ^$MI?#Jj8o(;ysi&V- zv2@Vx1&Nl*Q;=(3ez`BX+Y~(Lxi#Z9L=8L9VfNCrr|l(>n>NXQ4^e7#uzo7fEl%}T z77!2;@_MDBGECnBB>oVdS%?D%ihbH?r}Pf_NE`6k-~Fz^4>ET#&Daic zeaC$4RA8KlcpG90XCl&QPhUM-zUhK5Z^@TzhooEf-$<;wAXY$1CMrt4jJ09|pK$b3 zG?}OQA`HdGMyb+%k`%pNcG<<;e*5j_J@0vsxqZct8=HkvI7p*%(9glu>DIoeqb(sk zFr_z7jNUdt1w3V?AJd5Atm`l4Zv0+5S-Wut)1!8=5YA>|PaH^Sb`}>&>3OzgJJIcN)K27g);Rr!yV~6S(jN;vwqaYFc;yDu zxUt)i$3oB)4Jb7}QiMacfBcGB=IG%~=0D~8kIO~|WCOj3te3!31QKbvvaq5o3OZ}w zVb?twU~0GuD3XEn;p2ye3)tCX;jnG>=s*AS2~+T~kU6FiPkYAsy~a_;Y!lW!Xt=Pn zoivkIZUO*7hkIo@8h9%8$$QK+@0hpAd~MUP`L7LYWaeYU_SBS%1I83D!m!|gL7I*; zt%;Aa3q1ErH38h)yVm;%!tudW9A-w|{N^`D`C%0Moj>!L&zRFsKiy#EujD>n*u!1I zn=E-F}0xgOmkyF z>8GJwYO0LHgP(FPKa~^KANFG(dg!5Pz$*1^Z+n}a)8@P~R{cr?&jaNE!7fAYD>p^L zePpuSeV}etlvEq)G_TwfEhQ8hE1s~Y&yz(LTv}tlWGhN+yT|IaKTQrQAe4#zy0k7 zGbJgv{{e4IB?oDH?6HT9Z;+jiD}Mar>`5GrWUE{fQ0BI&K<+Kk__^?7k3QOIZwcOB z*Is+A*(`7B<39BlV=_*GOo4Kz8Z;;PXwzX&-y}xS{Tt;v1Q{Uu<6FAZv|+2!PO&Sd zv7C%kQ2?gHU1TLZec+I8h@Z7d0=#*V;cPcA>vE=gvB5cOV7ELyib4n)8>|2ZZS99aD(5d1UnrA%ACCo<@nc? z_n9tscPwiuZe_QFnG#ep@2RI(H4~#0m|ol)GuE>u5vyiYRK}YnY?vlgw-ol$7$o{H z1;{3*g>oH%-^5huXs8T$%9?I8@@QQ0YI4Y@}^!Aw*=Qu;J%SIhbtR!Z^>A@rp(Zxu!9Cq zuiO+M*MQ7V`Lw4m7km2aVo#6YR#P0Zh0!AmFMiRbn&}9HOY3&PrXQI|AmGJB*gSk0 zSpF`OhV@9nTcRWru5UoY-gVbq#kp?u?77~(=ITP{%TB@E%}z0_e;dXbnRuxzF$(sU zbiLCA4*>5i>AEQ@=9h{$<&E1<;$jwfo0~+?z(8(uP-y&qx$`t@PaiyMz4_Yk25V3I z{T`Jv+eHzE8?+%<>Q_t9rgSxAK7=xLDHkYo;YXO5E_vXUjJfNvaJbgt@{2CB*OPUk z=i0gxD1lgxwy8kEPd1+p%C1sM3hKFH-@+p4_2H?!cA`KQOuDbFnMWweOw!A*}t4Djg zfvTr|!U3~=ree>H`exg(c9GVq+?%S?A6RsG-Oxt!sV$q#nzh5Se|n4E@8O7zn3*jV z$_6L%u6`_Z39pSuNDB{B^MMLsYDLw2+hCXv9}0fN2amA(M>LJLFjfMwMBmF^?lzjq z{ALv-!6s8;+|I0T%7}cVwJJBZmi~OrMsvQ*Ps1&fBV2+ft*&du^~y05i%|V3JP-gj*x;XtTpsS{WOIQUF$5f z^W%7vVx2<%nvTXtJ~ll)@%ZEBEpK^?dChBHV-EVmKQ#O9x1Xf%V%Et$-%mdIq`Bvw zdu&e)I;qp;I3)bEoLz(+|FSGu#}0RiU>Z_7F1x&c#T8eWop##E!y+Ge@WIP2jiWkk zWjbm|!}Z3v3^TQt1vdBV~Y;ff3bcC^ta6;bw_8GAzB|`Qj5*gXVbV(urBhFXa&*zJ_C% zKH(6@mRMXz%+v75!@>^~3%w>9Eyg20?&!v@!<^F(1ulHgIn67Efn4~F)`16pC<`va z&pAAh*fM}}xA9KB$#h-ma8kJmp#3h_1q=z4z+maS3C}3^NP3I-twS9R^=ZmMrm`_`4`H zU|>&T;}TBG9DVfB=B;mitJ!nUJ^d-{xNw-cxcet}o4>#G@BMxd`}&VeB+!P#!C)+x z=e}y7>0^M2!6r_+kGF#@`;(vi#9Vphm7Q2YevA#icj1Md;Kv(?ca&p*4#ziXj<0T> z1`HdkkugpQ7+Aq=87`gks+q6H)x*lQ6&4RF6c68Bf%4&j#ZodFv9!p5%}j@X;BbTe zAh=K--zCGcyxwYnZ49hb-FxLmCIK{3Z|uefdSHeZt0O@-kc)xQV?+7S zyN;*B;Fk(6)jXc8w$skkfYw>+aiB#2U`B?<q-y|Nwc898k-WbS|d)=VlZyoBo>ssDk;o4*y3mMvY@CIA9GyQB?u>8)S z%pdwN({|ozrxBSC7CL1oy%yfbqx#87lM%=OAGBmfqR15afTOIGA8B$Pv53n|nGzg1 z;)o->+_DTlB8xR6@F~Z>`|dj;W(QG*XT#0Pn7>n?uqH8b7oi6B8QD1?g+8(X9zTCUoK?2!$jsFLTx zrHjov8KCv*AV21^rBSkXe`uOm)WCjgtUSgG19nfueEEL8(0qE;D)avLzu(^1hkK+; zy%c(R*!dTI??V3>XU#Jgmc|OQSQkN}M3@dAgV^)WKR*UZ#xK3}Qaf9Oa(1~^m_)Ge zW5I&?5^c5{-f)Tq9&URV_PW{8x;vf2JakyEbjvjN4?(p&UYs1>BNtH>|;GC zkj7;r=`&s2QIUDVXO6eK9?_YU z96JVV6Ci!Sv&=EBPDeP7%NLNG#sg9BkFfFTX^4sD;^+~2=@nu+=s^eZRo5OJuNmM0 z+QSb&yhs7d{OC#I9wJ7HD{Ilv67w&2++#lQfe#dyu+d0Z+W(J7AB#zLj%(g%XdSnE zS9V`&PB`I&PV_$i`On+A{!YLtpkVL51HfAY1L(Gg>q}qyk{#Tmu225LN#@8Sk1T%i z;mcqCvVH4O3|)2|W`5ciot6jE4=4eoD=-yL6LP7zOa}LE^y}sf&M|l1b*H@wU~qOf z1z)siQE<(`>eZ|5eIO;X0RzWlkNvoju|%W1Ioa8Zpnjm>Km6ejTTiy*!g;(IdUfET z8&QWr3vs-iF!fj}C;6h+#)B5O&Hnp$za%1-0S_1Uq_=$r1$#kGJ@wR}6Zy-}eXh7y z1uMYc_~zf3PkiDNcF&Nm4;^Otl798336wht*f9~k6@H_2cy;Zv%x#QmqlL!R*9>5T z6F0->aPcuEOcO2`To8ch2Gn5yp;ASyJUreoZJV7AI_Mw|-)q3}bBfF`X<*YAra0T| zT*9M{M)PF{(1~Th!*#CIW1GVp19e4wY&N^_qKgc!W5%hZoI{&lD4Vr#xP#lE2}@dt z$L&NIHr0SVwO|j-MuwHW=B#c|k2sD2Zk(cU{jhqqd>*glpxhWF#ZFh64%cw5eo&z} zP=J%|c$jhym)D?S`*Gj_7t4Wk>}EXYoOAjiJ0>{j7-WW~_2I%aEN;|7UFq_mPCh5S zcbkJPkB2C(1C5u@LtCjcln{VIXaZX$96e{f$gunFyJx|nj88uKq~Ej;z<$ciO2szV zoWtvNX~#EEOoQ~}bPTlcg@v(rL&mhb#8FpxxVp^HeCoKrXqbM$$KV|u17=W44ts!P ziq^hmV>r;^k9mm4&aY6SLhDLx0>+4wHNNYvyJkhhPCmH0oD8G9EHixz+W13UOnd(O zul~J}uM=>7v8#(4tHyKkARmMEuYcnkb=Cxj@Nj+ci(l+Ch{QA@50S9WATG**@eXEh zF#ahyyk+AHLjezZ{1IRCV47EMCcwu-pl^xNdE*(zpc2mV9tTFSSLytdZp|-AwQn*h zIDJXVE1aX!wxUK}UHrJQY8>|(!|VjM65x$6;ZEuZgUCfo+&3~y{PA|gAQJX<>{v$F z(NO+VPB|q83F0U#W@Pf4($HSj&v#Ca1lrCkw{L98qYwe735a-`dlbAdW0G^Q|KLzo z|D;RZq@9EDa0#Hcp1I#`1TiblPGE6pYdP4z-};+xwa(BSfBf;SV-3_Plpm7^m{BP? z%*ephOrJ4z4}JW@vC4spK$-#55@v#Y(VHJ`668JMOp=n9bwh zQrC$?Vxvh+={e#2RG{sl(8be9kU&f-`8W%B-+lL$K#F<`=9|eAy(tDfrHcCKM?Y$(sN%gGd0uFxaA5@l zE0_qSMUH6FA1W&dqMop*(?z*odhR!!W@xaT z;h~2fa)-60${_o+0R%z?*E)qT9tM~)*w#?0Pt-wb--$1neVBaA2GV;=EMV_bgQ(O6 zJI+u4Wb+L!R4M(S*l@Z6Y(mQ)(nLk!()W^s;^P&I9ucneAR$lwTSu9Y2Iasqamiu2 zt4+yD_{if!)I|va|H)5&(kcr!I{9|+^9yk?F@uteK8I{m4+D= zOwZ!sC^^&tIxf^nsm(xx`Q9wCg!NM@X*FeOUz)w$eFUWz%_a z*|G2Bf)2YIF~fp7scE@##`KsUD7UQ)NaLLj`^0R3*WZ$O4A`U}LySI--tvMAE-0SB z!DgR3?)<;z;J5yfz1ECxj1qS|2zJ?7KABN6dq4v=BzpJMbXbXp&cj25&vTSs)r3dS z`PcvF6uXDRDt49O+M#;&NE+f+>4@0k&zLd8UdDOfy(^25c!=XV)HX^XPj|HPXpt)yfB%tCtdHGiD7gc^Tl{w z$M@(t1rSJ7O@|&-)6`)o70o!Ejxh3YccF%f!!ZtNX}B1Mal*jY4(-&Y;DK`2$gaB& zI`KL)8N%oruj_stK1vFE8BcFtJzn*afy}79w%uot6FvCtx8H7e_+f$M#((}%Vysx4D-c!wa3mrsO+D_@1;FS>y>-$Y2NgvH!-?Z zeSD1dx@)iVZwYopIiWJjodeIOqbDrcxp~YwXVtG)jrw(tUJ4HfcAx#}yWZ7mLV!DZ zWA@0H!oxEC+_`g$SFF`i*CF7Z_}R}U6|IIUhw!Gro(jrShBkJdnD%a4Pu4~&&WFu? zplp|&s6*B<|2U2Z8SUD2rYpE{Dke73ajsDI)5F+TZ`DiTiAGQMKR$d^apzvDeCW-w z9TN{~7kgLJfQf^viQ9SEnYIi^Y+4|L82Q-LW!82UI- zf{L6lSD6^S@dFZnZt#SG&O6@mj@Au2z41vy<8%%NUa@VMhEAtqHlWMKBx3tTlW1Nm z)sDp3*8I`~ZI|C!831IMm4Gx1v~WPSZJQ!-CX0`0zGvhvKiuL9lVQ9ZKFWk;=XgNZ z3qQ=p0Ke^Y3u(g6#-d4TDznt!#NU?uSZ7%_tK3v-0HrDhX?V>ab<|OIxtqx2<@dfT zF#l>oPYMOcy!KeXeP9E^guzFdy4r!cI>R*MSHJ$XPNq;e^_Qa)0N~%@@+9=px}J_{7<=$8_F?ShZVI0_u1c?Y@_M1DF))Wjx!xSIQEdh-WzKde@}e&?Ab*YKELX?b25_% zWdFexKd=|pqYUVIdvP#rpw#H4Pd)h*gZow5Z0xRs(ym9xIAah$P;mpZT&NRWFAR^x z4ovcxXg@Af%%64PrvjNkK*m`ah%*gJf(_}9Jo1Qn)vI1blu`Sj$6bN&u{aSoqGo~t z7~vr&z0ga+Y92wpZPdKH zlnXdiAe2+fNf`1V9QiQc#yvmB6R`S69QrXWrqd^`=8?nEFvRyh#Np2;rURf;^N_Z~ zXNqibYQ;`tMyaj}1lKmY&t#cOdQ>b6#1R>DFreQ_x$8oD**XU_t`64(SbCR|6SjsA zLvaDqJOrm|6P-_9It|oqJQPbcw99Yh8@6R2bj&ZvtRj>RQHHzVm0>89s|?aj@n;%g z9NnrCnJGTf38Ru#5cw(^1SO+M($g!I1w4@-!!R9eipmYZtl$Zu0=YAhCcThQENq61 zPfiukXG);Sug=xHns8O4=soT=YEZGjCBCNF<>jVvNgip^Zq~VQSVx2#t*>RJ{G`b| z`b%9$YVZfGOqavq&zg4)9*w8fslw)GM+;FOH{aj9fz!vG17@L z$vaBUMm0RbIu0Z&KNM7cI!}j5JWgZTkss#~2fnT+o36^1!_(=S59vu!tc&wpYW265 z`W6(;GoT}pBA*C2MaP?~9c2PPTgIxKnng|)q%)5)Fiw0Qm-hBOw@*wI6ol%0D0Ne@ z$&5@=KIyoIOVg?Oq$rfrfUEJfOyo@p8m^SqC66$*&$5N`)cLhCrQ`ryE?v{G;bv1b zK$y^lrmi#M#Xji-un8rN@#46n6LvaC3+Tp3Rh%*)3V4m<^sB`zAze*~X(UEJ1w&Z+ zgrU!L(qOz7U(<@|=sX=x(bxGgofy6?KZcLvqs1@L8!c^J58zYN%WH296HC@D9`lUj zZBziSaU?3egEC70?S4TPkaJ0o$=TY@^$@G=9Z?X!!ezH;x)bID}s5>mwdFpeFnPqzCpSA5l-QR zw4AKoEFl~PW}H5ebNLRgDj<=R543Sk|O$!l7KqaVY@@f=(#J(U*ILtM*~%GYT*noQTU zn5OaD!X=ziUQCyA(2w&|al)qf*tF`I_sVS(t5=@84j@&Tg2mUOd;eJ8Wab1x@9ka- z5(wZ^!njvig#)4NPsb%}pG0IdUC7%hETNc3pXn*T0V6#941g+YSSE>a^imPkaUD+a zOr@1@P=9_g#a0LFIYp_QW@$yT#~4}`hUpWQaripS{J^K~usu~B*LAHh0{A*TsYi9T zgq;3Z<@SPU(-Ff<~5 z{@(ZfzyI&MYu$DCdG0>@Is4wT&N_SV^V&d9os5K$1Pcp`OjF~T5f&D1hmhS1FMCHJxQF*YEi5buT=t*n;plJ2 z2KRXB=_d=9u3nyO|FLUl?-k%L$HDO*qW``Adz}8RPX9lXr{Dj$_0K`@f8Kya zgoMHWYx`eU$bV2-eP36{f6V`}FE0Z5FU|i4`yU<%_&?;)5bL>dJ#CP>3)lPB9v1ce=fi4^mY)?85;SM> zt*?+36%rmCEGq~G>sL7s2gu3D*|i zztm!GyCv&!j`P}lIq;U_6*(p{dC^gP-{KyxOV~T<_opoS9OaPR@vt)*M!eloVWa$8 zvWXp4R%z12nEkl8^Q=T298dO-TvHhV?})COz0K}fTknm3NuyM7*X=Phe<$}R^xHs( zqY2~z>M1VLvJe4AW0}{*X98q0>4~9IURI=T5JcO|7gU=#3k!?xzV>!_K+t2K+4vb= zSbj}aPssIZVAb|~=3$k>pTmpLzqZR(HsE$7;d&6z8X$1j)EX#!a;gBnTm1IzO=V%L zmoBuyDj%s3CRuulc8RdCAoAEG?dDb=e%u{X-oN#4x_#NYCQm)m0@qC8km+FRgY%BB z4v40DtVsSG{klLQQ_m1TW)N3IU2`!IVU915Mgc+?4Jpg;u=?Zq?Go*XvhYaAwQxiv3$(U;mCG{9DeVc8dD`Y<^Ehl|L2R*LU}6XC(6P(e%^!c`QaJ`a5RsGwMbFg0ZA6C^#LvV_%_sR<-L;>pn7gkuf{81GLCjJBb`XsQjcCkTcm@s}`$|mADL5yMW!+j87 z=2P(6^7lMRDXH4@zQn42VBeoVol7M`dbP*yt^&35m&c1$+dvw`D|dH4S)#f>o&8(8 zhimg?fpTgmmy0&~VS;+Ur?2fNt}4$nM}+VEfaR@$O$sc`%sNRhhN%(asg{Lgx3u9| zicm3gfM@|wz_%m#^5_CH4%SZv$&p0-n16bT5(~RHPp$lYeX3sweO0yKZ$trtjceecc!{QARV@Kxv@DC%{*^H zaDJg-$>^9WltdWPZ1l056JUPW9!x5Sq}WH)Z>JC0zBhIq9*%!sescJ&-tzJ9D*fUd zfEK;I^Z{Xfzu#Xovl+Q%93<3YSGivuoA3BZvkkY=vFh`57~4*s$q`<_k?CVr$4m%NUnNS;C#I@PYU2lZpf5KWEv)ZQpmRQkdISqu(i;e)ok}ji@jy zW!cAcvzrL_?(1d&lqc-7w(*LxXg35X#Dg?!Wtw=IcAt{1^4H=LG9sX=3_u~We4KQZ zsIg-9=?sQVZUYTztK4kP?sq{jT@~{;q8QklUp)IQ;y<4T!jRu2lEg3mbnd$X4-bva zR(ua|95~66;{z;)LPe78In^A!g6|LPde!?iX+CE`M7<*@w_Dpk%X@gd%(<7epCEUL zY_RE;t*=t|in-@fi`krMBd16ilZFIeNZ%I^U{yrLuP;P@qD^&vT=qN=v1;ix?x*nUl_*UqZLuh~i`>*}pD@1=*kPE|b5&Wu#TiRHXp@67NxJA_F1J_;G zr%sl3E7GD>H`MSUQM9ONf)2kvYWyp!e(uA(7+KI`@wuh*uci_WJ$wsVmYd1`awn|6 z=u^4VBcukBv#h66*-cNiXKeyHOQ`k;yYH-~$e6!&xKu(*t*gT5g3x20>s=zN9YN(| z>9^s46HWMxPfg+_`oo8uyF@CXFaQf}^Wuj29Fkf|edAJH{vy)YL-(S{S>$$FnKNIb z{O?iSJj3qn$Nj4eJjl%B+tKD9k`OdW?&)Cmlw17ldYn}ErISVf$cVo<)}q@xY*bms zo7aYh7#m5TovWTy5)+K(-TtRqtsdomwYp;G+Y4oyo|z`%iy|G>e$_4rsfPz{39^D; z3h<E#dKC=(X!t)&Wf)*17b*UOFo~N&5RK^)k?xtsJqv;;y-cXAPj1dxe zy7pFYw&3G2zx%uzO7t2cA$PJ+yExxOmTAm%HqiB&J?P><=}a?XOpNs9P-1K3Lo}_! z09*a=whXB%woFLi?|D1;;P7)7^~I?vGZVivdlI|H$!63msf2+An~$ku%#w@t>f(#* z-<}-a9Ec+~HZRbd{Ubswe%}4le(&!_HEaVzoP*I9XBR(5=P?!Zio`R;a#IzIHgEeV zOm|u%kNL0-&SpAS{4|2`XszXx@<>?m6_PhZha>Z(G`SSI?xyL+tK@6AiSHTxUtM-TuiQe{Xx6vmt=ITbABWGTe?64Cyf-i-!~Vb4Q+NOGutg_^l%Y zx5}r^{oiM?SC#Slpxl(1%*&QZR|PT*8}h3U0NjgGBEY+s=2LFo3*2tvg&y*JL2!*x$|QO^rn%`iBa~7LS&@~es8=02dNk06)J56Y-A_tZ;3?X$JyJ_ zL)_cmqn+__eaVcy$xbK!L9qZ44l6j18~qyJLz+QXku}{QwB5Ci&yhyMbE`P z0aDQ@LI~oJ4tx%IqPho;z~nC*lirpGZ=D*{82S{U+g8%7NzWiL4bR)MrDy{)M5N7K z*RsQzrA>KV@%oJL@YIhww|eOkfGH(Kv|dCrTwI`<58S7&BxYSpk%ATM0gj1aBu?%A zM}XaonRHC6i*}dLyq}ShaS#C+7{IoS(AgV}V4&W4I@vTea{^Jj?Az9@U?2e^dt3Yh zS^-OjG&gE{1t3U=4M=5L=I4nVKklI8x}HowxVz$FXK^c=h52VTcQZ2OI0#cPW46ej z|H+Q$YP$mMGUebc5ekaGVyChD2dZr>+Qs2 zOu{YcaAqFsg zCm%F-88c$ARueN&{zDlzn0(vy_2Su)%e&s+0z>mHPk()TzLs;3_+vZXsB-L^5SI%g zssDSKreOQV9sd4%booPKin!SBF7*tL{A2#9^S-C7D0*POt2Qw*~AUXM`E_Y`%xrnE>4dX4{B1OxqtQLn;dp!=x!n= zs-ljqA(mkm`{`A~oU%{$r2vwhi-*8@<|(}KR`}wX5{Vv~Zh973CWh)C^rT@;PlR7T z&g@~PeaaM^ku4t*iYXeZeiiOZf6;`|%;au3PAI-T8vUb{s)H~5l@>|1$y;(u<^642 z<}6_h%TePKll}`%m2T(!?b*ysZv8D+6vuAw+=zHj=6ty*$Biw3RDZ`bbV3EbmP!Ek ze}tP^N~O{xd^Yngze7u>6LBOwm+=Y2_!A4BMGmx$3a_M}5J7 zD$Q#sEU03G`4_A1qL=70;rw=d>ez@dr9KkEq%u0gSv19;zEO=U94Pro8Q5`^qPsTV zH6rB;ZF$Y}9D{}fW&5dN78@*x%4|TR!+R}mpoBkC_2ET7=eO4hKVJ8)0g^iXg#qnT z12ycYnyUvy{!OyjETl^_QvUf#>fF}2+WDoYgGL7|sJM%DB1}m+?ly&5P5Z`cupIGA zD5UpG9{cA|Z|I1)Qa{64f4GJUboAv^xBs7S$rMaHq+^VQk0Vp)OXsg6fp*Fyud*U4uX3s1-#hOp;}a^ve=^V5BNw3Lk_Xx&C`f}lD$V}Cgqr7 zRcy6(ABore=H4#wxZ|>DwIEUSe9vy}S=e`P@CMP;Ub$T_1yb{sPgO3UaDjpPv`@Jq z#wiWhk4Cyz1QETot9vvF!Q)3V0HuSM-fl4+)eV%mzCb7uy1x4%!NuIraSK$NxS#(M zLLrvU5+gS5t>6e@Wo6)a;Vavw+hz>PiI9Qi*rB(3np7RSpG=DBQ^)-2_9K`w5(I}cuIj>r~ z5{lEKY;2=%v4K`^cPtCPiDrqOB|2rU?Y7{3+k1tW?6tf7%Y-z$fnN!H9BcBDBFK&U zjX4KzX$oX3IYh&CWq(fA*S&ZWE(WT}AswqyR?VI42G7zn?FUfg3Ns+_1cPf5mjua52&s zU-~h~oao@4so5R;QNd{LSd@D&F6^(Y2KTj-yla1D z48IGDH}sSY?dA3V!qphp8nOS!uV0QK$Q)V&L%bA@8C_Rum2+5n1rYy`; zT9fcc$3uNJ{24}#Zc24jBgXi=h}dn~8rkzVE!)Pe=7Y=h%26Va^hP8|4s#q;JRB)v zj$#)thgyFxR9QQSj%P=s3N-!v3<2Z&HsR?f*wFH}Y3+VtMywT+eW3?PL`lE*MXtnVDQ-xFY#`0x@!5zvbfOFJI8 z)Q)GnQtUEwk6n*-mq4B5PY%a0u)rj!Xm+d6qSoMfQ9}88BxRU8~G@P0L~kLwbrh4 zm;@(&tq*pF8Z??13o4hvKSUZ-X7z^>_(h&l6}VweOJhSPKdoxA6)Ut2lE>4+>l zRTn^)*eLL(?fBk`>dg_K2p@33%F%c<&`xSp#SVecmw1NH#&tD)d0 zS($p845HBFf>v8q4dkRwnwQhUsg_x5O^hZpr=xF?{c$XEz}+ARApSKuC_BxLV0*bm zyvGW^HgNjmB|Bi@0VFE+-h=0JMsiv-!F#%tEyL1j8mzZ=FGnJ|jr-s2;4jL9eV^;% zQZGl2CYm9JR=x%y@^^V1c|>-e9>iD%A+du2Exo64xR(@vH36xZU>?~y0&^K8UD#q9 z0GpwnrWW$PDT6i-A~j?Zmd{oN_Ubyb2+Al9yLvA1&_A)%c`>J*&x$e)0;zWqE;&D; zSw91y5#N$~o(+fF<_GrC-?DIrajrc-%an!?qo30T42svkVZbMHD|g4HnT1la9OpB`(j&HA;4MPeCFUzNTDQ>} z_g6q#1DSf4C*j3j5ve5M*|M&+%EDZ><)VDnRAG~p#^eHJoMpPAaK2+T!YAWx2L>5W z9Z7FC2bADbsL_fb^!6P-@!<>443r>vkE3?~=v&{gk@w3b zaMp1)z_sC}mmX9s)8UjZ; z``&A2-OO%tZx?K?Drp4h~zQmBg!^4_TR!Q zzh7AqGiDBreGvxKm-_CoceW*^0aOxCdYrJd)_AFng!Whu<0s!qrXUA#MY0?sXG3Tx zqC->WY!7r6cs8)_oUXjWjxE>8Cl9|XH`<5`_)0atsLsL91_I7~l2}1M_50?9e>%6U zAA3Ie;~~D9h;2(rMoe}*W=WxT!%(~Zvrl1c$h0|4^VII6IthjB80Nm*c@LSx=`4KU zo+WVc!o2uScEZ3!t|q<(XmjZZht3m}+C0S)>nSrWr`E6K34Q%$7)5v2d<>sU_X;|W z(wFsLwbxs(y~b32^{_wW4?fsyI}*2nN3}F2`eypzFdwzZF3gyhBccbM0hqA$wteXBh&M{zFi zk2xa*c}x$zp9;(AG7Q(QR$5NbqNg5VGciasfetCoYMz}Zk9ifvnbe{Fjq+DX3nIjp zk?9FfA}fK4eDYWTFIl1zLyUDu%heE@#g&B^!hEhNa$l9$f1yw=A+5Ms zX0WLq=RA-h`bg2Ok=!dXFb^gNu~5?|qd>VLj?0DiB8!BeMroHY>K>ZNwt7R|PS1+aT0Eo1`s*6b^zeP~#lxxV1sW;Akk`H;e zFCu*~5Mw&Ve^&i7k~Kg^b~CzId>79A=9#@v%C>p0ROuurwro_ z-MiruJk1-AiB)sEO>IiMFQlfe)#NYw2+ic6>cX-)JTI1f7ve)?!$Rce~md`Ynn*a^nsteQ8autR4Lyt#*!h7w?4D1!}HnZTH`A^%% z0Qrj>IcUJ|p-I5gxsACzI%Bn%j)3jEi)Hsfx3!~(&M)~i52z~@xrsM)oGn>)xw2s( ziqV-QXI0587jW`-a=%3G;O7JbTJJoVlUfFGZf6}*a6RN-d7m{ppYUd~J&kD1RWG z5UQ*{GFNE8H?r!JnL2>69UaN^3Xef1Nv4qp1{vL7AZSjskRE-eU_O?7jlXS|qvuQn zYzKI8TT*Hv_Gmt_QN}dDP+Ya=M9g{qP+Ul3~{o} z9G&p#<25t}++E@XXa#kPX2y4{aD{!_dp7gSBzln&m*it^fAPCb7<%l4cd6Dd`c8v- z46tKZ$6m88^2H$TE#UZ^7f-G?L~h=IFbQdix#&Yv8ZwHazRZj9(CF7W9C@2#Vz(pP z+zG~J4&uCI6wB|%`NKIg*MeQnxtQ`JFFRfnk6*8cg>;;c)y~t~go^yRwE24pB*(AA z=z|paDf&?(C}|*vq#~??ucSQB4_2V|*&GJ$-=T**8>fJUvh%p7tI<74wat*6|6eN^NiV z!w^&UX{}cmvg`Kfc&^p%S^P_>R?+Dk0#p$}G}s^Q2~e4J-laiSEsc`v?*}107yv?G z_d$r2e@ZC874K>1OlRii^<<$Gcx;pS&(+5>%&+w?P`IR|=wj}jx)@Tz;4Rhz+$>21 zd?Ku}HCH8WA2s~i>9Sn@;M4xe#;)KGsmCyb#?K)pofT0VyVCrKIDy|>levzlDbZ(7 zwBy8RrH;4Ziz0#@2j_0jAE1VzeTP;3uAKok9vnB8e|H5foPxho1=}&Dbff~+gFPX~ zGkD_T+>yk&`=s!Tv&r?KQ>z_C+2C7y$=3_!(M7#S$_ZOFTH_UcgTlN%YtO}EwO>>A z!~jFU1)96&)=;vtO`NZIpQDH)%d`i}USmcwN1}f?1PjkJVs=$HmGYYD257;8Nu`92 z{yV!$V-b&_a2lez*qj(fejphbMf;a5H$I`VX9gGX2ADAduKaL7)YxZ#^#`y7h(WBa z?-WOk{98<9TQFw&G3zZOU-l~I%*$Iu(EIb_tu{4p_peXo^5pLh$`3t1Q6ekM{N#0Is`cp!`m)Jt2n@X=3dk98^cxf2#k04zP9A`((OJ$L1LA;m8oD(^mv zfl#VQpPirFFeIo?bJ1W>A{?3w^1K~Ukr98h&C+%)U+UZ~skqh2^uE+=b+0`zo^Vt( zT)KdpCARe2b``>8`|=ULhXq|f;kWTt*c7rJo_JV##9W|HE?BcBi_# z-(l`bt*QhWOJAD+UJf~y1O8Mb8vBcF`TKB2HU?G-$YBB;kzsk;ydl^unpJBRl{NIQ zCBYLBB*(+>I9opB)s(~uZWzjSj~|O^;^AfP*A3mgqC&tQQzmR0eRo5h;W@=r;Pif! zF$fP*e_%IoJ=p));=Sw6zL2=;jhBvMcj+Rx$Y%_y73B{bxUONz{k%b_#;X^cQl`E= zp}?;DrZO9{(`(7oRiYkVNxTa7o|IFphpCC|BRmPEfVJm7V3?AKPwhShdj*=pzDfC6 zuuE-_;pdG+M7B>5ax&SGE&4<73S0|7P8F4CL2{?ONzi#;lKB5*uD=2Z14I}Y+XjtYLB?*~ zj30*tSjz=ErGPQJ+`?S|)(7a~@GH_&x;`&G&x2&U55aFxbEEK>GT91Syv3D_jXcoB z;*;f`&P?4ZDbJNWqA;v8mc}jy)Yz6OG8Oc zm5N?TQh7SR0<2sF#g8(rB6*CaB2*&%SBb3>wcim|{6M)w2)ky(ueHpAD)x!M}KV9WIxF}{GNL2!fT$~9E~qEdN8vb%3I z83=+z)Iwes0?*|)ijm2s6wMnoP1w#r%HN@AobF8%qFP!$MC=FHXxVT*lhpWjy;=^U z@5X4^Ip6uUxcl|pCjc&QCDhhmU=I(qW*ETm9q!uC*#J*OX`5}vPW(vhNSmyinG?_J zDl4w*buD*Lpy&r?j7NU|!kx@5^cOufbS&lweB`x-+*HYBr$T{UmpnBFN#p$*icgZ+l#rYud45mC&{nFYSz}slJ<3i%^f}&|U zY)dYGA;*_u7h=Sozp-MB5FD2jtX}SDDgW;w(S3F(KmSsS)pUbisnBCKK{}rib~RON z>1D#VwtS1AoKn_MNJOZm_~zsofAIlg|QmBdn@m-jprzgxaA6oyXF;_sN8LR5-zU4a`)Ls}y2ko%w$2M+|OS27hgIMR_Y8-3lTDHS)~5 z2Rl$_OzqIQy);w%*G9{hAlAmum^(l^1Fg@(yt*Bbr;5`BD<$m1ebJs(p`t!{XXbDr zL-JJ+nK4rDdS0<3^Y8>`&lBM;A8Zt0GzPSCDK**i=tzgtt-GSr^4TWk7~0BO9ka=gypX2S$+uw!wETkh$g1zmsSFO(`wpcwrJQ z;SF@7mAf?-Cu|M^1EAk*U|b;S5p=a>T#BAl9{=*(7Ptt(?@@CW@@G zZm)4h1Mk08VEY}=n9ngaLY9^8oK*S(r!GT9Q9ye#6t+wjZ{~X}U(JvQ%?C5e9I6Zs zp$WGEBy`b}SbAph^?GJp}=q^QV7>pgk_{(w45RY7*46GR-oh2_WGVq#^W^|6SIj zYBS1qksCV4=DzPo8Hz{V&-*nt1e1(9gW=A1 z(pL~BJ5(pJh6)WQxFmD}2W?5bw~bXe6WMq=&YqEvk)W6B#tT0@j+t!*|KzDM{T^-W znFv5CTwBb$3@oRGxghKNV!AWf`DD>sOMD#97pLxc81mwzK+pxlY zf#sg6jjY9P&%mc3=fewih&iJ2;?oiTvZbss%f*b3f3$YWi|?1XUE)5r9s8Q?^n`l3 zs^!k!1cEVBe;FZu-T0^Vr(KCP$|JVBpK+Ay*l7DMvIhNuytYcP1Se&`_n{ccs0Nsz z;nZAPq<=Q-cde5$)vO9WDBBlR&?hD48p9JhnP6u?%=4xO6}X@^A{Kh;KpdPvm&X6C z$GHjb2Rq*c0isvg=2TptwED#w`O0T3B5#sQPutaG1#cpcrnaw$Mv+BT^)&hi1B2V( z)I`IloE}uYv%Kzx-#=Yk6}p=1F?yS2(<;_}1kmh$?vp~*&6xPU`B_$tvTwfIjN=eC zi$>U7X58!k`-?D96SXA_kuPn*x+j{(dxr^=LEcai(uC^c)MLp3Sx5H*qrgd~HE+uX z(Yo>FrAcpgBcr|p%x&`G5i$4!`jO* zT?Q51L_8PUCUHLDnFVCI^Cd}DNOR=kN7Gj$vc_zNeCOr|^5cm+H&Qyy478BUjR9;# znEsf@ey67I@4W}9(M;3scclw8Zf}`#URl&uYN~Y0INtjRXMN)K0^XK(k8QEkZOQG< z&LBDTweNf?rO^&b1k5UGj=`nX@v*iW3;I2Uph<3d{EL-Xjxr$G@W$7vUp-&tD_pa( zrmbj>2PtiDahw^;Oh3;?_Ojp*J6`HL1)Ver-i%sal$1+5#Kp5oyjiYQ<(Z)h2b!5F zs(0@^SDD@!|GV|cj1_m*99G>4yV1xsy?@exs_E&+ZEKl!8|o#^PFJG7+tu?W_(8B- z7P#l^tqFSd5v;$s<+0Kc^mfKg>SDW&(N$PascB*RA?7zj*FXjLd{5QE<()R5z0)Ly zPAx|?>CT-~$uqiE*0l9#V!E^AXIss=jMu1~D`WJg(+Ra!j9-Ck32mJ!$i{2}*xU~^ z@xuEKuX*|Q_}SI%()bIC3>nB;{~y3AAb++7)Yw_=7?ljX2HoRIO;M>hwRd+Gm8E+NrUN8(4TjI_Bx$<+^gajxcEB9GitFwci{fC z9DCJNNq2uUAFnVeumXM0uj~H%iqWg+JO$Ao@kVQNkWrZ2UEL1louTyjSYI5W@xM@R zJP&1T7*j$&RKci2mA%G+=O!*kXw*i`N6Q2JXr~9+vow(AY0H~zv|9d}fy%|lLHK^! zPDkOI5#@@{tx%f4JK&4F)8(xUw;4VgnxGqubCxco=%!A1zND9kS0eb=2ydSD8FOA> zKwuRj;%WXD@4c^!Hen)vFuBDO=SEA$*^4?UaO~2|P@T`1XiK_R+|bm*wk>emNXu>f zmxGDyiRBQ3%JWgN;QjW+C&Oq$wce>uzRG2L!k&8j^ua;ot0h4(h$eIaCr<5VArqtj z#A(MFUB>i`&y36k@uO+myCrai)mv&>_-B2Mz>hrToWjAET3Ww4ja|S0i*M|htr_|y z=f)yEfbme+oG;=tBwwAPnC29a(*(S&WY1DhNJ%pYjauw4n%hS^H{1S*X$U%FeTt3y4nyT>UeqW(j{`b~-MycqSTMD3Y5DeLP zUBog|4T06h=%Jc--h4_IjY`$`Q#tUiOO}-sKPlyq#({*}N~E|Q2N4)EBX@K4H%c=c zfAKZgK3R8^#{A|@MO1!5n-U5ySMFzIYhGiAhANfg<-qXl00g!IKid##z~T&p^isPg zTF8}&$xmtgHo_T=`YgbKs)l(qyYpc$S*#(bI7;FBq{nmTXvSx`y#w9_GP2ax6CpyC z+huLRLcwWI=MCFpKE*B&q1hs0m26{j4AsKroJfV9gKbBve1RGuc4iFIoH^A(w&~-c z9xdGRL*KvlEp83(06s+|!4juf%S4Qdm!73VWzMhO)!!EUd3nd#%2-f2dk|(R6VjOO z--eE<{1unDwt-;PO;Y2JZzflD{&&bXinCE#375B>+j_}t#tn~_J{-V5x5?nk^P|x( z3!7Nakr5FRBrfS+$|BGvCq?o2$2($|!(v}sp6&fL{c>D-(7*aK#Dqz`f?vcRKIWon6+^O6PR4dKaYnK%GMP+Nh z)M<|v)xn%6#P-E?UfB0hzT)Fb&GtgZxOMFE-jy4~ff+VM^1r*rNlD{fubg&4&6vNl z)P!c$dJp>s6!5QYirgO(hx#C-X`0qObmkc^rkak6*rN5TNm8`+&yG0>sf;dsWGBq< zeu3M|#@!_-Fw207@PY*qI7_+F7*Z>H_;vE24ca}@R*ODfXlPJ>20b95Fg8xw<%`6> zv3$*-c0HHPbZNN6*A4f7{s;R?M85duPRv-T22=y|xnOak^9E&vQ}J3Er_T@R;m4Mvf>m$hm1QyoqXi4YZ& zT`1Tkc3z(Wk@jm^iV#`^*3p&Ukoogb}zN+*kP#FYYZ z-u4~C?hMV+XQ$0eO}{9oDu%;I)D>_IoGWE!#V_&(xT{(wGMBer{56eBqCq5u`~7m` z>JqlM0Eeo?Y`78HN#pAg<)jc`PmQx{swyzh70E=Dm_hnm(QDTVBcE#w+d1&ODXZ0a zu~muE+Q7E&tEto|RxQ zNg3CZBh&AirYf=xibA9>Z%`y~2Jl74a3ex6^^U-XB|t_P?`-bRh=t6pRs7HR`weXE zcEl+k7?sN%$MjitE4=`$44p?1IN}HOqE~js&88ub{a-^rkC!rpDd&28pSzz~CctG4 z#}I7@-!Zm@;)G)O$48#?uKb8F+C^yqiqF6FcvEu78G$(`$OKN}Ckm?;iaa?YSJi*P z)x?%YNQ>igFe_!Hvw6#^;B{qy6;r8texjH_cB*WTkh=C`f%8ZEC5_k@*1PTG=Q&|EQP1-^M$S$%c02l!ug#e<68GC?5pw zZvfol=H848=QMQtpQ}*e^U#Vvir>0?cT0(OspCAwTFTr)W_da7s6X>c(mAT;ves43 z75mB$AAOpTBK)Tq-%{n{j#p(?_B82ugNn}}c^(~^jvKBhh74P~@eN7x!O!At8#nu4 zN!}-i5(!G$a~aTfc{NT7MOt!{kx;+mHNJwYi$wdfcp|iBr;tCKfq(t($0+9h6?v@o zv;mVU8SU0O88cGwoiL|N*;PSslk2E(O~;5^UH zOOrx&SAG*)gRFnmDpg$Pd5M=+3M4>hFqez1MGHAHwrm|3+PGe;(ZLjS}MS=06k@vflQjT9^nJX6Xxl|_WE+hRJ;>;7C$N3_h*5OKryHdTxyY!-F?ltpma<5^3O z9X9T2m)1K-&~tMiMz^;n>88HU@9G_e8gEjfz_RxIBW3;&(OT8&8TNyb#-A`U)U40q zT0<6-+S8An-W+PH0iDhAH1|C;>z6lW))d_3=RETrJl!GCW-a%;u=TTsqif$VA!#2P z+vp8D+6^F{_F=49T%QAf911hyRh)j2_ZCM$x68l)FUT{FPns&j-_g1-4;1YiuzPF( zpEDqS#^C3emr>R5Rs`z90%rWlh%9xK)UetRah10U2AL6a5|qSB9ATmfvS@VB_Rr!Y za!@{|yQjGO8;SLe3aWmLu@@jMZF)Be$u~|CPMpbuAyK3f`obHoKM_F5v(@guP2{HK zEBsID9rjY@`LEFWAzG?VS0LeT{bv>Vt1#$ zV=^0-wSuF~FcuHG_8x~O^Bw-$%o?5+YimHa<^F2Ny*Xfn092}9j!HVlBDP`S)5$9G zrQ`ikLWeghRnpQ0;mzXfC|+Sf5>%SVTPHZeu5+T%?k&`H$J9n}dv7`bErqh=%&2@^ zf2a)F%4#9QCHoLK|HG?0Tc%nmgq3i+=r(tY;kkrl((j*%japtgX7R&67uZC-d&)Mj zo`tH%4f%O*=!f*j|7Ki%VjBNQsMfF6&KYy{3)@nBW+X4Y-WTm+6EIn%HV)#Dmdk9h ziQh9W@`p&(P4PGEe&5}&?zqLAP&_S_t1&vfcjZEOr>U64PC~iR@*QU*{lj+VDFO^Z6)~_VF>-rV#9cNtN4W-C`6oB{v-2Yy!Q(IUdf_ zsf29J5F?%-!k>=p+XIHy9J7 zuwU|2boW+F`*7M_)!_CLZaaMF6I2L()tE}KtfDZEmJrWl3Y!InV%*avQ*ZP*`I~D9 zFGkBjgA%I^bAQkxSwX;oErpM6aaAj(>aWW~SvIJ_3g7>fqmK-Ow||Cy7HSSpIA#sD zXl0BKRh}oI!wp+9*Tmg!^=WxIvlmYo70(6s>O6}||Eo&xwU`b@Q7b`0Unr^RQs@1e z)e7HxF}wH?ph@q~d+cm_I`wuDu}Jq_{^5v-S)64jn_I;Ll_%Tgw?B39I|BWCcDCYB zsgmOAQ$4QU1<@6_?^Gv9={NOEButk7Euj|O0msu0vyYmLR$ILi9-9_02U{M}obp#z zgNdA<*c5y|J?PY zy_u9GB~tQ@q@Es&@+0W2ySXgp*+)yF#`xbw*CasKk-ECt| z)nQ@CG!k*<&mH!SxlkkKqM_R5rbo0{RJxT1JQs%-rYX;Sei@NnPH?~Y9j)&?IHvkR zyy(M%;%N%ZQQYlv`;sMUB1nSqE$5p_T0>bmdC;4#C5gjM@ek%+g zH$~e(?MxPq8IG05ku zgqDh>8&$OFGY zzmot`v1cxj`&>B_uSRC`;h6#}ytR*2`T8uV8bP)##e&8#P zNT9bmk#XDgLhR6QV2<=fK*n=E4e3FfV3@KtA$4IKg)X***%)sL}oC zD^8>62l=tcUX@xz8u3arZ8-4QcKnbeziL#?%1_6gm$Q23~zUfIk0m49OLgOAqJLLYM6Bferong%kfK4L;Zml}R*oto4Gfd!(< zhejK1V~g+^p~fDU(nd1omAT17anIYeh`)ahPg>WJ5BJl5AxPD|0nwGCKM6&`K}M0a(h?6+C`g)u#TLt;5E3Sm@M>TM^(~v ztq%b#>F~ju#JGD$H>WEH}ud-*zwxzs-iOdMdrnEJU607~s8$%kSE9&iv;M7q$S@&q9KV6<;M$;FaW}-t|meav2z; zH?5Ln{Y!-4eOd;2(}B)ji}=Mtn-Np{vPam{s#woK18K?Jo+}Syjjp&X!Bm$k^CEzz zrrTdjxY*L0u2sOFu^-7I+q=or5Eeb?t5@zHe_X}y2rRjJ<5=(@Wnb!>Sn(6~n{@hk zSJ#?x5F}?LxNk4IZgec>?Q#YuliW+1k!2#2O6LzW<>o&$fET|#hN2lMmW7x!b}jN( zx3P|DPFPxmO)vi#zQNK#+LPuf39cLQd0O&r>-hOd}{GT0e1@`ET zROAy+-~#ZzN35&_?A=|G`*OI+@V+{;x%8fCSSPif(z~zJn8Y!C@cW=X`O(Iu)SAF* z01jWAaJ*Ytm|uU5_l7!%kf8?jWcB$^W-Rj}6A~fto2v039tVk51=oLBEjDeX!t<5j z@{`$qQP3~ytX?r#K_f39iBqzr{Z~rjNo+ zs7YaJb9%x@mhJ#6P4{zM$z{)HaM^?gg-%IB#uMAfH`p!i+29D)DBdbV(!}=$LBTxV zqaCd9rU%(@vu2bhCgJ1|WuA6Iq0Q9&=ifE?<;T2XkIc7b4QYql)b%DZsTnNMs?J!c zBvUmu5-5}#75>r~`QGtjgI=K_a13*?lqnm~8+ZxYZDF#ccN^5iAFTZ-LX*r`GNkyP z_rvwH$xD7yllLi<@)LYHj;?;zJ4ZLGm89D{_e!P<#5%smzxCW>BFU-0&f$}d zq?rIOlE_k$gqC-V={-<8G1|7$8`s8W^3X#Ub*b_N1QEn_tI!iYnCQ0-z1=Z{$s(=r zp#rdTorFWyJZ4yBeV7K{7f09|M);ulnVIrPsc@s&u6Zj8VAjpqRd zT)}f;wFVt+hEDL$i2EJ#%DX=Y};;ssW`PJ8U<^d<|U0sm=)UnAM z0>Mkri-QFvDUSnn?Qx*otxazYO1!t_Hm&L)&-K(_P(QTaeJ$&Y6%<)PymcmzCSNjD zeu$hu(_Xacx-1POI8jSIO^?2f>t!UH>VdO8IS`*u;39azrsp?#jwK(vN^*Qzgf$vL zy@jH}HXO9|HptKdEB6k);EQNjN%s;qL=rgl5a~9F+8fY_WgAgO#}G>J>tO7}Ra^4j zJ=O=o1soE4?&~nKbl5pnG|z&`9`TlPDEK^X?%`(6)`bL@7L;q}P@4K!o|Tk6J!|rP z=d=Z}Nej-$4fQW8uk~;_k*&-lTW;EB~9$Z5Ey%`ur^LR5lf1iQq-qy?vMPPRp}!as*zc#} z7yRPsEGPXMWT}-KTV6&}`$XUJUvl>D(*5#i^#1^EK#{-0oXF~=&p-XsKh67^H>Q97 z=YI};<15W%I^@OJF-F6%w}Bxe@?k*m?OwnO8rl%x37;cv7+d@^F5=rrjQwcQ>1vSK z9+9~xapphi)6(31G=7V67<}Or^%F6 zLnD{mMpnsOUfA${!$5)|aX;ft{V;xLNB8(xiy<#?j7^owpHa7-xG0wAp48UUh%aJi;xQQsRlKw=Tk*4^ z8@ZO!;uQ^v-9~le}_aJ_}vs zZ}_63NEluU)$<{>hbIl)=2FU_jJ(yzgNM8*D*lW13mBsw#C5!K$_uUJd~I$8lS6SidC|m9H-;!EnpV@ z2)wR2lf16Mi)QmS_4-TjgKbEZnko36=@$bxhFDV_%ktJ+Z%rS6^6NTU=E>uSWh@;h zgFapiIs~V>g4Kpxe90D_F{bEHhI~Euy(_~c@9=(x!9s7lvT!c@r9k`e?YW0&nt_S6+@0 zFr-<^yqS+~b`P3iQ#ztP*#hp-5sei(@=Xn->^$K+8&hzH*AzX7m-a@CA>8-!;fCf% z?TK4h!i)OJ{9t(xUK}58<8w(nEYPq!RTZY9)V3DyP z9__^AJB1aO2XNcK(=Yc3i+@*W6Z}nh`igIAoHRR(ho~hlk!5 z{G?bdF9L!GeFEK9f8gU4AN3Av@)WFGtIgy}NAWv6=iz}Wrw#G87@%r{qZwA-!hz`o zW%~+dZ&Na|>on=-;VZW0MP~cV#sqYG5;F#w1E?#-D+0FjcY`qWC;~4rNEnzeMkD+V zEr4cLe8WMDa;q60NtajX`;~boFk#AzbY)d;<%>n<#>2}Sfx87KU1gU7rALs5At|0B z7;p+kgzFw1P1i+Q5X%on(UgY4fWc30&f#+ELRJkT-1F&1J_ukE^dv?Fyzx2>S9+XO ziM!e$nuf#>E!v|MqhnjbO1uepiq6c9zz2pNpRv;5^u~gG8mk_?_(>d^i>?T%Xq{zQ z{3l&m#z{W1)PTU2*A;weonL(Z$6&ouH1&ID(!mkrL5Ff^ZQT-&7TYr1^9~)8A`UKB z0k3|H1eod$JRY0-sM$r3?_thL7rdJqGD7n~8FMFy@>+BrzAyy7(?@-zAp_~~@KV)* z6F;3*#ryTO@MH3fk(XwX>|iu z?v6Ix8{E#hLw3Sg;Hqs6~KnvN{ zvVYbxBK%QZREBaU~}x-t9OvR=oRkFE4DCKS(){JOHq!n5GM6erhCFGWn6Jnkv2 zG|%!=qEf8z+(DdILnz|S+c&4*`R;ck%hRls{g=vuMrAbuKi;2Lix_MhcZZDO%TOaa zu*IVZOt=}N4tQ~rD9`O_-jky{Uf}^-eqOD2Th;mQ?zOQ<5owQ2z{5*nq;__$RO2M0 zmt&Z&WxK~=UIy0Fo5QhJ?uWno!|Cm}->MJIe);8B`4pP7-*Wt#f9dO~j}tJpjHrhE4D@z}-Hzosj2@D2d9Gt#puGgEAVJ ziU+r0rG5*xNp#=DgI5{9ZjA1`e9=D}o2Jus&^l;t_{~3D;=pk)z7?!-Fjn9krShH0 z#633$^X!SQmZVJR)DQwFy|@!Lo!9id6tT{irwB=Fn$WB9yYfUdW<6x{MMgsRplA|Y zn@6z7tUQ#!X`00guHppn+;{KVc{;7;<^s$9C~5Wr3Ch5UPO@RFx~w!m-jbfb_MGLT zs|*Qz_`_4n+dWw3o7~Iay){0%9;A~;%aeHGjm@LOU75Cp0fjGx*Ifx;wPo!Ee4h4jo{^37(&_e(<=;BfmU;El;v*KHT%H zogSf_c(7c_gMkv?_{mGWp*5If;8~fj7dZR4Y4JL2ajoZIH?4h@4?F>1{S)7GcV2nG zLzka)`NdrhjT4N9*EG0_lcrb=3D06#YXu;QR(lrG!XQnR4Y&a1nWs>eJF$=yVS0e{ zJ}c?@5hRX#>FO8@SC*KN2ms-bS9)N$Z$cSEoA7uO%>m6KlcLj|`$($4BlvgnZ@*u-1ECpBE!D*toDI*9%VA2X~?t^*$L>-&@UQw zc-3$OJS(Rn;b_^qQcPv!kw)HNk*7GpbMv51z!B#<8pey^q;fr%@#?EN^)ij}7r*#L z!BLixA{zldaMYpUm9h*)HK@>GBQhFzXvd40q8qnC|}(%Y%Kcq^7JV6 z&<0vOI^;8f4=1==nG@W$C+*8G>MPK9UVCk9zew80AAell%b)xYe=_~#AO62I#1T!74f+%{y4LbSI0cRfSxs6>{KH~*OB${*rnhkEsDJ!jb;Y>&H<;CD7X<(Q) zg0BO*8i%-`Em}JcO+pRbqFict%IdMZC~5 zmaeQHWp{;V)Wi5}yaxFf|L6a8p;S$et9*^8jZMRsrZG4`kAa9es1-SM+s|dkxb$1M zZe7r9lAN5-1uuTd2(0FD&__o`Pp@9dO|a_bD>2I1>`8uq^vC~l`s9;Oroa2Uzpp&x zfd(sUXa`$x1-s=bt!1sgJS*!S?}BUB1D)=;PWRmD?pwAE+jBQ#us!?XwL1~il|F|) zSNP>IXNSMTxdUKex36TMT-3@!jzzJme;ur$VvGj3>G2DOd%B`7z+BG!DIShv3~Q@N zMlUT3w09WuUN1UEa_ira?N~jPAMcmzt@$YVXq%z2WRNS|o&|A&XYotdZeRZ}kJZo; zdy!El@4{hDb27Jd;;nBJr!`@eNIj;8mj4KhnY*Y!y)prdH+HVA4iO{*#1TOBaUL6w z3NKJ0zTr7x)Y!T7D72Zj1Cuwyx|{5;?E<-C98-Ozi1)HZt?$`1m(kr`HBD-g0(9EH1#OT1k8k(v;WK56m z_+uT14>OeENc!#Dw`+;t%Hg-(e{cHkcfXT{{IuTHeD~dVr%!+N>GW6s`LC*uczzlv zzR5>}!Y{tNaTz|6k$M~Z5Qjc@Uik%iloMKR(i)z0auvu+yf{C&#i4^t=%jj6f6BmR zE-->kUNDCKYC}c|>fNa+^({uamAcSYcj9FsZ)_$W4vCRasI4~9^R(bNZ=a0O9`tEb zxoWg&e>GnQPjs}}Lg62}Gx$csa9+mfYjh~)6YZ>VfNi{*}B4=29HEmxE{d zdFW|N1DOn+u?Q!lWTMcnt;m&ceswH~ zhRW*Mvus(QbXKhf594fb_t&nCFQ~M~1a{Mhrr}A9rG9h?t-u4;;KMy-Z@ya2t{MO% zq(Qp2@;CorDz8qu!8HG_{R5lPl$XcyFrOK#vQgSjgQMt*T;aw8-t1`-j~{r!{J{^t zUqeWE4KJl1~rt@;l!o;742D-{gC-+%x8=}-RT zPs*F)J^k!wKb!vYFaL7-+rRyPr+43dXZpiG{KM&uH{K{ZYxQu}aj?*4KC9=n#9giz zJPNJDEq^lZd;Gc=T;&zii+g;7OD5vni}&oRj2}-GJ?@opMT;Lg2A=3lKE&#$!!}X>?xmtaVM=PMaX>#>C5O`K!J);?& z?)#@)!-J>u$=d-8X|8@k-)EKZ)`v+>?*(WW3Q{{{YfLGE$1@jTbQwqif*NK~UiXP( zf&J_oQMBiQY6ulLo-yDP>@`uIURhemnqfp4>KU;72Sh-F-XYI$3Mx$|~AFT}fq(Q^uYut5sx#KAr=mlCKpUFVa+C(UywU z3&PbswaRXzMH#{9yvbPb8aH@gORu?_JQuWF84WaSXFiJZe*WcWwHIk4uNrM&hvZkzgsVI|Im6_+^kveYZ!NW(>_rCwVD*NyM{r_6<|NH;;zpJCB@4S9z z`oll^qtb={^q>B+43;@Cawl^}lvl;z_WWTrl)@J;BuL3s-j=Vr@Z3Ru&*VxLZLHi& z>-d5@Kf4D{P#0i!eSxK{IvnqV#_Nhsk%@LAJ;kRR*Kfq&ujhjq538Lq_B`IT$lpmJ zHPlNPTRZG4gpXM=EmFrcrT)7eSGx%PMl`$WsMbP{lSQm(JIG*oN%Sb~Cv{+s3twpN z?L;jX@qT#J_~=aC2RFXTXpN-bNCQjgvIQsYa_Pp)vmrOtHAblk!|4jgbK{3}bKzqF{~G!EoXm zp6hUx=ZSxK6AC`V$iPKVXaTR&hGGr+T1g1Fj&%-xIGI+jE%CBeQ{m6ju&id8^BG?^ z#@9GE9nals?&f4i%k7j#eziR49P$|zJzmFYkA~t7B^y1g{CF3@^{gCPyLYd|{K2a{ zEi3uZPf7i{@raYxwO}J&`6v~baLDV^V;aCWcfU!z&6(p2@DgA0fQb$;97<@O%98nJ z8jy{}cV2sSx_RT)^jH7)f6n<$KbpSt!3X6ree%i2@lc0hN5k*^==bWxfiJ%JvJ4G) zu|Y8&-usJD%Y&hgVL$cohQi=w=$(!i--gwne)?$)<9pM4@4la}4}DcMfBS=P7f=7k zfBcVu&jaLfjE|vyH`_JTjdHv>Lq@Q8Z0edUASEyIR6pGr;9qDN|F-PW=+}BBpHMm( zxZo+%<>dum+~9Anm*57&d#dvGq7!-R=o~r27%^^MM?&&=DLos4W2~4}`doUEMD+(U z{Eeq+!Y?_N4klgwlehOJ$=SravUJ6CzzBn{=0}|Sl3nh>7CigG>33mo(3Cvl1our( zKQG;2XY6mjhDUf(yQ970v0DfI+nDI3 zXK<}x_E3qkgM%*(fHL7rTvuEGhCad?6^MWND0Lf)s-KkWv?5%Inr(K zToFgy)WCija~d^25~cNmut{*9CM})Cl5}2}ePMgy@yhh}TW^-U@5Zq4p7sy&s!?7+ zaysT0S-Jbxx8I+>|NVba-pfya`qSx?Uw%?Nke!bq+{i9-yXPOrOMt|OWFd6YCLJ*u z%)=^L)F)ySY=9&?UY%jozxr4I)Aatg-brH*b)U(k@NO@WASO2g&REgWAzfR#4Zys^iUo z=&8BXh_dQhJFK}=GD-c`KFsJule+)>AaFC4lA)ju!$|2Ub5y>$Sfh~Ofmc9pUz?XC zSNa&aXsd&l%BW0!3}4H}wfIf~+NB9*u$M0*uwQ5hWfV{W8j`Efc|8-dis?o*8pQxC zU#E}wk)LPPlYIp+f8eVj*NkJthr?KiK}(p6U6hcI-$sQFjyD)a4Zim z!pp^EAifMhu3-A%mth*O*5rMw?n=B7jZ_c(z3+Xm_MiRiXFts_&=*^#OoZRe z9E*wl!|8)~RyH&K{O3QLKKkd6rt9%M;dvSl%GE@EFRvSZAM8CT8JSRCj>llAc$S8; z5xLrQ>lGBo0sC6d@$q6_d3reg>;L(GjDcCIy<&UWW5sK_pKTZPrn}1#9{^1|~q3RUhWTW$Ny<9Ku)n5m7L=MW7T=U#@D6arU z*Lmj=FHRnYyWy%=`N8O`yy{#W1JyXyuRPW1q(+@;V&dF;sbHIbtU1$-3=t#Cy%->E ziXmXQzyd>n*Ww2Hz$*tNX*G)2e_BIk(;4dfdFE`DQ~q*LmK?xxuVZWY%{SUxzS24# zAHN-%|MKQcU@GWm^-YL~f-FJ~;fOyWxWw}?3Sge~bSyo@Ty#jsk;N$!SSwK^6-W_J zGm!^=3STq`&;1(BX@IlV)vAI=vl{uw1h65f=blp{2-cdX(n^93o|0?*E4qfze37`y zNXyTviYvoibOg6+-3K;rt_8^Zus=paie*)xD(G?E`d5kOc9!z;?A^QfGS6bOW0WOy zIDBs>73+(-k20*-$^Ia#VXN^LY%m4WzO1o)Z#8c8u;fdY6c;@mLT;YbkM!YTc@^j^ zmQfk><`QE(%8XT1LkLDGyr$%7mZ{NKG77-+!10O|K`du$OQwNqK|%Vt`VUTYg`w#n zb8?YNJn`s38qI2Gt2&QNjt+7#VOFOMKYsbkk8*C;Rw=Y?9al3HW;AZ(McvJKV?kE( zGvC6{tG|2q9@UnH*Iv6b{Y{3A&mP~ew3lz@wVBk1#^$|0o}Psb!*5?4GQ781s1cLx ztFPX!dBwl~`>}1|^G`p^BFN)vl(v`LxVc+$RsPL4-;CGy<@Bpxe^$fSAOHBr)Bp1~ ze^cIbZ>?7|M}fcU;w>MJ7q9j?;<1z7VdgaFmr>dDrvm4oz|l5u9G-(a~z}<72G& z9C}z8lh>JTAv`bW?@cS|tafwy#p>!9ex_j#o`Re6(7K41<=PTqw4m+L;TP=;k9d$@ zyeqz1K4oiyJEk~)gFa4fO}cyNL^3y`1;cnBt} z7h_yJkH%K`axY!}A~J-zwve!;VZ>HwXRXN%WL9&9676pAMfN1uUAHk!{Q9L*Yj*HixS#syq53fc`bUUgDEeE1?u0j%~!J5D|HJy~|6l;1OW9S0AYSdsK*1h0=L+X2p@hojx} zy>jkd;YY{NkK{{XX@>RaFsHSb1q<~-H+cPP@mA#*r|wOz)7_fe4FsRAM{BaA1Sey7 znx4Tn8Kci z7n6GwWGy>f2}^fc6%~M$FM#Z*jjb;rV39{ zUgQbdloigMhmj(uQA+1ii!EVL!mAs$}Rdx;Ag)A>4RDEVD?C@v|o$Od(0EDW#7SzVN9WA^H5{xX#7Y4Kr2?ku~}cQ?`-XE=9y z{A}7;%QAbsL$YMvT=(MD93Lic;Aeev+JC$>z4ykQ>CxTHd8FrFT-(XAdW_KLpH8p6 z{L*xsIjvv((|?I<52uZ#Y<7J7&GgFc8?|_`xpXpJ-&&nszP6E-*DOq&?M*kXj$x(a zQkG9+a3bIgyyD@dUiU-4mzASyX#U`LzEkI1ee}y;*8HN?zMI*Is=?URu0H(Ue(T-R zzkiC+^kLNh<`4d0`iH;$yV{1aohAHdnP*Iu4?~d8a`9*)fHaiIFtP<>HF8mZX{%|l zFNRZUPv^%FGbU$?Jo4eaUv99B48vq|r?)#CYc0;}Tdus@(ucVn46Pb}wH;|~5Im!? zjTX(OL&vG`bUX2|3~6(kL*(S8Z(rnD3~psO9Jc60`)d>PLE65u$G!@hWavfogOQm6gkP(nJQ1b^p=M$h8gf)Ed5YSif+)FoJ?tAfBNRIKc zd^-$EHFEjVh{e@w17V24LU$R{&>?__k0F2;IHh$j7_=As;jJqj9u;{MH+dtI?B14V zBEEh+&VaglCBwi7|LaWB@(}F!RVEhff-j2Hd^Ydk>s`Hq03Vpj$%js_s<;nxf#bcn zoKPBi$+dgaqANocOV(bUIH?`skso+bFpb6MpIVOP`2|X?bfwY3sa}PvnJAagd*A<{(j6uJ;6e7c-G5SE?Zf$lpJd4}8BXaWKK}UQ+FwP?7C`>b^QsU`lwX@LHJb=Y`aVX#uTx)w% z=y4AZS)fHdfKxKb6>S67@Ei+A@(XA#S%a5fw;AyI*>&mq&8r_e&P5|pv@P0cCN#Ac z7PJf4t7RpE1-^)z357tTF|27IGLqq{;`Kt{626K-TUP`+R1hQN)B*cidheG?DTBnd4kW`Z0S|(? z2=iyP+c+@m8abb4gWgu=g%%&O3vNA#|>E-R6+0SG)Z`V-EM~Cgqzm*Bt!_2E) ziFdLY&vAc`vC6qndA;L#=6jxpuRAZ_&U`_PRE*4Kdeb{MuTAg1{%SnSeEs-I40Pz< zi8r<$px$45{neL3>v?+c+tVNX_(xggyFWdAaBq4wD|5Cj*ya9e8p@ZSe;SW$Z`w>F z?TFpOr-Oilzg6Af*~=j2&Gb zud#&g(Bm95agIi2)aV8SYO1C551!x`M=$$Ix0L_w#@q&B=QSPP)LG zN29ABe(~WaT)szd8?NTlRT*LF<=0;R&;vpRi6xYnud&Z##0^FU62?NFr8E+iR1Bo7 zNk5J7w|9v%dO~dHxJGywAm9>2U^V_0{+K5l21$=2h{F)WWXxP%MasHI&&)xTboOB8 z3aGToGk8%M-HYgn+?zDU@0EB{SF&__%SOEPKHKSOPxFSn-svE7A-??Ujrq?$|ALPf zyu*csquk^0gqIeucr=T1kKY=0M~UiK;p7)Df6D`}yi|tD!GP}Zr2cFEORtx@-V6*M zV%6|>LjO*T5Cg`z?WfTmWvBh_&U%bfepwmY&Ri2I9ptEGWi~P=wUukCF=uw=#p)P` z8@rj@&d_W*p3*C~uTKZ@I^KOPr&%V?-qU*p=SmFSPKHIxIZ*HVmCfm;8&_jgHmA=% z{Z)3V-_9J-k7KkR)P_?Ym8}nqgdyQ>jOJT`_xejW%WyM9>uKEU*|Kmgv~C5qVd7@I zy|n%5`qg-A*&5-i$k1TLJ&LsT)!SVF%tnz*D``?d|$;UlXPqv!SA9HCs0IQNO zzw~nL4cksV|KgXw3|&uaKJ0P$x_kF-<#$ytUKz4O|5=9k3>FwVKc2cdOJ1)b5u;+C zle&OU;}m$kbkG5Z(X?6+5U-)1#4Cl1R%yyNT+hmZ^V{*tD8F>=rRyK28C6D^i@+2}i8M3> z%vLuIhvj6Pj8h4{_G6_?yMzdZC{;XPRrWA86Hs&vN&!p;20j z315@YzCdE*p>wTPYSr&~R+ql2+CryywJ4k()Vu_RW1yl`L@@f4*wonSRI@SIe(Ufcajyq%*M%~a`hEfdw|m)2u#ZshY%Y40(xF`iMb!+2JE z88%(n&TuWmvfUW0-SD{;gQZV=8l`>d*7fPNct(%z-;IEdv&A68vB0~s8RHVK=MR1u zLl6(*%TGRn`K7Tvji-n21 zIo*>kSYbue@w121OV@WZw9H~fNPT$k>lo9G?9KX4Jg=P45RdA;cV90f_3A6PvcPdS z?`b}*`t+rnqvgzLWhnkAac{r-t?5Vc<}4tXWVd4LUA(*Z?q*W|r`fXb|8wRaf_PPp<>cfWRyO2nrBk#swF^g>)lvF_;z@X(Y{HCSBHdp!5x7 zG|6Pf3mJ?M2?C@jff&p*025~IwYqE1rLuD07yf@9@2N_gQ}yQaJmqieKkV&3Qo_n;?&$mN~w@-Dh|&1by8-kS-tXNMa9H;d-SuPiAG7o&MLZj_19 z=kd@7D#TpNttsb24WC7`^& z;Q>!A`Lh%%icph8mE;`$vz_%@Vb=(az0c|V9#ZDv-ao6n#*)|}c)PZD0l|0U^7;mt z-@b33zC*e9v^DP!EOm?^jEJcDv=P_LUc=ZiwRcsXQ(CuZGVYBKsD00fT=SuO>ZZ~Y zG|TVSG2szcl6d;S47}PQr?xwo!NFts_hm$n{&l4`F*JAUyPIcjwRp!v^`w)^KoY0 zt7i_k0(EYlpX=n{&7W{Njps~);ahKC3=e5%NjiPw3%Z@JhgSCOZ+&g|^*3A5`{_?| z+&)j}waRzlTnxF!>A`~n5i>pI5Wjct@b2t|^Sga%K4%j~fB55HM4C>9y#mBhnJWXWEZ>C;>oN2zfAm+K~I{Zrahezy0m}VP|*$ zpa1@UXjL)uub)_uvZu2oI6=#lc?c4=9?zrnR_?Lp&PAGGheYb!VH*GKRSe)nMWeO>EwE4T5?@MZPYtG#kdFyot- z*tU4VLz*-tp&IR~awMf|LmEwtNi!WuQVw#H_R3){^$Tz_ zbB%xl+g=?c_KS5@$#j_SOuYoxAc6LWLb?($sqafDJ!?g8kYa}H8OiLenQb_%o4K@4 zL%i2Y2N*?BH=WJkQS}cw`K3WJb7N>Yd6ppbc_$~bSR{W|K=fJv7SS#N2_`W3Q~!(4 zmOo?P?nbd(FPZ`1oN~cItR948Xze%i^!Sl|tyr#uSox$Ty-kxqI@S1B%$D~b+}(Za ztygxh6|i|Cfx_fv=6vx*Sv(tumrowry>sbTcV{!d{@D+IZ#EkXEWFk83k7?=bmsW( z+i5u;eekp0XZ;<|LV5R{H)Aj+n!S!`V+jK*YKPNEpFZ!fhQ^Jde*dMXyNj=%tz4^d zMUbCK3;fzUmtv3-7T&zJ`}Wt)?_Np6**zC%n-f0G=hExvGp{cfa?t+0Ox1tmFaM=9 z!(x)c@%YQ?r_d35PoF+ZxTXOgJ#l*`icgE90*?sxJFT!y>|pftpbQN^`IA2$hc;og zlGx=l3ufBssmAl47w>iD)2m|+A4otAO^0luAI8!oa2Q?Z-?f?7M8_v2*OYWjHVGey zX1E9BKhsCF@c8ll5m?*U|KJBdh?b7*e)fy^BR}sn!9+(>XPTOJH=Z%}8*{s_tQ=ef z8A0>nGcazy;lOwAdv9nT0e1QRa29D=l?_LagBN}+&R7+;I3%amx#9%xMmu<-4kUG0 zR0M^7EmIY(s?W+bTE%s>@Fo3g&!r5QY~>mLj4xdTlV@B<+Xdd949?+Uy^H@TOiLy` zibuZ`f;K25kGj^#QEzZ7_KUtnjsBp%R>Rd6|Iv zm6;JIoXl)`Ig|D5sp5hNuL$Nu=Euo|$iWC_f4(PvsAGrr=P*CN`_*^bZjxztIH~qH zjq29T>!W$S_R7lza-OKKWkkLDSwijHIM_MpAKbkeQ$F3jl0WL&l}{6nZ6B)AgN2U# z+OK_ULOb^DlTksGc)~O0r!W(cd`!$|!ho6a@uydIU;oB8!c7~B3um}}>w22v!`-ia z_iG9N!{hL$xp4emeDjU*t9;|#ukHTQU;eFOd;;3hRW~v#-!CQ1p|q_Z|LnuvmAi0S z&}x3fw+j5cp9XU;E!axvlbGpV<8v(&Pmt@~9PXFf4)h>1kVz_-^C5>+3DrOT<3cDBiVlVtH%k)-I-JQn`au`U`}5s1G~&1K=;XyoapMJ_o3Ps6L65$B zM!@*K)l1N*hoirnGd?s^CYwnb?40l>cJHx>xIFOVi!e?fYeyT(dFBH1;)f-i+=nau zCb)!xyZ+-WUKUazc>9!i=L>{qP!(PzX_TnnPUYtSd8Gs;w zIpt~`<^mYN_l-uiG>k!-dsU=Pz;4%SgS@62?B)esKcCp->CD72)rX+E^6lW8z7<;$U69gVp7 zwJ^)GGyqQbS2Nq>kK!MKq{&Yn!ya#j&R4lRmUi{=$DMG!>Fe{YukpT+bvtjB3X z*FL|Je=A4#%cpkV`sUkZ7Ukn8Bp@L}`xeE}QCgMvuULgX!!sU50cYR2K#%{04wcE{2v4kgU)WTF?kJCXWtCTxeM5_G8Z-u=#!y!KgI_v76= z@4PbsnD4*;ez>+htJT-~X(diDDsr`fnt6zxXi2sZ(QNF3SoE@Z0FAqtxZAmmL+=D= zjP3g{|J1$G$Dl7-mwGnF-{?$T+dbc1L+3SzZkbe%(zI9(v~H*92(LKTYH&Kx?nxHV z^Rz&M&A}Cqf|t?)2mDP9^WL?Ds$DHKLH(GmcRkfUT7Dia(>w{G1jQchuRd+HsMoa# zGWH+jtFUbm7TYc)E zwyJ@~L+<+RQkSy+To9nW?Q!9hnt50_u2-W1-?eupg=q78~xiFYK+%s+Wr@Kaz%pA*{U3ChQpKVCI?3 z36W?5_s(cxZ-3{TF(fmiy?z(o82`$ZD<38(&c@uYj??>OLh9%-`MLas;~dWWt1Eg9 zHW8DnUsm7X&#EB&96NG+_tqQdc6U4Y;gyTDpkjzJh4|a_8NQe#Ru7%3!n9xt{_gMo z-tJew{q8V1E%*Ah&tu>+l%9Nf_pkowhnXv-?AdoKpWN|;?kD3DJ69}|KPKQWfAXW< z<5mYxVBqK>(Kp6O$Fq8!FoqU4!&b?Zg#*cse(-H8_og|E2?qnnZtmscn)9r$bF(~Hy`OkkojLa0} z`=sHZ$0e*xc3)}O;M?eg%VN>9yUWdj*3irLsUEcC)8)SR(V$Pb_S~h6=N6SDBeXam z=8kaY)>-D=ZZuV=V?RlNH3Kz)EWzS=)pjinisq%A4IbY&y5?Bl+%(>J5#E}bet{26 z8@%dOhdytg-gWui|9kz*En$;xMW+H95lJXeZaTe(41g(Rc@tn8GB#w{eijgMF{tke&Ls-`>$DpUP^}L8=IZIs2RwR9|A$3o*jWr&~HNI{j4Y$Y4Y{a?%bRCs)C=nGOJc;3-EI{Cbp_|I1}z<3<;j&X;DpbV}3q)+KO2w z(Y<>&c0c*iAJ1mxcU$#4RagVz_fl${(_iEzIEez{dm0ljbH!4?!vkA z)qh~Lp)Y#(rEv3yfAX((w`%XM^7HkUq`EK#WX?m{x5&IdpQC9M$Y(C;hm5-Ru)&R zC>pPiuHA`N))8VBD5O`C9{a3CjriynAAK~M3xk6z;ZRyHIE_DH<t$@*?gTr@9y z;K+L$x6zDpvFd1DXkGiOp7q>4bfnx?kLSi`^NXrex#5+{SsYr6M^q#m+S_qZOqMq7 zZa7xF-nkZ$r0&+A5o8J8*fYLr0iycW1l`;GmV5OR-1sZoDf;Z+V0CSD4n`LtKK<`K zm*?B3{;AKk^?!qV)wBA$L~w<+O6QHe-xJ7Lr7GB7ez8(z*L!Q$5E#0Z)rfbJWD`oT z{q~&j*~*Ootn2{Xvw9J-2+k$NxAq7g1T=NluKFOrZ@!1AZ*Q=B^p&vd$L1^0mU83d zuMTz7NSJtpq$PAa+||if;z)SyEXU+psZqy+)aecW4R4!J^64H}H|>!CSAN5R`aNHP zqXbWOdfF?Yb+kU5i;>P1RerEQ%_Bwn3n^&g?|T|YPInp>A?*mKi3jTbz6gpyzMnsd z`2)_kS_zy@)v5S2go9~d14|mw!!`ilO|#*Qf3);4l_C&?M$_=Po`hmh1G%*LNSJ zvAzE4>D_Pq>wi9)X!VvUo3Ou;AM9BS2zKeLKW&rt&CKR~2~vzt>!h{7@lSsCewuAU z^61I6wW;y8U;{5`V(4^ekxK+kCV2XdR`19%7>OoJQ`}CgjgvpEa zhljR0(4M-LW8P0-YP2?|U8Qh+e>8J_OcgzcTc7Lm{0dq#L4JIPPeVmE!*HU zv?nl>OMj>n%bBQNj=g8~M_uYzz%Qx0%__6oJm9{%wvN^QAZ86LS?;1q4eZ?puD{U` zedz+DzbE+^lq!~PM7JRpv?XGh@NFe9BI}& zT0KW9ce>}6(htShvufCEFYpsCX%UYyi8zB_P7`v-#fkhwgqV~tG_=Qs8_<+&Abygd z5CHsA1bH|?^$I43$Lc>&`8;%u6XM)AftCo^9>{JEEzoG?sd|*@M^FuY#CY&2eB-U0 z>Gz)OZ>90)yYKwDzmQ+@^EsKu2`%T&U6^uL6J}`PR2tnI7vBiB<&>62`pV~bcK@$` z@Q-7bW5J!EPTQ5PmyZiA9f%%3`$cBmjn8-IQ#~)fdTunMw=Z4Xz4O+^F~_c5yRtiR z?#S-tH_lH=>;2Em5c@^ue_zn*^vP$@%aO@AK_(L#ck-8!L&7(VHI2*f zMWbjAEkwUCU0+6+?D<9Kesn~0u~Im^HF#Z)boHS%f7>KXkZE_dwdYR?x9~f(-*e^B z;_@lQp{$*)O!Z6ib1m)FN@%x7BO`FBvZCXkwNT>P#ySF89qKtaMke&V|7#NuZhXkC zqx~hg(FeHV*7Z&TapF4BV;U*G@?4*`dMi9IeW_u&;h|1*{OR1mW_O<$!pof4Iu9_v zJ#+1A18WdQ5<)NO>jysNyy+v?evd_XAa88=R^Yw7R zKM7W=R;&wt9?UQ9hoQ}>idM_HY34n}%EM<#~C%{i6v}Oj_ z6RJ!i+S|zlrn(0oIp}HKb#(~;NYABe;rv~Kdu8ZEwopn?=D^IlkG1&5KfL| ze!|_On96$O-BunS-oCzjg$3?9k@MtHT$2_q2IZSbh)#qTfv-uPw~co13F$Rn`yn=XPoTzyteGv*!> z$586xO9CilTkhWwLt-PmN5Kg}v?LvIdC#e^26kk3?-D}l&^HN8Oc$2b znMDVKiBINK8rGYwFdaLTeC4gJa{y~Vl)v3e z13X!z{)ytMXkfHarp^R&7J~4&-3E{M9o~JBX?P}6_SQZ7`3i^V&;;WpzDk^!_%<|g zBW>r*OC>zK{do5e|M5QwuZ3y^rZVK~foAvB8S z)a4!RZgl3}#!sH%3!nZr8Z}mnuNQ6Nsi#iLiSO`$$p-xpwlXl#m^t4UkHr~#niYRE z4ce9-&j?#I?mPH=E`D5A(wFe=DGUv97h%gRUi{&XOWE1_6z!_hpKEZu*Pq$?HxIk9 zRX#6d`6hyOi;L>#+9xZ30l4 z7vJ~HJIZg*d@8>o%XbiiYtx#xI`~L7czqfyg)zB(XfE2pvf-tLEeT&*h=F?eaAg-& zm$tV4A%t0NYBUIRzdbX6;C=D(o|M;a)M8Beq#E!9-4~fbXIp(bmxi=Iyvxxo znw)^M@6SeLFwMTUTpEvZG=qI#wzhT&A^q>htROP!9zI;r_-0;01#BGA2!0XS{@rVD zUYh&T)7-k<=HM85aF!|U9rYZGiJ2%{zxCr(!gnTu>Wml$Z}$%6sMnW-&u5uRkDdqj z`HKnOoas5ZA4E4+;qD{^?^gGLo413vkb>&Ebm`LWkN))MyFdNW@0D2Zej3y335Fw? zl3#Q%>dT|~->qI+@OQrd?(T2=_1`Iy{#VBNFD*vy5i8SB1p^ww-JZ7SzUt+juwAxzuj|fzqjw;1eeDLF1&f+y-G|Ws+eok z{?tLLtt4qxuSks(P74^CmjbdvR(! zGx=q?#!u}oz5Q-+P^Whve{ys8U;G#URX(`tDb(b4xaUtoJMD|vUHj;>-QWBhzqb4L z{>E?RV|r^et9|>^hRYDKuSE)3BhIAt(ZohmiH10b-+Jqv;?P<|3Fcq<#;@$&|HUsB zE*o?4Rp-vXS_p%afSObi23EVo_uXq@;UE8_|0ZwCv)y;U|D9;uCh-+5ew*;DUspdX zKsC*kAJn-7TPBewX{jbfraKC@qIfiI$=DfBLBBEB?r`*SI5^Px!M;C_jt_-+zG7i6 zf;pY}$A5~hMhN1Qy$eO7uLdp}qZBL+c;ipP3C)`LCUHT}E%KO%l%Y*wOP7^H{4|HC zRz`oO&E9!jznR?YU0Pf`QU6}5Pv{?Sua!WG!LqRMa2;N}tWf2_>l)gNM^_x^;>``_ zd9N}fyplm07~lA7mtKEwqFZ~&R3gdDo}{LV%?1Eg5eD=*0bwuv#uNkiyqB*iWD|OI zDMTzl0MOSZDXUjK>mE!kU(YyGtIIpu-0X3Cz5IsMP2hlqfCX!>FSs+!@UV82TZmZ5 zQZ8IgAEu599SPC0G5B-IWNBb;w_0c>ffwqsfq@r<;$7bdo*uZTFWX9v=l+uK9@2>eb3qCeM~@r94?9M{o?L7OPFU5pL90zVM$?pzO0)kPZzs& z_tEaZ{s;fv?k7L_IDu6Pmf(?%)FOy+y<8OgzxCJu{O+&(_HRr|o71hPnuJ8^3q@` zQ)cRK(7Tl1+Uc0DbMFa24Aw6Rc6?ZM-aUec{Xg1L6>CKG!@z(Az@C6$jLrT-H{6eC zCWL@y5yef`(CT%%%!~CAJj2*Yl&Mb{ZS}r-VvmrRAlw_IZq)(E4iHfGMfvGk9rX#$ z7q1z}2*f3#8Z(;t^cC|`i{<_PJVLf183XcL5nyI_1BZ##1KHYxM9-O#zHb87Gv&9k zAo83KZ15Km$x(GWf05Ncsb6SR&tp3Ki}~W1On1sXC6S$TBAF}vS>7k8?0J*28IejC zLTfsh59Wxv!au?T2fQ8^(hxjNdX>u=-n%1k)9kic?of_x{jz#!b8ASQ07I#vjUkh6 z(hY^fnUESQTIqr66J8-OvJq~K!L#-k(u|I0QlCAWU`kW@gV#@#Kv;c_{y1e@^{p&vQlPoyE*HghaI5CZSN|Nd;=<|{p#R&}!H zN5iwjNKI76@r$+vk&-e-Jg9Ct;D;W=(V-@~YthNg&u@&zayzq@PiQhTl-!VZfk~L0 zxX2iTkwBVcdOehh^;i?pvuHwoFhbS>2f+p3BK2wE=zfo~^DS}#5Lze-9j|Y;&KPHt zt6W^Z8%vYL(t6T7t8=ugK8>R?fE;?9iD%KuqFI6o3@c4E`m)m^vD0K`lvjJoOg*(_ zvO;(GT>rHX1og3cHmhwq(?4j_pKGOP!n1ptboHxS@6f9@DG%yQZY=G|C&8f-%;ll) zUpmhFzJOTB+B6KGF3%vqJ7Zc_7hw6hX0KKVV#`C2zZb6s+!7}4L&DS(!bw*{HVnU4 z|MLC@-A#EpoVDBYS_R}i0a+E9nfZ^Z1A zpmKk^=evISgcIe!?0vu8Cm?A7dD zl<$qe=<)atEitR}WLtIw>|zWnN{0&Af?B?&HB0gh(Ksh|HFUyH*=)F8Hb$+Tgmbp@9u>3I@5hq}qwi^@ieeiB{}G$yCpOn&i=Hzycb_yZyHdbz;XKF#Q*%o!{Tenoz%htbvb zwj3Qfke{zHvk-HiKa;o!m-@nWp+ClrAJc?^zWnyw7!WqoSorkY1sBSBMq^Tk-vqpO z(d*Dbc=2r0zHL+EI(gb65E?gOxmKAl(N8?49`A3k5nfw4@44^!N?S!JZZc-QrwrKK z_kHS|8de|to^uI>=l67G1AYzC&`KP^5S-JH3YL1iR6ZS@6~sP8x`)1qyfS_Ef`3EU z9#DSmN#g+qBlp;QJs8LHXksM)AZiIr_muZ1yupdl0w3Mi&SZP6E*+W9gbZb?VlLXp zv{!!?l9oB7)%)!YJd&fA!`#6V9I111Pc^^#>Z`+y4|+zJLNWmb;a?8Y9-N5Yr3`|2 z5y{)Ync0|!1{8kzt`zd|Su+vzqn$zyHs7pI-jFatC+c z`R@02Kh1}A`Rc9R-~apnr2Aj&e)BJWfA_cl*1t2_;~)L$k9I%$*-wixd%XMFJFo5j z+P_&=(adM~TUup%JPYoWJM3;gBtqJO3-(Z+D}L&1Lf}Xy^J8Hb;b0DAC@jJW&)~F5 z88x@Cu}=BHpxg*>LP%e4#kP5O1fTMPE#)JVp;x%bwazzeb{JZEk~Z$>F>zZ~a7|3o zN894`wTrLko666Y(0~2H$=&%vD^3;(YzM%ZV#`kVSIhGkH7BgritzC?Xk!wvjqN&g z1FmgIHclg~8Y{fG34=N`&lcY-`qv-jStwXTdBRbj@Wpz^B)c5?XxRH(y>gLRsWg7% z!R$)u`3e`R?#5XAXwG|-0H34){#mdrt!!({eH!8R99?ewGVfO3SG=^<8K22G3NVFS zUYf?Mknq^zr@R05AO3#f3zv&7|IPA@zq|WaZLbM!yTARn|Lr2x&t$@#++8id{11Ql zqwv1l{b&El-`V~8pL?gRJYS4YkAqrVn#lkx{xBx<^I~mauKfuO<8dhFlppK%-M0HA zY#r-vfryLZeq+9w8-y|(G23hxa+I6&(N4N{&8~?0B2WE?zxd^7MjY(~7%gXiG}Vif zSInmFV^%9OUEeG##^;}YRM^9ba(uno;>y|GyO-YF)0kT+ZCp>=;9h9SiA?h&1YP(x zDGhz4sesGD68hO-jo>gY8(*SLzm4TaugpUi;l9x%S~b?&n0u$6^BX-FZ_gKxE*_L7 z#-X+?1dj=h=gELA_q>IOj>j8+fFEDJ6K zs!w*$-^ytk%BEcbjQ5+Bw|;Dhp1O6QYv8T3VD#K4;k4msE90Fn7cSc8CiA5B&2cE4O-rL(!z z`GQw3U)%jp|MZ6iliu3B`}XnO|MuViUzcH_(24MQFB9cK3kh~w&Y)_1}X9V_R(rS0T?2zTg>&undEZjgIEbe=Fm8-Alfiw}HMv$rtbGTxqTlfcwl z+Z#+T!ng6)5)-t#figG=EI;N(|C&(ITm8K7#w+h(C@+(mDz+4>VrG~Qa{K{S8PEOs zK1@)x+cRYAUH2CPmRgB{G)^E4z}4+@3A*liPyKuCd*7dS){L;~^nJ|$t4)$xCjj6f!l)Zh1PhhzmYvc1;cvhRPbh4b}n>~~xEc)0tgzxS`IYq$G9|DXQu?i=r3%=~NBFF03tNE2Zu zjFV;1-5jn^d&d1xrrxyK%Xjl{ZQ~}_J2!x>N)s>~o|ksG{FTodN3`G*Jvh`tCRW#+ z+>`6zdOk3zpTS{FPZpnM5*)gS@l71IH(4+^mqtY(UHJD^g(RTLMK%2yG-kfyHt&C(*X+45|1mjT11vu&p`erw0I5yl3~hU9H9 zHbNlmHVuwr`%#YB6A`5y?^J&)sO=>l7&)yuqYVjo&FD^KFxq%$Emp$XeZe-mEvcY)rttH_{D5GhxFqc-g}n!35sH5h2IS3NKHet{_m( z`=eOizOrG{IzR&TO)VIX?Xoxf{rroh)XEKAO zd%4!pVx5qE?Q-daf3x_{N4x*qfBF9uc2y>X0|~Q>jax!K#v(|}`fzaMNKxyxf2WnX zh#@>I69^4B@z~_U@s7zY5b*asD-2<1u71-9#rAxeSBi#9qb)%o(;J=LD87r?_eHCM zG%uGF%ulNGqmMqxcXq!_7pIHyI?m!-@V`8Rpo<7r2^DRoebSPR6hkS5n9>Rr?U87y)X_U*&Pylt~zPlf8az|_vG}zFp zxHc2glg7jtFFM-ae$ zb>Q0YDKAo8s2;7XGCo%dpadki!sE%}kD`d6-H2+>uU8v1tEXjWU=Hz_(6E?_W(E_3 zIHi6}yAJa-*0h^zSFRP}a3^2Z|EPPr|MWlpj}i(W?>_wHFWPMVW`{;x-F^7c7rVdr z_x|^-(!EtZnMI|!G2URN)i9S1r%j#A6y!jEl4dhw5QW&%r%LI1G=()V58e7gKQ_eSGg6Sn7z$7y1V4k!!8eF?F6xyH~x zp@XK5MyEodnEr%cl@6T7eepp6xT;Qj6rzpq{Wjj(^nIR3o7z&wCq>D3m-_mDc>Ylv z(@nv%X&7!f6fgnjr=sz2kypzm?NR@6nv#N4;@; z48#YNgSdNQiK?Yps}pWo{hD}}w6UWtX}kC2sRIKDptiw`FbY47gTn*%CkTl7pApryO5qbQ;}DhZaMbQ1OKY8PVZj zuyx0wtxs-0?Ciyk6f1?Yx_z;D7&`9GX7ZO_Dmp&;Hbw;QV+ZFVZhbE zbTFptOn~V$&1CC1puF!r1K|^4&rGq`5eza248`j5uHOjAyRLPQG{!i<>T|E`s`IP& zly{E_sveB2-i>j!t!`y31#9EhjrN{(eeb*9PqjX{6NjZu=HW1H-#1twPJP~24`ScU zJ?~%?M7#;Atz1woxPu7{$$$kzg2Z;5W92FrzVK2HIM%cOz7!DZKVBfAlavW9zfVew z(r@(!PVFs|cq2SQ8tf?7OwLr?@VoWjbLIURU(dk}KITvyFnEp^`ZU>~kLABJeN^jA zaB!#ZR^Yf`1+CE@BHSkC&1g3 zoj`T2;lBMxI^*!p?mOQ;yZdv$_PtWd+?b?-LQyP+VD5uC%Z&rLX~p^hM{qxV>yxm3 zkT5@1b_HX}ogoVaO>k)u3FidRoxOU5gSZIzIy!h!UzP6m6@vt)pWkb9dS>hdQYHZT zyh3H!Qok{aLgU+Ol}}Q@&p*FBWAq9Kyj8&N7vmmXt_2?L?9;{3XJ$JwdAz?Cs$0wO+2kK8~m_EwWMaa79ZZI!e(GS|a3oW=_#MSh( zdvFJjln#7~Hq;5%lmTO|&xfP=5tz}_!F?;Hi`MI%F}15lpVa353=yQE1~meM)J2sWYu5xG z_C6tFIdsLiB>d_GBzRBF>ZeLhJ24{-0AjaJQFBxNr%v@x8+#p_9M}Yrd8W$DzJt^$ z9gNNJ2oiys$>!Y|xMFa!(JgCVYl-@cgx6>a{oWWGJO~t=+cK^12%muReM3G189b_c zU|2pDnvZhKCAcDBJa=%y>la=gpG7jI#C(}u&15MOjRnn);0X%>44xw`kHg2)1PX>@ z5;7OfhJ-0NT>LTfS)JM?+a?El<|8v^ZC~M=3!gNoV3P9Lc$icgtik<)xfQ|QL%gz4 zO1EMZjJv)bD2~di?b><2CK@YqG!D$BPQ>fG%%QXsz7Lbz{Z?d+^WEZ-{?7mI@9fT> zJ2kU69~xnCt@JaYY4`8`JO9g_ET~tneKsj$WKyL`@=3wt#+mC3x$*x)x0|ZfU)9g;@LQj1#ktfH_?xJ%Rox znzzDux+BkCeeFV_GIw^bzWjQ)qqW*jl^?8erDbZD$%?VHe?D_lxWtX}=+D^J&apJ| z`^_W!qMfq`j_$rFsPs@i(BoynxSj^NBEb^`wF^#v{7WX@=fSuf*GoVVB*tXpn~jFi z0a!3EnnSnf3axM2yLxS;mm3Z)&tH(jyWrc*Rud9D(aiX0w|WP!(dN*i`m1vZq{MCa z(TDLaxqgOMTOEn4af*s(Z-s zK4!BAjzAXK+?QdD`>EVEH{1V3WhSK6rA}}zWUe;A;LqUs+{$h6ZLs*<1_&+|q3@O7 z!v%BjR$FckRnM`QH*{xWl#!tf4Nh>DSdW$!ZMM=Sgdl+%k+03aYsOz@PXpP;V#Ebz zV+S_j4dCY^@kyQ?&(wv#rk8}>5-f-Ewea7$#^)El2m*D?%oXKX7Ab7PUM2`rvG}I6F^LdIz$MHGK#({j;-CFb|FlzOPVIi}2j5Ge z6M~$=X-N_F-~6k8DTePn!OUUlUkDnusrvlExA6eGu^#7oa1mB;0yn}S zn1{yiL91|wiuk7l{QMfv=lN|+D3T=7HVAqtc?fG0 zAR%=7_LYgaKiSyY?@16}&CH$5uLZ3mwn(!QM(C9|9@Hm>0Vcnx~pZ-QJ z^zMcm@0lR(w$L&4HF-X-{bz@A4b@Inq}0^e+V;LSR$ZB|otp`l${9Btuk8wbSx$L> zTN&CYQ}BD=|L*R!b7#Y2H_V!AXLy5O<0_j9<0vsrvl>CtHK6X(#3psB%4(2*%YbZu z24Dl$b82oi&HDhMjd7UjFa)?ZK&J!!Uhhv|T0$jM6N3Hsq*+6mt$uJAEXQzJ2{QAG zp!XZBgT#<$|D6PP{;piRIvS+I1Lnl#5bN5Q04y#u#`v-7A7`v~)dvsS-!4MLrM-pE zJ;L7b(|aR8_<|BZr<;{+C9zB2KC?3kQ%m8`o2l#;uy-&X8{(oxXp8VVlHZB&vfb%v z%x!E0D_WuQCki^2u1sT?pgDP>&Bx(JXn|O@MrnS#H_Xs)#69U`Vh$NqondFIN<9n) z^;lgynJ~%+6%NK16>#|JPAPStgc~V%_%IOi{g_7k57Xk*)lkp)S+SEA=1R_X5#u+D z&HC-%{>{-C332q{k|*ryt?)>CR&%!nR{Vo z{*3jlCMKs&o1txUk&YTIAe%YEpneO@ke%RBGr6hMDp%@vf~UAJ0wBS#YFvlTg7Z#` zH8=UDsz`PS7Q}=Z1Xp_Wgsm7eiz5UUM7(TLCayg}uG~idd|BG)QSGM4L=WKjvab4wchKGl{mSeo*kHIm6Y#F#wfbQD zneYCZ|+`>&qi8oj5srK4Y@ESN$JInL91&n_okt4=m4RkjC<YHQ#@ zx|Okgat^=!e+!MK;dI*md*gst~{8Zd))sM->UCjg zxsEtfCyuB0FT|8)!Ur)kSdQfM?RGP9v$EH~9)7@~es!6R7p&T&4ah7iOF-sG1Zjr% z4x&U^C-!nnQppVj^FtZfQM-Phrmm#9@i$*rS)K?1g z7M21h?&+8DH7ToeEAKn{@Ei`6b$JgST*|_YPvt#xDbK<(R&fKV{Vl#inTfM$z|1g!1B~z6wIKxnv>k>7{_}e!{`*P;f(*zp2vrq%hW(Bh zQlC|WZS%Ci&TbC!bkGr2h|71rvRFt5g7+&pz_TxAu^s1O>NO@aQ+Ic4`Q^J>f(mgO z$QtR>AR6$*X!ua2J|le02|pm+5RFmz5tvv8#GnZ`Xy_6Q3HWBmruJ5fIwPcr7}5uN7z_I`+kF(x*hsQC5BJo1J1;IUS9FpDpUP@6w=l_6b2nU zjZE4?#8*9|MkH`-Kz3?!T~3=q-29VEgHj*g8vN5Z5G>6S(WvcVOIHU=nPR4;F}XN{ zkCwjqVX;*D|Js{xjR3e6Ze%Su*oxe#Q|0nXFgU5@0nI2THPhZbaIaV+8>8DUlSydo znKB5Q`HratP&z(qUnbzARw0>nj~@w1DKM-4LOp^1unA~gYhqm1TiS3!e~d%j1)#kebLV%xM2b=wEYBylVm6Ip*l=Frfo#tA*&Da{P#7YwQ& zQj33d?IX;UcJxIHJjZ7bfr>)(z2E>>gnSp1W`Ts{FzYU!1s+;(eI2OT8^A% zm3rg?UaZ@>RIEbok9NFwyRB2l${u^_oLw6DBx(6|1Zlw&rbrXjfp@4_=?p&`Ly#EMYump7))~Ja8oNX9CEiv^r?pjD3C> z|9%X0s#P;Y4R?YR!F@li2VVJk-u?R53!Y>e9U8_J6gi#J z_^`iEWV=8|^=Zd=z{||^wPzEzL3CatjR6eCZzi8U)jK}J%IM3(1i;+{4dxQKYzG2= z8DHoyer;G_fm2$RMG$_i5t;>o9!qN`gs_ZyXEF|60l4ZHLuX`+fr<3)-OOv9?4DJ! z>uKS$P3L*J{F?wc_yx#%USpB?8c%zB(XCDIE_Le@-rV>Tt~Md<9=wlo5)R<1>UzFy z_gQ!WiWOSd;5m4$yuzE!_mi({4>w}oz%V@1i^J=cuY+?DR$IF@KhHgMZ^oe&Siat0 z|F!S$&Sp~o@@H*=??mzg7hb#Y-Wp6AMWpuS%d6tmK^1=W+c)=L{98}A`{A#~w&z=U z!0V__&uLKF+n!@|T9o%ZH*ix=P?}OrP3-6o~4_5DGzz zXl=(Zh=@SnM@xyRM%Ywd{Me=~y0`U3y9=oidxHV?jTn@PTw<1<1;!FqqL=g2(bB5( zS1w)Hoh?-1`NKP%fRhiR)gCh@)67XXM~bsy-XeB*;?HquV**=iQ^LEuQpJEXf(`r_ zQ_k|r^v;cDJ-&;B2@$X+r|S>1wOrl#oF>RK4Uy*KJ%N{x(u#aX_y>#kaS`Y=VLlBx z*P-#i(GF%f|H>S~aHyGe-!SXl_UYvi=4agVgB?vc9ZpjlVLCH-d->Y`CykE{y%WL_ zwg|4K(h+=^mUim7csv5ms-JvZ!Yc%aTBVzPtifl80xip`Dy@_j<}yK;lp=^=$_$22 zj8c1ke?^nr0*y^LwbjLaS_chJ)(fzR-x}QajNpD;whWU}!@J(APVWmYoeZy)BLw;w zhWY&3wSk|;{GhEy`|VP|@CpCfzZibiuRNhf!v)9v#>r}&MJAf^Q$E?+zj4QE+~eKd z#y50FZTsfj#EFD&lH!Bn#({U=X-x2CKPi6L=vy0$=a-v7zdiSke%slCo=v36!kv%J zbyLwQ&j+Nuks7l4F>lHHR|oVh+%~BC?@2? zlJb}zL4DpqnCjcw9$``WZ3gnpRq-KmNVQ^y$;_;X4UCx0Y_1<>QVSS|BDA|LMZZy8 z&TA(lkc8E1XV0|ak)t{dE2}Oid@A*fW4Nh*Omc9FYgt()o3(@Ci)QkNQR>44(5=j& zLz!w($2c|*ww*)3-oDHcT28duvx8|4o%CDUV*BfucMmd)FP9KcbpQ1d&wZXx#8Kq^ zpHsZqKY|j5K+sJ#&As~eJAfh~MR1DC;`1VK#wQrew!IK;Cp)s;K@SdNaFPu3S-t4! zt+(Dz8@X9v=tl{!%;U_;ZEOh&<~K5@y_`-nQ4buzYbfcjF$wpNGa0R_VgQb450#nK zwTS+HtF5DzV~;(WGDhe?AhdoRPSetsEVCly3CPi=g42EdBK(dtzUYKz@le)`CKF?1 z^YyqzsuK;+#+d17Mfvr;2`f#CmUyBd*X;b6aG1I1k-txf!9?s=KYFvFo1mg$Av+Fj z6NYRTcQgB)r2VWhx!0t7x9<`r@)_FGC!}CVzaF^2sU3OH;D7Gz@e&#br~4cH=-+q{ z!0Xu(DtJV>jn1Dn_Fz4bD`DZazGMx^>R^>~aDbk}|HjMORwv%z{lNO0#k9eO?zvH( zgv*oR?fc*Ul@3YSxBD>P)$M$M2gB8YSK9nMt40yaV)UuHikIC?`*3ZQ&X2v{0Nd{C zz}B%PEtiy5=T^pQ;{fTNSt&%adCgKwSg3EAJqB&NXfBOQ1F+XdKMux>kfrWWu>Q-Z zHQOy3dHKI^w5euCr#eHN*%gCh!0p=lW5(HpmcdlsGw-Z{q@r6I_H1bd2*VIb z=|bBXiO~Q&YkP)_qUZC;9N+g~_iBRbjrNoY9F6veA@pA#hE-w`OW1R;MfFcmAYnoS ziohkqlPld}p7)w<_Z`R?-3DBd&=2chycnVq68Q+OeSRx2Iv_Sb)s0*Ccc0(5yZh|Q z_0j;J3pdTW5&naRgrn%|BgOdK%C~YSE$zlIHL{|qX#>+7OBf~2Ml;3C4{~zb?t}5r z%aP1kI5i=d1Vq2zEvX)Dfe-9vxvTDH%JD_XmU_IEKX|i>=SZjyfL)k0^4cDjya>(2!JjC%{AuOhsBXQ+RwQ=y#9)X7@vM zY22gIX_H1_+y!TzWLB2!k07%Vnvle>CRMrJ1G>7Fi-eZST39?p<6c&UEC*865Ml%a z4Q8bcS_?8_wqz}ZcLFO4uAT&RgNn}X^m(_5=0TIzou1zdSI_E~{8)!G>8%n=m!obt zoSiH2$40;I}?-SZc|g&)1$u7TH^*l(6Z@qVEqx7*7p2mXOq-+1*s0PzWF zROJ|4r&LCeY=2wB%DMdZ=eIIC>(jL{y5GvEt1n-c-;ks%)m6EzP4_lfrma0;8jZ~R zTN_)w7+(E#qk1BgOo%l&38n^gmai*AV2K%0mO%Kk!fNZU_Wvv_+C*qB-G zWiOdnAVkd+lIyqPpKGO#fLpo(VlAm(%$ z@6BRf%&cFeseJhHXS>S@qED|nm^1;Cu(@^T!S18auI?UXI^0cA-AxEREzkJl7A_uk z2wuMv36-pqgb$`=!EaPGou)3^KiTf~GBIQR0SoJdgJ zY>7STx#E>#95G)^WTy>nTaOyWF+pYu2`^{bc&v_d=Q@<4!7&kF^b-kKAtiFA^D_}1 z%y4-0IVWz@3XSYSW8~z{0y_Zl# zC&q_{PTLxqtOR!htyv(kF(tf)S$mgB`KV3L*GoAhVWJQlec;EVxyX1*+Zx(w;Lwds z8Hbt7(IX*1c%fbU?$E4-4WBN25Yn6E3eXkP6+9!THB$v9pj)?WKn~YA&u>Qq&zi7g zKYf^5d^egQ2AF+jXaeKQiM%lYmp}d4+Vp#a;~U@jMs&AMe8#`7u@0hdLD<88-COU> zs}R9N!-5=rIas?>Uys2p zF2`)|qR9>DeTR6L_rUCOkAPB-`vmazY9V zUpseZ_vX2TQvuk1ejr0D%yj#lqf;?J&C@4=SCi|6UR(XI|1+kN`k z^_|S0pWnPw2F^>R0=_a@940waj&lK@H#0$*Gq(~}lf*7YAvkQ|5u6%Y>Hy+5&fzz$ zhPFi;;jg-1nVb3C8l_^jPPB5E>06(i{W!t8eV49;nKgdHsxt%2Okfef{#H4eWtyB3mYS?-&_SycLQ@JzG5PUbiI;mNYs4h~#it+bu73F8idn48;p#l_YS|hzhC#Pa z01l(8cC|Vc`;KYXJxsqbINS6qA*aI|b9)_7HdObj znTtT`o=g3{Z@=B!RC0BD&KKfSV4y)6Q>PgetY%V!Gwt>6SAAM4vwEkF>e|{Fm{y0T zPt;;%+#iJ3o+WV676<$Me!*_%UyfkPGVtar=XZym$L#fYn4mU^Wei5!qg_$)smp>w zAJ^{v%$Fx=O-BjX0A(Uc~)Uey#iU_f}5c>o?m< zl6mqtvv7aW>V99oA{}&xCZu6KsNC)H*gMtcwb$O9W6I%!SvEu#EOrDi>-c>LfYUMi z5zL?Pzg9Y!Q<-%%WG6B^y@xqwC6HOjY(81Yz^!~`obJ98{I*4L4oeZuej2lx*SFFqhvgS7s8M$p2Y@80Lz@(l0Lrd(TJwF4hV5?-^|QdyU} z;cGP3hOjE<-sWCeWrUMdS2z+-{dSpY_cd8u{pf?;{qTI0=2jo2oIdczr8nMF=>l*u z=QJMDzq*z*+yu)SWYUr5^1||E4Q?IqX^_?@Bm^ko)ql`JYopFHi>MW~Fy+B;CiQ^Fkd!d%9mkqU%aO7ZWuh@ zM@x%&z~tJVGoPvXh|ZvH11R+iQ}0Qd#;?BncE@*hl>4pEcW<6QUAD}krll950an+9 zDg^fzG4|u6lqle*OxfT~7LAjfkLhGbRPF2D_54dWGV5eUy>B)RCpG{JEbOJAiAgHQ zmvywP0Ee2bZR)P(`q_!nnG$n;VFH6cjKAtZj4QOm3ZFDPv<9?bm5NiE!})HeAu~wg zJAsg4yDS%<%}U>BFU{O$MND_EQ)@U(n+SW}G52X|oZ*Mly5O5&B3zh8G_r@zSwt9c z7~@#Pa3mK&Awu1|4(E`l&*by)-tA)6N-1oj%%r2mU?MAT%#yV_wlrtj0-uU#b*A3o z79wbEOgJYpk0u_?to?78Ij4PNjm~HzG$*?#CQ)5CIk4BpX{)~4Pb01$%-C50ga5|Q z3ZseFJ$-b^LOPjDgI9gbSprUD1V2`xVG)k{VnGCL3NKkgs};_K#NEdFX4=_g1!52J^U3tqwVcGVdUcT!c ztEG%C45|AEYx|`ZEe^bX@%8sGy9T}N!qhsnF{pdK1AZ!ZqszS)|J+-^FNS}yjQ8s6 zs?+!Ww)!E$@2&m5_H0S-(Tw-r+XN;ky~|_-llwkrncK@<`s6+zmQ^Z&dK{WV*b$cY zm|^Ns4%}Ox-7`ph4V%#NTRDRZHt&1KWq{4JW{HPIabGCV?b7S{ZJw1Q{^)^HAh#Np zkc%W{h8K2#C}|K99^UIa6HvU;J`USpzmrheAEV!kDL(l4)7|Zysm~K&w-Y9fP&4cE zBEqjtEY__AvCsu!4h}*PtAl_Mvhau5pxl@;n+R81a4cZZoFZA=}HSu;!XpEV22 z7|%*ucz)J1dHXrVog__wStMY_(g4Ki(azA$&;ov_@9;K$(ju=Pv^smI-0=G5APW7l zFB5(6kxr)92t?2(f265bed%#SH;~HwWe%!?#!XoJoBUU`_Y%0%pc?Qr(3tmL!lpWJ zXZ{mX_o5$v&l6fEE~jY^|3;r^SGzP>lLXTc&A;fe)UtNUv)LkEZ z;(<-b^mz5HXAMY?uK9-QH$IoGsLN1?r($$v79>h{$u zvx4q$7Kh9dga-($*D?vKc{-|MDl6a(phk3JD(&}T_GOm2w_O@m&ZUzs0yz2zp$*uc zfS8$RdtN8KqYZ(KMw5fnrS4im3v)q|=9DGbbr@mo6(3?j6w_MI>}?dyF1w^bbJn12 ziR0g>)V8RwG@}N6uP>{P)y~#`{c+!K{am)c86{GwU)m(BEVDnWt>+1h@BQjK#aRi_ zEK6iWeLPi`DJ8EI0dON>aEFNzu7x2Wx&sjq;l*!sBQuS#`sDJp-5>l(OS)-ncQf&B zwt{EIlnC!$pHkL}7#B)`=>!V$)0hCNwEx$(A*PBx+^rryrCB@()n;@UH|8A8##cNO z7>`yj?UYcJ^%SvjF5By9#v9Ee#uEqiw0bZcVMD<1#mEEyycv7K7g{;J{K?0yT3#7b zPIy2M`%8G$uDWP2{XfD?Oq0tY6DE!Q!A~3C7r`12{|(J1P$urGkPX4BaY+Iw!B;vN zTB|=A>Hu;;jlcaglH^*##LSO56B^Yyy^0yUYf(ceg*~Hdme3t<002M$NklpK4)dd1CI;(1^@NyH+OdmYcRpw8P`E>oNA(h$t*D%bppbuuUz`tr!CT~(ChNS zZ9GhHpk?^np6R#ygxSW&cy9@*H9pfPV=!&uIf~2@X0%R0!1~UDAOHy8q`}AlKEG|d zA72(awF^X!vBS9s4#Yzzq~K{HyWgZ}C7n4a4G-BN4CuhccP_q%5djOZB@`9_8_)#H zCUuol=0ySJyZbt$F8-?R-F1IS;vnBEw+7blDc7i~V|Hc-7$iWpXYOy`xAG&>la^1ScU9jN=~-D#zc+i5kE7E`Gu5kq_wPQ<;7{;C%y$k z9nXKoeT>Wif)7stBRqjZ9KF7)pkR!TIwDBU*!t|Hpnw zaZGDfbun5)IwvHHo0%;;ndO`8=`3tY6 zNwuXX!D$n?;XR(2Oh_>ikF+wXEbWE%CD9+#cqUggQU_>kgs$+2(I^_<$(#`ogxV^* z8?6-Y!VhQuBs)xKqZ4JAdia9Fog{wxg1)UmfOGA$Y|t8Sj6*MX@UCg0(=Js!f(E}!_vA7O^) zeRtsltt@`n?k`JZTa+V&IsMV0I5e6bEKn}AJqsh@+Xb$vGu+@0Cr6#lZE`%}cdxY6 zR??GCh9X+X3L+E}U&^F6Kv;bVV5%r)2Z)9?rrpZ;bl;^z8zPh&0RpK0X22@9 z;-?z88ukb=&O6N!<5Q|*1k6_FvX7_wJ%s5j?P?9MC)#?kZ7@+m&D4|Kp*G|};w)vx z%`$iIsfSs>$FT|F)eLeLyI&2_38c7t>is! zcC&Z%WN;%sMB>OP=A-E2VZ30{i9i|+i{Lg(BG`M)jA09+M_>__C(4p(ujG@`i_pND zfL8{E=!?c7?F?Fj_cbQiuPPGID?4ji0)+IB^6()$giXvt(#_U~4`q@koDUXGAS`3T zR;tf7rHc1nT1yOnvKX|(;rR5q3*+m1l(2O4yoCULyiV&$6E-<$6Fm_!{4tLk(;f`0 zCX7i}(}cpmx2%#hi3lKEgQupvlU}dNAB@#H$1zC#DVzwOKQx zfs+ONl+uGA4kwRV{e9F#zCXG<-URRDpcLzQzaFe}3193C@ZzB%7QpKu>8uQ(eY)KL zv%fcH_I!ki8D@Hn{0Ok=y~?K^?dT+-zTInL%UlWTb%}M%#CImbt-4Zg5Wt#BqFqF_(IXx4-*~_(*nNp zD;IZ{UOks-c(+s{XHsF8VCS1y8iV~~mY(Z#GvMQhjwxV;P@tsXKRD&f;Q*F9TMqGa z5g362)LY- zv+x_St4H9a981R&bRjOELP8cC;Q;el)g!P7I|=BbjM*XsXO7Sk6v~P0q~?%6VGQ@m zD(ap9NsB48tE;6|VLl=U6oEl#9dM43B{<|8>&G$~8f#@}r^pF25?WDywAy~ggcrY6 zsEzrodQ~PIatDlg)HA=2C+wx?!R#XUnSo3xdo7vc$6F+@l1ba)oEMSK6g15di@xazJ6*jOa&9O zR-0u<$ai@)x4_*d+o&hupU@A-XlccdE$w?~x;_%@XkOdf1nj#DExWfl+rfjM@Dcjk zcw2Gs!N`#Wv=KHj( zw%U%bJ|YcjB-{<(*2Xgc@G)6-#mwB3}tD4Qcqr4tfJn?z!h{;6*1nN@oyyhZe%Wq3xw|CrDyQ zu{>tBIq|nq7YxS{Sk=KEBAOLx1ZxnN+P?X;)Mel>>q53_ zh&70VFPTw|rT*Ele5?In%mstVVQ#h_XM6A5N;}g&zgUA>du#lRA(L=~UIJm5G}^IW zaTuzxBEamNAf%Xn=#!6cG}<&*N0F86BAgeym4;;t(evu0(Z2G=8>Kxy7ZaKgm&QUs znPO>q#@*y0oMRR(q7Rdykc^5GV)|h` zf`{h+pimX@aQ152rSL&{?yd5kF7)IMU*_!M zb|!%O;rGVV+b7!hhc}h2$dp;W&^2MhD*l7poVk++w(Jw?S%?Wbc$Gq}f!3Y@_Bj&2 zhn9~y?rBnljd{u}0@3<0t3a6#;6vaTN!yU8eY2(d4EQ*EySMtk1lXim?jDm2@meL4 zS|p`<_x)e}l~yMoR=VNK#Ao1^< z$S>p&(t~L>uNL`xA|`k_Gm=oFMw{)d)G1>Yx^VvN46G%2%+9Am6Cz}Zd>WR-cN0+C zZ_Gu&G==v)=8jNk3Qvk47o|Uw#*9h*Hwi^>G>21}j*sdKEy-RdhT$EN`w98R7aYbHy;Zb+(*(oMm~rt+R}^XJ3u6(o zz&glWN-#eRPd2XKY1abbCUA6O^@0~2Q3TLzjf`LvYbJhf<2&u(L$H9uAG~=7p8WZ~ zJ==I3j)ouWm*?)gC?o3hTRjBS@PEYZJ`KxuD5k#W4ewmWamx7>&8a&Pkzk7F(0`h_ zq?Q6i4^_uxuLxQ2XHuPgoEP7I^SzBEm@R;2OHb!$K;4TD2jE4_N%LNI&7luwmI%gs zU#gDNu^bx{+It0Ie)H1#wi29ehWI?~pa8`f(hMf=60PBE$E3s0-I$R>m8yO;NBSX2>8eXo zztd?Q&~~l^4la}fh~{%ILBz~EnE*Okx$Bod?eoCyeCH7!N;n^EHR?#()az%C?_SAY zcJfGpjPY;lTDvm|qsN_#cOn#8v3!=6_ENYz79s3QaGXv{JCHfCzrWMLd%Q6}lt9{F znZw~+Kqk{tNWsIs@PlJ%bz-yZ<|oiXPLcaf62W~ejTI+8#6aPW0CjAZYzs^zj(!>j z!FQ`Yg^ybKs*BNsNhYl=ZO=*(f&VZwQmDj{w&FbP_r5f@r&f;o)4uH=v@SThQ(XiI zbCtj&$L;>VnZJtg7eZhq+W_++oy`oF!|m+3 z{9TRH-TX#O_gk6$R=4&?140f)kS0vTRiQbI632|NC798SiH9X&_3vKc5SZOc?9f$p z^0jR-Q|qAHCintOLOFf13~?ls3UNrdzP%N3^T_)3jbfnIE!$;}6O~xX--SN9D8w z7FNUI=$lZg@U&qZnDqqztR6-~V+ACv_C+hX`J?YN_9h2n4h_+=CMdUYIozaJKCCz2 zo1|O;WH!^l)(HbbZ5>J2i!_x1ey_~7+j`W#p3jUttiS%TOsk`N@?hTeWQ1U!BLsSH z>Z~K$r3uVuZHyzna-Oe0nimahAf4z|G(NbaF@R6l0SyMu%#a+r$1}}pc6a^r&nN35XE=WoqPMCiJ@3+( zL`LT@57~TY6FHtxJ(0i=`as*VR4zaI+Pf$-X+e6-s+eDVmA)Ap!gjJ6bY$0zUHx%V z^%ELW@Y3vP9C3I5xA(8v)F**Hj2qr)eKI&Og&Mw@Fr;^}B4*`_M#eddh7hq-EO(2L z2iy4mViaa3(~NVPna_+yyfU7GnV*TKB7W>jr!lWh)`#b0<|udE0C%d>zP>A+b9gm# zoEdwywq*A_mqvOk2d{|)Y_|Q>z1^*FZGmC-Cx(3ZrTM;`zY@(cnVCT}`(-Vd9G5nQ zPWio*M?)hJoAA(bR5>tNpjh<0>Rl6Myj6WxEXg>+Rhl0DwwuL%3I4U05bo@1u#b?> zj_(b9x=g@?>}#*S-f7dHO&fS=5?}V*IH0X1T$d8!y-jd=<^mgf_esEQ7y59|*tyT= zMuVayu6LL4oAVz{veB1=M-b80CV1wGMod;G`4F3+Oh~yn)2`B7O#s^IU9JtdrD0J> z#)nn8AvVBl7XbV@6+?rBkLOh8xzWD{A#BZk?~U{wfc6AT-<2TTQ!KobL z(3QPW=(O zRB~ETzV$Q&E33x3N0nPXH)=WoSE9QFiAlm{W*W5qZTsQip4RENDCom!V{&?900N4x zqW!0{xwtTt2$)Gdt8kSi#AihI%YQkWns2wlOS`*S-lgj$iAxF%t=%bd-W}}VIcu|TPnjfDLS`#+2!ZG5Ho*T1SaEb0_ z;-$ItM^J6Q(Z265nu?o{sgXVYS%Qp-=3V?*7y53YAU=+UqsVCwU)iQJrd+U^lzMBd zEHJ~zlJgBAt_7N6a9p4gdn;BeY@o z8gccvXf?ZAhG{El~O3W0R0 zfw+JB`tIF}ukYR}K|V%{T8F{m#gR`07U2hPObs6rlVPG zWise_r4Hq#pDdnDqCy`U)X_lJqDTG-LL|H~k&TbA2)}75_Dl9S!Ivf)%zTD4S0*kq zN5A!t-~o?GgM)U3CGbl`KlPp9o5MxJuY`rR-dz8@qwA|f8M&=6-7SJ55IOGUN57Uv zrCr%Vl{3z8Dm1~7WH)2-d)1{|pMLUbLa&Sj0x;9E_`*K<^m40}mj|z>n+QHBu=SVk z|ExZ>UFz!9-6tP^kXC$cXhzt`_#&gH)A9CQVATV?1Zf z!tI1Iz*XZo8fus!(6}x*+atuvFteI;TO_#Fp%kB_8PcY#D&J1S5_l;*!yZyjf95Rb zJU9rvC3wPb?ZKP-CJJ=#p37LSa`6BfY^(??wD0$JZ(Bv2K2Eu1ZRw+TTzE&_>jx5A z`wZRZcxNThvfTGymG@43-0w*po+-G$aX&$*1%nmCBmJ4g2u5_ODKbGF6NgnD-CX9; z0N;Qz4G0N;q$FksxNFR^Z2a*_g+NZWjpWXag;e@S&0Y&uraU&t}<@*!3sp%s1z`vMOsH&eYRs z`I z@-ly709^Duf+Lls#tPVtyatXI47iGEn=h*^CxZxjk@?g~(n#bQ3^)@~%gV_`>Lopq zqIM@WlVX%7jqQz~1(YK8t1%%=MEd57dDLhDf^Optn{%Ik5xfpme~jx&Hpc8jyIMHl zfcrMYfBf^0vojvqoH>1ZbLG-kF~lqV?vUHYaXaY?p6lP8)Le_tp%$Z&q@ZMfm?d0X ziI|gPm1xW@kD4?=U^BtWjZ+`tpfC(+hJAXUjdO1~@i8n;0uq*7W*KZZ_v-tt0%S>E zHm=*;&D(8@nXzL8V_s;MFq@I;>fq34^INBf=zBcR7v{pAwg@Kfua|x={mH%vH%a2d zBkaS(FK9=EoF)`?*7lOZJ4q^B;GrD}D@N3#%ExdjZ|)((m{*$U=Xp(^w~+3uJ`xv= z0<&7Qr&Pr7-@?tT0oXfUf9v%Rb=(E`5LRdXg}O5sOv9j-GCGGrSP^0m)0kZyfVW3k6L3e+?cVCws zeqeRC>W=}j{*b_2elL>UGNw6uEu$Xjz=bM$_0a3a~aW`iI*r0fXU7eO^?&7Kk_lL}Y{=={Urk7@*3tXFy;~jYRb* zDTnlf8NfQ~)UKolxWtP_{lpxa)#_b{fmEj)20!=-;$T*}B}}B)G?D8`CM4;_4wnZl z+Yd(ZB4hQX@`drPIZBI7M~WL#t@y2PefvA9&WAQ1fBf@d)YPwYpM5scWZjy1AsLR5 zIfiK=F+L2aQ4iyuMYmp?UyKOyk?`S=d$z1#==wjJ!Z0VEK#Y9JT?s zqQV%2Ib4rX*>3bONy~2rc=RKH6wSC+S}|YD4U;6Zx-gTbV{j9Vl8Q)wzQfIxZq)&Q z&AU2QTKh%aOFPE4rseUjy1>V~ywv7kZ>9|NFaf01$L5BKnn(HCr3rdm4C5|LI+dL1 zVnTGPZ=5@gi^@G3Pw%?M=srk>@iZ`;&B_-9=5OurIv~HH6G$7Vl>)*qf0)O@R6qyt zrfA<)C*z>|CfPNsQuP^x0yALm)fWIJ>aXq2L{#@T8JOy=SZo?|zkWjiD?uga-lz?& zj8q=?s(dC{`5Fz-i?}>nPpDi09)Yl%3`48j^F&sJe)@3YZ4Df4BF+{dx+}Gd;m~pO z7zNveT-}(%WQIrz5*n=wUi=!8n(Fei3Gjm3?M%V8x^s z`xU7poQv>`NPn%|+`^c`Fp8P08t)l6GQNi)Nf@$@X7ek_;O=sK@kq-TbtOs4)|^DL z82`TTml1bx4;12q=BLnivUGE(X=t;kK zm1W{~eYuk~dFN@g7x77rEd3D1i#Z}!lGVCU!YOoPyAyb#*<}%c`-=uN?W!Z#Dg*C* z_ouu|9cy{_7Mjr(`xg&9rnTVgFs$BX8i2#@?uAlvD8?@j{0Iy@Z&?XKb0AzNR*9fWb8)bRQB>mVR-0 zz79&cMS2NHFY8z3ypQIp+veeUq^atBnoU5P7+3%Hw@78`0R&}S-u=3rkkqAKKvfoy zwMo6QvhxHn4BE4{Ow`MM^q!SQzsE>kKPG;q$#9R&hLL+KhIFjhssOl&D{g_cDisV#URU}ih2lIqh(e`f;I5uU3D| z2_C{1j6ulD-aK9KmM7RkV4-D~qrTd~09F<%Hm@;R#N5CMlQM6@F~DoV(Ik|lPxiMa zxV8$;OmdV8=+@&LB}s`L`rO#WWG%K?`z1+nn8Qk=@Z5!N(1!ai_qD0-F7%>p_kCaK z+`KB|bA5Mcu-|~_{x{zf@}OSQqk7C03CnkjqCQaR2}eW4^-I`|4bS`FA7KQ8D!fG# zq2u7Vwh1<#!j&Cwyz|C~)wT?@8-s=oU;tPr*q_|=q6v1NpyYL(9!6p0)nTPpcJ>c- zi&_u`Oei@3w&;1fB)wo#|v%M}XC#-X^uNbyL-hknZ=QI{ofFBKiF8Ua*+2 zkX~Q)i?MUIJG`7&hW2G576e%k#i5r618`BrsR-U9G5EA6&nWiBm`=r{_P0VDj0g`U ziP=8j6cyWACcD6Vu9C@`qr2xb{#Nm9508We)Ne6CBr1kkjEbb9+>EO+If|TZOZEr% z!ln>BNigO?dZW6EyoT89WssGP4pHzHiE+AnyTc4(3S9b#k@ObFnfaq0U*};9?nkrT z7(2$cCj_%tu$h@>lYB3G9SLs`CdrPdPLg8BLSV*%Km~@*R+QkTeu#g!F^|Ewe$NWq zSTGtAY|}gQu5I&T|C>chhylWbYhYlp!R%tIgI|~c!hjqM>GyK;W5~;xZiW*PNbk>~ z48c#k=93B|z>);e&)UQU3bUxMNSn>;dIxeG$s1@Jk40NOw(nexp*bh>aVi~~lJb`_ z*du7@;=qmNtN@I-kc0Y#Nsi>z+{w#@cg~1mM(TYQaC&?XUeF@W%0H@Q&}`%_ zdsy`{#4AVB8>4$|(ooDRo9Iph({YWhT(+-E$Lg?7IyloaD<|R@W~0&GbBzt-WgUJ) zXwTSMW}p$_T2_6;aDZ?R0LDWS8dy0+t6N#Lw+?;<@)~#5bWOc05Q&$|_a^#fpR}{~ zQ=il~W0~R~r)^IgQ4b{YYFAko z#sEGHs2Byw=}{g$tG$bQL~S%~UNC`(-t}9*C)OzWE-`;!mr(ZcU^LM8l>d*5W%9W34+D=2FYA0TS8 zZ*Sgz_w9+?zh1W1H_pD=+?GtSay#>2+|CI@LUxUWnnVfiGwn00p5l~y?=Y*JRAvjkiu^I__JcOR`OkEv+OcbEIh zxu@L9pgad>3~c&bInRAx@P=@)EV9aa&vWI~1?QUF?!Bb{p1I&9fyLr^=k}F4TAQir zGH7gTF__@rJ_$MxNu%LDRH3>vwPu;X@5Yf$5BV;Vq>p)-ovOHP_uoz(pb;R67 zl8UR=33aTU???UZ#R$mC8;f#lfS{cJ)LZ+tu{2E981#r#xF@2gU%z(Z=;mYr zn)`P(abfo1;;!h{>ZG1oiLGo9U)}PaTUl1P+{sAG`29RDk6h<$LIa21F~K_QxAXeI zWOAN2K6R*fSzTDH+60?Q@a2Uon;-tmgto|#o^<3`V?I%ErHl}> zQU*);n-Km;R7p-G#sy|UtvLsG*;C=hc*2H2sBR?Y#b#(hAPKXFStuZy$aD*txwGjQ zGa`LJX3UcZwJ@H!Pm&a(U@oOQ4%>$Lk*KL;94(CSP2seQS?cq)7@2r21TJWGlK)lL zq-zd;M2An}ykIYz>$M~&5}4DU%?Z`prd|uumCL0-iJ`jomX=!hhPW)MDch3Mhb(B+ zX!Ff6B7|d=^5K~HJ8@$}EB#*6FoQkgJIP5F+Dlh%hTAd1=MI%EJfrqG7f4uRzNx?J z7$y?-q8$=E(tZT(CNr_K-AIyQFTaqt8axh`=Kz zTb;!ZE`~py>;7~?r`G%2*O1EqbY925Ie_^dLU`YRh5&ot{aD!CTMV#^MBx6{R}zDt zYg^u3-uvVAD6j6Zq4c>hs|C>BAwJ^nCP*LceD~Y60v+W$3+n% z@vtv?rY?*@Fy;^c@Skn|+3)_eXy`qgzxHNG@ z%%?F6M0xe<<>Jm30)3hh`EXuHwg%oegiWmhui3O4vLZ$+sCTWd0j1~cD_rA?dNJ80 zUlI$$wf5HI(T#a;lIi1Jsq#hb^Oim?=tzp|2Qg}Ccm`heA#7{q4Mw#mv|;cd1b-Z3 z8GBih85mEBoI&^&1EnpABgal=?Cz+v z8y5=?DWmLbua&dx#z<5hMKqx#0&>49@bp*_@yAY_++4VHv2;ND^8_Coe2`%k-dXhS z+-~8DiJC|I6)`&fz`*74noa%D&z?POqwOihq{AEe)9T=8JwhMgmBj&l&IarNw9+bi zSaALq5*7Mztqci_R=RfIZ+~!SXet<}1C9R6bh>IYYh9kJYa-NpA8o^DTlkEP*+%%x z4W^gIv9Gzma`npQ{6z<$w173wvBnWFn&1|cRP1ot>DqQvJhHt^CGu4DZR6TP z-C+d2TSP8vk&=e+M3U_k0+@Bp#g;}x^2r~?-U zgtB z2n|T667pHmvwatjLo{Vmqe30X%Z4doc$m&?K4zYQRQKk+nA290;@G!h3g(9A z(EK$^F_%7PzMAXs2f@uA!$7u^%A1rkuxhS(1V`d&zDR91gd{WY`ej zOQ%`SY97O(s)|pdZenV4Kt&ll*{9OJMzV4LNsNHqXn*$~#q2Q*@j}MIH{xhzSKE{Kl&R!=`UW7j zvbev#zXBI<0E_4}fUDE$oekC11xa1*shgM4XLC3J1z3MhH9-W6!Ma0DTm2v+Dadmw z!MulQH-6g!cm_#Ulj68dPCL7IU?0w#jxN};cBq8Zr$Mk*ZA^2dg6g#Sb9aR6na$U8 zvPw)&Fy=bp-2U@^tLp^()o-y_R8!uqo7qy%7m>|wb@t6SH}8Ds+ntc}yaaAHH=lfY zVRP=QYnuz#bIE_zX5K3?uKNWyW{16bKb7V7!_B1|_couNzq0wGkH6gf5LYAh zjPa2wn$Y+HHGu(^dbOx>>%7UAWsXe+9Aac2<7|wNddq>b5J}Qt64)?!un$%k9;tq| zF{SoV3o%a#_+(iiW%2SkvYpM71lDWW%UVck6@$a5#zEA|Of_UopTkVUG0&-taE%Hq zCe0u99Zu`JZ9|7rtq+u2Y^8z0v)W%ABny*ykkrZsdNt-{13R@3Es^*niCp5fmaQ`C zKc3`;A>ZsI7%T54R5b0IBaWd0%I@S5xm;=tu%;`zWzr1F@XM` zemVeSWiaaY-J-?I>LU5L56=GJ{Q5cYfcxE>enne8S4QQ1zt>Om#~iTC`7h|5os3#& zL00$7@5^_`+t+*7+od4BkO}CkOQp?Di)fmAr%WUX5_W|6?bLJd#z!U$B=)@H&9~q9 zkjmHGFDh4+*X8+-?PolH-7|QcU||l68i}F!y)c}f4&bT?P%7=20na2?s04g!PPg2>4_DL#iDkQq${Ee1WXcS9)5Rab3 z|5O-~QM>qySmynKkSilLKK-yuT)^nD;+tO0esw6L``*U7tE>Vhg7<>Aim_RolJ`lP zyh9KVaw-F1F?*i0kzl&#V$TAsg;`m-f<=D(v=Q-h&jIf!MBrww{L#* z$!D97&tKSlc`dhpj7!}4j%+qBa%Vn;T=iehry3laM-6PATg7VYVRLgkX7>4&yPF?< z^hIL%oz2jXp1os>Y8dEs`*}29j+(N8T>RIDtBhphUU|$A_NWTy& zu#G)pqMT#Y;{;Q63Lz!$oiK+-G3kfpf)ezJfs=d~ z$ajr_KKo2|O$*Jo`j1J-YhE`}6G=%qI+6qtw4>7YrDn2)yokUSJcFn;*@elFP|PPO z`Jk|iBzP+SqqbZzy5DcbH(#U(3m-}TaH{=L#^nYs#Ka=6EL)C)V%ariBoJ0}^3u3j0t!L{q17+qh8{Ig(0fM9Ej3Mm31%$#=5 zbCS})vhjk3#f0i?WmnEJ<~fIj7%h@F#x`@?^GWei9iq{DG}7puHi9cRQS1>Tb<3P# zZe!1>9T^OSH8?#6lVaPMy^GEBY!R#Onr_oD$BG3e#t@M|&d#MxTekEUQLrNl7tv=b zq4N>N)LAV3p2a*~Aa=_hQ)6Lof~WGM*(PM1$C6raC5;M`V1x4R?OWGpD-=mznxY9U ziOFFW0#F@=MalwKp((MJ;8Uz#edG}M;%1w?v;RD3^D{fwliJ7JCZ&x2HxKa1!i{dx zhzrbD+M65wqnu0IXnJK@%7X8Dt@N=nH^053oDhzc(Fq?B5XuuSYwLt{H2>z7M0x)F z`OVeRBRvWJ*zA}sDjNpJwA$JhOf6gYTcp0q$?)mV&$Vz1vMqCMv227Lv4J~YE2leS zwhj!@>uH^u4&qY*5g;I>l@+p^oau1eLMjkrQIPx(#0%niK1kZ9=!+iADzE@R6U)E{ zP)Q(=$RCvfBe8n!EKY^)3J}`YmiKUTOlO@Gc8$p<(L0_`J;oIG61-`3)6QW>rw8n7 z{WkF?+iD+)Pt4UAj~g%9Y+pg6M?=5^d&@kKBquL<^2$tzTvogpfN!(!oT^eEtkMjq zjW)@IC<}>572wo(8XJj1Ox2tM6P1|Q%sSa)@-nrWB-~`!KfF14=IrK4cB+rgUD*85 zxr+r2MxcV~LiD`)t-R%T&)EK=I$^Q=AGiWjvgxgbKb_=c^2D7 z86oEkXx#gY9w**w0}M%&Jh>J=($tIM)ky3I+SAzZ8-Mnt%1V(e-s?dIb>-N_NCaSm zxOQT`y=cyFI|O!|GC5GH*hx2XLT!tn!RTK9JPMXiD)XZDNm??EGSn{YGQ4xY+NppR z0*plHNaz#Jc3;+uj_wMPn(w0hQzDwpyumTl@L#v@QSrxRKglh-FgYfBYaYeGwV$^be9Z5Rp;wMF5xVyupTZKf}QNWWd#NvMM-AZLW zoYa4SM>HurNY?i{sPkdtBC%)xytTx(-EHg+(d9*K!biFk%sTWCqlN3>`TxgczR8?? zXP%f=`o7Yv-z)99=USLlv=LtO&W>%iKKPCvm8T+733r62c7AX^5l+5J1r$$b8;;mU z+sfEf`FGESb9Y;8UQ}!cs4<-O~4RO<6^Tp zoCQJZ`1Gk1-{xNaV&jX5Mk^P74$i- zej@e3!*jClXJ1^{eE#LtjKLvFGmQy&%lpSq9G_#UKKbPH-oqRY&RF%sc(ng_{?320 z`R(8S?ahDp-~Pjqoa*=llOnQcYM8Cp5alg~$qJ7dvhx@>+mpI%i&;Y_+~*#z%Q4Ai;XPcSFhlmy zBZo$Mb9%MS;``cr$%}X7Xg10uPXWazPM1?Zd!7)OBgYQMs9qgoIKqAXY@Wi5^G}o9 z&c6CeOkOurRf$bu}FLUYHdYOxbwwChdb*%#q zc?O0Ht*&(0qWh9YJ+~03r``;swB>8)q|V7Z1}=miSxtCIIWEMQvBzDyQf7|WiG_EB zljaKEs2_e|-j}|*UUrQy^SB-~zai2{8AI=bh%3^2W}pB$Osf@v*x>gJEIzniGw>#< zmIgWItU*I~Nx;PIKs(R9W1zO6j14NC#fqSl{+2#1UW?^@5?$&?fLT|PwGYb62c$pB za-qtf?ml-p#21W56<`|~+d{i)y zNP)a*mlAi0?-)@FM-oaaM=+W?>#si9#|C}~_g-E%Vn502Ud&Svr;&}ZGST;bbzMoK zxt_uO%Z%yUcL%4WD}=Z+3D#U43)!V9{ue*`@#a7H_y4`kR);72-M{;vZvNU|`*$~g z`)~j4&2RqZZw@^EqyO-)w?1z=$>;5{$(Vs9FT8X#&o>t@UYxnwoipM7gQuH+`Y*oN z{OSj%H-Gf`#mxt2v$cdcL+ruSHV_g4#`QD?fjK94(-^P1lmIN^Pl~=0MhqnPo@K8&y;G2jngLQ6ES@OpW3^ZWP$K*<}BGC zp>oaJ(zWEU3OBYITlLgk_`}6mo zjo8CvViaY*KVtk>zW@Er-~3yDy_M%;*)%V2e)N++%Io*h=I{Nz|7?O;%?0B=qxr3D zU{<-iG1nWd^v+HE);n)*&Yn4$x_5ofx7(FOArrvOoA*YNgz%8%+~;is4$0iF!S3t?@`gO+VELMK%b z8}JJTc0|qf4R@ZD(_DE@37ufr9wT_=E?>UdTH3~O)RRW1F|YQZ zRak(#!?dC$AsnRd`!DvSUX^6|w5%!@iWjHPE7ma;my za9ld}!cZ0!5u;mxGLi1BS}S89RSdIgmB6MZgrIwkY3ii*^sNbhDPo2>m;uJ7P4QFI zs+GY2+Dx$at3$0O&ovVlfwKi*9`bk-PrXBr)kkG8K+lb}qA`WGlJxxuM2?81LUweP z&B_jgsF7C3BqT5kF|CZfGKt_Oi~(9#x7CK4$wtGFzj}m>nJtSgP_SVC_Xc8oQSjoU z&6jQUxK(UI!*1n{8HNlzX2LA?NnDjf;Dfi{+PweXJDX2G`*`zT{ulpX^W&fX(dO)H zuM9lrw4D0mkcuUBOoU%wslK}+uC2Y>Hox-z+vRmO|Ez#!BH?N*P83Q^VlWPLAMUh&LpE|ZVH7ehcRPZFf7OJgO>piJ7M^giN z?%3_%CrOxt<4B<%R6~sMafejAh)FuRXd<_J&U?sYBE7RdFvQD@%Iml@c#`&IKgFy_ z$>#S)&JAj}pU+pMoti}i5zPxZ@oKL&T z_ioNCJhIV(rMczBrD=Tr`IkA8sQ&Sk@L_DCy{{eD*m!&H6C>O4&bx1YxVWX40y^$* zI9;965uG;}dZ^3uVHS0Sc(3y1y+sV6< zjxT^6$*mEqcWv_*W%O&guPQB)f<%aZq;RYs(*4yoATpG%r?D^J2l;7L(l{^Ba$0jtf%C&5kUS3I~I?7~QRX z_P`qv_87<8!i4FI$r7R9UHm*0HryJMdnA<*%l$fkTCDbY8<#4f5GAuCQi~PsFF{*=YQ<`%kla#iS z_q~Mb002M$Nkl!ozN0b&mc+jgYXr!rZW#NWQ5*YiE3oNrk z5-CIxM#G6=4)@Cb+x3zZhE==`8S1M@H7Jl+$i7$q9PvHvm{^yhqBD3=JWy zmq7qJX-Qq$bRg$=27BnY=TgBy0DvI|PrTQ>w-6;S+`{cK%f;31UE4Ee5_;X)XEv_# z68bwS{>X)*7pV$*SMP_a63{h@M@?Y5-oue6D_K(!j6s2-H2H z4>ANG`kRFgm^3QG*;liJ6p~;g?TLu$&DTzkdV08LyPF@X$5!LJ+93mvViFtxS1&K_ zaxfJ=&3=FgFiJtN+hUN?|zW~arTrI$wZf%KWgUT)M@c@#Cd(QN%)Po z-|RT~6ElBXsamhUes;;t)tr&Sli6!eoDv3E%Hlk0?1EHEursa$Nhge6(&C6BKiGm% zPbRNE8;hV{>ffF|pXJ$eD8{}mPLG^OFKo0WIfO2aHOw30CxuGmLOr+FkaXq9u)U1G z;Ty)f9uDGgTRR)rIvJDi1;;yi2Bou>HB&ZMft>eq5|BFK4fOgV9okFU;&xA-WO#>GFpw4#V_6q)^8&YB79#i#$5&eM zd}teSb*vT^Km6$~EJB{jJwN9Lc2{fHhIby`%xi;}e5Y!MOdWQUG{) zuNEd11O`)C_c5K}^wqZl4S)c50VKV90q6=0zgI~Q!^oIT%*O#Xj*v|Z*1?cns$46zRdH8p zgq4$cZ+n45F~rkg3YgQ{&ylKHNvx_Q8*x57U)vIkECQsyUJYCeq9T4aozo{f%+rGq zi$_ux#;sPggCX*fjK+0ivn|Bs!90_FbQL0V3o*o2)T`_Xu4papyC`s{YL4)_puqiU#mLw75 z+nY0p&nV7VPGYkNz_T^vg*}m!>?9$va271m30PoKB!j)F!vbKb9!=h~tzQ;C>WM&B zL61U1w)#YI0$v?rakO|Ub}V!IFebEre|Qw^Z(b{<@|DYDS3G^HQ@_Iv(ei?Y#r>fj zlG#FpNhIM3=>tQw2#7JF^4%|2J%S{mU@R86<)Bsz1T#i??c2%lu#kpxm)h<#0@Y&U ziN#d^66p{A!x%8Lmlre1LWc`8TJNtyfoIEe&HRFaDd+w#?#-RKhvvZ6r-O589>)tC zV&mmlv5{L)GHt^Guw3e1m{LF63$@KNr1}*aLYI#`6O3^ z+#&O!m=?qPYh@`onrbLO)M25=+Q>T5%poM(7A7QpGFQI$#fH_KX2!Oq)5b62eNP0j zKX2n0Q+rRYBZRjcjV>!eo+|`b`8`Q?qy?uu+nYw>+f}7o-6u(qAf=b(<~@-O=u~RV zR%a4k_>vS91Ixo^PaxaZi-HW#p4hYbm2bbjIeswXcAhf%;V~3-6 zwvg?`Qr)_3AK0$qj*gAQf~c&PcH>u|DMK7d(e>GPpX^H1EB45}*^(v=bH?;**RK>J zaB_~JVjtSy{xZzKQC6}TU?jJ43SjU?Z)5PC>{7BaSZFYxlM^lwY-0pqj6umM1sBb^ z_$HwUh+UWk4=*nxH#u9|?b{6V!9I^4DUGzKuH6w9g7aOZ{zxMs$-TyF0X|k-+N7Bo zl{*F$x4+W~)<5|D-z$~%jhUa@*+?<2QT^-x-Beujk2yY=RLvcZ5p%+zZM$LvTcn;c z!e;jZ|4G?QVr+5J9zv8Afz*ou-frQMV#t=OYd2a1;{%NDm^u0ZdyLVA4$+E5qyhsU zcG?jnUfv&jS%6%a!!OJ~7#_SuKP&yJ4}SY?(IV;gb=o1YoGeh5@gXi-m`wXYgChaQ zK4r05_7)aB9zn;dOrig%Q@bwLey9 z{bUcp#4s%7{}^DaLth}RzS=V7nl?6|)C3HeMxB?GE*nVe~}O)j_d2 zeR3@9h=`qdyrcJ?q!u##j+&Y}sE+^zsMS13hNvLCm@UlyS%k~zJ|`2K$Pi$>j=k@w zuH{fs0gGW`$j5k$S+Zl<0J@cphEsq#qp$lJm-RPB_HKI(zw@29L!8|AF|QLDxPLW! z)w^$;=%CkAWk}7Qvpe`!uNb7&W=EP;XP^phT!*dF+haEZqx%nT&m2(sKltEVo2@*qTg93&YLhOPNb_Lc?tup} zlS}6>CAp-o79U3XebFKYd1K-IUR?5ZbeJN1uviKwkW*iF25Dh9Ho(`s+X&5ea_HEh z`c%TgRMuU2tM=wU)3)ZQ1D;UbFtXX2L{ezp@5ZPcv)0Pjfh0%f zBqJyNuxE0>P|+>cV;Tvo;KNpXtMUSmbp`1&pzn7?lh zSO?gc)x0E>CoL@uNnOK$)KVu`fGJmRYYRi`uR)1hSyK8g;-Tn#o-jQiQcgXM!7FSi zCjCk-e5&9Agz4#&ql+&S!_Ec#x}A}?3EjD6!>{AKTKPkwGr6`OrdD3RdS!F#d5D?a z!7P5nD-}!3lWGDvr3W*_ZEw@v$2wJ#WlVE-kW&+yJ3zx&?V7*(5m z8P1=IyShL2DN*$<;}=|Mj%-O0;}qMj@3yHV0VXA$e&f}m)?+ZC$>VG}d%9QXcn0|6 zMM2-*+-m#Oh@C10>g%tEsPW zmpUq__EcFb9z1`zxtw$Y7x$zdwsK5-mCe;-qkH_(sG6s8vK+zynj5*(se{^PixNb9 ztptM>udxp{MyZI{tfa2nE4-xA-wS8QoD+VmObAiKH8?_T_M7w%-~2ZJ zW43`)jcp{b>B;iX%A~xvcp7OTixHeHY#3Rv_qhlhEg;Q_P_doj9`O_XQr+P0!cUeg zCrb#$Vhj6484H|TcFWxM9pA~Rz!pn0g8!Zw*W|-mxE!RLW~Q+LK%CP6m;G~4WFho* zdX|?JrhJ~B71o{V)g0ktd!JEaaOD7svoW?KeRzgT2=?2 z0QX2;UFwMSW=t+MZ*~|Hv@o&=yHqcdy&1gAyS`h|NDib+n=8lW5K~~t1)$4CehYIj zdE0vb#kLS&+DrNf5$=~60dZn@#-&aHbvi>D;j(8R5ejfW*SY$sLKAG7QTkbVy47t$ z#GKqueb`;QlU5h<#vo;39rthqbEgRuiEVWjGZy(Kp)8WyrB8p_@R$92PF;T3Ch12z zQ)QFPPW|e4Hpg?}W1v=e63NbA|Fy|ge(U<3*$yNf@BjS2{vVrv_6I-98x?V8>mo&c zRtAS({m#3aH{W_~^GWtN0lDDE0DZDxNk(IY<6b@ z605b9I`}}$O$5EW++vTCJa)GwXz%{c5sZ;N&W3e!TXvr6W!Ir%3M<$OjsiAG9`Mpw z?P6H2?VBstvL(fg2PY!9J;Cunhg0l6d}4F4y^|MHIeCl4GA&shs-pQ~yMsFiQ-7)4 zCr=$Mi|A{GUzD0BGl2O$d*;>D*bY+d{S%!wbi2=*um5{DxBI;M)#YJ6oC8bTQa8ULv72kuu5R(48$=}G)K0xj0Dsi$Y4tf+xDW9eiFd@ znj{ltjno^{tX&J7u_N-8*{l*2T7{c~pM5ufXx4pY(8)q8Y)1?8K!eJ;e4;_07>@Ta zLJM^1fA+xf8<{me=3ABRwE^=6oFYg<;dzcWT zxljbE!Xl;`2eG`pZ$bEQ>L3@b@r{u@35t>ZPz>;XULZ$mSG=owmGQm4sB7Aaz(mb^ z){R*)vB_nHBw@zGD-M2%?J*;8Gv;CFO^kH%TR1oBP|Y4{%=uRLpF5&X2n> zu!l*fq_Slmm+TF~4jAV}sgw49`B%R`>5ngeb#-&>mDlSQw-X^pWiOfv((2i<5xOS`{-6_P)@fs~vli^Qvub}dTmQ_uR%CWgS-6CXd%BO8+z#EWUaD6I_~rD|bD762YbCY3SR z$4Fdo&3@JGrD2iGZmWfa1h?(wmNW3g&`4#j6-K_Ji_miJp~+cH!X@~ER+SxLK;bUs z-S_EFIrHmp_K8-8XZ)!R*p0E5gIP0PUygT--QDJbDsCB(!^~p41fr`Q6$IyKV{t;P z0?*<>UYJ$_LFM4+(73l+8Q@Jy2nXMymig2vFHzYH%ryguxvbCJcW=GCM{-&R=zagK z*VMn(`|@+$ugI=5fCwl$v>3q`y&n))X0>vDtxkUcx=EA~(x6r`7c(L`kX}SSJ5p&x z;`*!1%4of#PQR@ZRkw^O!jj8}^dhhM-fTfPuU@Vn#pvX{xzl$ShQ~w54IOW4x{|hP zLtD#4K%5wGt0V+o_O@Z9$_KxQSS-)u4yAy=v#QjG7gJM!nri1xx~Z&|>phL5kA+N|J_Q9ZubO z>)rOm#q=&;`{8W5K6U!&=KH_?E1Q4&ul&WbRqWXO+KY9c<#15 zu<#qU%MJl&1vi5Y^;D+WJ9*2f`Q~R=V{~}yzP6*>iqTnEhv&9d z;k);}=Wk&uscb!~1LNe{%SP5O3o=ato$BwC+8g?>4cZ&K9oTrb(yaD})?ePkyoEYw z%RH^^&3MA^9q+&Y_Jn6}%l*Cd_N8_a$OA7zT6q=I?8U8gW*an6HJYEfSnV z42albU5MehH8rT-4)9k7OS;kLT8S}a$WA3Zl>7gK_utO$QkFzdQoBY_3Rt(YW7+N^ zOG85(AI_-apLLvc+ATl(f40R3J4>O$)9&7`+tnzHRl`p0G>cbWMl zwUCG`3g9Ek8>GysoL6$2eRA%LQ8o9a0$wf0($BuU+-IhMK(jLj_@FL2>u)lP26u*G z#DTEX!w!hp82K@f#IMbh#&z-Pf$pCPOB*n;GCi zQq`lb9;lgrSdxaW2e8TVlP??GSx^&<{)q%?x8`%;;(r2Haa27Y3u83lEsj z8bU)&e@=&-7k%GT{Y_YzTHAUQ6d$TvI6{!suFk1{F37Ck-Pc!If=nmu()bVO!Mp?S zE2Aw7Aa#3(tvL!T*HY;Mtc-IJl8c%+gK1e>nZ{Cnsdycz!D(Oxm@)>xtU%-@{1yT5Xa*tRk%c1#GOVSEl95RZb9dk?I|`S4^>Nw~r#BYcqE4l|*G zV1lF*d9A1x69!OQ)Jl>mm>`NT&VM=5&_jWhNdiIuL}OpQdNo+p#|FWEccM^;&p!TW z4h_&JM|B;|jXkD>#*gvKyeW)9_5$8Cy8=X#JEUVI(dv;lgjbHEVBc0bjxdF;J2$Qs zT2Tt1N2zQrGP6S=!gLxlW_9RbM}P%HjERG#Aq;_rzY%@m7y(k9`wMBZS0o{qg2&$Wk_5Kf1KgRj*qtU>g=12&v**~HG`KDn|c zj0R&{49%-1@+jNkvuCBQ$)ovc%=mU3_;K)OPG}OoW+AF${IrQPuc;SEkCdKli!wrs*|%x0x`^=e}fzt@?P z{8pd7xj$tPWEVz-&RxnGPl*H)_v-vokyZF5lcF$osUZ5Pb1|y`>(91`xerb{;BkPH z^T(xeznh}z8&4#P-5!C_Z#BGJBrwcyVO%>xsu6`Nk6BQcR$zO_F-X)^=lc!8XA7H2 zO@jI5U;3pH!9V->lQJ5XDKg@{(~8Z7t&ZtaV@J?*@!?WQkZchSm>{8KqT0Om=GieM zZ$)r63p>v1+J*C}CO0?Rv!gsu$`IPHKLP|dL4o=zUdlM{7F0+SkTYI32cj=24-pGW z-JMMkLdlCn65X4M00~GFFDAbjqA4d6?_>2III=IKj;KO}kw_vyjEY3c6Urll3EnTL z(B8c#5!>x&ZJcfn7>jwW*!au`V=m&_k;F5TU!O03{>dG#hzhJBmQKKr;8mYOR_H`sK-=l+-jkD~xx43FeMz1xv%+1%N@ zjmU4^$m95|?K$=H(Y-61$M>(~X^Nq4FL1T(Mu*yAaHG(M?alF>d*yPEVdy(Mq_KdR zJ!qt*9rfiVHzo=iBtZ92ywe^YB=<*1LHYoB8^kv!bzawM&ZU`dfeVKi>R1 zfAz0!{^DQ!^KHkKsX2-#=-FaC{vtQgDM$5~dvVwn07L+m@b@=*xj6KUmD0rh)0nrG}Oc zry9B}E~MxuF{&M9pUCjMIT+llx!n&unWgB=Mh>j|(Fcdjb97r< zU)LK=j9QwFlaQlsZD3s5^c()l=izg`)GsOa0nNACA~`7^1ko3D8*~da&N3|06&u+n@h)e=fK6 zE1Qph_R%0UrguBhR9i!sNhijJajgB&ULcz1BpA#?E+j-T%(1>RS?RFwzW!Gr~jgj%~Ub8z=oQcTF~?_p|`lX|vC1VL}^J&vhy z0G%r3@C!Df?3O?J=}(iE0%GftK8qmV*VwKmH5#v&CX%;0c^ki9#*6>)xBrLDrM5Z! zH~;m2)k~?INtto1%^R=3*2dh=Q^9gJR1aqcrwBuGEF=l;O3sdJn-5+)*)edXlsUoM zCj*7klWsMqiyGy$BOY7xW`RTS`UV%pjji}-zL1Q0f0*YP&PZuv?;{v04=$}6v&dQu zDjoxqIitmDl}4IJb-@As_PGRkE{pcyeXv;Rs452E-CuEMeQ)g>deARYH?O(?)E#+* zy#v4Y)%KxG4}wI8?g#H_4=>}d523XJH3c~ttw#UoG zXbJG*rvOt_y$qqY;rM;3jjgkZIi|wXc_(k%t<)7R=o{6Y1e|mhQ)=aWQ5`#5dH1&J z+6)bt-sR@Tqzw3ZM%n!#aW0?*R*hA^o9+y-MPyfYRMw3jEQKLQ^TM$%lF40=onbpFCNFdN{^OVlkB2@~t=C+?>DgMR4A1e(O*D z>CNBx8-HW-fBxhDZHWK%wmXTl;{|@D#p~_Y&g3oqBroa3(o$Dz3*@#WhB#kvezEza z_MSW!Js-Y?FBog$P-?8LJNuibUD*ehT^5`tyHks{8)IXIjG)e`4 zXDib}Q{W9peEM52Jk46R$ z!>{#Pnc@0dpH@jsKUU@jC%wDlo%i4RP@#1ID-)UusDU-iJF_wnzy0Zevdg>c=kkmv zNCV5{1ejLR0eF>q7fQK&>qY<#mI2Kw;d#yeu?sS@VR#ktkJqHh`PO@HZ%(((gI(dm z7hi7v;P-z&`%5{mBAnZ)Lh7;?Ez%9gc$%zSOXXa%0#5-R(VPmofBAdg+Wg8deJ=vv zv-$FibFFG6%MZaYB*x)~t;z+ijXL%$11#e-hR3FaK#ydTz^vFphRKBBJdPt>_1;Ww zFk_@2LwJme9Yj1AX^r?ylm=6VYU+?pzSPdit{D>VNxh0X8WDqZQf9;qkc_p;nG?p_ z*~=Hw3Yr|rF!=IPT`xG(d}@Pjgv4QckTKu6)A3yl`)xsi=AydQ@6c6Vu&rW}tgeV^ zcPf|cq@wo+mPwUV7jtX(fN>u$=ai`LxmRD(_#?VHo0O`bPm&U;7y=AIxJ{&rL z&>-@7m12&MQDZ^6BR7x85u}MG{|x&eOWTzW&Cqe}D7V*;nVc z`C)6y#GPbOzapeL)w+e__MN2KR61b`Y^qc@XXwFEi6r42*deyMURfrBObGoqSuDci zsHQ2!RG1mUjhHfTs0DD$4VAU%>|nT$={S$^^3|IKEg$T#l6y(MF`~*duh^b5i3h-` zc|eC~%LV2u&4TYjy9;fv-+j8ghv{KfEA8sDetCBsW@xs#I?@>TC3)U%oOdhF=w6}e zCuf28*Lu{82Gy~)v+@?dJzM*zFW>CH@ADQ(>gyD|;nxy&umEp~p<28KYsET%`;DYf zN4cgKhLc1SP@Hg#h@!`7PP}HkznPNI+EC}{~Q4c+^G&El9J7p zjt0P~g`&o(SOIGgP7tk$5Z6SiI+m@+strC;0vo5zyx;-BPn?O!uUy*PxKcPr4DPEA z4q)Fp)Rq=%2zcF0>bzch6@iWi+Vb-vF=kGbPI{YIJae67G-C<&q+Ih04v8ZZN466) zZ&$&MYnKZVurNeGwXZ+Pt21sAr(@#}wKd9dT~A-!k1?mVhI^v?_hje0(8PA)Q7j4uqXF6XAARavNz{?|8Y3DBh{Sk41USe{^jlPd1p-K(#_3@HbtMx z!wiI;< zty8R?fGSG|DS6`m>X$b4&mX>_jlqxls@?UucG0Q} z&U)5ydrd$HH5U7kq?SRcfK5UiQ4~ED8o=7fG+4*nQ&yuB3NeFRBrXlDQr2{$0V^-T zmyWK9zlPb>83;aCP3jj6WTSH6!qN^7pBmQcZUgG0Vqv(~&wqX{ThomZ{l&bjA|*A) zs!qai8MIYn+78HzjmT-t``a#axELFfL@8tniFoh5_llLt-5*eow3=W0>QctVwu&?t z44#2|0c^;CK@to3Mr=U|L#92rW53*kR2>FzM)MZwA?kY%tt7J$wR$cGjoP-dBZCuo z&b$P#248;{Ci%RyD2&!%O3k4bQpLb_CNoIAuAv^*Nn2Ys-7s|q)^}aH$p~07*=)h&{ zaH#cpvS;iGKmDHYonixBNLsDmMtt`~o!T@m{nD;`=6!HA+|ZACx94!%Z_iv~ z!&;4UxbtK|csU>v(TJ+gV`x}BeC zT$@xrWz=&&FPz{*Mqu@ke0V8g%EQzJn`n)fBnIxJPQRBpu}*7FLNq?Xo)|o4gK0hG zrEENpQ~6G(KJ83mm3rm7-~I0N^Ij>2M}le|gjg`jli-5Jyf2mSqu`Cu2L9$VNzkfX z7we}vCq?Ce=-Go*!dutczj*6vs{QeStA0JpUPS#Pp-Ss>tUZwT3IzT9i;FRvPE4-d zCwYqP*}Hflb*nyG2+XHdeB0C1*Cu9nHblp?6&RjP?(XJbL9#bv2vo`=Niz3hD5Pfi zHTE`hS{=Xi?RS%^MD*XCv^=kst>RvGP~JlX^eE;w`KOv2k=?e_JWu+&ocE7}{_xya z?F~HAt^kSq^58a3;TSh3ZVnBULZ`VFr}ng5<%_Ap0SzQmski0*FVL98+8m3$BbgE` z;Dj{Nd}#ao?ufR{CJD1eb4O!Ad2j}fqSd*=i+`C}!MnB0&}Iw+(?H`s&4W3ba^WHm zZy%%Kh!l`u@kQY+LQ_bl;CLew0y}Ab+?o}0w|CUxmD#NIg15T$)3q`yZMp9cGh4^u zQyHHx^%p=)!U-7=;ykFsD>qh=0r=GT!a$V&#a@)a7z-gf+z806o(d z0C_gse_nRhcs)meo&l`iLLv?x&hyk{#+Qd!u9k}RX)C)k=^n?lM)V%zV4{7}5_Qlx z252!o_0hxqj*mC49j#_ZHt)Ri*4#sE$J%1>`KO;IVSTl^oJz6ZN+0ldM%Y3isGbj+ zu+hw7I)KTxq;4CbO_WL11`&UdJmfjhcM~Bn5?n}Y7zCz9O*s&wb7&~_d>DJkYwWw5 z8)`ckJar&NaAQYO@4eJO6KsBN-pqQ?(!a0O+UFxkRuc~+b`FNEC*7})Brt~BU8IBR zu^2pQ?qB5j(Lc!jAV&7;+1Ey;k%(^g-ldXoJxhb*Ps-`_67QuS#_W%jdh*PP`K}BY z@tox!nK79saaQuiUpW8iWWP95Iv?dcd*#(LRsKP5}UhloF&BgPV$8*Qo@XD*N zZ{FE=X!9q3qdZbcZTDi9LNa8d;7Yr8@$=2yB%)J!ZC`)o(B?wNMLiEkP9%li#AJiv zR`xMoF9v!CJg`%}S9XhUy>oU#EU0L4hv44^=nUppk^rScmL6tr>ad*(li@WS+tz|| zvn@o|QUgyPZ1a7R@{OB07eW#ek#V_bEbKaCdT3h?oH?596GI4WNnUn*ECzV^F^AEH zQ^P>I&zwLKrn+Weo4jc)bp*MQ=!9#)8FiqoRYFq{bA0RR{%(6vkbGHqsFA#XlLrjRg==LcY4>ig)@Aliu zyC=poD|7%95DB=5AMy~v0asXpY?5~iXSfhE{O)`2Z+`ycA4}1-Ig-6X?2d7$ck=Z# z4kMG2=86Bhhqlm%zd&)~a?0p#w z#s<}DEKkAXVI0fE%h-9ZK0R!;lL}>5(i$T*BewY?Z8FYVkk~?8RN&jimEFreWGmDC zQph}QKO>u#7%j%zH{O1IoEN=5tGgMSK-HwpjAgTWoBL=v<9wM@vk{s=h^Wu(PHatc zh(JX8AW!42Y*rBSQ7~ZJv0}%aJAwL*&HehbBJZ4k*dx*KJBls37qj1U;7FU1kC#UJ z(i{+B9sjLA^QY>sJYbiz&7H_YTbM`E2`22*Cg;yDez`fkyPRls?{?Wc9NBfKod7&( zaNu$C!~tUW!YfDjj5>I;J(tgKm1`@!eNX`CqyDy6=1_C|w9Vv?_9dlOUP4CWc@geW z-JQUFyZg=pxSq7NGfD7p-qhnscC+In#wL3GNee83obZ6|kyd1z#c0t2X}8#zg;v5d z_q4OGdD|X5Zr%PW37cu71t7J&buQS2%eBwx7Bv9zWc2n?S6eVcDN`|9PE`v zxA50B^J|V<&;-L${WxmG&h$x)S zQ!CW7zC-+8zBjxEiixR5K&NsONjvQ=K=W*_>f7JSeyGWMl9Y1&{Q1p;VqOHrA#UgQ zZ3}toPRCzIAeh8U#zn=N2^{IFKAE7JKN8{a5PtCfyLsvk6gc|&NDp_C5Dq7)kcO-v z2Z;JbmERUjn$Z=)@P=Y|do%Jjq}l2*haQ;Jq%nq02#Np~WLZRXs*c~TdodAAOGG#k zo@eY(2OVHoR$_gYu@PLX=IRtZE&Ju3#Blop*+{6>7`cv&jU(F-B%rR}N}ZV;PqjNy z-XXRar7fPZ#vr}%**9K~_*21Bdw8#8yL_d2P{qSJxoDThcrus2JW0)J$@ z+{dexgcI$K1cL~-Vh*CWx5_=`&{H81M~+K5y@aMX0;>vw=SyajWJmRFDo6F&nP+UP zFcL>btqe^n81}V$rNxm;{aV3_TlFn2-RJf;BA1svChgq8x88hX^Xi#bH*dXueDmqK zFNaA>TRaOzaOWw05wkscc-Q8&RL>GNY>vga_XTGRYb3{T8bc#NO`KL-9J64L5{>Qh z2?yZS91$0}$}2C^$^OD{?2uqfodrI85(g$%7`T~Rp2(TL>UtD&r>09th^a}tJ^0W( zGtMvRl(G>8qpc3R{Yd_>`xcaNAUuF`gA=u_y_F8X$pD6?YH%1twBuUoY-MzC6m72W zlS(n7Zp`8@v&Oy_BdK_fg>UCB<*V5#+y*%pZ<7zkNmj~wZvofD73sq1Z6o+Gzn%51&j)G!)zHJVY*4*;DG63SkxYLXA}KM_|?UM zV{V_f6XUZ>*OTa~E3dA8AvZXVE?pP`hB1pwW|GxT6{H5YR+?U!%8H*PvNxYlxw_%I^(9xOJ>}?W?}BHM4%#g1WJ=VsE0{N)GAx9+2Hb0$q>AQWwu}S0^}$N2B`#nK(1em}ms`P0AgE1SRam;OR&c21`99LH_UCaZT zw=Nh;nJhHqWRl>|fA-O+a1s~3^Tx@fy226KbbP(fTft)_i295)Ng&T#tmIvL+!!8) zk6VdB%n?-7Ve-)d7?Y;q1vSbtj=3(x8f@y*{Uj!PGvOGRuCyk`ONNa5k6J9kV<-9? ziuq+(o3IvYG$spX-a~irM%&u-`OW%ZkKf9yw5EOEF=2h0xd`WrL>aS&d$xvAy?34N9;Zf)q3wpM24`54{jV1|f< zBxF@|DKrDA@%6>o?Av|TAH-x;Ryp^%iHiYG=h?zArKWEh?B6K|Fv~K375j_vZdfm1$@1KknY->uI1>ICTJ;Yy^|KqINk4 ziuo%-yD)%ORQnIDs?Hs}*@+(y61(kzb6(#Q`=nBJAl$y{K!{Gu!C3BPr^p@FKC+JG zVw1tYlB^iW*~fO|<_!&McX3!uLbBANhCOiJ8}f~6(QmN8=oc8s1Md{&Wx^mf=0FPJ ze!q6*Y7FK`P5}MrFa?O1nrhD;n#bg9>^*sUA$HjV*dRz~4t_X&@U?7p0!kew0b$#$ zTiW0K+m`@Uk^Kv^4rzluX;28rR#EXbTC-OPNYz)-`Zi9FjUxgwpT;7?q%AsiH)evs z3dz`?ZLY;-F9zD&JZS;oUAlE&r2T@#D^U$Hfo0N+O~l@F`m`(v<^oeyR(6CF*`;7x z5mUk(YvYwOXEw*mN^$1Zvx67U+hG0ik1lSm#*E+v1HMB?{5LwOS+wSzEs+~j#TSiW&-KFozk@I>?ogG5%W8brb?4m z!zV;;ON@*32e0l&h4yb6J;}&6%E{^)4Pu~<0mFPq$mYc#nnh!n+R7}z$}^uM^;Kp) zScSA{M+!{`9)S6zI;u^9wj4Uz5WvkAP4tM&|0@Hp$k6f1(7gLi zCgr*Qy0_zl@4WY6W15aqZ4AQ0Z@v^u@=gsbgh$dDhK5m9Iq`P_BBzwj{({-94dci? znEI(o-qU#i(xxj|PrYl#(Xq?uWI)204o3hd%cC7NZJtJix2|5zrc}okK=iVB#3AN z$xGO_Qub{6up(3SQhAC0ce2|N=N%(ncWWnxpVUXy(+*;=s(W7m;n7r8NNMrgSD8IU zWFI_`5k8`AWRry}Abkrb=9eDI`{=jW_bzw^T8{dgG*J9#d#k}6i-o~~l z-xOF-eJrAw`I~RNk?rb8cyVi(ZU{Ef{kCJBDOBTjQkg?L7Hf>ZF^LUhK!-~*JFtaWa2&WwVs=)etQik7wqLw< zw*-ZG9D{chS#5nbQRZW10_e;m_yxE8dG1Tvj#NGG%yWCurbEEqWNC8meDU2i3W$Xi9e&k;(^n;5il0#ug7;fSRN&EveJY$j7ud1|)s6MFOteDXxhGhOt>-2AHcVG4l48>m2*Mbjc!K1vj zP87mKnGEihQ1G+QK1tPjnB;S?pw7#|MXXYIo%!RH;dgq(%YV(^+RX^5igS-#hBae z)FX`UNMR86uaO2Y7D$Gv8MeSjdEMohdYC$LsMw9Y%b(21mp>k+c!+gJ8jA zFelrDN5^tdfHP+XiIST7G$t~6%7Pan*CXdvl9o7o4i@6D&`k5);@{+2t7^+Or51ub z#TG`36z?p!`p%o^A~7=(WAJQ;=|LIY%RyFJA7>TX8nZ1}NwBy`s&HeGOjc&0eRH!i zC-+@`!vSr&l(Tr~w|#=x=Kg5FUP$oaOmLttqsQJ%AbWdPTJe2J!yjb}eAN3gcL*Qh zLDkM$H=NK1Ola+&_Sf(FvG&F1T84cPnE(Jl07*naRL=Ju@4ox`hnUn_fHbmH4DEtu ze%i5q9xh=po-2p56NCMyo>9vxyLR6D>=M&fb_`|d#Om(<`BOI} zq@o4>&5P85rxE5|CjuuHixeg&NaB`+ytz+(>9;M7+6Npu^o|ftz0Mqzb@ONeEGIH9 zpNJ8JUz=}#>%FoH+}@n~{L_FR10VoUK(D_sh18BBx55+41s7hua&12C^V$=FkZc4y zE?E_=P87+oDajsyD`nmDHW z{gEOT6&Iq1ki8qg1}Q{T@2s9BO-zIr0Uoejr{^TyIqf(|$#U_$RZ!wM5(BA)3%wr^ zcN=+QSobs5lg3=6H89>CqcI_fb5RXqvcYzHfR>MaRGf%LJzV+Hs%-7ct`y>Wf8U{# zGtJbiTS>2+84Y#}wj3eh_~1pL8w8gQX7DQ_WmkJvo+);$2i5hx@BQ**)41MT2mm!N za++aG4mqV}QrQ`%1qREEK&3enqko=yeY-;=?zb`efrTVf!2ZD4Om3bh>FmfZ`S8xo zj(Us9=1JaF5Z=B*J{)&Xt$Y0VPBz8xW7~rkxWoM&+`RWr2irb{kExB#>7L3REy$VO zb4QWwCsQHgpW#R_A12YB${3U|7$-+l2kp4nTRS}1<{dl)werToCt)oP0C|vfyDdg# z)ARjutKWV2d~@!?_08jGCj@{wV?W~&20zT=n>6m;`o}JY7BMKyelhYd%nRP^kEUoO zlLooDRu_p{9OT}fA4rNOVL3_b0O`8Ef02FhLG(5%q2(*MqdRT5w5J}7OFulrl-6ep z?^w)5o}pjmec$oj?|ty0f?hNzQqjto)(R>&jjV%SjB&qUI%|a(R@6HcYt(x>>AMR+ zrsF+WJMUd8r3vb8lfxK~yRWX)h3hN7KT%m)jol&C-BRK{jB!cor+lr(6xxr~#NLV^ zo<;1FQ+mdve$1+giI`@OU9dZP_`q`9xVW1{`sGz0!8Pnp$Xn$3y^a{Ic~Os(r!QW-nCe@qnBYZ~KVIPL#X==W z(;O`pVc9m=YweTd*wIH!n(FB&us6=W-u=Z(_u%23=CUaEq+IE@IcK(ScMd?oxz%rh zkh}h2o@go}CeM4gyR!D9ig0&<^}2&(!C|JE=qkGrZQ|y=N1Ge{T`Jt>ag3u@nmgh_ zb5+5WX4PfxhW;9Z3!K#N-txQt2*iF#dlU1QcCf^iMV--rgEC0zBL4Tl@7mm#fN?0s z_B=KDdNg@CI6baxGGa`jkPWFwD5?97wDVut!4a%^Xs*i-|>DbA*pI?4G|Oq zsjivKv8}`k+%UL&aw7$p?DcYg?Sw-)eOEd4p#KN)t;W-M&juJe7f|A}RkNsp^IilY zKehJ$*kCHQ6*D@0JT=EE6Jp-U3j~>jHB7dN5M?X_ttz(>T!WWs60k5}^^>Aze_i** zgdHbcWuQIKr2KzW-B*)eNs_1Mgw9N;ghl}#=SbO|}1j9}-d!-;K6AVw%R(Esc`H}=5qaKR)`S3>(6dPvbFhm0P?!_Q#u7dkEB=U-@a93 z^XiT17gO}0Y;oGbZd&#vvi2-uCtpf(r+g@YBoWptA^W(b;A>4p_mstHvcPAa!%2RU zum{%Y@~W}A_ubu%Km7B*Z2Z&T{awIVjrr(#nD+h3z4JxwXI|1+mCgpZ)^e(-ajlX% zr_x+E1D>sXT@>K+X?!=Qem;dDbG2a4q16T5hlWe5nze&1_aR&E_nvi!m-;k7sJyhm zL#-Vj;`0(&_cJLT23XH?!td8-HRoT}C%iyIr(6vGH#{SA^%<|Bo!3=%jh|`~a`sHW zGkL_Dc(jMoY_~Oe?zFssceuu?(L@3;llU(7m^_WcdzVFxds}TkdSs3-xrrw?7!C=?CqS^NX*3J~Qac z7*;T0HxM)9jtXCUy2IprEj#oUk`D}m#c7{`T>K6qh1u=z8IOj=SuPCEBwhQs#k|EF z^$jyHF9DtmY?^{iNv~B+6F7(z`rVQl?=M$R-OT9Xnw5ESC7@tlWOMZ0VZzLB<{Au3 zi$H%`1K<<=a-rFLl7$1ENfD?WUYVpOG1`&)YoGEi{5vo6om5wQ=)yF>R8m1`CHze8 z?^#pF+-P=gszg&$41MuNpmS~Nwp+k`yr|lniWTyS02L;+XE`u0=P&J1!A5H|tz@7{ zS-N!dgIl9%3Ifouj2VkaRI8iSXIf>>>VyX!jQh8L{L^T-UwrY!w9z_3bW)~=W;_!~ z{3G8?oACbCXpL{|v-rFT=lQG}u!5ioC-4D$G#TeWZ<^QX#`${7h;Egzdg5dna31+% zX;+&87!BP-T$@^AqW;TBG$wwRa(t4j|j=$`lv||za{+WB~hi8&)7_fqrS3EuA-nnc0 z@WTpL+IiyVUw!#?cUu}so=`2K3}8fjW=z*Rqd!_o5ARqXIv@H+Lu%W+VtAiN^XNN+ z>)O?%agFQws(__uIRKRbb?tnPfPV8CGhb^_>FGWnCj74pBV)9QUUsqylzTbO4`Tf1 zF`|NIOo1U(gJ;(sTXShYf5};@c{Aa5Gs0It`)TK%-1ytS{m(Ien|Kyk+Kn;md`mR! zLR`jo_n@Uv;SW=JE!E*%H@l+^EyIj!ql><1@B_t6FiURGP#)F!OPMq=&bqi+WJ*G& z-EA-g=HdumXBECE{yk1=nkQgqQu3F*wsx$xseE9mjx+-sRsa;{1ZO!%zvVjs9UX=3 zX~#q&jYz=s_jqvjW!4zL=idpuT@XYgkuu6xZ8s70p{AgZVyioXd;sW zqFrIHvc@JM<~N?4$ui#ZtVy&D_$-@}S7yb4q~z-@0zcMg8kKrvCW>``1e%rNjr@w_ znpOn-nb+2v&U(xyt)g2GR^=i;i~`rSKG;S zZ)aRqd0WPQk$vZoM>50JV3NL2uHH48Vf2<^Zz6RbEtn(zL~?$)MBs{;R3SqY5sg}c z6rVh7$(1QXs>MuvH30Ce^1Ommr_6X8$K~GXWq40}I^UR#bys`l+%JFf`PY8*r$Y|5 zs>4?<0wRBX!}WaMIh?Z`%Y85eVo-ylfdSa4{tSNi-0s6HKTF{ z@5DS(7aH*?`)a_=fS7nOn`%S%<$%{N14}>%O`@}$6KD}`4sd)jz7HB#Gw-PUJ$qF3 z+CwW5`JtHrUkuZDB^37iTS|lgdV{u9o?yzLRlpl~(J-VK(9AFa0W%{5Hx*FPhq*s% z35D6am-T=mPr%#kE7Ith-eXpb$xn8agEveakTa_bZSUn%axPZECi07DFxoF-2H0^0 zpq0XKrc{PgEy=NndFyf!!cr=P|BnK_{WKOPp})~8x*^l;&zf~@AB`*FrM;@$Kr4Nb zHu2;Ahhy&1LiYq=0t&R#H&MYCeaA^{GSS9y6!)G6At@HXS_qhT6{(*!|alhadOHQSuYtSqn&k^uZs5WcBbL|SdFZ0TLCZyha&vwSpn!`Jc=73UA+T}%{I<-Tnr-&hNPk11 z&U3iefLp&~1dSe|_8TYhPSq{96F!lhy&R;R-TWJ;VjOGQjslWrG3*OM*!45Rck40H z>V?@{0wK-nY7BEO0A!`fnc29Vjqs4KtZOr^FzO*!xt^ro3Do}W)zt<beD0jzs&2YgBDHo*xxpws=a_$_V&$N9}Y0`yL|pdCSL8Bs94&k@tTC< zv`sn&N4*pX6A~@fd(Rl&>Ru9QXT4=v=D=h&hlocmws`uWRFt!gAAviSj|!g|vza8j zR=H$t_JYOeBXz1sA}|+;5zM`>I4_vekFFSgLi5FSz#(;G(^&tdT44$+GwU0K($$ zYJ|x{-|ZwLfa~6aBC7Q#R<3dV-l%0WHETRObtQuuAX zx%URmdET#$TYsO|I)t%TqG|McuJ70PgSs_Jg68;cs{Z&U!X0IXjESo1*2tM$!UoOGziX0boM;vgsAGM;Y}34 zZ#Jw&n_1%%C}!FjEMOyn@?0zPMdbLGn1F-`6UjGnNPD>0IU;LJJGGIhw^%vv!i%-BU53P;{EhUXFdwVphJ$Hv;g0l&H~USZ9{#hpcOW2(ZR9ZWczH6|5p> zOuLw}(oAY@x<&n9I$T&v_z>*-MdeOejuW|r#4R-e^k(-OicIq|+HoH^xdD}aU%CFl z#c_@u)@k-|3&LmD?4oA0CIF?f!vubM&w3DzGx;#P&}5>hw9jU*nT(nM zjWd(}V)<6aN{##z?=>sJZ&F_iQj#CE1N{8Is#qi`Llc_R#Z3MM1PWWFmE$S(w3bBd z#hrlH^?z9izf3H6g6~dtyUArq)~(K48s@$GPbQ_IVyqj7X04otRr2MZY2!HOW4Rgw1AICE{N|YfKi7RH9X|+yCHZ)cVnL&t0slf`*N;v-unA;FH9Q1rD068rQhe; zULmeKiBeohNOm^+RGSXddX#_ROSl+=o=RwJ(#aHj(Lfyray_MI$`is&d{%rc@7nG7 zMp3|K$@~`AuUy{v;?qyZOcNy(CE}BLk`IgDO5ZPJ!f-xfxmL!<#KKJ9&wq8$ceJawDG&CoVHz?Ec^qeTM{OYm03R@rH8do*BagLU1t_0K zegji{+aqTZx^?S=Ip3N_ORQ!ykbtQHo86vI#f014uc@#y*ZKR%c+bC4!0346aJPv< zL8W(L3uTDa=J_ii>DvlKp09oD=e3=_*Uq&MIo&`1x@XOa>q%~?6M$llgk*jr0Ugdq z09u1{F`Cco!&Xqzz+uE*S8#H@^VaXZngxB=ErxK;UH{BN1{H8z3b2HiU$itu*0Ovk z1=*M^%)bL_f57*o!IzKa-re%gGmI$NwV3)K4UKsu1DQGUIF*;SwD>mieMHpR>RqB| z2Zz1c&JHosDC|6QB`s~jy$PE^R#}u50Ejr?Cyyq{2da`wX)XZN#4wKYt^;!8XQ{t@ zPs}^B386<1iI;p+z+8@&K8gl1XE;8UGN$cVjJz2*5Kh{HJRHxUm12Tecp`_AL8az7W$YzL)8-Sy`D_`NGxf0b4-WWN^Ixzj+zRm%B5I=c6G2A3nkeKBuAb6%Awb z4S*8VcoiWo>@@r5SU=ku#nbZdq6ZyCgly;1m5rUo*~YeWen6y-yZT&_u-Udrx3Rd8 z$@exbZ#31ew$U%mh$+W32Vz^%S4zgLric${c{G?w8>s(M4fx%>Ug)`mn%1YEe2^wR zd0(uOr)9bwJYtSm-%2`d;R|C;a$}oKgzB`fMWAE&yRdvpEJ$T^s#QYa9NqFP!XK zJ>yceKMSZE=ekp(EqM#X(onz2wX)y+)^SB))Sji?+O>W+%1htT z&AJXiMVC%6y}H2)S}roHPp6XZrE?zTdxUX)m-WHT37ppz$UJ;K)+YMSeU^L2m@$om zAOc2*>)qSECbAcxY`iTJlK=w`)drM6;lrXiOw((F#J2VN*Mum0WA0UZInQmHY14yq zsrSku`~0q1R;1=~4E$n0=4hrm)vP=9mTK!keG=I_ovEgMYAg-W15r{Ve_we4s1aevId@56fW0?jddz*uOb|Ov) zj&C)XF^n}`kIT>&wm+LT!(k4nFzU&;=E>tKI+*FB-?KD{F{J`orEKM50iG$D6OAS+ z6bNwE(@cRKlkl_8znn2JrZ!7>@Zj#W)o#x+?7zSJ!zA8%&f7A$C5ldc``SjR-{crR zQ4~|=*QcL-*5d0nl*lBNMEY#Mz)6~Fy72(+@jyb_1kf5@svoic&_KSKBw%?!+c|m< zD?e=eu6L(P=(N7G$`v$Gt2s6IeJ`u4@M{CDn!Nj+X1U5P9?(bCESz(-$%Yv| zU{`-8VAC}N)=ifBeAL)kW%BYxg&UL4%eg9^Mt>kWg&pHX$5;=&UopV_$(4JXxV1}r z9A4M<`F!HbpMLtaMy|)qZ9SMkE$(wsAnf)cU*38)oNzs<@>o=OecE(z*;JLS9ZgnPUGD zVu%_|(1qIl{SQB8@;#l5XMJGW)$0INn7x^{nV&Fv4_xZ$%)+kcS2B|_?YeYkTi@F( zVKl6Sg2^Dyj230ayv6zxk*eCZGG%D*~n(eP1@_hoOwMbkh#>oN%%4y1LO)%9<$aT6Rkk>*Bg`|y)5 z5{6Ulf2g?MqtUW%^qg0nuh`w?Ygd~1t5eo&Z}*+c*Dkk>+4X8+UCtj>fjmjW{awFx zyYmV*1Tg1z^0VcaJekjrsd--pdB2?wkYtj-ZSqJu#y6)%*YiMr=W?O{K$yw;IzVAr zTsXfo?f}6Tt`R=Jv*U{B>S&0km|0PBK*+?~SL3t7BTCFHW@3{!bF&H;FEasYa-P4} z1aiQgV4{hiRCDDHVObbQ6BjKJ4?9*l`)m0lcff$0dCxbCulXe90dlxMDkVe>E}8ry zh09o^&@?HF3@YMxy5~a>)(5=~cJL+cN4JOj$rHNu-5b2~zAgBBeGh-MZ@{oupS9DU z@7F_LlC>JyLxvIiWg-;s&v1d67J7?7EuR;2Zr;1L4!TFML(iFx`_12q)`&5G-B*+S zVL%SN1uWka*I*>n2Cgxi-*n8MXB@SL3mOBTtxE3-heK-}H6!xf7=RNA#j!fQqy;Q_ z9M@VfeDhkh+B1u^O=L?{j0W@TU;b(~miYFYZ`v*8#>R=OF?z!3-pndnUuPgya*-pEfk^W6WXM$Lan07on7M0lMjVK6 zpA{2R*%^6STLnc_cF=yCg&1?Q`F5c2E_xkn!Jg$PFESNWtYmiV9xf{kETuViXqLA; zND2c7HQ=#Gds!Q3%+2UD6z0c^0POmmPd9e+X@Y#C+;5j;oPG)DnnV_`~-|=y-8p@P~G3b8jJO_EgzwXDM zho4yi))ZQwiSKVD6Ur*-qe<{xzBF*dF6vX|g97(GId46``;cGB%5VDPt&2gUS#64L z+Tz)sYh1MxZ+q1a->>pMm%jgJz2?NvzWU;85sxTQ_m&P%Qrmn&13@?ypV4nZnH_(N!rJRYo`4A^24ZkK3uBo0%Vo z$7yWy3A1{O)@PP66B=N%n5vpzW{v=q!>R*tsH;?JxJ0Ht|MZiofAy?{LZN4V9&Oua zy9Zik8nXt|adEx_&hlIgoSCJ*DfCD9JYzDZr?2%f2G~p+z_6Cra4s(qH91l{vwqDi zhBk_>sc97%=2#r(eegda<~!=SOm>i{^vo<{i7qst#}7;OsO^$o`Ir1XtzFtGp|Qc4 zwQ^K>IY=D5dqo4Ev}x$&YM|e~eP`qI&puDPIWdA`f4paDo8v1R!7AjRkA_C8_7lxc zDgd7v=dfne`1s^#8`d6<4=4JFPy%k-k-biveO-GF(yk7lm)KhSEp>S}YwZ>up*b^C zIlR%=fp<&*`hF(uiuQIc&F22SM-weH-qIRw-@aX&k2Ze%A)s#J*$ISAi~vj`=7Z?O zA$$Sw)b10tUp0wyKF3pd=V^kr2lU(f@bdut>h)XkT3P668GKCw2LM|||xa*M8b&v%R5E~c2IT70jx z5Z=03`5mD7-4EZ@3xE`_8uPBRj&LU}+Ge#%hfn0Q=a}g4+_{s*^K|1;lY=#dZ=(-f z07`yGAJ2DqzDWXTIRMx?_O9_8fIIQU&p-Pba5!O6Re{aYn8n=tE7dHNj3zP0qA{86 zFqeiKAvbnt1fgF)`yInEWd;D>YhqK2X_&p?Ztz^b{^lC45s7?9n*b?ZGC{jm7P-p`JE z)k8vf8R+^Ue`l${sXai{qStbB8aza2wlZ^^xA>4~S0xulU>cFZp{c%V76s}Ah*Q`a z!-E9laWg*COp!eU#z$v??`Bacvo87pME7KJ0RT&V&IE>>-l9(00uZkRgnU#>j@lBD zGCvfj|cak}S$( zFrzYM6ce=5jC*k|+f~}0eo1ocH6Ly~OXIU`*0E@@-=?i6tDva{dgveL^uYe`6@J2( z`Ye(P2sp!MPs3=r)h;@ZTT7>M!*;-N_4b{d_=mF%m`OtNuZpUx)({E1R-RBAY5Xb2 zjfMmO!k3NjnvhQCU*aIwFEqDylBxW(jZUnO1kjTflKIBmnrmyTv11u%qltho%yUg@ z5?*N@9wN_-0~?>H_046?cvilGVC0}$7=W>Uhq*`kM+UVD`*L@ zerOVqx?xhoV>HRr$+U_MC%YHuF}>KqO4`Gu)#IY(hUSR|p04J~H z&G&;Tox9@5iXkU{O2g`;K{F%Qv7W3Wep^uxSh*=@o@0#ydgzMOD_D8xUmwn)!@2hg zc$l-Vhd9gmW`G`ojQuc+Ks$e{nJLWLI2{9ql|`8BA-CkHEX*uO(UP2Ie~SLA?y*FL zij+00it^oT&pXA|q$|kBx)6|Q>mPsr`>uFXy2H(ct}VPG0hOAjprp&L!f0`hC>^r} zps@7`q}^Bew8m#te=VMtC9VXF^MIZi)J%s_EqWb*OCV^6oTl=~tkVR|!(b{UWJ zIWGB`5NKvceT%u{?pX|usf>@`XON?TnR?wkVLP7*;oyJb1eTt_`A<-1$xTk+Uwrke z83UV=a`Jn&G!y=+1CHJVLz~ATAAbP5ea`v#VEix>0b7DCLFRy!?XMo)f3WfGw|56< z3FcnF%dZ4HcPlk~WGth*KR!hDx%6TE!zXxwMrY4JbkUBj?ekTWO(@z)=gwze&IT2S zweeA!6VRr)+6~Aiu~TTVcJc)R{NYT)L|BW@`Q8AJ2&70T(6axd=bAt!eIptYb`rGsHCkNI(&qtXg8X$ z9|EhGxdEEQKgLqDROiU!X0V*^`!y==zW1zfdXy>ZEdmx?BS*bKavCPRDT zZ0JR48~Q|iMF!9E z-F3d1kLG9w2LuFE$|;}ZMKVI@+1haWU@yS;rTa3nD+KFUDB|gKW^)?r!9^y z0`;=`Fsk@o3f+Z#@ za<;!0$OXJLBEE`l(eLJ+oac?r{Q@8W!nS0!GQJK#0%PDp``|=B#f*s$cCNI}ubi_< z$|Z{RNjk%W0M{05`1wNS-)@5X{QWvarG)^_i`qU~2)@UEU2cLAF&>jS?T{lHGa0WG z{^50eeWFVyr6l^D>G>w}qfEU0d_kvju)jTOj568d!sMy(i@w20%ZEx`G4XW2{l@gL zNbFws;*bY}0w1gkk6o1wG$e;(5!I%5`36}xwYWc)NaL7$gyuf-3{?A5fr9dT?b`MD zzbI?zKPG`$r`U7cgKOqQ4?7d@y7pAxTe3ElOB$$~UHc^Pmbd<}CJgBobIzh^*Pr-l05wnxrxKhlT+!GoK?Gcm0iilYK&KqZdtlNyhgZL?VCU7J z@1f&*&b;ZL^*IYMbvj&55F8lKtmIk^1Zd1UQ8<50t8P9s$m*P@Yq!iYro*orrX<{{Y3oYB%GKy#%bFum}^6oZS&nA0{R-Kzc= zpBTQ-W@BU_wn_^EHW7T|Ol7c@3qmvFxBEG#WD{xTQBgBeph?x4%?PQ!uz&l4)NJe77vBJP)FqU5ze z!-yA*}w0&ow%qqn}k?0o!Vve$nlW@xLgI9EHIPmuXgjeja$+R@ut zM#R+OHsIiYbiZPJowvxqvN?s4I>)vHr22_|ewVg0WxylO%=fih01b;RE*A1dQCJiQ zGOc~uMq~2Zdar5Ev=XK;%iot$>KTZCwuu;h9PR^j-{xaGG-)<5aPcz>J)b}8tp0TX z?(>~r>Bm4gpp5rwonFlI$&2>P#MGDz67caYg)QO1U!3yVd*Z9Fe)6?9161!j<}-%U zaE&u_FpCxfn$g~?lnJ53dH&XeWAX&)ty4p+W(mHl&YZ^m<=lmsI^g+C3eLzb>^egC zs;E>U)-)u-e<4-uO(xNcqE||&aC%dnlYt=^z@kO)Va4AwxO@#%b=4KFmxn}Ew~p|G z5+PMDcyRBBG39J%K%?T^-p&*NP)tH7&liOzOhIi|_Lx&1F?V8E?Kay045kNDdT~H6 zQN;ZOk|xEZSgR+P+nAj+GtOin#n0xR{42~sB*j>KL!QfbU~rkDv<4tPYXW0JGvLcK z0=_*yHP_I*#vc&NrRVs@LrcA!`obC+N`oJOo@u#0|eE89)lLXtXqK)M|<>xhK7F!GN zPbr)DOt~2D5&V56z)^jIo4}+u8?H2QSR}vK1}Cd86sS4SlBs5KxqLg3!#DY`B#6H2 zv*>F-MEl0Nv7liwq*KO98wlnzRi88=*ivlrouVl%5*TX_elc-*PitB}FLH^e00qC5 z-;~Cgh5tHSyJn2K@6FsLc>i&EYl^L(1T^@I|;>9qizX-KYZeDbW6 zn(zA@gqGqEesq5;Q08co#oIu5R@U@#Q^$H-qTo3R44Up6^ z%&D_Jd!66KrGeFUVes>57h4JS zIlvi#9{iAMng+1jjK!uGLN?nd%6~{ey53S1kvEBYwo#&?*b*K=Yzm-`yOr_M8~8tL z>!h+GB88Qsy7SRQ@&gP9;$^LOp))tHZSwMboqr+@nDe6tqN zpUo(l4w;wJu7rkf!0e}*rI}2w6#6lN2^k<9r*8B&27FU8kA=~JQkXpc1OBRq`3#-~ z>df~jI>Lm34-c4pnMYM5eRU8(=D6N{_M-k*_bXx84Y;1R?Bk)raG4)}eE4kRpW8C) zAMZZi_~*MVfQ^1vuHEQ)d^6+JbL?LaI8bD@#?meTub$*gY zIIUNt&51YypIMI67@8d??=QN_?J^b|-3! z%;9q2s}jvVNPDHxGtDP&sm`dg1-x8mf&*Ag9>BC0-HnsApxhGPcUoOYwgPY_pk+7G z9`<@K|H|$(4~vu^cA|)9%+@*YC%SkW|DhGRGWjjC&izA<7rtCA2nvQY8QSUV0D9__ z)wXqy0Q*^5{a~z(3pWW@jR8N?_-s;2`c1a`xh8#PuMXTouXyfvO{UrcSS@j~VatjG zOwE~G>kq1%tl-Rgpts*o{OqTne=QuVLp|p&fYE0{0}Uw^fd*A)Av7bLf zq8%pWQ+eJ1gOaRIL)dx1t{TZZn{5Hxt zP)nzNdW@sm0`P(Q)*BjV8k?w(K4J>r&rHvE1A9~0u z+G!b!8cBQ46NI#-hb4;k$UvvupEN5@Up}p;{XI&v`mPF=fBUBg8{gzldDMCBkT~0q zKg^%?yKnB*_LjuN*k<9`k)}4%pkF3LOulfrcG$Qfvn2rY{mTIIQNFV0?eJoczSpnH z?FxA8q|Ba~y&M}ObeR0S=r7tfJ5k4|1p0BC8_*=x@yDCYlnGwMzfI7MMUziHGv`S0 z;0vQ^iKtE@WcNmIJZPerpi$4heDzuYQa=M3IY;^ev}ghNm;c44t9DenS~(kF!iTok zAG&j6AgIZX2G93%*l$c^o0W)y8YjE);B5;#fD}!PMnB880`VzF-T0u%Xv5Kt#=B@+ z@o(qwAH9g4rL0wJs$4UHktPa}Lko;K-HpLSR{;k3?R&3eYI)CcT3i%pF*$nC`f@xu zL7v)7b3PV`Wcii4%1m3%bF0pC&-Y)rPiK!-^uf)xC=UeA7u{o` z9o1n=E1s2{_*(8sg7%_W8)7qOW^ruyd!44nU!#_hEzLjs&^VkB{K`4_lj2hI#Lkahlb{Rnb4lW6l5mdOUn|0 zyp(x@xAqct+RVXT+S7x!F3X|*I#2q3;Gtr~VJRVxn*pEo-M1}t{Ub+w{Xgh=N44*b zbLyLg#j0T3yZ2<{;}1W`9H=%~LJC}&6lhX&2Eb`kr!pH4x;M}Yr#E)f@b+uN<3RF7 z?RgS_I?o2800YS+>@MJM!;XZq8`8842n}hLFvZ+5?0;+roT;Rc|7g|*W>V8gX9DhG z=JL(Y=z>&@VD!&i_>(lV` zYha$X%jy2SKBJo;2yJVx=RV0q+)WOwA}C%m<1l{Vp4tBc&L(DuzT@9TCKuktx05at z9q!z^9l*4lCV)T8SC=!WG?`1u;Kjf!zh8b)>u52)HJ&uBNHBe}!N>V%NUPe6pHBt) z+&F?HmPXkp;ZNn?v3v$tYtQ(?I>%{RgSw4jX)8yy z3jpc3e5IX>XJ@uh?})#M>V7HYXFoIZXmnRf4y4*omT!HMT46RsNJZ~v@ayO@=nF7W zsR1)xT| zYNi));@h#+7drTzZ)HHVHcyDYJ{i^%3Hyr@4WB*T9Wzj(W$aWR8<)maUe8_{i>;!5 z%s=$alaeM4a>9jOET?##@Tp3GL9M6r`lRggk5cs|f%eGSkub-kQz5elPra^$ii7{K zXFW}udXZKoPmWS`KOfp*=HY`!MKc36T037Ce&QRVjq)EJHFoDK?_*4*h5$wkz3!-k z?=A&2`0PnZmOw@}I`i>S!d25p%U1nh(hQnFIKK(5Xe+nCfMSMzKVW= z0o`Z-0quaOKI6^Nq>`Z(tPHUO-N*rjAa;n?n>2gg>n2o{7|up7o6cS-Qo7ed^~dEt zQWTUNLJQ_K+2oDdViuC|#teXo{?ahzP;MumC$8_zM!5DY^srZ{;_88^agP(u-tDk;Nt8zF2;0%EE8BqC*2_4jRpH~ek+6)0!TbR%w4gn&> zh_TLS2nIk2@!X@|sO!$@^f@1QX}pMwN}${2Us-5tw;Vozmk%Fo{P_KkX$EZ+&|u2F zg4W}}3ruJW`lVf}eJWAwem!K`1!*tjBsY*21oJa-nu~DV%Lh_Rnqk}YA@H)t8WR=x z0MS`W6vNI8t}k;eb~Ywpa_S(5?)0@!26SffzSGaiE9*R_o+#yw67o1ack^}7j%sM% zw-hF(Ay9;jhRF0`<|tPp?c!-Zt?%2>#bkocfJz$(Z)2Ky+$vMG6(NIPV;en^r2C`)_>y@Q5&M36)1L3_m)1g6JzZ}CqT2# zg8I%k#0<3hK#Iv;TEXk=b2Xb@CwTj54X*>zHYH043)!b#s8KH33S~Ko0V55WmZg}V zbP#|sW^d;+$!rK~e9XQw_;EFJh=YCBJ=PCCDQ!~I%$ifQS9yZzr=qCI;d$V3=g#f^ zZe=1r9(RCLm+Mz;{}xT-f4Nq#O2^=TGznUQa@e@pNm>#zKt z#XH7HO3y(&0Qem0ppiop?J8^YL;tMG!uomAgz!t}nlvr4r{&6IKi#08O|Golz22X? zsgH7=&x(tY7PzyRZ*K$7P1w+VtV9_}tpA&hvmJI~$`VJ9RlexaRB$j6!W-B_a!eAe zAoS*rnV?lflqk&9t|K)*8M4h6X7tDD6NWTV(yEq7;2`n{+oEOpya3b!JPQF}0%pk! zcrSRq_vi52ye0sI%F`A#6+i}p4JZQp&94*X3cM~ADMPTMnDb>b^s8nkh37<+Fy?`d zbZ^TKlnYkL6GLL|i4NA58#k+eHQH2*I@56YE&zoMId?KQ+3M8RVYu#jlo`fRZvdHG z&{UEfBAN|=!{Y``KgVI-XMQhzq=7jflPG#7LGfIgqVHCEJWexFAM3*pKO6?p@7eOH zK6nN{7%jt+qtRZ6@l-Rd7+ws^T=?cs-=?Nl2drx_rCM4BUO5$jMZ*P_G${K6GBbA5 zu%6`jewsN(D3}m3-Dy0#`K+GhZ+aDD?IpnJY!h__h&0y8?MaCAfiDK&tA6n8(erjq zzLpNqZ_T7;TjQw>otl96eNJ-EIO>bnC4Ih(ZcqE|L3Yi*wsZFnveo-dr0-2Lx4j@S ztqDt{REeELul|S#%KR^pHy{L1qJffaC2ayNe0`X6cNv+iQFQyG>I~NCFZP zRVM=6c|C5-&C!elO#C3aCrYeOcG97R;H|^n(;WD1p5{}#5YG{s5AwB&BFfd`#KT9b zeN0|lv@^|1pmh*Y05)~B67>B75Ee~ybM%-5nFiPMdN!?9jur5KkXGJskM^tPo4Y;l zo_t!|A$`@z^;#eJJOMRc#IrMz^xYzpi`*F_AmAM1DyYM!hPH|-9*_4fMss^PUduGx zZB+vLTLi6aG;a{CSUHG%EM-*&pT})fEDF5VQqZQ$qt8i&&9m??D@vHfx^BhJM??5nMyl-Nu%_ zn$uJnkR|sh^D4XEui7<*^sikV##Q~1^Hs%zTHJRDZL=)jmBM~hdp;Rj4U^bx4hT5- zor`%L0EY&I7W`VGVM{;b)y@HAfJc;$W^_H!1jO3R-vz8OKQo!8HCjWoK{$X6_<Q0dC@^k(>0Tk?Dla+%FBSM*U^r8GrO!bGw+vS__!?USC!a3 zSA>vn>qVOCn>4Qdv>+8*86oQ7ThQDn%@}Dr?Rn}`c}-*E1~qDzn-!JnIjkSXpY~GqAxT1<4-?^8$&b8rc`Sk6SDhDl|biMZorGXVA-vES-|byG*^L){WK{R zEi5SlK(lI~KG`1blaFuDlBqZG#r^zeR!&5!@jLFeHgfmL!`dH@#$S`#khw|YK1h?L zr7>ltbuj4%tk}lA_urW`EgIHt+6|z$T~{9$|06K#!$Exo4~2TttgIo-e9Nr%oy}E& z+t6P}JJ3bn$eLq)#Z#*VG!{giSpE|nD1WXAQ*!p%CYul9b&0@dqtDxN;k%I+9@^6_?JB&KPyW< z=4t$(R1w8Q(zDaJ1u_YL_O-kzz5yK?P>Nx^_ou^SGB#+#G`&i2>nZ)eT(ev&?V+c3 zaA5NDb@d=6dM(64xFw&-d1l42gJn2(FAPt8#(8$L*#TIom3#SZ9%r(h2(U1~_}A(f zhUKsMAR_Q9n6&_e=p6u|1(|Vgv@GYtJ9iq-Oqpg*v)-u$i2BdDD4pSXnhz6^7G<`v zg%e;L-%Q{)KokQCzq>DHz=VrQmT`kI>JuOXMxHMRNVt~6wNCY2OdDYq;aD865ecfD!P! z)sh>_j6@S@_9g}#8S1(`a+?$ou z{?l^qRIo?@OhB{0@X`kD7Ovg2hG+TJM0)WC-z#lLFbik_RFjFQq-q8N5H^{ZB7M6Jx}ub)vo~-1nkM+d4wK<)E9C22o(+*vO3>joc>3#u0DmJo&_1qOW+8T zLc>W0?Or~ghI~f?l+pL7DE%y`X;_C0o%{v``L~-PO@R z8V5{x6PTas*~<9rb)SQNf7>!H^ydaxf?Dxa*UnM1cMDEDPZqS@mSMBamzik=Bf#QE zufwRF!UGI5+Bq{= z=RW%8n~eizU~2ZuG=U|GLNh)+n+DLNfSehOI!k?|t#PQzyRl-Q9|*ehw^**T6(By% zCuX}Z`9#n1MchoSKi*WqY;Zqd1gs~$p}ve}SEs4Y9JdD6cginw@GdGW=6D|gsUJpi zv__1fja@@KB5M!z;9^6NKUH@5e!%-2J!=2kw5M1o zhkosS|7-yhk=|2%cd^-AK|h5E(d5dNYVc2C^M6$ zf&|VtK?qK$220D@D@m1^&hc$27EMTkBpLAjVG&m4vuTt3oR$MUxc|evK2L+P+wu8) zcS_v+;SaxCcr*>+L;?rY__heCMAwG}RhZ8;A{vTnXT*6<;G>PwN=88_L06GS6Zlc) zI^Wf+OlI)6A6=P)!1Z;!upi%q-eU$z9Hm{Qvkk2mU|M7npDk_|@=U>4`X@4nXa6G0 zi;_T-L<9gPs>vjjWq74YRM{M+-tlV}hyJv{{rFL2wo}J7F&auVn2jisKS19N`y40s z$8~X7xgTSv=zxHebeXr^7Y+25dNQeZL z2QOf)C+Suxev(QJ0aK{!lKV=>zp7^agF%jy}?l;lbM(|`Gg&M(>) zf#gF8Ih$el&)mi=O@k7h!|d{YMjNc%fKgP#EDFqCGXokdi)lR%L!b#$Z_K35AN#w0 zx!>hd6PS#)wl}B~?C3hlqclkL6I5_-KqC9tePp-;BdHB)Ma{Jd#M?mD%w^YIb>7j{ z`KNPO9+V9FtjOPsKx#L@Vp<#~0Co+Yu=D_BeeXV21c-cH*~#Ht?%I`1vTH?FKPd0& zTGdjo@8ti>^u8S3Zx#{zlf$9D6?K@GrB*^HGSCo7iA0)rsL=CONQ(A@FjVq zY2oQbo)@43SY&Ceg>a%$^Cfu5H&Qp z$$TGoO4=2x;9N9i9c|SnfcG#u#&k_unXcUn&1rgM$03;Zv_;_(z+JDN)`?&J`sZKw zj5!I;IR^E6s0(#yz@Ufx1$+`Rzr{cf=ePz!dQV{dPR+w?hzGEi?_9e)!(vq5I|lI~ zcAw?5=(uzS;ng>(g@!S zIKP=I`p%Kd-$gi?u&#aZ;K84@Gd8>kEgzU&TYwi6)52TPr4QRx*BB@?XGa%NF6DYR zGd-DBzziLoW9J z)g0g#1FD@&SfS^0fsc_Ukj%j`*COls3a}*cKEiOF$Lu)_WC_XY{}|HnNd49BP8U1ldbS!!}KE}n&aqsgj$x)2ZVszs!onSAM@N{Lb z?dCnfq58y3p;1Z{K2x7$u-_`j&4ec!NE_eZFKVm|PINufj3|>GukEFMJ+$S0y!S4? z0ro@tXiD%@tC&qC;!o=|Il@o3bI?>4jZUgR5Xg6#e3s(?d%i>_JD{?O2jH@4$H}h4 z%X{6ssd;=^FXNrV1erPAv^*(2G~D4!2-rcM0TY$Lv1;)617DFfW5^9ct8^F#_2cbn zez899a zL&(X!f+n%#l%J+unph|lEFgW+f95-1tm~P*V-k*YxW_NrPTi}~7~0m621;d?)G0*HALfs* z=h1`eY!!i01;84-*g|N2G@2V`ko=JxB zG z-u>%$jJQ({(~11Vd{Q(e-&?Yzox3H^@?*s%IkPKolh~R0 zEE+Fc(x2$M{q8HF_E>a(R^BoKpt04;s1n@0Mn`_dpF{0i?SWg_nnyzQ!oVqtti!(UwpCj zCk7z=v+GX63e0I&z+vc}pvWxN7Xk`=(O@$T$h|iMaL+LV&~^yIVKh^0uDuVsuP9Y? zKc3mx7*Xpj7ZN&V#$vQneFtEdWfEy?393E-aG+(~7qbt&CY>Z&_?_Tc(t>emjy=Ut z&crb(D=|E61sKS^8Gx*B%)k=~6Ah2g(eq^d3#C_(VdH$X;*~p5n>b@f11^nPc$}$c z7XGeWv`(4!^L;LR@WnCFflu*xLU8SB3!=N9u~Y%#a=`QDmtSU9zQ{jPVrl>B7XWiV z5#*GZDb7bOkMf1m?KcN+s z<-1zOD5rUmTc)85cTV?7{Hz}qTEA%$;NPRA%6Zet*NxY1&wiJ7Hq|tG?#uW^{VVqu zoFIF{d(rH#!D$h=<=^3z?v1ClF_supd)zC@j{0M^?%JwNSL2T(lX7%;)SsnZ7c!L} z1l(2#Y}S9z=c*ybG=)>>(&TiC3Re3z1Ef(<;vo~|@tATmpYnD~fqp31brcZN!ejOY zJ%MI@Q3mLF3dI0f?UcNH;@5xk^RIQ109xkIcuYq}$YMs!O>-gyanoo;)H<*wDnX!@ z&s`UDO)k~o)dF}!lmWnnnY*w7TB4FbVl=kCG$Zk&U_9TMQG45K&g!FP@_Y*?V`{Sp z2vvr{>}8+`jWQmKitR?!>`ax~Z0*<8n;&GlQ0Ks8pOfIB> zG08*;Cyd{2zlfqAgpxy^V9JY<2+AjA)jc(Q?yZr4XEoX*QdcXTYO_`czLJwJ~b6 zL!);k9nu!n-O`Aid=Vlx7;}ml=BMJjTK3Tk5bGy@89JL}CTdeZW}EWbi1z(5sydKB z8_B8CA>@ATmVTkO)hxaa;Pgc1Gc)5t5$59oma!!09J}5V5W5+f7B5695#sZKa_|~C zW12TT_g!l=x6W;B=U+RU;MkFQH-^@?*_}Gzvxu1nIc-KOpkGg3cHT~Y%(p#T7CW<+ z#(1MFd7=BefB4s;&_!h9i>m?8!@Gal`0@AulE&946ajqj{oTpCy4txj9*w=4YWVC{ z8(;7%-u>h6=bmai5n3(^^xrM_jkbH^%Jod!d_egXWwcwmB=9l*soD%^WwP7VS?-k_ zE83J4hJ$$gS-k$X@owa%;^^eIB`a`&xkPpyWS6NvvIzvRm2}##gbu z!tq>UL%=o#@ds_plAQpM<($71rqfkkt2JHG=bugtjR#N`|hbc|Nfy?k`-8m{y`q6+g5+IOz! z;!F3Vs_r$D&=SuvD+4$kv9W|KTL3D&KIaaga$Ew-)Y5*#L|$bZEAA)4hLEqGOY#(D zOM6NnHk$<=wj|@Q^Uv|mBm{mxR|H99>`;l_Jf7}Ldm@+@i#YL_Fm+y2S({loTRG%K zSk`49`mc{PA+>!hz@04TzQ6mO-K8%yTb&=D7E{@5C^LV24ovVER6#zfHcidwRi$ z0oZBF)ltFuS1=D69?QSQ+>9b45Y97x<5;e*3hupYQZs(W2O!0(<9lS%@;5OPubLF1 z$!2ta(Vxl){E)Fgf}T&M{-8;n>{&UP6J}=0>-|2ZeM^Sb9?L_9zO~sH=@*{3&^V%p zF`~Jm75@4zx=V9GQ`*t3^5giSe)#sAGO!=^{jrUYKmN4U6n9H2d69$tN?H(;|JbC( z&}i|2v9KA363lqw?%lid-E6mJqO0F8;@>1L&}w4u`umxziQ8z{Xvz{GZ^zTFEOl|9 z!&bh@-FANJlhth>jikyQfiF9CHx+n#su@e8%)-9zL#OrzISLShV7F1el)ZphB>V{IJD-!a{uK(yq?kZ zA{s87&h};{Ixy@O{gnrj09#YH)oh5Un>|*wOWFwmoSC;9V@eKuvpkiXYUcjHYBPYj zVwHW_?KA`f$1Gx^aC{Ts53Grc`Nuy~17DT(O#_pNO85w*9I0+T%tPx$hgts@q4`LF zlZ{PjiOgI+A@3~*kxRwj0=Q^kR}%z&El&Fpp!a~!G{JC|Ch613+V?Vn#)wR~)8)a) z$r|Ag&6CpxKxA(_vrOT*fG6j&d>&O~U$o?dcC`#@G_C)xADX{^CY_53axN3-WzU&v zqWZ&x>s%TWQ-zl3{RlzAM)T_7X}7ekm@2K1W=8cltBTwK9mU*el#?3KZ@{R*X+e9w zn#SRL&v}=ID{{1%K%Q%?FD4Kd`u=#&?W+mE;Gi=XDsUH*1E43RCjec3Qp{~E?8!GX zd|)q4f_AQzOn9cq$+TsxD7XQLq%iQ4D*tk)U5S$z zVXY0#;P1MJyenh97l7D~ETgR`VNt}|#vyGCnLc>Xn60TQqzfSVe`Gm2sSG+Jr&C=& zNt*6a8#u%LYE9tDczGxK-pYjDiFPOA=X=S-#iFE_Z{Kcz%u;y@X54G3jTIMYzZ8g! z-;!NgHCyOx{gT5+i?b-4Yk?(kyBb?+@Slzkp0*-jKUp}@}%ZxS%AF&9RP^gm0cXGHZ zmHZq4mANc|&^;}Nw%yb8CG&;W#HoK!f+LXDCk%=Sv~j=d4Ep><3_vrR4FqQTF$sZj z?DVnco9Ugq2>9|I7)!C3THXyBSa$#sNw5PZaVAi;u1e?lrvTsLlWWEsXK{>KKLIkZ z7>19w5??I@e_E~;!AK?TcY?;uqhj~IevSDMt(WwI?h`NoJf@sPOTeZ)@GLkk&uek! zM|X6I78A{k?q*o43J3`8(pW5MCLGm)Mc+#=kvToHas8qxHDDtEk_%O-u<@00aWH43UC3f@xZ-nB%{1HE$$zMhm+z%5C_()!jd(Ypde(I>GLx*q zeAD+v8F=l|TI<(~=xCSo6u9Aa36*3O-;gi&Bubq+;K^h*kr1cK-AIw8r3&6z%thltpn=KK*8VjAU>$JCB)%nbCK3KN~1RGO8> zRA-9Q_8e$I;Fe7DOe|Vcjj>o<3WP*VMu5v_=jz%AoO}OlZ+_Yi&$q^>aXR2WEDB5umX^R&d!8wUe~bj})flR3fsXyxB5>@T7f`CQ_mE< zF%|*~%33=%Ps{saQZGJL6OY7e<6**yN%Kbr2IZAKC}-_t(Xm-OSUzH^>EkE`>ykz$A3MRS)r5qe*~<12-AzIi7;6l zOdX6PM)=vq!p^h2pq>GNbNMxxp0owRZT32qb6q};XN?alf>ZT5UoEg@OPejv)ZYCZ z)wOyUZ?vwaNa1_}B!Z?-zy#|Pk_j|K0^irD=@TD~_M_3No?{9r2Iw+5Lk*(-uQ_TM zN4pi9BSfy}gHvk92Da>e8Y9|nmd-%y*-EfQp3JsW(h*%u&sQI zK!a$YRs62UB<_n9XlgVrp=9^d$3|;-fiFQ8`4Sb&eCWEG8a)WL+#^6mL)0fV%oBjF zmj=KjwUCw5d(rc1eWjn2gBOu}e5vw{vU$09g{XVw`;ae~RD!O$4ND>}K^ zP{oV$eIIcgUgx^5N0_Eb7u2zyGmV&e7^&yHS>#%y3GfI$LUun|%61@gKJGTFziR;3 zdOMvy!a?w9Rg;I+v-pcPO9Qz5(e0T{v=IPWZ}{w~5+da@1rk>LLwYJchoer}fks9( zt;fJ?F0eJ|4)x4Qg?5f+*$IAE=uMxg=Ki$X_41}JWV-NsxW;TosLX7x8wLXa`Rth4 z=*%pWOGJKYO4|*rh#01ziE+>Zqsy1B7M`zyMJ6jhjfsZSbuXv!`8Jne(kQtrVR5w1 z2=TZ)G*MGgs;Twfcf#vRPNTb-dI3%SqVDteEm0t^K%0i8F-qprAep+rkiX9+4~Cm| z#q0t^Dqy^B69;9lkH-%?GUnSg*{d~YO11EJsXN7|bj(=B)O& znSS^UkE?tNtjHAqo(m;Wj?oS&F*4rC@C+lNu-Jhu$kXE^))RNs4hx2K(PrLuy zzT?he4d~-RipQ9m#;=RV={_oRHyJai8v(A#EY-O{W)e$lDD+%G31L=X@}2kVZwT_& zz%}Ml=P*MS4a|LMa1Bz8;uBf4uLT%fJAzyTnJ=8G(g@B(a7?)$qSK1(Bn*W3D`Yqm zvJuLNPjxwF!@}i4%7nysyH!GvAo{FV<2o6{F{SO;RraJ2*unWpW(;jb zyG0Y7t38V4O%S7gF~hVOYTAHRTPzyKkZQRDM%p8jz8e%7Yvb1Fg+8-IRN53j;F+A= z@|HgN^uuzXKHK>ClMmB;S`pB0E5;9q$&0hG0fDkKi{7HnaX@E`UG>eVBUnWHdSxsbGjL z-)XlL0orZ$NWQ2v{Gz#bDLQBkp~?$y>lc%Ye@ps8-lYMg0)Z=%bk zKr05E;LP9t{oe z|ES*?)GwOsX`M6HwSl5@;%|Ok9+vMS2;bCtm}Q)3(5F;sC+ln<-D3IcLd5Zh84$|> zy!`oYi03;$^t;Z?EY@#;5iv2n@0mWMPWAvmU@%CcnQhkASu#={$YG|yL9-%eSIz=p zaX9nq@DX^GbG4nFee2E#G2g`zrkBm|v?l&6>imAluDT)+GYk36cJ!i$?rp$5d*^ANl>nkWpxWHRWG`EwesSZ! z`*;8C#;<J$HvX^w`#)^l{^WKu zZzg5=QKF^F?977be1fxXuXfn*Ry73LApXQVD$Wuhfb8`N(ZYK{4?CnO6ds!!svJ`HA@p)0# z{Ff%pl0P5jgQ@`wZ>Ql=PDU~4evRgU|Hb;RQmY97hmjG$`KC$J=C@BW%Q@g*=d6F3 z>;Nna>EVKY`v1hQsyN!UbC}T=je-47#jKkVg}@Cldhb}l$tT1jw5y=b3Ge>_Rs_{K ze($Mst?w5NO0$=SkKlLC0&;(uDL^2An@C!WY_?R%;qk+kVua$dXsy2ku#=+&iMwW& zt2D4@GdWHNCaN3oVQ{o^m`WPdFB+9W<4lG6(~sIrd(dt`ghAIeexrRfFmlug_QEU} zSxyjV{Nk9_p9QP}-rA@8D;-6esO?4oaLro903jskyJ(v58VAltGc#~;4>gqdkxn*? z1NKIy{&ZclwbTTf*pl|4I9;YrKqj@s_V&0~XnjoF-lH=IyF4yt4Z$4$RWz^?K%X0? zzE_*2__y6!e|4$qL>;Lh;Y+Sm2rOKy)LH@kW zZK)j5GJsMapE>a&@KXOuLA^(X*kzI9Fa9BGBWWVW!kW;}KmTH0M@x=Cc+_ z!DFox1RD)wU~CdmSqJBMd79}Us4e^{~l16~7_~)DnvvX;XmNBL07a?q;;G%z*n6s7GLT`We*~U4tNK22G|K)eTn|^ic_%X)mzWxJFvxvREZbftahzQ0A-x#-x z-Jg&8@|9~FcklmLWztrDbPJJd<+;t|TpRf9#4jq~M>q`X;&APO0R#0;yB)|D4F@fQfWcha9fcN#H5F+j>AX zyb1ZElJRD(S)C;a?#(1*%9w%VUx_L~Z!@n=NG-_#G!j6)%4VNT_xhlRd?LWfj7y`? zmQEU941&=hM9Wmdl)HsNu#t9avF8vD2mjDS>UxiXCy$4A)1Y$#0}KN}Yd~uWtOj2` z)tG1rn{{)T;7qfbY;Mt{{hYKix@lO;R$2L|a@sO?qS(yf6LE}Yt^;OvsFAceDJRh! zAfq?`(?qRkk^uu30L?-4a@L_WmYmWy$GB7^jmZV(wFyJ66B0Vfo3oP-^H2T!uYUFO z{Ak-7pMUXb)gjV=Dj#gTpSOV6nnTmSbPp<Y`etpCijUnWKI8)g zSljjSVm!9l&0hx|+HfYmeH`zcFCWg5H@+sWg8%Xl|2X{V{WRu2?`p?m+9!F4P~>?w*N9@{yZxJ%<`8rMVOCi+A%KDk00Zhe z#=$-fS`c!ykU~)vf;HO@^?*p;%JB#K+9;D27#4bn+aac96{J`Et+~kvyFT+`Ln|MczA0fdkI^B zbpOG_p(p>6{R4ri$eJ;6RDG2niNB5C3V_iHX)pkAK&jayVnq;gmY@&$9k2&Q7rgV-bTN+h77nn&7Ri+2% zb)&9Jc4`St-h?_!SvqGltC6do)V-t3n18jnHuKS?!J>ckvJ6L*eKVTco@*-m22PTt zO<*IB@#NW_zY{NP*Y3;Fn``A!^ncc*e!l4GN1uNluvVEAh$Ua&e0MhtX=3iafO!TR z-5UddwKJHKtkbk+jO;b3$2GX;Dx$boVChM`s?WRe+kUiw1NFY~>OBoh1AR$@7$NIN z0Mc#dm4pn?Lk zZ8E6qZ0<~0L6vE=c1rYL%y})pT?NE#>{l>Xl9u}=hH4}7-&CR#YeBbKo>Bb5A4xG%`957 zKJf+Op&D7AODqle)OiQqmgE31;AI>vns%K8RMA)C%H-ojw{YDGi*cyOXA59ep82EC zh)4wm?@tta5*}*<^9}76H$lM{lTHBfB5lq2l0*5a9(Dg+QN{RoKi;t%=U5ZrS)zFqT)eUh~@OWNfim2qq&=^;6yB%K7#p3_xjH zqI}wgXHR9q=4|M<^56n3=?Or`-h@wU$Eo=E)1Q73O_Mp3TodpA^B@0XW4oB`5&8B^S#`pbc(7f+_4VvpZPiFy_-)9DMzm7k507cf%e?EsgYlg1# z5oSgCVeS}?iR5}SH0GmKa9AF%y@dX9j88?kTMFiznXTWpFI5+*z4`c8tTVINmvdi< z6Ol*gE^p~5=4O)F7*lN^MATo;*B?EmLFu@5Vh{|&|1?@sJ``=E1?fA$aK9DQIg$Hf zG%+By`ngbI=#?fjQOp=rbxD;%r6)XUOC^lRcP0A7FXQvG7#ta$Yca4=yUZS7Ph0EJ zL;Fd5oW4<~7f``KmS8A!2aJKi0VlIQyRdfJ1XRA7XdN1zi(y6bXtj~ARD_FTB3ndm z(X=^#DPnlEaqCu_ezdsSl9?;l+7~e(xZctyA$<8)mm3ctZRZ*jgLa|A(~@^BuL7dz z1N@b@v5^B`5_*c9(y*D@)|#3;C&&{2Z8nZ4($LUKK!)j$*6xEY_y>PK&%|_pi`+Nc znFjCD9Bpi?UBsRFhF<`h>n2JZf6;DDta9Fd_b>liyGpLi$9Jy+kh_`Oi|=SL!?lB7 z%*16v_e=mo!1*6{TZsUqW{<(l#>um45}l}EbWw>@q?@KOW>J6x7#sjgy8yPykE;N0 z#5hB5=>nd6k}VjG@H8TyNfQNJ%)8_D;bIeIO6y5_XTmfdau9_twtCK`wCLCM zfOfHZ~7)^#u zcr*`rj)FGVio{+_^SyQRR+S(gZaj!)>1mxJhf$(%K)X2IX;?Yy`e8IC(`^6KXxOue zV}>$okCV6a98^!>0yT#s{X30}320RqWbW7X176*f5YKu)6nuX^A;Bm*vz+go2BVpf zK#$hd0Jy^J85~aZWiP@BrC!{*oWt&FW>wW1(=g;Rg-#pCWALqVOWcD=sI09psuD9= zJTq;1U6LC)QfVKnre&bDfq6GuvB%8J1c2AL&Y)27M|+I9n2Q)_vZoU~^z(i(6}wk$ zpmJ*qzYPr%_)cbUC-aeTfHQRfQXPnv%rGvbr&8`u6E(pCxc@BbLACbWvVf-=+2qWLp02 zcfX6L>~;5ee31N;=wlUuWieg{&>C|>PJlVljk6k1&bN)aJS!T)elxT+g8EHMqQ&At zX&)l1FH8Kye`bC@FA+h9O+uNtc+c9t^plMzrHgd(XnwbE-5%f8+vo^9Xat=aP0Gs( zu(mdByelZN0Ecu2QAzT1&Igc#W2dM;nMA8W4U8M|9<%F~G4d7x*n-KID zZLIeT+S0H}ysbT#lYyscp7={pVz-ITTE{z|e7149QZv#lOc-(pfBScT7tO7PS(KM< zGi~Ni9F4s`o1(VJNW2Cp$KT!al~)p#jshE>efH_bpYDD;d1zK*&{Sz!16Tk-=lnN- zqfErTHaK)bYq=`dOgf(HmQ6TknR zbAADi#VNn~3TYHH0Dt4GPe9k=bZRA`g-HS#MVlTMsqwr^C4@3ZpX9TeT30~`z_a= z4xFxMmf!mDR;v8fjhlCFjfTYet@6c{)O-Ctn+eBsQ@+P!1*~Wwupj@>Za)3wlQ3k- z99N21+iAS`koHI5`6FpP%w^YkFX7d;Yy53?PSU=kB8d9|Wlpod(sY@dS)7mamJ9%;z2u)(+2kgbCB= zbJI{7C{J#E-#5|^XfcGufAM?_Z? z_et7hh_JDl#tpRIbz|!q&lffP!yo^cx&L69Xu^q_G!4O*d}#c^+nn!dbu{?1t+QNH ze8weH8;*+np6^+=KL2dv_up4Jqwl7~Ol>&vt1{iEZc&4W2>_B1Hpe$+G2lAomCE>M zuxbDhWWdFBL)6r}I=QrQY3xKB-K&$s$a#kQV0frbYv|UgeUUu|VXC1vO=f=YmB21- z(MAK~84;=bsChNjH&buVrDX;05$zA-2f6Tm2Dbc0M*CC^h=FF`xfoVj9S7v%`{H2c zcyrjPBLm>+Hdli9zTANkUtwB zq#<2SL&k4w0YSUYNIg-s5TkR@|9@QFX_H)6lA!0n4kVC30*QqL0TKjv7Q3puXSy{S zNi#B;WHOm#GMVXv{!aa^G1GTRt?8wzdb+E+Slj?E*w@6q=zaWVkkka2jEEcep2d&v z?#GWPqqTO{;QgH5{GD4l>ZM~40LL3Ula8;@Y0;vD4xHdK#M~V|>vUz+6KG~!0mt&+ z*s6n(MDp{;$0V!#R=Gti3~Lt~Nb`;1pLsLJuz&UY-~TDtT3HrB_#6CRc@K89Y{;X$ z48f{;sK_tBRa88_s7JMb^~TMz+2vogG%JPWO_Ari?6r zQ9}h9_)C{-llPc#d0Z5DC+!^*jy0{0#~f{rXlkN9OIvA9E$+HKdX(!Xt-txO z+t4tsniZ8|a`;{CqAnx>PORR2`|YXQ{e6+1Q%QXxS9=DHhY85HL4sRAD(XZ4Yfm1Q z&9SaaJHUu+wVCHa9-61cFs}8x`T34G%^QQIz0CR$XU5q-T8@a0h0(4)EhN=>GT3WZ zTQb+F_ogmNNDIN>W_wiER145I;zeK>6oLRD{yXq=OxW!z4=4rwBuQo8*4eaAa3^dy zj5)2RxL-&)$BH#3Wt8m}SRBUHZ@ONNQ`)O6eZCvMyH}jHZP)nd^hJ^HkdbCdMS9Tdq%V7nMXHU`1=&YMeimd&3VzSgE`KrZlR135$Vy@bZ3_ zsn_)}1q-$iB7!Y8+ta8)>Bg8zwj>-n5=h=Mk}_1&at8AG2Pz{^Woq#N^DW$A5RCx52)#JkHU6 zFAZg<8fC)u4wQ&mCJ;e$l=?uNKMy}1W))ZynkN%WK9(04!b|gt_l#iS1G2ufeG%1V zpWw0+0DLBD8qF{XH|qxjQk}%%u5fDd)#`KT%Z$5rxIP>PaxA#1)-YSvf&*(}Dt^?@ zRyFXC=cBw|Tgnd|Ps{q^i!a6n<9oON_-c6JehjR2v%z|!-)-HYCMbA_R+f$N_E$QN zu9K*`@8A8q|915{!F?qGwC~SLYrvJ)3}#_6^b5=@#?=EPMPK~a3vr<%zbycSi~!{~ zT1bxu1Wt7A5Dqkmc{t8sSo&L-*7Upko4%>C>-*j5IsMh+EXa({aAx+4W3L~EQ5;XQ zGhf~eh@5t|Xq+r_+Vhx(9p^^jAOg{;#inkN>W3C)LF{K73hX{1{vnb7eA4M45Ng*Vy(zy20 zy-vywBN@2%e2dPP;!iYeVMYNZyH6sby^F7t)GA{Tv^UdaY!BJa*+0zu#;y7UlFy0NJ^RCr z`;!^|Bu*vzXWyK44iTc8oaez0E<0!NNlXSS+aGM1iq@Qu2;KQZZ(}C*jud8lS}p;w zg|meJnx4RhK;7s*K1$B?*TGQTb!#ACg())aJVOCdVh6r##E7?J+P59cwR5kM(`SQ2 zhobOn3H~(4cR%|y##=zFi8~t-7yV~iR&z49^=n)|4Hn)LT3cz?+1W8H7L|D|!UI=< z+X7LnlzT;TKY91v0y-7^n<(K=ZSDdi9EON7QhLy~Z#vA#hs<7XMXDIEF{U@>M{P#h1n@ywu`` z1T((IL+bgnkdTFMcaq48Y-L84FMX9&;iz@Q|6+NJ(f_$bwUPM_(! z`qr2niJlda%H4c5aACW#v8zHs#y)2rP_Hrm@eWAlj zg}-i>aCvA<+z1d+=i9JBo9TTcEl}lGl3b}D8pH^_-Z2(ih2RGbRFu%#9-Vbu7{r|I zC{eUO=C1I5%_d|*`Up=j!P+XPayzDF-=DJ+5tH--ndxA1_s;#9pLt+dvy}$?oByQG zMBp?g3<`6^u$Z{VD>p*}c62+2#^)-to>tWq#tfB(KWQq><8~(I?T1ChVgOHr^RrBD zt_9lE678hH7Ws26Tz#_ZY@gp-*gMbJc@kjA#7(;7(ZI~y9bU5==su4ki-uSYU0|OT>gjeC< zo!0P77S!ZnnHA)~L>5M3nh-`u3v*Z;=6GNC?t%hCnfn_EhOsc0MO$;7IFgw!MuCaWHIKQ(s}jX$F{ zy1-P0@XS_akx38pw%Fz?V}A_~Oh|^i=by$DYO3E|v$rfwBcBwu&yd6m??pHuk8^_WcB)U~2tx7rxJ6EoTgai285=e6;u{$8~v z&thDIt|3ygd$xzrBBYUUIN!fl;%O&GfBW^7)uZ4F@t<~-*o`aSuWo#Ob@iZre*bsB zU48rcmz{RhNz;YhIeX{;06+jqL_t)#pT&?I#`z+j+OuFUS8FS6SP?x=en)BDOptu{ z?bUoek5}(rx-?A7HF$+6ZG)i=i87M@O7tFxF-cKziZgTmaZY_^utPpXGMPKp)c#Xz z`J(Z|rzxJ7HY**35JIJxkF^vCQ96b{PQ=-BZ~`8Qo*^m%Y&5WN$ofgQARt7QC!o<> z2~(#c!4)}5Z(n+6wRQH*)$jihTw=y5yxOx!C}9u>G3jtabdV|Nj7eG#O@mK~-}7ier~urbIvJQ(gANr0T9{r8ZvKE}%p!H29$!nh~` z1ZGe3IoY^2g3H+)?AyVFmMOZ*ggl=q_+3J2Bdz=LhaZ(gW{Xh*0AfI$zb87>=5PM- zcg-Q~DHx$2jCQuGnGblr%u-3fIg!T|+L>|OZ%2xCM_;ryC7}uPr=3vLoI=t#>-see zsKzjZHGm9${qj5R;+-ae01ZYvoDQ^)m7T^eobc)+=pqxEJdp*Z?{inF~?v#Cho(TF{OK@s-zOoa4--4B8%-e=C8RmyV0Sed1y|~ zEZo2UK}_=cXk3cdd0F2{CrH|RKiK|1&hbAqmUln7RD|*P$}#Wv^25E6CM;mGJ~jKV z{_3x0u6NoK$dojPSHV&miW0l&Cj&RRT-VEJw_b#VT(G25{l)ZSLNq`L!ADESc(S+D zg@b!mXJW{=uicJd7T7;+eXW5tCFJ<6Xcw3pDKDyQ4DjPlctkUHn1U1uzAvVuT?&{f z{GFW?&3R1I@Pd!>(&fv;h}3AC+^Yw7Vut1Hg=0=W-bhnRp3FSJjZe#(!5wRz4mICt z(AL#v?x88+!d`3q3kcz|l!_Q-0@XYGfQRsd&uCvo{4fXm37s2wfaD$vBV=#>w6rCV zwD_h8aEwOo)82%-Ekpuj(sy39r%-V|*2}42@WcUsxZ30{VI_z z8WG!=28HMrVv?a;d!y0RR`W~?3%Qv*!-%@b>B>(+B58Ncczj;JeAW&>))0DxIsKbe zgB#50`2kvp>e6UH{W|Fm-KRNic%lwxywp_w4^gH^5roWkWi3t@B6TRHeTP&~IV+R2 z*4!N3gsHd=n3J`hnPDEJ7a)rijY^&rVD`~&AcbhuXp0d_V2H3IoCbz5nGc3eqPUk< zIt)98bHqm9ev?bY(at>Kt5PC2K@xHtY>Prg+tR3BMGTnDz4C)NXhq6MV24JKh;(PB z^khAEzq(7^7L#h*PK3S_L%h|g&kpJ2g|dlOd0ksSWLB#gKJ5m~MN7sJnjKB7_-OYr8kJbTG71f)=QG>Db1^FudW-VcX2$l-4 z{EqgAYX4Tg4;2FtnO|qdFH>g4@{=phS{A+Q=>&mAia^3{(1d-9&=+(!4+Br^BxRdGwFIKs6;54 zXgx5$yO-ZifBZjiYc%(nyUG&v+!*1)ybwn4Q&wi`z4iG-jP7{zu_cGrOQ1eYXbV7K z5;itBs3AY?(`21$b2MfmZ;EB2dIC3r&DR1un#fz<%Ea7>?r4yQnxA0L z|MNG0Gc<~qO#QCLsSj(09icoj7=eD(B9b}<1l zlZAn-na%XrJwKXeb?!IadQpV|62BQUWx3qvT~p3r`yEsBjsfV4PU1VH@op0O#_YV7 zYhCRcBy+!hwKM*s-TN#YQw^bsz(LIMtF$1mV=&j#vLLrw?i{nq;+Gt&X&CTFLyLew}y zlZ|-<2jTJi_5HGIDoyU>7=FkM>GQ+-ZVkt5n0tr0wRw7@&~Hr5Z)z#o&f}STFAw7Hkfg?|Q9|xe0#3uGzMI2i==u=jG8TmbTy<95K z7vvnqM5`4jf?qVrGpA3_b(`9)=R|#53vLiTNv5DRx0c>drs2uwl6-3)9gK!bV^Bjms0$Y^jQoWM?Woxr4N zOrmA?$~yxyF9H;!l5aJ%3yNJsPja2u36q*qrmARP$e6aWBr%VW4tL}^&H13+yPoGb z!<+L~>-{J=YL^YT21@#Y|6VRpN3~h$o`|5MwXTSLH*TWumnGJ^H2@MWo=-u~; z>V=#n*J2`iU|7tLoddf4W}^l5BYSjg@2)NUv~`HEWnKe{r@b&JfF@}?OOhEd4rt;K zXU5`*esljk69^V2+W0cj_9qD}fJL%P{a~7tlR4~6m$a5>nzRP>cW6}XdW^(4x_#On z+Z{6RA^^m8O){nt8#m@ji{!haA=| z>wC_e+)9&DPF%i~9IcZv203}Ehc@^T#!@|`C=f{gC;}7%Fqyo>#-~)Wy6kTxIQXY- zmnLK*|DJ^Eq?PpfM)Q9&Kb=kFx6?RL759m#@82YV2>+02=$uv!hH}qZxCpMKH0^_F_aw zL%^L9&K!|G+fkZh7&MxbZ68!+`=uZPCKnpcBH`wBI?_wRoqmSfx0nsCap~VX)qm0a zY*|<|z!E(3d(4L1o~4b6-pPYuK0rT`kJ*ZGk*><<-icZ5v`53veAOqDBQdJ(iy+7w zj6wY*Veql_eeODG4zW4wF}BCeg>yWV4e`@(8Y&Yol_7?azpOt_T^np)hlD#xXpE31 zwP;moLBX8D$5|}GrTVECjm~SF@AZjM(ZU=x{wN0c5_7B_hq_`^b3%{jo8z9MK>qmZ zR3xxL+v!Ea9E#+Ad-du_(b)pj@1l*7S`2P6X(08Jd`x^ff+wd>ZO>Tdw47jM%?(eU z7tN>TZ*O9Lyx=46%1O)whVm+R3lvBJa1(P#{u%Si--%apX|GQE`S`(Y)Z*<>rIcbf9R!MW30(JG_9$G35 z)>?q~oQeb=>YLUc3k&nOUAShNWdFIYA1^{39!}XK0O&Q*-s@XdP>tAkv0;hu1X3ler4^ zDKFD1=zj>)zAwaU;QUvMV{Mlq(+ zm~#zaVLtsj!0o;s1au6IjFx=AXLNEpdPgOZN3RiL&x`Z=DRfI@omD?nJKVECWrJERG5nRv>= zPC>pj4Tv)#XA9%r7@gFKi5^Da`W5+*d3~$R-23()8HR#UVG0ZLiLo^1M~#;>ni@?x z&Uf-}VYF(5lm3{NXv%UQ$xO3~upHVE!pWAG%}s*7Xby-(AH={E`VXf3RY7vhN=ywS zBYjDCWMWSn8o~ecCHH7w(wa6vW3w;LQB5>FW1oNlScQoEVY5H3{xMM12VQ2T-fP}! zunQiX4(a)dIJj^8aBcN{Cj(!-`fV_S%n6z_RlYmK3U(5JZN|2q%u8msY<6auwY5!3 z_P#tUTE>|A=3IlKl-~JOZ0F(kQVL}20Ghg13%}VjKy~xWP2)ug_JM}0SPC%u1IaoAUEGV$f zc;F6=55A3{?z^#%)zkfUYM=vw8Tg4#0FD4h==)>*4wpFJ-a$+o6QJ$FDXTmC7U3s? z%_>=}py(;M@?FU~*VcA;jj=Gp@eD__ZMU0Yf8+J&)lx^)IeYV+i{s0(iC_5}QS0CR z<~LLC3yt9+=-5AWOyJO#BZkoi17u8#b{MVK#=h<~?$_b_zRx-}2ZJC{XR-~fb{4=G z#&DhG`&!#*Y_pKdJI2-{{SR@^Yxn!2Ma95^glAQaq$bi(7G||*So)vu-80P4g3xpt zh&E<&wLj)+SI1_Lc@B5(84K?oCnt|TjQ&v@TT1G-h&wr4k7m-TY&eG$1Q>oK%ykkF&s3V6^02*6R(-#bdfO2o>2oZ<2~)#Bzyi~;Wrrko-(+0Zj`2K> zSuOcQiw{ojk$Y$q^J;x3DKU76(m>$ec9~h4LGw2|#KYvr49D5uI50mlIqHisrLxB~ zypIVOjQKTupZ7lR3nn6A7*@+OV|VbY&DJ#0hsuxCrhR&j>=KQ$eTcS0^C7Y40Nsd6 z0wV#%0Zx*8TV)BKJ%bV2PJ{3<&3kFR z1X+#F9=cPC7rw@{1tRLB=f3*t%fU};9bX&GQ3Zz^H`^oFdYpUXbo(qX4s(Y;$IB7) zP7Cv=K0UZPi;!0RqB)L9XiZvs3<_QLar(hXtT7m2SQcu0u+5vPONcF+5x%o%NOPQ4 zOkwr{Ha4c0ZCm_<&LlXHru8tNR1NB6=m3q{CM7SC4|s2D=?Jh_;XgbcoDZ%WF%h|0 z%u6(b@%-_NFISg8{&=;ODfl2i8JybAOeCm3&j-o9f)}h!YyNETpJUlvhi3_>t@c_b zAyzN>8(T~1D-vEu!|I-Z5|aoKP{Eoph_D2UK^6!OMqY>;I|fj|1U!Q<$?;!lE3RMH z-3##DKblvJDvn8Fj8^60{=<|ohGATO8x0N<(wFZGBQq|2k4Dsway+`FUY7omn==H% z>PZ-URz8Outowzz<>WjKX{9wx#&-(_$%Lc<%OY8`IvAuipF@SqA+Yw1kE7Wbrlxw| zdw4S3MJK7mj#DB*_%^&q4G}AC$nu8lv-d6FYk!>05Z8ir{|(!5g7Y}68{Z&pGqjiU zWKpq8IeRZ(IKO(MXw+uR`QU+wN3HXunuw36Er1jh9((^t^Eue}$Zr0K0IRb8Zaasy zz`8I{l6?e3-_29{#z^1@VUhT0M#R0(Gx^YZzg;Ii$gsiv=;4|i=n*H;R>{8 zr*A9At&%PL9>G<5#D$A*B^)B~aPOTb3U96Kj9yC1}DID6x^&&4D?LzB8KQ117`waSUu5SKh_2_mB3wGBdu0zWV138eP3GWa=h7+ z%c!I>fnW;{9NpXe9d5#v@!m%tF8C3g2ttij?Xim-Eom1ejDWJehhNmhkJ+NMYOoRGzLDby&)t? z!Av|7B9O-Rnl+WqzUvS5_QD8dqHE96V{m)+Et1+;W_EXD|1< zW?su4uSH|yd_`a|$bua%ih_YVErnl)hG1+jLug~hKtv)B<`Xy(^E}ZhGh1?^s*~M*tCvtFBt|W7HPq|IUiWY8ks*b}2IH{o_xY)Qm>(Hj|bz}*HwQYn+A_Do%wL8N| zAkQ+35Vd)55%?}+|4}d-f@$8N`?TrkCUCHJaD>1z_byI(6lN=U8Vv+IdZh6qreNjp z1DW%pmtX$S=|9K58)kJW=dI||KmDiQkC~AS9?kab`LnCP{L8@eH{94RF+$$_V<7IL!_cIL%yQ=;1fI&T$sz;B9kT% zvr?55+(p>D_`AHc2T#D1&lMAz10tF$V)vcU-V>9gHIJs!dq1VY<-4_htu5!hsvLV7 z1Aow~1d+XaN6XgVf%Ca{yjUfz+_dwe6c#kXodJG=S{F}W9L6Fd8->rhbNFL6Oyx)A zXKi)wSAYMT)rX&ax;pvx`PEhaz2X&TGWq|_zy8;m`rnPIIozi9xf}xM2x=)E#|k7V z6aC=Dqt%53^P$%9724?Ei2@qC7vL)to@ zmOMC2X2vqe3^AJGAi3X`zZe~xxdj;p)+|Um-z^qmb*JhP%h=evEeu<|RT)if_gUjb z@PG_a9sGDA&P=O9WYYid-?=gULT1d3Mm6nWa4j4b%`})5uYFP(VlpLWuUvgBCRI#1 zARFIEiWXYN^E{tM;iz=;8x3ohfr5+jHeRHN`SO|AuO{rhQHFYyodmW;0n!y^EQ&@# z9t~MAkFBKsL^$g^ohpLQ@mcQBxwNmdX&J|9c$wV?V&wbtIUTNz6Xssrc#q^&jIXw~ z%30b@EBo-`h1D<0o%!W^Z?FEk8tNatb*Ah2yh1W^hqP{Lt&ufpEt&-Xm2?FtK2H2T z_v2_*JU}$CotP9q7EKYs0yJMnV9$4!ITC?rhh(3SefP-rznf1BlbEdW`gS4<|KZ(2 z>Na^#-x1r*YBPcVxi`*^Mgvy}sVm=Hi6aq8Cx#wsfJpdi9*!%4%J2S-RLibn$#u#gDMY@%WD%Q6G)g`Hx2U9*#e zR&6Vg`5V{bnpkKB168n3HIhBy8;ABg3COA4-gref=a7@&1@_i((ddD;wW$y0BolI9 z_t2oWXmsHZ0i@_7ztS7!TEWGKX{;iV7caaWQ{P#A`Q_KE%b$ESbD7kIemkC)^?m6m zH`8!wqoV8R8h)X5UAI}aAwX!;A3VqVfULjqSpo|Izq0c`3(bG+FT@-_J%=(?DOh*QUl?5Y0G!* zXm73l{xrT??AbXAyZfIOUS$u{P&jt?2XIWpD8`JfzhR8MPe0~qcrCJVhz^b94p<}> z`J=Bn1Civap(RgiF;ykK&3xR`IG&_Jlk6Op+Ew9GJ4{59npAYKgJ_}O`K_2?q}jQ` z{g|MII+lcnIEP}yQZ(jhcbY?NL)P-kq#@_%>z;j4ANyM9gTZJc=6SU1&vHZ`iLhRG zUjxhTs1|#3+h|-b^V^&{zOj1y&2y`dF2A$7eCbkJ%wMhEeDlpQeecmQ5=4_wTK@#a z?DYf1rp18|E*KaSgIFTAfKdttcpy4v5WJ9&L+b%wp>aPk$u+=qdl6%OlqoOwigt%# zFY3%Z1V|#-r4=K6L_f$A8p#XuI;L z)+LW+v)g_|TNsVBhG{=C?yc99iOFZiA7lK?R{irs5@cKz4!U>{BRqE|rdVG9F-N#J zF89(Rj0ub|CVtBoX_Hb>Fl50FeoHjM8BRloo3kIVd*D3b%bAYg`Hkl!rN(2OFi^gv zF$voQeyA}b{EY;`8-1SClG>;3@h>sgBA78%ZDfYilm;}A3eYBj;Fj=XTE7t<+Ht_g zht90>lr3sr(sZPuc*?l%<)3{LurFSIuY+ObWuL3=7H8I~tAU zucJZF0K2{qu>Gz*oFDin!f0^2zhQ_=gkT9J4+H8(6HsVPTZ8PRPHiuVqP0`I7LAR) z{ND38b$v}WMg4}T9PGA`sNI8z;}R_nAR80%($=EQQSIw?kYaIMW|GC&9FuO07%L6a zOguBXfyM3LIIM$#>k1M=paTvFjSwc{nv~>Q8jUdN!DgQbX2hayl=+A*(%=qs%+;e9 z>vj@!2xUl+Vr!8OJ%s+E8 zUrc-@SLlSr$A3}3v}+6&4oyaKnfH7V)(b9SbWJjiE9TLq*h{9OnPn0MNseZ@&aZ7o zjyc@RM11x-4P>XilR0_rJ?IqVOquVm-&t)`IPg>w9btc0M*Qte5Q(XG(t_k()lvSL z)-7#<35y$UcIx)&(^YwB9S9JF@7VN^cm#;*r+(v?X=~x zitu(ctmcOS2g#m~;dJl#9>b%GPgzoetN>jW*2N$EhwBI>5;G#$|1C zrzqHH{>JG_V@FfpU;V!QhHs58kOoSlJG*^4-{bw&m8;)szVYY&iPq2D>5#A7FrgqNIycR%^AXlfYf$H1*f=Q_i`L_v?@$U-NvBTrF4wt?Ag;}_A*Tm^0zb=<3C-(<@pQe z8}sYcC+!V;KeKVO11I9gli#Lnjd3oUSDPEeidl_D6Ve;cvdW95tsQ0yZ3G|(rXjo~ zA}H2AC3#cQCcp>Nzn>Ym!{_$sex}&HskCan^e^=UzF1#vN^t-$2VzKNk-~86=Jhe* z=Ct9~17XiSh_lW)%n4yQOJE}SRy*ykb{iY5&6w3&lSd_ef=j_O4yv%m#zVt~3mcj8 z4P{I%YatLL?`%mGY0YcP(e#gNoTjyd*_bP#y35oELK+(w(K_rARHw}!x*@a$y)auE zy3`i+_1(&!NqDQ3AApPON{HUo=6V)pu?{dk(be^dQpRv3 zrt9<_Tis}!FLOVDJ1t92Be2~c%eQv~%o!nzAPwgdCUIw!Q7^*wM8jv*6`Myig5Ob|zO?0q{ z!L-pp`pt75bYK6?cg(|=B_i0*_2KsgQ3FnZo9DXUb;t*yExx|I=64@=pYtp=83E() zqoswoU2d^sFd-pL>s3UFZ(~@`Ab$W*US?D&{e>`|rKXb}wgecbsLM#<7I>s$3*w{| zFYti8I+N*6i^WX)-)N8$NR0!cQTs{ifo77zwhz7zp?TXXgyEI$wSZK68N?25aAcO> z_k;}2`BP!SoT$nCE;O0#a(Tc7v1tQ5_)bK&EI8i==RFB^s$3!YNb0s9OWT-o$ic-N z6*jzguL5|DRk1vX&bJ}wOoWuL%~^3Au$Oa$f0j?;-88X(|JVO&^*b6aUSl7#zRqxuSKl>Yr89-B@U} z%yi66`5jEgAHj4qlZDB+zvw5SLP*Jf6Zuu6%MoeoDh{fe5@-;C20>uiPbfzW4#O*g zs9`sgn1Z>rZpB{4Tz(Qhy`YgsjE;bxEkS)2P4!H-CVX2@c-Ojaw7%AQ9kHLhtKc{J zRIb;@?Bnf0bb|X37ze_;BhBYRT9EJ7g$c)!F&=q^%v0w?&UyrIcnhCtP)sp(;NOi| zt2Kvd-iuL-AxqR{vfaxOZ*5hrRdQN_F75hOI}c8mK4M?toito{3r_m^;>wjV4aWpF z-f6+Sqp9YD7aVLXTWPFn?(eZKYsP?K40GtQ|NOOPXl&_4)m=D0hU5F%|6{;jfHmzJ zL$CGoJ}-o}Ag%8R(1L3N^YAhjFYPQ04w#o`wMC*W*Ov~oX}%nI+F*uqQonwdlnr^N z>`VZ90bslBh?ZDUj4w?TYj13|(PxNjJR(Do8#0Ond99;t#%At_oJqv78fHx!amX!AjO`QA=&-aK_|^;tfz!yyw#y4A>;*w8%9A{dAu0{zQ_OY|-lobL@D1lJhQ^Gq0tzgs5~ zB*B?LQ6h(_{xpewq`uCbslI*ij>k_Od0Tv5zpRiQ23o}KXc{57V(haeCs<+1qR7_x zz=6d_q|$@6kY|MHOE|rF@$J^4su;oW(4oz=B&Jh7nzS}JVq-V~7B)}cG+20XxI;z+ z4`{3^m+mb(qQ<=%dDeEBJhucDj|ObtL@#acho&aMXd^ zOt|+YNvSjeyon1G7ME5O1LF&9@#I_0H`3&ZfrTFq82&)#gmPU;XBpX=}zo zY6bKF2}!5Vkg1Q;t`AhmpR~I;vKF-MdY_L5{MV_lkK^=wS`!(pPXs#&h8R>ppM*{u z=Nd3(g}YPtNndLBItl|hmS{$8)W_7PicqcfNJgx%_DOWn4v|HE6`<44Jd*}6T3lnZ zy@O0#pAM}*I3OBib2h|$T~tbY7@OZ|0+*{V9M)LyQ_?7#)F?*7YE1dF7jLI(Q=Fqc!#0 z_wE0qQOIU?Dh{Oji(mcO>Z5lrt^SYy?SEPQ&;Q-OTb(YI;m(z>+SI+65a2ra6V$Ew zWY*V~OnfWh=qM&m3(-<%LPaR|BZQqyJf(7!9fn){RB%8Nr^v9pBV#y|&q{=qug3mO zW;ZQ0@Gb6!*4iFL1ccalyHaiAN%;06%|Vn>0q*2Yc>>SuA(&}K`N8R&7rH(hN?66%# zddh8w-^cUQI-KMWfBfTskH#g}4h|CnG};lqU1w#$i{rs%Ov1Ic;vFC`4-CwA+30$+eLdyM6dP!;YJ3Z)BYqqn#0@^15-zy4~uzB<)@(` zZvHHcltu(eO+ZHX)cn>@|4Crf7Fa`Il>wM7zLRaXU>42{4iPJWe#9 z6Ghk*0|W~Qjwwmi=$09e>~r%~ofU!~?|wqdRwvO+Vfb{p)q{LTsYt6o`{2FR|N1}v z539faH-FV>!a2-idV3;NFaAVZs0O5soyoj*MKJNfn#Li;A+!j|;0NK?{Bwp|Q=xum zKf=?E>U5pS>B}4zHGIrhQww8Gx3$KRSK|*F7&g3M!5791wEqobd79&2SsCzGQPg%D zp?Z=WK@L1){E9%1U=i+5BRX0Tgz!Zlh*^6QsEJU7`lx3G2~>6!czCFd+LQ`ni&Y$F z=05I(+L^S4+Om~~;FyCS(li#@Sp38G8^Sx)76QpA8#KN;4Q~?4T~t$SBW-XiM>+qZ z^n*JB7EI&T-2TNmc|69&0S-5xHTFpx3gP8!5%ila0MpMQtS1YAsA*<>j>hooev(rW z$RgYq-x~A&L2W(A^nUxZPe$;OL4Oh(LSNA72yFAu+WuiH0E+pMl6A0#fC3ki^(A%!o#}A~mG$ z{)5dWILN=EtsQM28?%T+v@nRuc((Et@WEg(9M{WVOe%t1Yn;|#4M+F+Z5;H$N3EwR zH`82fw51ISpJR%AFt;oCS2yEa2M^_epM+4(2ZZ&TF)JE~jl-f!_B2!P`lH#SUGT(+nUTjD8$5igQ~^FsjP{9rru{pf1Ks$@ zkC)A5ETG2bNHf|T-zOiMfX`;n%L}}8;jP>ePb-OB)rQ(Iif6$`^p&7f^#ik}snZ-^ zM?=@|+~lWd2f+K|KA?FK2%F*9Km6_=hb{?IFo37loyjwNpz-aA9!})^+xN*Q@BMm> z_(P0Ml$1a?_=<^pUjtznMU(Rk#h6H-xp}tn(89b(46mP_ zS*}@R<1jAwc!yZH{b*|SIU3n4R*N$Ot)YHbQsY&K{4_$uv}Cb!78>7}UA3n_S_K65 z8YGB8U@o*S+7;Cr0QEnNB}TX`aB6-UN}UdHA@(BqN?XV*;t1uC)IKu;!xWi25|IsK zjG3ti<$2g-T+078sF~luFs3=a2J-{c-Fs)>SjeH>DFf2ND?+Ehp6qx`mn5H3%&n5m z;;tK0(;Dpyqa;-ks3WM{&>t`^Jw+)Tk4aJ=4w5! zeSdBB?f2hK^h^!=W9UH=1cVcrpMUnr2dh8-^ux(B z0j`}8c)ijhKfmISyO_YxHeQ+eIMJ7Qy#8T!eSWGM^u$w2G@S|}w0pv_vZNoDzf>XIamOQL3;BNAi)*93JgL=>l z0IY&<7zCyPAbx>BuKDxA1g2Af>%oONt?z@1wbJ!96PO&T7G&LyHZVDD7?1nb%#tt1 zkT4F-w5GGj-9FFHvln#jS@?5Ogo3g_+Fp^*X&Lcje zBofm@eR6x^9N=nP5YJI&?mwK*1(PvmU;uaKMw2o9g$QF<(AM~sr5Q$_q?gz!^W5fY z#G(ebLod8zUiLBGt7g+uH$4q32KG3Hua4ACS=~yz@K=ze&H=>CwhI^>PqVp|llq6s z7Jv2CS4Gi^>=6<4kMIJxBbiPt1 zh1?5|2dbIT7{8XZv8mzCuSVlETTI?{ggm<$S}QyIpFOjQnTC*1ZylJZ`nMH^kgV&8 zI?Yy>HbU|}Ne11!Cv6}tf*(cV>FHCa%aV8a>mm&4f056?mfy_!is&*2SrzcYx=0Si ztPWQWMSZvj6*g2o^GVE5%80WF`LC4Uqge^<6CfiLo7ia7+6tF!o55rVTk|&`Fda)n zpV94y9fd8^+9b%GIiRpIt%ID*+IOh`+70Io5p%O8DI z+Dgo>b}=l1`**+n?aafD2sGvpTmk{kt8)kHhr{1Fgko`s|D@$$5(ohk@j^8ImT!Hp zbHA^j8)B~$lGi;VK-yTpm@)40^6oe97JshQ-kM>#ZsEK$$9$%3EUNqRtclF{j8TvM z*T>ph{8>V=q!I#ol%qHrXt6`A79EoV)NXDZ3zLll&h_5rrBB-3!H9#Y$GJ&8rm+|o z#Pl19z(ldwhhi{l%9|Ba0>V1cMUKxa)K`CeD#pE0dcmUB_gtFBMhNi3cRx(75$5Qu zKJbtarWB6;q%G8WZAMs)P2fO8$^0h`qPan0V;}!vW43(8tHP%7KyJsplg5~7<*M=O5@_$-u7-TRDzK1p61|S5fZ|%32sy&;+PaRp?@~De%J|%n zHe zHszFg{to|FOn+~6sKD}8MDIi*#S>M4Wh(WyFpUVirJ6OT4MnxX03=Joy(9UcL~F%yWXEWD6-B%sZEzXTB$e)=^$=)q z6b)lk^6EtV>_V_j`buU6C$X=^~)>Y3{TXE_@PSTV0sO_l!gTSFaNxA2|>5l z473N=jOyptmurZX3DiBrdoTBhijh_=a}EFOdV`sJn*1;~P_AdsAS6Dmd2azmV)UrC z$JeD9E7&6#05d?J!!Wvk`8nn`0D?$Mo3<>Npk3xFj>^a4_9T^fpXRv;6^B|gEd5bW zXBi_dDo z%ZGCGx@VL)vA<2E#MTbAohHLMggX?Xav&QAkTW$7MYKyMwg}n5w4HLW8Y}yM%%;YK zu$DY6k)(z3Kh9)>;8cDH3gM@2R*ZIklJ{XSe$c#kdR|ERVSV1u?{Yt)Qw>!x!09qC zq;Mp`Z(YB+`u^)Ht1tfWd3D>rUfrl3(t~_eqK^u@aT;^NpDzaold#sjA3Iqw5y{V$0zrS z*~fP&ky2Uk zDV#W(e%eg^%f(wWD+~egA8j)*EgW7G#MaoD`9h~!MvO?(DLO#(@Kn%*`QF7e<9vjz z1L1P6dydCQXsv<~G%`n)87HCZ)MY}AwdMOF*!jSUc1MSM!&}VoWpmxm7shvnVWC|W zU6z~Q@wc@W<=$b0Ni9svJ+uPX z5Ub}syB>q**56%QOjGx{AH&>bZcSo6u09ynw8_^p%&GQ;g=tv)CmiqV@aUrPfp3o2 z0Ewy0^9_h}sFV5479I?OicHNukj5}O>Gjt*NDoLtdr^`E)6^!0WqK#mD0bS<_&8f% zLa1=>gT7A`Et60f7z{922ts1r>EH}m#Sp96`*}^O~0RB1SL!`hLEx+2hvz$}B@r#J5P! z%o_7_9aY?=j3nY#zfTa z)UV2nkg<;0Gx--&AD9v#trr}(=Jo?R)!KKTMG6Duyf8U9DZfgTc8I9|VUudqMA_>ppa_QH3@uhg*w?L#MWyAzYd#yeOfLd6cqGGHRL`2iM}8qC zYO=&8Z|gA)F@m?Sm=@Fcbi#6fS`QO`e6|F1znzaUZI&4OD#pY$0>}8O9tYP%&|(rc zCwN_B%|8KH1khXxagel+dujgIwF?nuotV@G{ptRjjri<~kS;q(a5+MNBD31aiG zt?F0;ZM$Q_6n&(m*x>=&zxeXY(e46ZQ(CO8QFg+;*`b1At(jB5&q5*+T7*S48XDAm z9^&f4!kcOk!=jli91uYuVDC&RzXPP-Nwmp)ccshzeqwr<52h6}YLbXxVO9$R#02J< z=AhlRiMepy7-5Tw37WVhPLVomPx?Bn@p%ZPf+4fe0$L2fc&y&F*0F$+e>H@h7LibM`&}|H{Oex8LJk3woy1|Gzy?&f!6 zMoFu9Tna#~ubxM=PS}2!|LZ~K$E|C(+9%nuYngrG3iF8sND^6Kf%>Rcw_R(SQQxk?q1212hBO+Gn^x<_J2-^cv&b4quqv71E*oh>MN zRz%)r=pWLQKl$aKVJ<@xDtJh9xOwwtb>Z@1_OBmj&V!$|ueRKN%nD#Ih1uxbq}R-% zCuU(V5ii$CAOzt4|D3rj`A|z9kozpEd)!}3{`cc+uGgM-4ok1mx_bBAnwc%XFTNvv z5-m))HM8=Zd))6DhER{AfgDI0Jl75Wy zn&s3}YK&95B!YjOBYn>}Wy|L(x~LlE5oZ?$d**^vjc4uh1=o_$R}b4(!_;lK!CWM^ z>oF@u7a#95slF>cvsg?KaBF|8S|evW*UupcuN#N8u-Y~^Zk{ZYzZ|cv5)xl=x<@F8 z`0?XKGm;n^bf$m%;KqatMhlz@1jLAL6&>_Fu@)UIewao3S@37i{ui0NFG3D1bV-gjcOb~12?hke1CCLbQfu#e=R$BgVsm~t;M zr=yr!aKI#AcfH&D!#JCF@QBrnk5hyg?t}4>*6c;N@Tk5iDYmB3yr7$XBo7mQr^64l zrk*`IW$NzVTf{h_OS@BVZOqF$#MI0Y{dkR2zk@{7HFNNWsGuX?PMtd4dKB1*PT)Sx zlj5+z*%B4`41e~d!JkXZ`@U%HAO7L*R-gUbe>)0-($Jd;iGTZF{PpTzzWg%0h?b*| zb;^H~W;6&L(ubde0Ioy$@iTRwMoflgvG}wW2E|D^6AW0G zOSjB@(@ysS*3Y%5nhoGIu*IaJ(b1%Y@o8&I`;DUpmI&m+Fh^S&FfQ%?7}<=<#+>UB zQIhAW#t!;C(5lfy^fy|@E_dfx)fWjiiI|OdDV@tyXaPbN+82Z$hS^v#PvPX6&m>gf zt#jtgwYx+&nR~~iFm!>|hLAQgDZmg+_&t_vdS*(#k`M=Syr7=fs0f@0jczA{oL?(5 z66%Xe$v%G=am!-I%%<{VjF09d5~L4)ibpX`n#BH?uapWJpKU7kDKeWlL}_@-_u$z0 z_{2OfdL|vjsl>B}{l-Z;KDA)Hoa&PEzy6;kQANJ&iMt!jM4avg_lHSfC&;KO`ZT7D z>Xav8u1t}^a6}1f`zfCn`flO-FJg?an9_V7vhJC*=?i^#v{wnR5f*=y!$xdnL}TSbGEa$7GqY_Z!#iB3>`;mFadGr}Pdrx3<&F zB=8O_Vm8MT5H_+~2l(zl*AZ~dMcx*NdRP%IA58nHY_q(paASY?WB;IyVH1oAHfrrl zhEzKY9BDR^K$qH71U5m=mns6>3nOZPOh6jVvwnX#*1(Gj2EIAkv@r1sratsb;oy&(SoY2f^rR41S_?wCNsC002M$Nklzpb@1&#$G8XT1Pv{p{Ld?z*NA*^_ZAD%kN7+ z!E9cwe=lZNjIqA#UrN}F24K=yU6`8Z&IN;g+n2=mB$(5MaVTe>e+LFnQ5Pe6?h?v=F95B#6 zxr3Rp5+7+RqDeHo5fVLzfk-aokQT6DPC0GIis&1Ha-Ir%V~~6pm=F^HX+W00Vh$dS zkgi?(uAH5lX%I1xG52XeX#&le|IJ=W3|Vy6^Gqp~C$>(Wo{9~d5tLUMOq-a~kgQ>Z|JKC| zQ-1kWX(I3jW9A29%1uN!!7*A@@0{&?VJFX=T7C5KM?H6Od|mf5y&bs0?}awtGM|$5 zBm|sAq%PL+aD`9T7BFxi6;Y&&dyzuS5gyT)q$s=$_8k6uC@UCd8n|k)C#qhdh#~V& zI>(%P6F3A!Jnvc7h#V^85yXNaaBP3Hb|X!ho8j^=K2G=_%6!hho4`0;FzRpr{_khL zLwC_E-ZE)UzxeF^U*qH^G-e#6Z$ZW%6tN=MHG^2cTPO|qZ3x^1duF{w29ULh0eR7w z*vjjyaS=tfF*?I9|c{Hi{#~QQ0!_|-8%+z`-$M=DkMTPq9Y-7syTeaJ+k{@lANCUL3 zrlvsjq@3>(K{xM@zCo23-&NCHhmiSU@xN7|izI!)_Euz8TbY`f2)%IZ$XZYhKO zq|=5}VK~$YMRz*I=4Fh8>39D8#aVB{LQv(Mi|@=l_^9}%_#bU?;)`wQ^Ec*B?gEVJ za3-MqH75b_v+d-te^K!-8j+38>fX!6derlRGb%Jh4Eb`(zpKdDr+@k9tM`BPi%w2{ zYjxs{GpnuY${&q!9c+WS^3hMCrDx&XqkZM~6@WP0-=$AJUVZ%8XREVsygA9yw>o8L zPrk$>IUos}OOS>yN1Ds=QU#7Rj#J@*&E|q9?z0wzFMpGDdRe8~muY2Z z(j*mBe40Sb)|lhA&SzpPNO`|GJk58g8f$2oRS+`_=u%;ZF2m)0ZT@~7F3?W-fA8nh z;`TVyoUUH^CQbI->Rdq>xqz$=`#)_7`VhPJv?Q7R-%@haVyW?8g z!>kswY;N4W7n8-rFi|EI6&AzFIL}T?i;O9eT*kRbpQJ|5(ylBpA{%ozz|ua9buCH3 z1~a6oaQ+!bLZ$l=%Ep))e&YytIxZ+UKqe;dj&mzG6(1O zxib;};c<4#dw~O6Me{IN8=)oiiAJ6(D&%xzj&V6hG&n>|D9J@4seP}joZj-JXlY5+ z<~PoDreMUg5ksXRdHzh=!M>Q%_~;t1VulCPI0;UB2nnUxs?z(B#%_<>My3Oe?m+WB zm02-meuF>!*orYaedqS=o5MWS_?lW-xdI4>N13JL1BuP^_bti71j$lOc8EJ>WnF1w z)`AdYrZauu2pH4Co#x~3V1zGfXR8y9^j@W$nQT!@!XQQ-vvbn66d5IQ9)ueN-1^{B z+f&|1P+b1-gVE0Uu()8X`KioNYjN(}8;PYhhJQ(6!FDy?BMF# zufADb`TS3-yJ?9h8iOE{LWEoyFLH3w#NZCbyD#78;k~&kq8-+v@UfDdWhCw)HGI0)cJX++8*p9zPYLS?Pc(W97A%_Zm(=(T!&lR_}fC=?E%k3<&x-0OXsiS92>Y-&sVs!oH6` z`QX>f76priDPdH*CSsFV7!)lFuUn7iw9!O$&&%;iLwd#Z zh;x&aOd3Qqs;jX#f@Q8f(3fFiA?RA0G%kPL)SXn_Or{pxg3ti?zRYRH-&hp?pV~~# z0Rym`9g{s8Lm`>?Y@AVdAV17xlxM@6%lHxzdY|q05?P&kRuMFIOk=k)WoZtf1Pld}8}zf=-{I5gF(9*;6sP zj!H{=>xohi{EjhfB&qq)%<1*&Vm=gkRM`s!8I;P6K{hYGwT7B7DCHoH?nLEA_`mk0 z74A6FD{$JzByzAPPy7odO@qs;zB4mOYDb41?C(U{!1LCX_NBrE*oH>kPAj&V_tvbr z-}nyUiiA}`iI+ukF{oMBh*KWc94bLW4i^%$5ng_?OrKDH@Id;AGYdBxGe0Up#5paR z_^Nxg#X)bEg8aD~X>ri~P#eRgG{`l2oS$bWC-akj@W>N*k>FIt;7PP_xb?gE{^ixl zbEng0V%^~nO$Q$Gsfq>)>KthtiaQ=kkntxTNuzrjzI=P->($qP{Cu@@{nqM4$*CK` z=Y;j`xrK3Jjx2?RZf#nYBC(azJrtNEPK?c5SrzwMlPBR@4^98zi;hktfJK~lVpt*C z>U7()Y{;I?-_d{s&;!l+R9kZnaUrC!Il0@>Z3+cG4L=3D4j)XA!?(=zVSqhn2f*$8 zV2*;j{L%Zt5)-8DRj(_-^e=y`nu8T;4FrK2{}R>n?uAf&Twh20K4TDzBQQzcpoj7F z+j1QdFE7_|-Jd_VZhK6gZd>|@L4_UeTfZQg--7TA&~@L}rXT0EwnQdKA_M?cIG5)}a0*=+bVqY~}V_hjEE zg_u2}J2KtP%RIov^S+broWj_KWJ}tT>r3AVRVR;%1q%$wt z--OR;jLl6wE68@}(AJENFGo5BEy$c`4>YK82FF03KFq;-v>dH`Kh75p%~T#37(&td!6F^{s(XW2n+CX2IRFu+z#>F z%QPxVnwam|2;@*`n3#X|x*VkDDk(P%8%exT#B6JOYpx+!Ou*|zrmj98XI?#i@^FF` z_wL`S&;6^*m){-YIuZd1Cb&<&+oL2lNBWc2nhEci_(Kuwts4$PsM17QBq#fg8#mKv zRO4hp?B=^QCO#~Sgw;-~^#akUimXZ>;&XAx$8uj^^`QNv`RTMtn}OjRPzlh$>%hBaWmrq)*I(zOiui+4p%g84gv?q zgV%-r9u#f-?ce^ts|y{5^413(57t^d3f8}P|NYfhpZ#L>H~;vbW^IxCK2CQ7^qNrn z3~gap2y6!5K&k(0#*-cvqwQLY@bj0!jUTJ`T8L9mqkY0qmIcrrMuL-KP)qwXod8pt z!+3U|r)`Yh)HCkWzdsVg^9z%x-Tt|k*wcb+MEz82as+n#xvs{bnF5y_yn?alwt zT1>xFPNs2TBAzGRNI7$)k@>x^Ax(>#c%q3;)^|vY;2}bkG7N=-7#P6}Of06%cxD>Y zlWD;xA|k}x;9xdxyY?G$eKGe^<@?PJsV#0PE5*|BQ26bARv-{3;V$D`Q zqU{P1VmOyScz^a4o=5}3WVcUmoRG}tc2NH@WaQ$X1YS`?4AcHe48(Z&8tp7#l8YeP=nTFXhCOUdyz#BosEDCs zz#u1L#9*9U1il0<4aXrHgca@9*@pzCv=`4p7$e^66M~`Z6gk@3S z?vbM=cTGPp8Xx9#KjyJF7+w14!_`KbBg&uJ_l;`i89ohtB=EQ;Xn*j-K0f($w_{e{ zq*>i*i`3!pWjjW=NnOo{YNIkO@lJD=JOOFpr##4)Ot*gI=Q>e4n=#>u`ql6Af(QHh zE^Gd2xL=2@fhc8xgnm~WY)=|6CyMlh=b4@7&TO|P2gZ4xu3D5ZeAH#XJ242XW2!+5-wdlz%iSRuD41(pZVZWlo*em+FZ@r}qKy2rI(jF_rtX-@nc zw3KPP|1JG2eKo5e=Q%!=`l8N{aSmZ8?#hlKmnf zCcj8KG**nx8gc+n-5&h?wCKmF4mR^Na5 z&FWALaWh7AG%e|9>&NAx1N0(If)*otUmH>zYzUXOvJtMGpv5MfY_Rs))9){$|2dgE z24dTgGBIkkzizJE3A^LX-B!25_4#IbS4SH={%|+V3jW(uIGfPBF7k~}z)3L%rYAfk z%v1q^pOU6Um+ux0b+XWnqJ&MhgJ>_#@90Ssla_h)>ebu>St-B#)v}jxVIT`r(n$Br zA4xrmQj@|B7nQO18XkX8_rVK*Ms#f9_=vk3;KB%eqt1F+7))fsoFT$QUb>>65e?m= zEkIxY&4c}K7*PueNEXq%_I_kq03Jh}`rZ-pck!!7pv?|-n`7vVVdm#JVUIw!kv z(u8Og2-*1cgP|~i5yWVEGbRkKg$zC-D>O&pey~#71%VmUp@}BOSo&?rlS(5spAg3O zl5y}icajgoT5{bm2KO&;BB30-z;Q|1bKDN|$kB`W*|VnR5@+=E6H)Th@KKHS7aV9O z7#^+5dhru%=J;Hgo%=*PlYAi|tqK)5gBjRAD7uHJ zFa!sPfQg`pHo@G>{ElZX?uj7f++qAQl8Fp?NaA%ej^pP8 zddZ(f3uC4mCAnVy=;JijYEv~y{zW|1YXooeL_9--{h-zs2melfvVZ!`Z&z3T_{Hh~ z23x}XZ#E~wgbM*Pd(zw=rBU7o z!`AyrzhU4ibI9GYA2in24u%p>^I^T2(Ag6{sXihVLMn=gDR;z;o7cuq%iQJ``R3|3 zG4Jvq>xTd$)a;Q}h4gmr2Cj)ixhWJh{L?pAR&QUrl+Ut5UTYi9oGw80<)6M-U5}yV zbbs&HYfWYCo8l8#zZL>r2$kRF$JB)exz>0P5TY04l- zX0M4J?mpvpObPQ?GbP`(w|-xk?DDMVadh|gHp~tqK%AuJc2TY~N%`+9fzpqYFE!45 zPxXDCs}24Eeaehp_rt`}F9znfwO<1fubDJ6Yx--97zi!Fz5G)C_{>M3c<-YW#U zY`867=v3QB8Ve@Gk?&<45HiNi4`Uuvb)oSLf;Ye8Im<_ybq_5BgA`@41f(8@>K-{` zv@QOl9TB9ME@s25G0$O~)~7$_s1yxj73peW+7ron%7i;nJ4cHog~(|>B3_uHGwo~{ zn#gLOBiY(_z~;UDKTCA*U{OM*8ng6842>CZx@g{!LflNH*j$WY*=?Y2@a5l=USNGh z2b)r3Xp2X`$xFI%y&79dXj@HeEXQnVr;jtmIMF$$Y1*9Za2JDqo<{Yslmz48Tby)^ z`W>HC#A%xkJV5LMCHkaE(-M~I9INuj?zK+Fml;^fgfcz$4bo6(419#Qi%fQ@6*a{BCvSi!Upil#jJV zJ{Am))z8V8*}RX&l6hs`X+}&!l{7}lXzomLG;V*VZE6p0-3UgH^9{!ITj%f7e4HI% z>`M~06T}O8w3_xH9_^XOxfmQ1=TKLPs)KVO8|D%kj2Xx2K6SHNcW_iiSLzCF&-@%) z5AFhCXhFJAh*aOXDzYN9_0cCEkKhtjgbQ*JfA{6*9rN{P9}UC8ATXMRIpFR=diQ0o z+Rp)r{Uf3^LA!0uJciK(5XiCkps4Z~71M8N5HVqLzGG%nPs&2|ebF{TIz-R~nt|)g zr1h?HsO>)5nK5v}YfPU;z5I1g*Jw|3fN6;T=9#V9?f9>o*K4py%A_4ckUb#sLpssU zn2fa;!7Y9bNaF=0;G#`VU8proyMFWu;g>Ni44&V_d3Q`cFS%GI<3I=++Bn#|#J!2J zVB9nT4*#YyFs3Qo&(s-BxAE~k@xd_7_;B1$0$JUM5$U})ss7#H{e5H4)a!45$N-MA zt>-l68r~@L7{gO1opwd-J}hanxgBg?n6C+8m>52sI25vp*de%CxYkeB_-qajF~OC| zCh1Y_Da_`1d+&tKX<7Uc%wcB)s#bA0jp%4mvb`Z<(;hQdo|Z8D+*?})+E=rQFOSBm)|ht! z3^QvrXWcMtjPy~?etBEqERbU#<>Q>!FVfiVH7@=io5&CJtU$+;;P7&yo@rT)@nsC0 z=Ji$qf@5hYnAK9FZ0TnGfAF9H&`72hT1?{WG>j{M{8PcC1Y-?%v zA^C7sm5m9}kl-3zIoOyn;g_K?ynC51%7$?V>mFSO7Cvg3Ll|$n*&#Rn(4S*y28P5)uF$3nutN*$yGD)0MEC%_FaeA~bmBs$ha9P!mF%^5kE(4UW#byH=P+%jtLR5$1EU@$r0v>R zw{85QCUY$Uw;)BwySKS4Qx9F1xzNZgzG#fSdt-jJXxjIZlcHat=$=>z3-haw>t%wE z85Gfw=p6bO2pBR|%z3FU5EAqc5uPp)Z#yQ2xdgJ9o5K_Gv(z70?N4Ge>p1x(9y%2C zR!Nh#OJEe3k2>Ei&JZwywueo0iO{gAmk;bj355`jKZp4=!GcT+$3Dry>TSk~VbD<2 z5C>PVpiuF;=E9Xy~(@jcSI##PX|AB(Ah@sw>zlR3H70TW4F1g3$UEKU#NeaCeZ~j}`MsEfQYdIx zud=zGlpHF3A*m39?KGS_4@<_C(oh|EjI;H_jAJjYtHjE*kbH#OuDr>tQ+Cw^R&9JKaW{`@zv_JwGU3rx-tLKvhwzghIJ%3$dQ`!0Mc|-K_GCz zh(AvvrcFJBhaNc3-|1kD?O-X1o90f_*%yO<6mzA$qI(SRc^Z#>ihG&7r9Rj_;xwZG zRFdt5(TMJ~P0V`Qh9fgxF#!erX0KuQQwAQ!@CkbKC3VFb!ZD}ws8ISic+lD(^!fYh zX1({pdojDtfy@;#xn%iE_x<9tkA7|OI2{ohrnOd0A;Tb8K=tnBePn41ux20&fda$w zqS{a8(k_kUZ4nTkws+TKm>w;PjjCx(NxvAvPkr@#{WPn2Ruq$Vv$VC0!}Fs~H*wER zVrc5+AYkpf*JSx1PKEsPN$%db(IS@FUdtAff6bPfpT@YDv5*6xQ3KUBxW*(xG-I6p zjJw&^2Q!Lxzz-6q80R?Cm(RpK@}Vp~qTWeD^LcG0H8?lr1(`eZjOm3y5w0kpjm+Te zZzI#G+ovL^nv{hI5d(3Aly#JOy_l-Zr*f7;lDjtIHb&Z&s1_A`PY87@VpSP) zB4@$xTnvnMfkDtjY^8|>&sgF#Ly$d)6UDG!FVDyPq+yJ?5xktC$d}|?KpK#_*$PCf zVrI?OjOM7`H_cM^GYy&= zGtpqbGY2uq&2oeY)!U^3(1gv2^rrpt)A1i-s*5nq%xg@1UxyD>Yb$tSU}Fx(W0FY; zk)oCPU+&W8(xxy`ZGwBOYW!>*-*Yf(bMBGVlk(5b=TJWL)|->mIgafniY_p0_~#`G zzjd^7D~20G~k8ceRnbEGSf?0C2tl&%i;yA0Lz-L6ZBJ64M88!v z%{!S)5XF`gWI!-sOiVM3f?tQUGq3UUZJ!yZv9Xb~f&vX9lkChmL1_(qSSQLdrA2j)!(O+jwGLn8?@aXmJ9^to^Om zR1{ATL?jT**U?*A$o=L=d+^(h1kw5P=fj80wusiN+gqDG6-K9CyY-%F}dvv&EFP56Eq4s z8V3!EK&9Otj3J-O%;EE&?DED3cj3jFUd%~37uwSGE8ngD_|Lzed^Qzy!9kmzky$^_ z#%z<}X*5{|;kN1+W05qn5w-QJYN!%EN7KA)Y)5%2KESb?ZGx7IIMKWSLhJE|79Qm? ziOM@NuO!a;Js#XR;A6*wFUD$9v~o3@36lw@MaNPgY>I|k=;3zXMY^RJnWuju=hjiw zlAt4Kwi2e!Zj`2cv=oUie*gQ`)i1s%K#Nl3*gsGDTo9f62$e17PZne8qex-an}FjY+SA{uc#_ zd0#U%JHaRHTi>Bx|HZ&+e~!S8iTGzsB21zfiob0Yjd)gi!>#K-^u8Rd%15P^lSmdR zJZTsK2cmh=tT?4qS#&O}h;fYEf{tlX>`?8d5%TSb!iWteEpU->~aH(CwT zP~s$FF%Kufc+Qbs{A9F4<%gZDJSQSY3~HO-$X8)2k6rcrR!D*0YcvB0+?<&eoU6>T z7fhF6q{656nObm$209vGaKbd#o2{i`KweW-@C~eKtZ;|0;dfE%eye#ynw?B8nlvUf zZh;oa5$qp*_~9@uz8}Q|@5Hn*9lk`B8BUecBc(xmv?1E1=$m=KpPhVX%qTb|_lzrH z#!|pUM!V&pwX~Q^38EM!#!oYGpKUiIfYPJ~^P3Q6&M$)zpL*}Y>TC=(td4p2SFgjA zeei1SMdP-L!l~f;kN@!7)!npaoCR}G*pW6#8)^aD@0mZeztUZc+_kkSCO^1peWOWP z|BgVDn>N~g43kSj^cT|+<)aBR58=wg#(1Z_qL0(CmZ}Xg$bLK0cAit!**aDGi>b`) zUk{wPZtuT$d7SPt>T|kRUS_00K#1TWGUCG&5GEjcL5wcWXNx`Dy?Ymi@{>A?aV=(C z&3R^C%l(Ml%V71PjfMGGURFk++kM9GK6~%K`K(>{V-#N0ch4{<+&km#`g;BKzTCec z|LN@EBQ4;=yEiKxTRzeZZ{hHmmT>ljwnGT*Vb0ze5DPqh8n@5q4&Et9%AD6_vG_}I|4KF4NnO@GRGLIu_r)4u~ zeU`=UTte^_j#dZhPoIC$ey>X0#K4%-2;zD|fX7lE6L`Xe)=EwQztePEnYO61uv z@l1XyHVASAFEAXqHy-0PUp_h7roNp}!&LQ~&^ePty2`aqUI8Cj?E)L`zH@mZU7-+sUPPcf^n z^IMHp5~qYOBETZhlVjHR^xrw$^mJ=-EC%vJy9yAsvezPnBBx*_IAJX@&IdcqcY4in zUt4O$pUu2O>JP#LL;eh?A=ujHTp2oxReyZm&LFWRXmA9&F zfuX9IhHsn*h8r;?REx0_BI;bhnK~Jzg@C1jV^Xielc_HkEbp}2!W=HXbs@7ci$db) z0yt*Tu11w)FepHROgfmoSW!4aS!)=RH$;LqD1Yu>-pzIKS82jEuaU@2p0?y(Wk>Y0 z)-&g4Z48Id=}du;}_eFzh?7i;Z9Ld41w(^eW?1Y_%sodQe9-8g7?<133P zaI$xEjPK?!)jJ&`LDSq@XHK>G{=4r(q%zk_9=zURmXd}Y&xMIQy!Fc0Uxic({5>p+ zR5o@U-N}5ADxemZ%y-CY!?8qDr$Wyvbe}_Hjghu1WkFQPIwD%k-7!!c@bb#!nTg_B zZvhj+P_{joxDM7!3F6AFL{OeFMj94P^?AOewZ>&XoAsRX(wI*z4$-2QcP^gY8Ux3H`@I2p2^jkK1l2P<3Ij>_0RwK&#f;;7OpoA zhi8Bqiup9~Dv1=4c325gcsDQxO1sfb?JPP4r? z>TBjA047&2bHK~?a54WGfVsWjQm)>8F7pr+nS9xgKdOwCW3^?_mQR_!Q02;cpMs_v_v00Nv8|w6&cdx(o zaDCCTmiv^q2=|}0umz0j&L^o$ zI|7ObMziDRxKO@u(YbN?tUQ020LbQ`TnBJrI?ZsW&gDt(-$9GU7tEfaauL=zuO``c`k+gq>!XDI%S{e^OD` zX1+rdu^h(wMayu|*B`JoprOBaGM916gZv{xJj4lEoD5K{!_xDV zj_(Sw8v>`EkG{Vs+p3gId(Za6YnFal8)^piaddBloSD^or3Rw43Zofwz5#>}>|*JN z3Tyb;m;4OOA3hwK3#K>vjJ8q5nL3Mb(QNptm~YE!d=5UGj*)cK#7*hB%IM5=iX|VE zUqZ6X;w?*8c&EDdv6R^vrvV2>05GE^>fEl` zhUjWbKqM|ZXg8aeF)bk&r(bBUE{5)5ww_@M6|-D>784g!D&MDLXwwOG;A~s~wQHT@ zOTuW{zl@%=!6gP|)=Ty(3{U7x^Db;zFkk@1aSfD*TWSX0P>jm#Wp)EJ$7g3Pn-p=#QZeno+YY zn$2hLe*4|#UZEetFkYu&y)Q!g!JY5hPw;Vmzo)Hb`+oL(yx3+Drpc4mUcK0-()OOF(49x!7QeJd9cC+P} z^3Ug20cJo4{U4+?11U>mtP^GSK6#vGdLX57rfqbTq|d~M8PzJixpCuq8!EK;y?0yE z!%2+SZrv(YFKP(^IY@v7-ae@gb`TN>`Z5(tkR!9(3IZmt*;t_@udC#vv>mfuFB8H` zX;;@j`*iazuu-PXQy0r2zh5-JcJa!XWlu^|^Xvce%luZ4Cpgs7BAH}Q8Q9aRB;XT! zmE=umLD1MN;fc*IEw%omc~UHxc6d_GDobx31^@<%Yh{J772Sih#)EjCA=mpPhYE|Yl0{s4l2 zw|@SM&%RtWBBq#wU@o7FMguf31g7$Ry?+6h#WWg$oo5%Oa&Q07bHHkTSFZbj8bO}f z3^zsOrR>$bWcDog&X@ifa0;v(X5}2K*5ldrKxBt=OjjMHS)7U=UTuVn2v16X`%>IU zpg{s85}ZK8>NY@JeP}048ct$mt~8lWoU#|wcIZ(@3|RDx_8C!(iu^+EH(L8#>pO(0 zjx-^EgmMOo=rlpAKQ?F47)N``S0w+H*(XA8b5q$BEQVb)I|GgoiNYnC;kw+&cl-9O z)b)#-&p-QY`pmKjeh{;1PvkaAaFwHeqtPUI{88$Dsc2*?@&PS&n9zX+G-->u2$b<) z!V6w)zA0+}pp_*+xwKOBWXd^b=n_C^TP&K~0t$Yo4H?ac1~kyXAUDBG!ACFV$7mO$ zeKs&v66ZX>olhnsa6BJqGM_ox^|vsD$JK53T)vfpAs=MAavvDk(EwkZvl~wfxX-r~ zNTBP5mdi*|hZi~Pwa4TIv;CklWD_OK2KVP_QIlIg(@a6r)yh$jTE8 zDtqg#%&&t2OB)-ynsOLeoNjP5sq$e16QF%uAN#$VnMN7lpYr8t?XfPB=DnMi^p7%;NH{KLcnN=N$uRhu@t8ssx)u)`HlJGgX`r7-4cwPKww}Is(j}paTg$ z=2ZvZ7mztL#j3yGiytV^MF%6f&)R`@W*R*!D+6#L*i5@IsT*x9CLPR;-?Yz0m&ioR z;=F%?@gk$RAsQNUhF^gi?M52e1Tl7x&Nkh?^iNADJlSg!yrd&6LtdH0+;!{@pTc?`UHK&!=ewG+=ROk!&2RD;?2h;=rn#I6F>vCRSWI zeLy1xh-L|yo%}rdn`7OsFn4d?jRqH@U!f9#>9N4)a+4W%?w9G3Mwn)}8$g}SMNkFf zjq_<>d~jsMqVk=z()*jcO?*to4zY0Yhy4VZ|Kj1eA((dS#v=roCdQVaU6_Y-|4xAT z!RMcDw)4wbqo+@nFc?~L+sA+OQNXh`k?jBX-~Z>yC3U>^pxdd+Jey{BxsaBtWl6oz zfOxuRXtMY?TW51V5W5oSUCTV%Ni(12O8f1@=vrnj-g+z^t@>YRmheKnkw}lv38+~! zdAXRcE6u>-ZQvq~&usF3eQfYJA1Er|M&Z<$Q=THaN*XR5m0jPNAl*3{Efca37fX3Q5yFpvfI+{R5VNf8aPUfZkjtr=A z#-2Kvi4hagNW7mvIMw*(O8y#eRBG&L*tjjZpZ|4wy42McMf;6D-FZhiapIM!)r z_sZA)wESb7^JsAQhaCII-)}xG5Ri#_nLnrZ+eB65_``emGxO@_m|YAHE%B>A{%P9( z@kgHuTS<&1BT6WxBhsP`Mak2!j~i3Mv7Pn~9# zH3+5c9Y4P_fX=Cm*32ngXOO&b@p6K5FJb3*i5C()5&d}1K7MkPo!D6>WAFmdl<)l2 z@JyO(8vOfg;2WQRUIcuC-nE!)1n&itE&6?4-Gtfv?w|j4^Pm6I-?z4}nciwARNz?r zdNx{L&+NC$4NZ$?_^vV^1c=XS{E=KO-Ysh0Mzve<12+O=ubNJb8`@7eMCZ;lh@EXl z@8#P&nXF5k+7j|o@NRvPhR_4kIBZj`9ja_L?NPoC{zYQwV zh|jfINACeIXe%IgR&k^;9jRUuTv~giQARr+Ba7f=seP8qfqP}=bTihOsz+ilf!^=) z!&ymyAJD2ITlQ0ykH7kxpMOc|U(AvfAQljqDB&uyj0($)n1`o>V$fCae2$=2Dm09x ztHe^q0(7*h1=!|3cXV%$&2yS5THLh(u+FcesgZs?9~5@I-<3@(`tgW(;{$^e6}I}$ zjNsL5G#Ml7@jCcP&cWx|!*3Eu9b}YahE!rQL7k24hk&z;ges@dw5i_d{Syb%X;ZVD zg6gl1i{HjObzRQJG&>H(H|f_>!mNM?EPb~`$8*3?JDHNJM&_DS!SX0^w9k6WXvC>3 zMoK>byw}pL1X?tur$v3E3a9ZfNsK4dV6TO`XEJX99Ov|lG%eb(5Cd8lZF1SjvWKg; z@@ZcLT?mHJQ~zOB3yW!O+Kz$jNPH=9xzshg@&KWOfRaDR<`&kWiS=RroXe!3eVL`4 z9eEm=F}MIj8q?e8k1pOzU@TY%whwcZb2ht16Vk)d?b?LGqHt!d{SSf0i~L>3GhrSD zz?O;VyNC7pM>jvt;aq%LT0_W}$$KFU_0dfI3xOc87BWwuZ5y9j)cr1>skMTJW3z?& zlAqCHa%L@Ozk!CGF+M9M*87CfE<`U2QMpm@@|8@` zd(GDVU;oGdx%uwv@ADH0m<$9P5c1A#KHE80g1h44l819?C7jv&#iKpTY5w9cE%7;y z>jsol22Ws`ujoN-RA+o@=bG8aF`Dhh1LDZ=)LuZb59O1?a{*#c*Ykk6msOT>_S2RO z-Y?oV%`D)hQU(cS;jrgUxm0;)^6_0MTu6>~L8!tTg16}xCM|wBmPRP`G5?t~-6!LN zTV-^3*16qFgM3BxjVPuLv* z!gWHj3Z3%mJ|r5TSSLHyFkSJQ zd|pgbiGUn&n5+Fwl*L<5d`G`gL(cJF@LX)3_u+PfbupI0Z_%@ZD=j^7N9 z`b)-6^fp^8(V=hv>0_in?uBK~{8_1FF3g%uKxY8uqr6dY=qJ}c+&sJYaPv?9@XO8b z{^>XE_1Ggd=u~YeDr)m_K=ncIz0`XwzqwTT0;MfCG8^}*cSpidQBrY)X0U59pNX2eXp%Ad5K*+!jKw))c~=ABi3t($l% z%r@Fr<=Obby##N7_>g{MKE=RO$J&Kim|KKYJ%j}~fD4f0D-o_h(@~blZ|2|xe`g^x6Rewd9&#DbM?gs4NM<5czlx9dA56w*48tbfizY1ARF>l0TTnL z;Lodp{iU?cmx1N&`+;u2?D{7+ZluZG7_-_SXcJR@s*3@&n6ZZ@LEH&otFy@q8q%Xe z4&-g9It^r}H`gy+F2FcG>mHLG2J;sUc<-a#Ng8(V<|oDvchaDr1~|uxj=$D>%+%Vk zXe%Gp)qq;QH$Ke|E;iwjlb=%J+*ZJ8;zYeg#N%z6AkA7BkhIFuF-=Z)9XDD}L+S!h zIejCLDQZjz40P1Q;`CjZ!+LJOrstR-juFLU&9oqLbk3_!lDB`?zU=|?*p3239$t$_K#v~Ty! zZuMyvv@+zeI(u$6lcoIidpX(@w*7L(o3Wzd%NU^@W>V2!xw8(n?`Gw!>oid!?aO`w zf3DfbWr1_x89>Ye_GC#c)1@?5!J!9fa<|*@=1hK?Gfe^@+a}o7oyvW&p?07PF zwAjJ=qzVl0+L<*P7zf|(_-6Qkvw`pS%wEgq!UL&Q*nWmBXy7&+dnzFx@Hh0|YY&5;lOpv|yYUv2D?*=ZT zu#$Hb3cUpQQM;8CniOSw-rtGWlO5<`nlQ8<>YLm0u`E6vVoe1zi zaRw4JuYVuqPXp>l>k~n(uY2yO_onG>H6v#mFJ_W~QD_Q>w%qVP6k70`|N86A52ZQY z5x`pC%E^AZezmBa`On9Cr1qanc!h$T4vY*$@?bqngOOB^O~n6dVL3jK-SeYn9bcv8 z-1T)URR91$07*naR4w*u{F^F%vRY^U#B1QtbKE-|4p03cV(gEZ|+@tuhyZTJySx))7^ z-0TH*EDj6q$pT9QxG_f5d*myH#r?E+dvlg-e*iR)`FbT^KWPx;gcnI?hxw;7rIw zY|TXC%X(e_W+C1U5X@b%Sw%nRTX~+tTiz)7jbwlvoKSTL!Q z!TN>z<3xPM)a8hOSl#!k6H{1bRPrYjhNiZdv@MSd#H6En(AI2H4heO5p3ltMP64=k z^%p;;1>(X+Y}QH+xF}jn_{EnPWrRDSBN&8sgb8T$n;^PQ+W{W_Ruios^9&)x^n46r zkQM-0?kD5~8(1mNHRj^_+js9B;XW+SJ>59(!k7b0>%00~LCmLXK4;saI!qlrzk;P% zLxkQfm5e0$uQ-o0GYEvY0vL{Kgf%-iF(L_2G}6585OgSPB5lt8MB>(gGHUcHUtgxa%g`k69LP+jvLzAoS~ z@A2+RtcC-M`e`)7-eEsG`{m6Vyac4?B?t+!zl88jK%<->en5`k@+oqDPQ-VAT57A%Ft^7=xnY)*+6f}D~;5j~;qkdx! z$;=AqWNo!>^KshZ!zLkq`};pl^tX}Cgo=F@FXb%fwCC&l{=4so5l-aTHc$v7h+_wo z`1`DsvV0CPcygBM$Y^1ZvW6T z`9u4A65Zr?H>0^1z)j2(e_s6j${-%Cn2gdqKP%##H6+sfY`&}``Mk~s@*e@gCP(a! zbETNRYyDXWJ>f?6_si(9mp`pX$Hb)h-4mx5ui67szO4t(T7J_FAGDUyK=!QqqJzl` z4tv(tiTaGW={SG3II(E5^%sBj#g~K)3n+K4;r%ZynwrSZ&ps;{LUy>b=`N9O?GFdsvIqU(J_tZOm1fc2_ z;PtB?)c?m@SNJgh)Ri$m&GykS{`iNlhKANw{_WrX`+{aa zXnLQP^)8V7K3__+VCA;DRdDE^zV5xvDC&YE1(AO8(T!r%nlTN~{_w{?48UvWlfnrI z(6LNDv2Xg|Spu%@Qcu%*E`M@kbF~D0z~O!Mh~(2wCcA~rr(&JQ)%Wh#-=?9oz@0hH zUz0Y0)BMqzWL2;?A;7^e2btM4JJ}5c!HNif+BxQ&t-sFo$3#362wD1KQwswL4J9H? zNC7_G4QwiAV!!y@?gXAs3tzw;loa90vUK372bq*iJ_GtEAKskhKyP~|3q=a#S=tt8 z9<6`g#v5inZTM^b-*@%p^IREPbg4mt!ZZDySxau7HNz;(#+ufd7>e%|W%_ofl;CR;Py=pkFt;bJ6#ktWKLNcSj z8Ln|=M=AHM8q``20rZ_sJMZYX_bK0RpRTX(R{rvC+DiYi$SQZr?pfu`#t;$nObGs{ z(T%frMz=a2Nc3aTl;RR2d$pR-hZU&!wtOF;>fQl@nAIrZ-BYJVB0vHt)XgZNZPZ!E zo0x+SOTAnV73UMcY8NevdBy3e9Dgs{Xq1C|!WPmDm}ydQphwa^4W|tJ`kDU!G1Fbn1*CaR?enAgIi_#& zbD#&mj(|=y*xHWxX+Y15$vLsT^w$?(e6hKD`Er7IFphTay*)U`qAg( zue|mBHxmlNr+K#JI=A?*(jN9QZTVtOr@3sm%;{3m@0`GOSQ8d^XT%2>$~~4K@1>Ok zcyUdUk#B$M{OU~({v6S}9NM*mmU57J#7Brvw`$*LS)JcaLpoc(9}SrGr8vOrS3VdA z`QtPsfMp4|K6(AR38}zZh|wJ&yOdq@Evn> zYpcu~)t_>LpQM3?CKm!Wp(0}I4hol8G^{Qt$itX!6?VTdq(`0W(tNIr+l4ti;~X&3 zK@+g)<_^y}+(RIi>x%%7HsifLvz~YVPrrL^ectC%kEK3qoqewLUhj9``fi|MTKwYa z(!S(qeNswRyFLrz6S>>M@4YSeOb!I3)GlS;d#pG*QMk6~aLRu719+R~=nf3c|br{%4> zf4Aj52{n_IpUxUISwCL{GEW{CcUAk}dkS`qK$=BjJ_hI$AG&Yw&dqcO+lHnxx^23?;g$N=Yj1MG`TCo2#Pmi(Erh2n;@O?L3@ zSy3Q$wKOeuKBv9JAjOy!KNjfWmy-b~ZD?F0wL_pM?eKg6#BaEjNoXmLAW?j{SNH^H zyHyT*X;r5JtJ4Agz50_gK2PVkQf6EG>hu<0*9P>){}9U+dzNP^*v6DSy4*IocplP(`zad@l~?)ycktM`IAP6|b_9rFIpE z)eEXm0Av)5K%Bjv0Rr>q`;;`0H1EYMt5&Fkff)0Nz|Jg3Pv~Hys(Q;za3m*nEvTcK zIjWO^!45(A5)CFz5pI)eVRr>(B(yA zu1x}23Dk#~5uEBwt(igVy*F-t+${TUYZi<1k#aZ?x_9?MZIJ$_DF5mS#8y+=XfHO% ztS*FL*6lxw4o6ydSu{G+@Q2&?DyQiGfRvdga@zAhwQ~lfT?`9sA zg`?t7-DVL|H1Fo;!Bb+4lyN6*#GZo^+3h9Rk26Ul@c@^6UU*QOtPO3pW^X|5_l@p2`#2 zK-1vm5_$fj*;76s15n*IPVBr|P@(svx%7VFB%;e{KxQdT$ly^kwoJC|c<6QCEt(JO zr!4ycGCAo`7wRAW+Hnaq0O}k5sfz($2sS(lu!MN*msP_`hn)r;p#1qKA4S`eECyI| zw=r5L)pi4suop@~uL!W@^FOxv`u6t|pC&fWs*b%}0^^^paWb2_2UtBWO9(qav$uZs z^H0AVQ0j$*Yr3*Vt|R^e8o&yX>ZE$k{SKe2mg8BBOKU>R(VBW@z_9yV@ALv_%IfeA zf3E3Z!sSq|^J~47;cwMm+`m5O9>3S;miN`kRc7i}Ic5XB@mzp3l}w=Dn(@JW+8r~3 zrCQLx-B}ZKvST8ui|rDc(2J_)5)&o^&6vLkH&$Rt4GFS6x;C`B|diWba>-SQpMFSOAr##Qw zT?KF{gOAL8YxF&>W&&utSzM06#H@`O8``Dcf-?n5qMO0Mp^g?=&rux+w8-TdJmQP* zZ+|!Wt15haaVo=6PRJhTq&I=VDZJzXlYZxAYYy{IRUZy|&UV@q6L2R-za>PoV-RgC zAvGyvjiqRL{A4#CCg(r@_FogQ^4hnE*q(&@mB%+HEP}tv5}Uo=`(0}xZ{7N#YSpFy z#FlA%LS`IIK+rPrmnnFI8#-fuNc^@(74_+=kxDe zi2lR>)ldGeC&fd_UuCg+LwdA&KC^RD!dz;K0R^}` z5g=WT2CvgTX=rHXc+$YHeV-Mzf5ikv07*Nt9UG(c{woOu-=tk$Zb_Dm8Sz!bu|&(- z&aRf9?(8hmmPGPJN`vH&obZCIrAoH`aKCms$Vw(7vmq26Dlb4ps0JWnj?o~3`6Zw- zA&ZEvVekpoqY*@Kzi00=LK6RycZ6N0#utGgNPy4z>C-w=r%9LLoz6K{psrZw`e#tFYl_8ywfzUNZfE_1bi|5szuMz7>}kq zPvB&2;REW__))aM4kaS<2gqv2qD7%iYsC`ocLn|ND+!WR--Fa?TV!#(zb{;B0I5-E zqUK`?W%9kC12az$;PV)cJ@0svnZoR%^_j`!knc+(QC;0|XbNDcZXB&mzw-Mq>n8n8 zj6a&NkvHb#$fhmnJM`oWQ%AlgTB#`S*%3Rx6lG%F*kMey+G$4_<)4V@PA3#^8gXwI z7p2X2o;;k4oPc%NnaJQ!>YW7b!aJtvYw~K0s^*k05U#Y-0_>u zO`us_paWm!sgu#}#QCyc+$MDOS8E94oi9GR7N6v=3OsK$E9gKczCXNr{7vg2Gx?SSXwSvfuG!?V_x7@!zS1T%S0VmKzz}Dy1dyG!w!va*5yOzHKlJ~E5 zF^UX;X7aFoUGt1{KK*vAW#A|p0;e}r=V0czzFuZY`w?1}1ITPT;LzoOo8|ycQ9zx2 zsTBjNP=Q89;AxMX*R+o+Irn?F_bP{3N01%Pui#2Bq>53-T7PX2svxLtZ5O}FJXig_ ze;n?Ol%dOyZA2Rbg>w35-ivm#(mm}G_^y%p>#Qk%miM`5g7^{&&zOAyl0a=tPBaaS zZJsd>^#GWoSB6f{%}i&{Rkdl0?YNkC7C39ez1HM0BlQ8ZjNi&sxzSf$wO4q8JWZn| zWoj_7Ewup*1~I0F-0DvXJGj==H}d}OcmFnKj3pY%u_1;{R+*Y;YLY-|6rme@W_R<0 zJx*g_Qd){an+&5zYe5H&U*2dpr~D z)4%w6+pG)gNZaZ8BWS?YkTxSd%#qsmE`gL3@lodQi+pHD^2Z3;6ksvNmed(*S(T!k*i2K*jq~Z`)9o**W`ERyXAfVK~w|Xur}WQwl6$^33@Yrvt$@ zPfgPnx-hA~qw}qOX>K-YUl$8YxG?Xx@dW;pidt-(bVFw8XUR`I!?{5-Hwd#dw1wM& zH82wyf7z}%7z;B^JX9Sr!dJs5<3bPnO%Qd|fJ4`G_zD!O@cA5#4H`$BxhFN9@H(#? zOf%(I)>cbT5FJ7NL$F<21^TTpgt^{*eNo;BXt&R2qeKrj5_^0xE7$9OYp9%4oa?4g zFE>jlbAa7)Xh@?)^uAtLISaT%|LQ=nf!G2_d;)-Dd}P(be>%!L_@dT&^=RKKYiMWD zaaw3?w@v*7c&5ssgLo3pt~u)k4FVM#V5q!;(ohk8CfqsnIIOLE7w6VIeG-9MvL z8i@c{<*pnIXD_)_XDt}rF79|+sQM( zq%o0Ywf}Rh=R8h;o~L!y`q>GGzm3La??IZrq|=@_Ck`qh!>Y_j>RuhB-_NoAJcrRcRa|1Lt|z)9@_~}X1{^@ zX$fWxoTHfu6lt$J)^6TSd&7Z8QXXgWr1tXjVnzIOy!fnHh7-v9oTXXhG0YGiL4l~l3UN5qfY?$g zt2sXV;-fDIOu7io3Ez6qBnZR`J}Z#8XBlZ12jmJ80B5}y^AC7+?+9t-ySA3+9Z=fw zW1#2Zy9t?Nd{4a}2rL3lkQShDeP+DWug+iVO=uP%AmC=0dcJo<^;3cGqh>P>@=YM{ zNKoYfpD8y=Vo?4kXGf!g`Z1??5nF4IpDBW?4^S`->+pWUthW_Csf+^`0plw3!F9Z3VOfq0(*-QloT$!0AfqN43E?{+e{7mA< z1igOKn!<<8AlfWK76PD8vjd(s=%76T#FaOFic(i68im*&rnukeV??)1#=y1oQ(#Ry zNekS)c4hPF-~8ohFf^caoXyXhW&EqO!H){DD4#^T%oHk-X~`r^eVo~_^VMf3ElC#9 z;{ky@?q{l>{Q~hR-yk;xzZ0;s@cTlO3&IM#+wAb$_<}>7xfR7r?3bS{o&ZQP!HOsc zu1}gN#AyZ`14UMAcROLA3F@*U@YK`#l9OF|Byt9t`t^0L6z2SyXd;`&k!B5L=$QQv zYsZ~T!B?5>7q&}19x%pin`^BO5G?#4;CkG^%0DI*k)=I5ErO(l^Htg=&a#|)5AIDY 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 LNkvXXu0mjf9h?od literal 0 HcmV?d00001 diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..e442a22 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Base.lproj/Main.storyboard" @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/HitterTableViewCell.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/HitterTableViewCell.swift" new file mode 100644 index 0000000..a123451 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/HitterTableViewCell.swift" @@ -0,0 +1,42 @@ +// +// HitterTableViewCell.swift +// KBOHallOfFame +// +// Created by LingoStar on 2017. 10. 31.. +// Copyright © 2017년 LingoStar. All rights reserved. +// + +import UIKit + +class HitterTableViewCell: UITableViewCell { + + var hitter:Hitter? { didSet { + self.profileImageView?.image = hitter!.profileImage + self.nameLabel?.text = hitter!.name + self.emblemImageView?.image = hitter!.team.emblem + self.averageLabel.text = String(hitter!.average) + }} + + + @IBOutlet weak var profileImageView: UIImageView? + @IBOutlet weak var nameLabel: UILabel? + @IBOutlet weak var averageLabel: UILabel! + + @IBOutlet weak var yearLabel: UILabel? + @IBOutlet weak var emblemImageView: UIImageView? + @IBOutlet weak var teamNameLabel: UILabel? + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/KBOTableViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/KBOTableViewController.swift" new file mode 100644 index 0000000..3d58c5d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/KBOTableViewController.swift" @@ -0,0 +1,160 @@ +// +// KBOTableViewController.swift +// KBOHallOfFame +// +// Created by LingoStar on 2017. 10. 22.. +// Copyright © 2017년 LingoStar. All rights reserved. +// + +import UIKit + +struct Hitter { + let name:String + let team:Team + let average:Double + let year:Int + var profileImageName:String? + + var profileImage:UIImage? { get{ + if let _profileImage = self.profileImageName { + return UIImage(named:_profileImage)! + } else { + return nil + } + + }} +} + +enum Team { + case Haetae + case MBC + case Samsung + case Nexen + case NC + case LG + case Lotte + + var emblem:UIImage? { get{ //Enum은 Stored Property를 가질 수 없지만 Computed Property는 가질 수 있다. + switch self { + case .Haetae: + return UIImage(named:"haetae_tigers")! + default: + return nil + } + }} +} + +class KBOTableViewController: UITableViewController { + + @IBOutlet weak var averageField: UILabel! + + func dummyData() -> [Hitter] { + let baek_1982 = Hitter(name: "백인천", team:.MBC, average: 0.412, year: 1982, profileImageName:nil) + let lee_1994 = Hitter(name: "이종범", team:.Haetae, average: 0.393, year: 1994, profileImageName:"leejongbum") + let jang_1987 = Hitter(name: "장효조", team:.Samsung, average: 0.387, year: 1987, profileImageName:nil) + let tames_2015 = Hitter(name: "테임즈", team:.NC, average: 0.381, year: 2015, profileImageName:nil) + let jang_1985 = Hitter(name: "장효조", team:.Samsung, average: 0.373, year: 1985, profileImageName:nil) + let ma_1999 = Hitter(name: "마해영", team:.Lotte, average: 0.372, year: 1999, profileImageName:nil) + let park_2009 = Hitter(name: "박용택", team:.LG, average: 0.372, year: 2009, profileImageName:nil) + let hong_2009 = Hitter(name: "홍성흔", team:.Lotte, average: 0.371, year: 2009, profileImageName:nil) + let seo_2014 = Hitter(name: "서건창", team:.Nexen, average: 0.370, year: 2014, profileImageName:nil) + let jang_1983 = Hitter(name: "장효조", team:.Samsung, average: 0.369, year: 1983, profileImageName:nil) + + return [baek_1982, lee_1994, jang_1987, tames_2015, jang_1985, ma_1999, park_2009, hong_2009, seo_2014, jang_1983] + } + + var kboHallOfFame:[Hitter] = [] + + override func viewDidLoad() { + super.viewDidLoad() + + kboHallOfFame = dummyData().sorted(by: {$0.year > $1.year}) + + let average = kboHallOfFame.reduce(0, {$0 + $1.average}) / Double(kboHallOfFame.count) + averageField.text = "타율평균 : " + String(average) + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + //self.tableView.register(HitterTableViewCell.self, forCellReuseIdentifier: "KBOCell") + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return kboHallOfFame.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "KBOCell", for: indexPath) as! HitterTableViewCell + let currentHitter = kboHallOfFame[indexPath.row] + // Configure the cell... + //cell.textLabel?.text = hitter.name + " " + String(describing: hitter.team) + + //cell.detailTextLabel?.text = String(hitter.average) + " ( " + String(hitter.year) + " )" + cell.hitter = currentHitter + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/ViewController.swift" new file mode 100644 index 0000000..c90c441 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/KBOHallOfFame_customCell/KBOHallOfFame/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// KBOHallOfFame +// +// Created by LingoStar on 2017. 10. 22.. +// Copyright © 2017년 LingoStar. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..60ea893 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj" @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE5100051F9DD9D0003F7477 /* Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5100041F9DD9D0003F7477 /* Money.swift */; }; + AE51FFD71F9DD116003F7477 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51FFD61F9DD116003F7477 /* AppDelegate.swift */; }; + AE51FFD91F9DD116003F7477 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51FFD81F9DD116003F7477 /* ViewController.swift */; }; + AE51FFDC1F9DD116003F7477 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE51FFDA1F9DD116003F7477 /* Main.storyboard */; }; + AE51FFDE1F9DD116003F7477 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE51FFDD1F9DD116003F7477 /* Assets.xcassets */; }; + AE51FFE11F9DD116003F7477 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE51FFDF1F9DD116003F7477 /* LaunchScreen.storyboard */; }; + AE51FFEC1F9DD117003F7477 /* MoneyConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51FFEB1F9DD117003F7477 /* MoneyConverterTests.swift */; }; + AE51FFF71F9DD117003F7477 /* MoneyConverterUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51FFF61F9DD117003F7477 /* MoneyConverterUITests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE51FFE81F9DD117003F7477 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE51FFCB1F9DD116003F7477 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE51FFD21F9DD116003F7477; + remoteInfo = MoneyConverter; + }; + AE51FFF31F9DD117003F7477 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE51FFCB1F9DD116003F7477 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE51FFD21F9DD116003F7477; + remoteInfo = MoneyConverter; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE5100041F9DD9D0003F7477 /* Money.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Money.swift; sourceTree = ""; }; + AE51FFD31F9DD116003F7477 /* MoneyConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoneyConverter.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE51FFD61F9DD116003F7477 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE51FFD81F9DD116003F7477 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE51FFDB1F9DD116003F7477 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE51FFDD1F9DD116003F7477 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE51FFE01F9DD116003F7477 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE51FFE21F9DD116003F7477 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE51FFE71F9DD117003F7477 /* MoneyConverterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoneyConverterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE51FFEB1F9DD117003F7477 /* MoneyConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyConverterTests.swift; sourceTree = ""; }; + AE51FFED1F9DD117003F7477 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE51FFF21F9DD117003F7477 /* MoneyConverterUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoneyConverterUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE51FFF61F9DD117003F7477 /* MoneyConverterUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyConverterUITests.swift; sourceTree = ""; }; + AE51FFF81F9DD117003F7477 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE51FFD01F9DD116003F7477 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFE41F9DD117003F7477 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFEF1F9DD117003F7477 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE51FFCA1F9DD116003F7477 = { + isa = PBXGroup; + children = ( + AE51FFD51F9DD116003F7477 /* MoneyConverter */, + AE51FFEA1F9DD117003F7477 /* MoneyConverterTests */, + AE51FFF51F9DD117003F7477 /* MoneyConverterUITests */, + AE51FFD41F9DD116003F7477 /* Products */, + ); + sourceTree = ""; + }; + AE51FFD41F9DD116003F7477 /* Products */ = { + isa = PBXGroup; + children = ( + AE51FFD31F9DD116003F7477 /* MoneyConverter.app */, + AE51FFE71F9DD117003F7477 /* MoneyConverterTests.xctest */, + AE51FFF21F9DD117003F7477 /* MoneyConverterUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE51FFD51F9DD116003F7477 /* MoneyConverter */ = { + isa = PBXGroup; + children = ( + AE51FFD61F9DD116003F7477 /* AppDelegate.swift */, + AE51FFD81F9DD116003F7477 /* ViewController.swift */, + AE5100041F9DD9D0003F7477 /* Money.swift */, + AE51FFDA1F9DD116003F7477 /* Main.storyboard */, + AE51FFDD1F9DD116003F7477 /* Assets.xcassets */, + AE51FFDF1F9DD116003F7477 /* LaunchScreen.storyboard */, + AE51FFE21F9DD116003F7477 /* Info.plist */, + ); + path = MoneyConverter; + sourceTree = ""; + }; + AE51FFEA1F9DD117003F7477 /* MoneyConverterTests */ = { + isa = PBXGroup; + children = ( + AE51FFEB1F9DD117003F7477 /* MoneyConverterTests.swift */, + AE51FFED1F9DD117003F7477 /* Info.plist */, + ); + path = MoneyConverterTests; + sourceTree = ""; + }; + AE51FFF51F9DD117003F7477 /* MoneyConverterUITests */ = { + isa = PBXGroup; + children = ( + AE51FFF61F9DD117003F7477 /* MoneyConverterUITests.swift */, + AE51FFF81F9DD117003F7477 /* Info.plist */, + ); + path = MoneyConverterUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE51FFD21F9DD116003F7477 /* MoneyConverter */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE51FFFB1F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverter" */; + buildPhases = ( + AE51FFCF1F9DD116003F7477 /* Sources */, + AE51FFD01F9DD116003F7477 /* Frameworks */, + AE51FFD11F9DD116003F7477 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MoneyConverter; + productName = MoneyConverter; + productReference = AE51FFD31F9DD116003F7477 /* MoneyConverter.app */; + productType = "com.apple.product-type.application"; + }; + AE51FFE61F9DD117003F7477 /* MoneyConverterTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE51FFFE1F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverterTests" */; + buildPhases = ( + AE51FFE31F9DD117003F7477 /* Sources */, + AE51FFE41F9DD117003F7477 /* Frameworks */, + AE51FFE51F9DD117003F7477 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE51FFE91F9DD117003F7477 /* PBXTargetDependency */, + ); + name = MoneyConverterTests; + productName = MoneyConverterTests; + productReference = AE51FFE71F9DD117003F7477 /* MoneyConverterTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE51FFF11F9DD117003F7477 /* MoneyConverterUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE5100011F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverterUITests" */; + buildPhases = ( + AE51FFEE1F9DD117003F7477 /* Sources */, + AE51FFEF1F9DD117003F7477 /* Frameworks */, + AE51FFF01F9DD117003F7477 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE51FFF41F9DD117003F7477 /* PBXTargetDependency */, + ); + name = MoneyConverterUITests; + productName = MoneyConverterUITests; + productReference = AE51FFF21F9DD117003F7477 /* MoneyConverterUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE51FFCB1F9DD116003F7477 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE51FFD21F9DD116003F7477 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE51FFE61F9DD117003F7477 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE51FFD21F9DD116003F7477; + }; + AE51FFF11F9DD117003F7477 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE51FFD21F9DD116003F7477; + }; + }; + }; + buildConfigurationList = AE51FFCE1F9DD116003F7477 /* Build configuration list for PBXProject "MoneyConverter" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE51FFCA1F9DD116003F7477; + productRefGroup = AE51FFD41F9DD116003F7477 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE51FFD21F9DD116003F7477 /* MoneyConverter */, + AE51FFE61F9DD117003F7477 /* MoneyConverterTests */, + AE51FFF11F9DD117003F7477 /* MoneyConverterUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE51FFD11F9DD116003F7477 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE51FFE11F9DD116003F7477 /* LaunchScreen.storyboard in Resources */, + AE51FFDE1F9DD116003F7477 /* Assets.xcassets in Resources */, + AE51FFDC1F9DD116003F7477 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFE51F9DD117003F7477 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFF01F9DD117003F7477 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE51FFCF1F9DD116003F7477 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE5100051F9DD9D0003F7477 /* Money.swift in Sources */, + AE51FFD91F9DD116003F7477 /* ViewController.swift in Sources */, + AE51FFD71F9DD116003F7477 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFE31F9DD117003F7477 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE51FFEC1F9DD117003F7477 /* MoneyConverterTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE51FFEE1F9DD117003F7477 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE51FFF71F9DD117003F7477 /* MoneyConverterUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE51FFE91F9DD117003F7477 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE51FFD21F9DD116003F7477 /* MoneyConverter */; + targetProxy = AE51FFE81F9DD117003F7477 /* PBXContainerItemProxy */; + }; + AE51FFF41F9DD117003F7477 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE51FFD21F9DD116003F7477 /* MoneyConverter */; + targetProxy = AE51FFF31F9DD117003F7477 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE51FFDA1F9DD116003F7477 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE51FFDB1F9DD116003F7477 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE51FFDF1F9DD116003F7477 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE51FFE01F9DD116003F7477 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE5100001F9DD117003F7477 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverterTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MoneyConverter.app/MoneyConverter"; + }; + name = Release; + }; + AE5100021F9DD117003F7477 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverterUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MoneyConverter; + }; + name = Debug; + }; + AE5100031F9DD117003F7477 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverterUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MoneyConverter; + }; + name = Release; + }; + AE51FFF91F9DD117003F7477 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE51FFFA1F9DD117003F7477 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE51FFFC1F9DD117003F7477 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverter/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverter"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE51FFFD1F9DD117003F7477 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverter/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverter"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE51FFFF1F9DD117003F7477 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = MoneyConverterTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.MoneyConverterTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MoneyConverter.app/MoneyConverter"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE5100011F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverterUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE5100021F9DD117003F7477 /* Debug */, + AE5100031F9DD117003F7477 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE51FFCE1F9DD116003F7477 /* Build configuration list for PBXProject "MoneyConverter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE51FFF91F9DD117003F7477 /* Debug */, + AE51FFFA1F9DD117003F7477 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE51FFFB1F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE51FFFC1F9DD117003F7477 /* Debug */, + AE51FFFD1F9DD117003F7477 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE51FFFE1F9DD117003F7477 /* Build configuration list for PBXNativeTarget "MoneyConverterTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE51FFFF1F9DD117003F7477 /* Debug */, + AE5100001F9DD117003F7477 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE51FFCB1F9DD116003F7477 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..5566428 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/AppDelegate.swift" new file mode 100644 index 0000000..a55f070 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// MoneyConverter +// +// Created by 황도증 on 2017. 10. 23.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..1d060ed --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,93 @@ +{ + "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" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..718df7d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard" @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Money.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Money.swift" new file mode 100644 index 0000000..0ff07ac --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/Money.swift" @@ -0,0 +1,62 @@ +// +// Money.swift +// MoneyConverter +// +// Created by 황도증 on 2017. 10. 23.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +enum Currency:Int { + case USD = 0, KRW, JPY, EUR + + var ratio:Double { + get { + switch self { + case .USD: + return 1.0 + case .KRW: + return 1178.5 + case .JPY: + return 122.45 + case .EUR: + return 0.92 + } + } + } + + var symbol:String { + get { + switch self { + case .USD: + return "$" + case .KRW: + return "₩" + case .JPY: + return "¥" + case .EUR: + return "€" + } + } + } +} + +struct Money { + var usdollar = 0.0 + + init(_ _usdollar:Double) { + usdollar = _usdollar + } + + init(_ amount:Double, currency:Currency) { + usdollar = amount / currency.ratio + } + + func valueInCurrency(currency:Currency) -> String { + return "\(currency.symbol)" + "\(usdollar * currency.ratio)" + } +} + +let myMoney = Money(120) +let incomeKRW = Money(350_000, currency: .KRW) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/ViewController.swift" new file mode 100644 index 0000000..c6e3a2b --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverter/ViewController.swift" @@ -0,0 +1,52 @@ +// +// ViewController.swift +// MoneyConverter +// +// Created by 황도증 on 2017. 10. 23.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + @IBOutlet weak var currencySegment: UISegmentedControl! + @IBOutlet weak var sourceMoneyField: UITextField! + @IBOutlet weak var targetMoneyLabel: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func convertMoney(_ sender: Any) { + + guard let sourceCurrency = Currency(rawValue: currencySegment.selectedSegmentIndex) else { + print("Source currency Error") + return + } + + guard let sourceAmount = Double(sourceMoneyField.text!) else { + targetMoneyLabel.text = "Error" + return + } + + let sourceMoney = Money(sourceAmount, currency: sourceCurrency) + + var targetMoneyString = "" + for i in 0..<4 { + targetMoneyString += sourceMoney.valueInCurrency(currency: Currency.init(rawValue : i)!) + targetMoneyString += "\r\n" + } + + + targetMoneyLabel.text = targetMoneyString + } + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift" new file mode 100644 index 0000000..5cd05d5 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterTests/MoneyConverterTests.swift" @@ -0,0 +1,36 @@ +// +// MoneyConverterTests.swift +// MoneyConverterTests +// +// Created by 황도증 on 2017. 10. 23.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import MoneyConverter + +class MoneyConverterTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift" new file mode 100644 index 0000000..09be271 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/MoneyConverter/MoneyConverterUITests/MoneyConverterUITests.swift" @@ -0,0 +1,36 @@ +// +// MoneyConverterUITests.swift +// MoneyConverterUITests +// +// Created by 황도증 on 2017. 10. 23.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class MoneyConverterUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/Contents.swift" new file mode 100644 index 0000000..6152ba1 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/Contents.swift" @@ -0,0 +1,37 @@ +//: Playground - noun: a place where people can play + +import UIKit + +var title = "Hello, playground" +var ratings:[Int]? = nil +var supportUrl:String? = nil + +supportUrl = "www.DJ.com" +//print("\(title) has \(ratings!.count). \r\n support to webpage : \(supportUrl)") + +//force unwrapping +//물음표로 옵셔널을 선언하고 느낌표로 데이터를 확신한다고 표시. 느낌표가 많으면 크래쉬가 날 가능성이 많다 +var bookDescription:String = "\(title)" +if ratings != nil { + bookDescription += "has \(ratings!.count) ratings" +} +if supportUrl != nil { + bookDescription += "\r\nsupport webpage : \(supportUrl!)" +} + +print(bookDescription) + +//optional binding. +if let theRating = ratings { + bookDescription += "has \(theRating) ratings" +} +if let theURL = supportUrl { + bookDescription += "\r\nsupport webpage : \(theURL)" +} + + +//implicitly unwrapped optional. +//옵셔널 사용을 편하게 하기 위한 편의장치. 어쩔 수 없이 옵셔널이지만 실행 중 항상 값을 가지는 게 거의 확실. +var URL:String! = nil +//선언 시에 !를 사용해 선언하고, 후에 옵셔널이 아닌 것처럼 사용한다. + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/timeline.xctimeline" new file mode 100644 index 0000000..77f057d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional.playground/timeline.xctimeline" @@ -0,0 +1,12 @@ + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/Contents.swift" new file mode 100644 index 0000000..c5ca9e0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/Contents.swift" @@ -0,0 +1,47 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//아래는 애플와치와 쌍을 이룬 아이폰을 찾는 가상의 코드입니다.(실제 애플와치 앱에서 이런 코드를 사용하는 것은 아닙니다) optional binding을 써서 빈 칸에 적당한 코드를 작성해주세요. + +struct WatchDevice { + var pairediPhone:String? //애플와치와 쌍을 이루는 아이폰의 이름. + var appInstalled = false //어플리케이션의 설치 유무 + + enum WatchSize { + case m42, m38 + } +} + +var appleWatch:WatchDevice? = nil +appleWatch = WatchDevice(pairediPhone: "링고스타의 아이폰", appInstalled: true) + +// ①appleWatch에 대해 optional binding으로 watch라는 새로운 변수를 생성해주세요. +if let watch = appleWatch { + // ②watch와 쌍을 이루는 아이폰의 이름에 대해 + // optional binding으로 phoneName이라는 새로운 변수를 생성해 주세요. + if let phoneName = watch.pairediPhone { + print ("AppleWatch가 \(phoneName)과 쌍을 이룹니다.") + } +} + + + +/*실습1에서 쓴 코드를 더 줄여 써 봅시다. 실습1과 동일한 결과가 나오도록 밑줄 친 구문을 완성해주세요. 실행 시 "AppleWatch가 링고스타의 아이폰과 쌍을 이룹니다."라는 구문이 나오면 됩니다. +struct WatchDevice { + var pairediPhone:String? //애플와치와 쌍을 이루는 아이폰의 이름. + var appInstalled = false //어플리케이션의 설치 유무 + + enum WatchSize { + case m42, m38 + } +} + +var appleWatch:WatchDevice? = nil +appleWatch = WatchDevice(pairediPhone: "링고스타의 아이폰", appInstalled: true) + +// appleWatch에 appleWatch에 대해 optional binding으로 phoneName이라는 새로운 변수를 생성해 주세요 +if let phoneName = appleWatch?.pairediPhone { + print ("AppleWatch가 \(phoneName)과 쌍을 이룹니다.") +} +*/ diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Optional_quiz.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/Contents.swift" new file mode 100644 index 0000000..46f35d3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/Contents.swift" @@ -0,0 +1,43 @@ +//: Playground - noun: a place where people can play + +import UIKit + +let name = "DJ" + +var greeting = "Hello" +greeting += " " + name + + +//문자열에 각각의 문자에 접근할 수 있도록 해주는 characters (일종의 배열로 리턴) +let character = name.characters +let count = character.count + +//문자열의 앞 혹은 뒤에 특정 문자열이 들어가있는지 불리안 값으로 리턴해주는 hasPrefix, hasSuffix +let url = "www.dj.com" +let hasProtocol = url.hasPrefix("www") + +// 변수의 타입을 맞춰줘야한다. +var speed:Int = 20 +speed += Int(10.5) + +let pi = 3.14 +let divider = 2 +let halfPi = 3.14/Double(divider) + +//String타입도 넘버로 바꿔줄 수 있음 +let text:String = "213" +let textToNumber = Int(text) +speed += textToNumber! + +//String타입을 넘버로 바꾸는 방법2 +let occur = "10" +if let occ = Int(occur) { + print("By optional binding :", occ*2) // 20 + +} + +//판교와 파주 사이에 거리는 69500m입니다. 2번째 줄의 distance를 적당한 타입으로 변경해서 description을 다음과 같이 출력되게 완성해보세요. "판교에서 파주는 69.5km 거리입니다." +let distance = 69500 +let description = "판교에서 파주는 " + "\(Double(distance)/1000)" + "km 거리입니다." + +print(description) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/timeline.xctimeline" new file mode 100644 index 0000000..97b973d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/String&numbers.playground/timeline.xctimeline" @@ -0,0 +1,11 @@ + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/Contents.swift" new file mode 100644 index 0000000..ba33ef4 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/Contents.swift" @@ -0,0 +1,39 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//튜플은 콤마로 구분되는 값들의 리스트 +//튜플 안에는 다양한 타입이 함께 섞여 들어갈 수 있다. 물론 튜플이 또 들어갈 수 있다. + +let time1 = (9, 10, 12) +time1.0 +let time2:(h:Int, m:Int, s:Int) = (11, 22, 33) +time2.h + +let duration = (time1, time2) +let (start, end) = duration +let endHour = end.h + + +//타입을 새로이 지정할 수 있다. +typealias Time = (h:Int, m:Int, s:Int) +typealias Duration = (start:Time, end:Time) + +let today:Duration = ((9,19,2), (22,30,10)) +print("We studied until \(today.end.h) today") + +/* + 트라이애슬론은 수영, 사이클, 달리기가 합쳐진 운동으로, 우리에게 철인 3종 경기라는 이름으로 잘 알려져 있습니다. 트라이애슬론에는 단거리 경주인 sprint와 장거리 경기인 ironMan 경기가 있습니다. + + ironMan경기의 사이클 거리가 sprint경기의 사이클 거리의 몇배인지를 times에 저장하고 싶습니다. 코드 5번째 줄의 _____를 수정해서 times에 값을 저장하세요. +*/ +typealias Triathlon = (swim:Int, cycle:Int, running:Int) +let sprint = Triathlon(750, 20000, 5000) +let ironMan = Triathlon(3800, 180000, 42200) + +//let times = ______ +let times = ironMan.cycle/sprint.cycle + +// 아래는 결과 테스트를 위한 코드입니다. 수정하지 마세요. +print(times) + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/Tuple&typealias.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/Contents.swift" new file mode 100644 index 0000000..310a863 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/Contents.swift" @@ -0,0 +1,27 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*클로저는 1등시민으로 사용가능한 독립적인 코드조각이다. + 자신이 정의된 환경을 캡처해서 저장한 뒤 닫아버린다고 해서 클로저라 부름 + Objective-C의 Block이나 Java의 Lambda도 클로저의 일종 + in 이 사용되면 클로저. + 하지만 in은 흔히 생략됨 + */ + +let addVATClosure = { (source:Double) -> Double in return source * 1.1} +let couponDiscountClosure = { (source:Double) -> Double in return source * 0.9 } + +let price1023 = addVATClosure(350.3) + +//클로져의 축약1 - 타입을 추론. 들어론 매개변수와 같은 타입을 리턴한다 +let addVATClosure2 = { source in return source * 1.1} + +//클로저의 축약2 - 리턴 생략. 클로저는 무조건 값을 리턴하므로 +let addVATClosure3 = { source in source * 1.1} + +//클로저의 축약3 - 매개변수 생략. 매개변수를 위치로 참조한다. 첫번째 매개변수 = $0, 두번째 매개변수 = $1 etc +let addVATClosure4 = { $0 * 1.1} +let couponDiscountClosure4 = { $0 * 0.9 } + +let price = addVATClosure4(400) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/closure.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/Contents.swift" new file mode 100644 index 0000000..37b7c6f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/Contents.swift" @@ -0,0 +1,54 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*다른 함수를 매개변수로 받거나 함수를 리턴타입으로 사용하는 함수를 고차함수라고 한다.] + 이번에는 함수를 리턴하는 함수를 사용해 본다 + + makeAdder 함수 + 함수안에서 함수를 생성해서 리턴한다 + makeAdder는 결과적으로 두 개의 정수를 더하는 함수 + 하나의 정수를 받아서, 정수를 받아 정수를 리턴하는 함수를 만들어 리턴한다 + 이런 식으로 여러 개의 매개변수를 받는 함수를 쪼개서 하나의 매개변수를 받은 뒤 나머지 매개변수를 받는 함수를 리턴하는 함수를 커링(Currying)함수라고 한다 + */ + +let addVATClosure = { (source:Double) -> Double in return source * 1.1} +let couponDiscountClosure = { (source:Double) -> Double in return source * 0.9 } + +let price1023 = addVATClosure(350.3) + +let addVATClosure2 = { source in return source * 1.1} +let addVATClosure3 = { source in source * 1.1} +let addVATClosure4 = { $0 * 1.1} +let couponDiscountClosure4 = { $0 * 0.9 } + +let price = addVATClosure4(400) + + +func makeAdder (x:Int) -> (Int) -> Int { + func adder (a:Int) -> Int { + return x + a + } + return adder +} +//클로져를 사용 +func makeAdder2 (x:Int) -> (Int) -> Int { + let adder:(Int) -> Int = { + return $0 + x + } + return adder +} + +func makeAdder3 (x:Int) -> (Int) -> Int { + return { + return $0 + x + } +} + +let add5 = makeAdder(x: 5) +let add10 = makeAdder2(x: 10) + +print(add5(2)) +print(add10(2)) +//함수를 리턴하는 함수는 이런 식으로 두 개의 매개변수를 넣을 수도 있다 +print(makeAdder2(x: 5)(2)) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/currying.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/Contents.swift" new file mode 100644 index 0000000..3f42644 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/Contents.swift" @@ -0,0 +1,22 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*고차함수 map + filter 함수는 배열과 조건문이 있는 함수를 매개변수로 받아서, 배열의 하나하나에 함수의 조건문을 적용해서 통과하는 항목만으로 새로운 배열을 만드는 함수이다. + + transactions 배열에서 큰 값만 추려내기 + 거래금액이 500 이상인 경우 true를 리턴하는 함수 + 적용 시 조건에 맞는 항목만으로 이루어진 배열 생성 + meetingRooms 딕셔너리에 filter 적용하기 + 딕셔너리에 filter를 적용하면 튜플의 배열로 변환 + meetingRooms의 value는 튜플에서 .1로 접근 가능 + */ + +var meetingRooms:[String:Int] = ["A":10, "B":20, "C":30, "D":40] + +let members = 20 +//filter. 딕셔너리의 키나 벨류 값에 접근할 수 있다 +let available = meetingRooms.filter( {$0.value > 20} ) + +print("\(available)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/filter.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/Contents.swift" new file mode 100644 index 0000000..8943188 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/Contents.swift" @@ -0,0 +1,45 @@ +//: Playground - noun: a place where people can play + +import UIKit + +struct Task { + var title:String + var time:Int? + + var owner:Employee + var participant:Employee? +} + +/*데이터 모델의 중요한 구성요소로써 Object를 만든다 + 클래스는 객체지향 프로그래밍(OOP, Object Oriented Programming)의 바탕을 이룬다 + + 클래스로 만든 오브젝트는 Reference Type으로 동작하며, 할당시 복사되지 않는다 + 하나의 인스턴스에 대한 레퍼런스를 공유한다 + 인스턴스를 할당한 뒤 수정하면 원본과 할당된 곳 모두 수정됨 + */ + +class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? +} + +//class는 let으로 정의해도 프라퍼티가 var이면 수정 가능 +let me:Employee = Employee() +me.name = "Alex" +me.phoneNumber = "010-3398-9879" + +let toby = Employee() +toby.name = "Toby" +toby.phoneNumber = "010-3392-8765" + +var callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby) +var reportTask = Task(title: "report to Boss", time: nil, owner:me, participant:nil) + +var todayTask:[Task] = [] +todayTask += [callTask, reportTask] +todayTask[1].time = 15*60 + +callTask.title = "Call to Toby" + +print("Today task = \(todayTask)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/timeline.xctimeline" new file mode 100644 index 0000000..25f5f3a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_class.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/Contents.swift" new file mode 100644 index 0000000..4bf922e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/Contents.swift" @@ -0,0 +1,97 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*초기화 작업은 인스턴스가 가지고 있는 모든 스토어드 프라퍼티(Stored Property)들의 최초 값을 설정하는 것 + + 스토어드 프라퍼티 + 저장소를 가지고 있는 프라퍼티 + + 컴퓨티드 프라퍼티 + 저장소 없이 계산에 의해 값을 리턴하는 프라퍼티 + + 구조체의 초기화 + 여러 개의 init 메소드 허용 + 상속을 허락하지 않으므로 Class에 비해 상대적으로 단순. + + 클래스의 초기화 + 하나의 지정초기화 메소드 + 여러 개의 편의 초기화 메소드 허용 + */ +struct Task { + var title:String + var time:Int? + + var owner:Employee + var participant:Employee? + + var type:TaskType + enum TaskType { + case Call + case Report + case Meet + case Support + + var typeTitle:String { + get { + let titleString:String + switch self { + case .Call: + titleString = "Call" + case .Report: + titleString = "Report" + case .Meet: + titleString = "Meet" + case .Support: + titleString = "Support" + } + return titleString + } + } + } + + init(type:TaskType, owner:Employee) { + self.type = type + self.title = type.typeTitle + self.owner = owner + self.time = nil + self.participant = nil + } +} + +class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? + + init (name:String) { + self.name = name + } + + init(name:String, phone:String) { + self.name = name + self.phoneNumber = phone + } +} + +let me:Employee = Employee(name: "Alex", phone:"010-3398-8792") +//me.name = "Alex" +//me.phoneNumber = "010-3398-9879" + +let toby = Employee(name: "Toby") +//toby.name = "Toby" +toby.phoneNumber = "010-3392-8765" + +//var callTask = Task(title: "Call to Toby", time: 10*60, owner:me, participant:toby, type:.Call) +var callTask = Task(type:.Call, owner:me) +callTask.time = 10*60 +var reportTask = Task(type:.Report, owner:me) +//var reportTask = Task(title: "report to Boss", time: nil, owner:me, participant:nil, type:Task.TaskType.Report) + +var todayTask:[Task] = [] +todayTask += [callTask, reportTask] +todayTask[1].time = 15*60 + +callTask.title = "Call to Toby" + +print("Today task = \(todayTask)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/timeline.xctimeline" new file mode 100644 index 0000000..da8edd3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_intialize.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/Contents.swift" new file mode 100644 index 0000000..7c82a18 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/Contents.swift" @@ -0,0 +1,33 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*구조체는 Class와 함께 데이터 모델의 중요한 구성요소 중 하나 +내부에 변수나 상수 또는 함수를 선언한 뒤 인스턴스(Instance)를 만들어서 사용한다 +주로 좌표나 크기처럼 간단한 값을 표현하는 데 많이 사용되어 왔다 +Swift에서 Class의 대안으로 그 역할이 커지고 있다 +*/ + +struct Task { + var title:String + var time:Int? +} + +var callTask = Task(title: "Call to Randy", time: 10*60) +var reportTask = Task(title: "report to Boss", time: nil) + +var todayTask:[Task] = [] +todayTask += [callTask, reportTask] +todayTask[1].time = 15*60 + +/*구조체는 Value Type + Value 타입의 인스턴스 + Int나 Double 과 같이 직접 값을 가지는 것 + Reference 타입의 인스턴스 + 인스턴스가 있는 메모리 번지를 참조하는 것 + Value 타입은 할당시에 인스턴스가 복사되지만 + Reference 타입은 할당시 참조하는 메모리 번지만 전달된다 + */ +callTask.title = "Call to Toby" + +print("Today task = \(todayTask)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/timeline.xctimeline" new file mode 100644 index 0000000..ecab9c1 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/instance_structure.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..ddec32f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.pbxproj" @@ -0,0 +1,557 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE4DD38A1F9B7CCC0009D236 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4DD3891F9B7CCC0009D236 /* AppDelegate.swift */; }; + AE4DD38C1F9B7CCC0009D236 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4DD38B1F9B7CCC0009D236 /* ViewController.swift */; }; + AE4DD38F1F9B7CCC0009D236 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE4DD38D1F9B7CCC0009D236 /* Main.storyboard */; }; + AE4DD3911F9B7CCC0009D236 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE4DD3901F9B7CCC0009D236 /* Assets.xcassets */; }; + AE4DD3941F9B7CCC0009D236 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE4DD3921F9B7CCC0009D236 /* LaunchScreen.storyboard */; }; + AE4DD39F1F9B7CCC0009D236 /* interactionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4DD39E1F9B7CCC0009D236 /* interactionTests.swift */; }; + AE4DD3AA1F9B7CCC0009D236 /* interactionUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4DD3A91F9B7CCC0009D236 /* interactionUITests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE4DD39B1F9B7CCC0009D236 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE4DD37E1F9B7CCC0009D236 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE4DD3851F9B7CCC0009D236; + remoteInfo = interaction; + }; + AE4DD3A61F9B7CCC0009D236 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE4DD37E1F9B7CCC0009D236 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE4DD3851F9B7CCC0009D236; + remoteInfo = interaction; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE4DD3861F9B7CCC0009D236 /* interaction.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = interaction.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE4DD3891F9B7CCC0009D236 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE4DD38B1F9B7CCC0009D236 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE4DD38E1F9B7CCC0009D236 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE4DD3901F9B7CCC0009D236 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE4DD3931F9B7CCC0009D236 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE4DD3951F9B7CCC0009D236 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE4DD39A1F9B7CCC0009D236 /* interactionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = interactionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE4DD39E1F9B7CCC0009D236 /* interactionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = interactionTests.swift; sourceTree = ""; }; + AE4DD3A01F9B7CCC0009D236 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE4DD3A51F9B7CCC0009D236 /* interactionUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = interactionUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE4DD3A91F9B7CCC0009D236 /* interactionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = interactionUITests.swift; sourceTree = ""; }; + AE4DD3AB1F9B7CCC0009D236 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE4DD3831F9B7CCC0009D236 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3971F9B7CCC0009D236 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3A21F9B7CCC0009D236 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE4DD37D1F9B7CCC0009D236 = { + isa = PBXGroup; + children = ( + AE4DD3881F9B7CCC0009D236 /* interaction */, + AE4DD39D1F9B7CCC0009D236 /* interactionTests */, + AE4DD3A81F9B7CCC0009D236 /* interactionUITests */, + AE4DD3871F9B7CCC0009D236 /* Products */, + ); + sourceTree = ""; + }; + AE4DD3871F9B7CCC0009D236 /* Products */ = { + isa = PBXGroup; + children = ( + AE4DD3861F9B7CCC0009D236 /* interaction.app */, + AE4DD39A1F9B7CCC0009D236 /* interactionTests.xctest */, + AE4DD3A51F9B7CCC0009D236 /* interactionUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE4DD3881F9B7CCC0009D236 /* interaction */ = { + isa = PBXGroup; + children = ( + AE4DD3891F9B7CCC0009D236 /* AppDelegate.swift */, + AE4DD38B1F9B7CCC0009D236 /* ViewController.swift */, + AE4DD38D1F9B7CCC0009D236 /* Main.storyboard */, + AE4DD3901F9B7CCC0009D236 /* Assets.xcassets */, + AE4DD3921F9B7CCC0009D236 /* LaunchScreen.storyboard */, + AE4DD3951F9B7CCC0009D236 /* Info.plist */, + ); + path = interaction; + sourceTree = ""; + }; + AE4DD39D1F9B7CCC0009D236 /* interactionTests */ = { + isa = PBXGroup; + children = ( + AE4DD39E1F9B7CCC0009D236 /* interactionTests.swift */, + AE4DD3A01F9B7CCC0009D236 /* Info.plist */, + ); + path = interactionTests; + sourceTree = ""; + }; + AE4DD3A81F9B7CCC0009D236 /* interactionUITests */ = { + isa = PBXGroup; + children = ( + AE4DD3A91F9B7CCC0009D236 /* interactionUITests.swift */, + AE4DD3AB1F9B7CCC0009D236 /* Info.plist */, + ); + path = interactionUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE4DD3851F9B7CCC0009D236 /* interaction */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE4DD3AE1F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interaction" */; + buildPhases = ( + AE4DD3821F9B7CCC0009D236 /* Sources */, + AE4DD3831F9B7CCC0009D236 /* Frameworks */, + AE4DD3841F9B7CCC0009D236 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = interaction; + productName = interaction; + productReference = AE4DD3861F9B7CCC0009D236 /* interaction.app */; + productType = "com.apple.product-type.application"; + }; + AE4DD3991F9B7CCC0009D236 /* interactionTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE4DD3B11F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interactionTests" */; + buildPhases = ( + AE4DD3961F9B7CCC0009D236 /* Sources */, + AE4DD3971F9B7CCC0009D236 /* Frameworks */, + AE4DD3981F9B7CCC0009D236 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE4DD39C1F9B7CCC0009D236 /* PBXTargetDependency */, + ); + name = interactionTests; + productName = interactionTests; + productReference = AE4DD39A1F9B7CCC0009D236 /* interactionTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE4DD3A41F9B7CCC0009D236 /* interactionUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE4DD3B41F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interactionUITests" */; + buildPhases = ( + AE4DD3A11F9B7CCC0009D236 /* Sources */, + AE4DD3A21F9B7CCC0009D236 /* Frameworks */, + AE4DD3A31F9B7CCC0009D236 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE4DD3A71F9B7CCC0009D236 /* PBXTargetDependency */, + ); + name = interactionUITests; + productName = interactionUITests; + productReference = AE4DD3A51F9B7CCC0009D236 /* interactionUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE4DD37E1F9B7CCC0009D236 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE4DD3851F9B7CCC0009D236 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE4DD3991F9B7CCC0009D236 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE4DD3851F9B7CCC0009D236; + }; + AE4DD3A41F9B7CCC0009D236 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE4DD3851F9B7CCC0009D236; + }; + }; + }; + buildConfigurationList = AE4DD3811F9B7CCC0009D236 /* Build configuration list for PBXProject "interaction" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE4DD37D1F9B7CCC0009D236; + productRefGroup = AE4DD3871F9B7CCC0009D236 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE4DD3851F9B7CCC0009D236 /* interaction */, + AE4DD3991F9B7CCC0009D236 /* interactionTests */, + AE4DD3A41F9B7CCC0009D236 /* interactionUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE4DD3841F9B7CCC0009D236 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE4DD3941F9B7CCC0009D236 /* LaunchScreen.storyboard in Resources */, + AE4DD3911F9B7CCC0009D236 /* Assets.xcassets in Resources */, + AE4DD38F1F9B7CCC0009D236 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3981F9B7CCC0009D236 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3A31F9B7CCC0009D236 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE4DD3821F9B7CCC0009D236 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE4DD38C1F9B7CCC0009D236 /* ViewController.swift in Sources */, + AE4DD38A1F9B7CCC0009D236 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3961F9B7CCC0009D236 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE4DD39F1F9B7CCC0009D236 /* interactionTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE4DD3A11F9B7CCC0009D236 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE4DD3AA1F9B7CCC0009D236 /* interactionUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE4DD39C1F9B7CCC0009D236 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE4DD3851F9B7CCC0009D236 /* interaction */; + targetProxy = AE4DD39B1F9B7CCC0009D236 /* PBXContainerItemProxy */; + }; + AE4DD3A71F9B7CCC0009D236 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE4DD3851F9B7CCC0009D236 /* interaction */; + targetProxy = AE4DD3A61F9B7CCC0009D236 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE4DD38D1F9B7CCC0009D236 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE4DD38E1F9B7CCC0009D236 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE4DD3921F9B7CCC0009D236 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE4DD3931F9B7CCC0009D236 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE4DD3AC1F9B7CCC0009D236 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE4DD3AD1F9B7CCC0009D236 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE4DD3AF1F9B7CCC0009D236 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interaction/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interaction"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE4DD3B01F9B7CCC0009D236 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interaction/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interaction"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE4DD3B21F9B7CCC0009D236 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interactionTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interactionTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/interaction.app/interaction"; + }; + name = Debug; + }; + AE4DD3B31F9B7CCC0009D236 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interactionTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interactionTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/interaction.app/interaction"; + }; + name = Release; + }; + AE4DD3B51F9B7CCC0009D236 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interactionUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interactionUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = interaction; + }; + name = Debug; + }; + AE4DD3B61F9B7CCC0009D236 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = interactionUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.interactionUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = interaction; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE4DD3811F9B7CCC0009D236 /* Build configuration list for PBXProject "interaction" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE4DD3AC1F9B7CCC0009D236 /* Debug */, + AE4DD3AD1F9B7CCC0009D236 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE4DD3AE1F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interaction" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE4DD3AF1F9B7CCC0009D236 /* Debug */, + AE4DD3B01F9B7CCC0009D236 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE4DD3B11F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interactionTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE4DD3B21F9B7CCC0009D236 /* Debug */, + AE4DD3B31F9B7CCC0009D236 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE4DD3B41F9B7CCC0009D236 /* Build configuration list for PBXNativeTarget "interactionUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE4DD3B51F9B7CCC0009D236 /* Debug */, + AE4DD3B61F9B7CCC0009D236 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE4DD37E1F9B7CCC0009D236 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..0385138 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/AppDelegate.swift" new file mode 100644 index 0000000..fad47e1 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// interaction +// +// Created by 황도증 on 2017. 10. 21.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..1d060ed --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,93 @@ +{ + "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" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..4e48970 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Base.lproj/Main.storyboard" @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/ViewController.swift" new file mode 100644 index 0000000..ea49598 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interaction/ViewController.swift" @@ -0,0 +1,30 @@ +// +// ViewController.swift +// interaction +// +// Created by 황도증 on 2017. 10. 21.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + @IBOutlet weak var myText: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func myButton(_ sender: Any) { + myText.text = "Hello, iPhone" + } + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/interactionTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/interactionTests.swift" new file mode 100644 index 0000000..c4e8800 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionTests/interactionTests.swift" @@ -0,0 +1,36 @@ +// +// interactionTests.swift +// interactionTests +// +// Created by 황도증 on 2017. 10. 21.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import interaction + +class interactionTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/interactionUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/interactionUITests.swift" new file mode 100644 index 0000000..4cc426f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/interaction/interactionUITests/interactionUITests.swift" @@ -0,0 +1,36 @@ +// +// interactionUITests.swift +// interactionUITests +// +// Created by 황도증 on 2017. 10. 21.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class interactionUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/Contents.swift" new file mode 100644 index 0000000..4b01c35 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/Contents.swift" @@ -0,0 +1,20 @@ +//: Playground - noun: a place where people can play + +import UIKit + +let macSpeed:Int = 300 + +var currentSpeed = 20 +currentSpeed += 20 +//currentSpeed += 10.5 + +//판교역 도착 방송을 위해 작성한 코드에서 문제가 생겼습니다. 어디가 문제인지 알아내, 방송이 무사히 전달될 수 있도록 코드를 수정해주세요. + +var announcement:String = "" +let intro = "다음 역은 " +let outro = "입니다." + +let station = "판교역" + +announcement = intro + station + outro +print(announcement) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/let&var.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/Contents.swift" new file mode 100644 index 0000000..d16f975 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/Contents.swift" @@ -0,0 +1,36 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*고차함수 map + map을 활용해 반복문을 대체한다 + + map 함수는 배열과 함수를 매개변수로 받아서, 배열의 항목 하나하나에 매개변수로 받은 함수를 적용하는 함수이다. + [a, b, c, d].map{f(x)} + -> [f(a), f(b), f(c), f(d)] + + transactions 배열에 map 적용하기 + 배열의 값은 Double + 함수는 Double을 받아 Double을 리턴 + 배열의 값 각각에 함수를 적용한 결과 배열을 생성 + */ + +let transactions = [600.0, 403.3, 408.3, 562.3, 902.2] + +func addVAT (source: Double) -> Double { + return source * 1.1 +} + +var vatPrices:[Double] = [] + +for transaction in transactions { + vatPrices += [addVAT(source: transaction)] +} + +//map +let vatMapPrice = transactions.map({transaction -> Double in + return transaction * 1.1 +}) + +//축약 +let vatMapprice2 = transactions.map({ $0 * 1.1 }) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/map.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..c09b5be --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..ff29a4c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..2742ac3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,105 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":10, "Cezanne":20, "Matisse":30, "Renoir":40] + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return meetingRooms.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) + + // Configure the cell... + let roomNames = Array(meetingRooms.keys) + let roomName = roomNames[indexPath.row] + cell.textLabel!.text = roomName + + //roomName이라는 키값으로부터 capacity라는 정수 밸류 값을 가져오는 코드 + if let capacity:Int = meetingRooms[roomName] { + cell.detailTextLabel!.text = "\(capacity)" + } + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..c09b5be --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..ff29a4c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..3ddb971 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,104 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return meetingRooms.count + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let categoryValues = Array(meetingRooms.values)[section] + return categoryValues.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) + + // Configure the cell... + let categoryValue = Array(meetingRooms.values)[indexPath.section] + + let roomName = Array(categoryValue.keys)[indexPath.row] + let capacity = Array(categoryValue.values)[indexPath.row] + + cell.textLabel!.text = roomName + cell.detailTextLabel!.text = "\(capacity)" + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_2/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..c09b5be --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..ff29a4c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..9bf0ea4 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,112 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return meetingRooms.count + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let categoryValues = Array(meetingRooms.values)[section] + return categoryValues.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) + + // Configure the cell... + let categoryValue = Array(meetingRooms.values)[indexPath.section] + + let roomName = Array(categoryValue.keys)[indexPath.row] + let capacity = Array(categoryValue.values)[indexPath.row] + + cell.textLabel!.text = roomName + cell.detailTextLabel!.text = "\(capacity)" + return cell + } + + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + return Array(meetingRooms.keys)[section] + } + + override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { + let rowCount = Array(meetingRooms.values)[section].count + return "\(rowCount) rooms" + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_3/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..c09b5be --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..ff29a4c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..472ffce --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,125 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] + + func meetingRoomsAtIndex (index:Int) -> (key:String, value:[String:Int]) { + let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + return orderMeetingRoooms[index] + } + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return meetingRooms.count + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + let rowCount = meetingRoomsAtIndex(index: section).value.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + let categoryValue = meetingRoomsAtIndex(index: indexPath.section).value + let orderCategoryValue = categoryValue.sorted(by: {$0.1 < $1.1}) + let roomName = orderCategoryValue[indexPath.row].key + let capacity = orderCategoryValue[indexPath.row].value + + cell.textLabel!.text = roomName + cell.detailTextLabel!.text = "\(capacity)" + return cell + } + + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + + return meetingRoomsAtIndex(index: section).key + } + + override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + let rowCount = meetingRoomsAtIndex(index: section).value.count + return "\(rowCount) rooms" + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_4/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..d0ea954 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..f5e009b --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..4231269 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/DataCenter.swift" @@ -0,0 +1,66 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..0d523b3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,111 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation +/* + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + } + */ +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_alert&action/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..b4485a0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,597 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */; }; + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */; }; + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */; }; + AEB318AB1FB49D1900AEB094 /* EquipmentDefault.plist in Resources */ = {isa = PBXBuildFile; fileRef = AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */; }; + AEB318AD1FB4C41A00AEB094 /* EquipmentsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TintColorViewController.swift; sourceTree = ""; }; + AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = EquipmentDefault.plist; sourceTree = ""; }; + AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EquipmentsListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */, + AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */, + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */, + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AEB318AB1FB49D1900AEB094 /* EquipmentDefault.plist in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB318AD1FB4C41A00AEB094 /* EquipmentsListViewController.swift in Sources */, + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */, + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..eb06959 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/AppDelegate.swift" @@ -0,0 +1,52 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + dataCenter.save() + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { + return + } + applyTintColor(color: defaultColor) + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + dataCenter.save() + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..639f10e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..ea62bf8 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/DataCenter.swift" @@ -0,0 +1,154 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() +let fileName = "branch.brch" + +class DataCenter { + var branches:[Branch] = [] + var filePath:String { get { + let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! + return documentDirectory + "/" + fileName + }} + + init (){ + + if FileManager.default.fileExists(atPath: self.filePath) { + //read + if let unarchArray = NSKeyedUnarchiver.unarchiveObject(withFile: self.filePath) as? [Branch] { + branches += unarchArray + } + } else { + //create + branches += defualtData() + } + } + + func save() { + NSKeyedArchiver.archiveRootObject(self.branches, toFile: self.filePath) + } + + func defualtData() -> Array { + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + return [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch:NSObject, NSCoding { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } + + required init?(coder aDecoder: NSCoder) { + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.services = aDecoder.decodeObject(forKey: "services") as? [Service] + } + + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.services, forKey: "services") + } +} + +class Service:NSObject, NSCoding { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } + + required init?(coder aDecoder: NSCoder) { + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.items = aDecoder.decodeObject(forKey: "items") as? [MeetingRoom] + } + + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.items, forKey: "items") + } +} + +class MeetingRoom:NSObject, NSCoding { + let name:String + let capacity:Int + var reservations:[Reservation]? + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } + + required init?(coder aDecoder: NSCoder) { + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.capacity = aDecoder.decodeInteger(forKey: "capacity") + self.reservations = aDecoder.decodeObject(forKey: "reservations") as? [Reservation] + } + + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.capacity, forKey: "capacity") + aCoder.encode(self.reservations, forKey: "reservations") + } +} + +class Reservation:NSObject, NSCoding { + var hostName:String + var date:NSDate + var attendees:Int + var equipments:[String] + var catering:Bool + + override init() { + self.hostName = "host of meeting" + self.date = NSDate() + self.attendees = 1 + self.equipments = [] + self.catering = false + } + + required init?(coder aDecoder: NSCoder) { + self.hostName = aDecoder.decodeObject(forKey: "hostName") as! String + self.date = aDecoder.decodeObject(forKey: "date") as! NSDate + self.attendees = aDecoder.decodeInteger(forKey: "attendees") + self.equipments = aDecoder.decodeObject(forKey: "equipments") as! [String] + self.catering = aDecoder.decodeBool(forKey: "catering") + } + + func encode(with aCoder: NSCoder) { + aCoder.encode(self.hostName, forKey: "hostName") + aCoder.encode(self.date, forKey: "date") + aCoder.encode(self.attendees, forKey: "attendees") + aCoder.encode(self.equipments, forKey: "equipments") + aCoder.encode(self.catering, forKey: "catering") + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentDefault.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentDefault.plist" new file mode 100644 index 0000000..50f805e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentDefault.plist" @@ -0,0 +1,30 @@ + + + + + + amount + 12 + name + HDYE 22 + + + amount + 33 + name + DFO 33 + + + amount + 2 + name + WNJ 12 + + + amount + 15 + name + HP 2019 + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentsListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentsListViewController.swift" new file mode 100644 index 0000000..9831526 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/EquipmentsListViewController.swift" @@ -0,0 +1,120 @@ +// +// EquipmentsListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 10.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +let EquipmentFileName = "EquipmentDefault" + +class EquipmentsListViewController: UITableViewController { + + var equipments:Array = [] + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + guard let equipmentURL = Bundle.main.url(forResource: EquipmentFileName, withExtension: "plist") else { + print("no file") + return + } + if let equipmentArray = NSArray(contentsOf: equipmentURL) { + print(equipmentArray) + equipments.append(equipmentArray) + } + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return equipments.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "EquipmentCell", for: indexPath) + + // Configure the cell... + guard let equipment = equipments[indexPath.row] as? [String:AnyObject] else { + print("error") + return cell + } + + if let name = equipment["name"] as? String { + cell.textLabel?.text = name + } + + if let amount = equipment["amount"] as? Int { + cell.detailTextLabel?.text = String(amount) + } + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..b56d5ae --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,117 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReservationListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReservationListViewController.swift" new file mode 100644 index 0000000..869a9b7 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReservationListViewController.swift" @@ -0,0 +1,120 @@ +// +// ReservationListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReservationListViewController: UITableViewController { + + var meetingRoom:MeetingRoom? + var newReservation:Reservation? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func addNewItem(reservation:Reservation) { + if (self.meetingRoom?.reservations?.append(reservation)) == nil { + self.meetingRoom?.reservations = [reservation] + } + dataCenter.save() + self.tableView.reloadData() + } + + @IBAction func unwindToReservationList(segue:UIStoryboardSegue) { + + } + + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = meetingRoom?.reservations?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + + // Configure the cell... + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = reservation.date.description + cell.detailTextLabel?.text = reservation.hostName + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReserveRoomViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReserveRoomViewController.swift" new file mode 100644 index 0000000..b976043 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ReserveRoomViewController.swift" @@ -0,0 +1,154 @@ +// +// ReserveRoomViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReserveRoomViewController: UITableViewController { + + @IBOutlet weak var hostNameField: UITextField! + @IBOutlet weak var datePicker: UIDatePicker! + @IBOutlet weak var attendeesField: UITextField! + @IBOutlet weak var equipmentField: UITextField! + @IBOutlet weak var cateringSwitch: UISwitch! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text + + if (host?.isEmpty)! { + return nil + } + reservation.hostName = host! + reservation.date = datePicker.date as NSDate + + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray + } + reservation.catering = cateringSwitch.isOn + return reservation + } + + @IBAction func cancelReservation(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + @IBAction func makeReservation(_ sender: Any) { + guard let reservation = newReservation() else { + self.dismiss(animated: true, completion: nil) + return + } + + switch self.presentingViewController { + case let tapbarC as UITabBarController: + if let navigationC = tapbarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let navigationC as UINavigationController: + if let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let reservationListVC as ReservationListViewController: + reservationListVC.addNewItem(reservation: reservation) + default: + break + } + + self.dismiss(animated: true, completion: nil) + } + + + // MARK: - Table view data source +/* + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReserveDone" { + guard let reservation = newReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { + return + } + reservationListVC.addNewItem(reservation: reservation) + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/TintColorViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/TintColorViewController.swift" new file mode 100644 index 0000000..9ba2c19 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/TintColorViewController.swift" @@ -0,0 +1,76 @@ +// +// TintColorViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +enum TintColor:Int { + case Blue = 0, Red, Green, Purple + + var color:UIColor { get { + switch self { + case .Blue: + return UIColor.blue + case .Red: + return UIColor.red + case .Green: + return UIColor.green + case .Purple: + return UIColor.purple + } + } + + } +} + +let TintColorKey = "TintColor" + +func applyTintColor(color:UIColor) { + guard let window = UIApplication.shared.keyWindow else { + return + } + window.tintColor = color +} + +class TintColorViewController: UIViewController { + + @IBOutlet weak var tintColorSeg: UISegmentedControl! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + self.tintColorSeg.selectedSegmentIndex = userDefaultColor + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func tintColorChanged(_ sender: Any) { + let selectedIndex = self.tintColorSeg.selectedSegmentIndex + UserDefaults.standard.set(selectedIndex, forKey: TintColorKey) + + guard let changedColor = TintColor(rawValue: selectedIndex)?.color else { + return + } + applyTintColor(color: changedColor) + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_archive/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..941ad94 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,577 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..c995b69 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..4231269 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/DataCenter.swift" @@ -0,0 +1,66 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..0d523b3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,111 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation +/* + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + } + */ +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_cell accessory&modal/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..fd9c07f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,585 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */; }; + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */, + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..2f0fd47 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,617 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..7476872 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/DataCenter.swift" @@ -0,0 +1,84 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + var reservations:[Reservation]? + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} + +class Reservation { + var hostName:String + var date:NSDate + var attendees:Int + var equipments:[String] + var catering:Bool + + init() { + self.hostName = "host of meeting" + self.date = NSDate() + self.attendees = 1 + self.equipments = [] + self.catering = false + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..b56d5ae --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,117 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReservationListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReservationListViewController.swift" new file mode 100644 index 0000000..a700809 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReservationListViewController.swift" @@ -0,0 +1,114 @@ +// +// ReservationListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReservationListViewController: UITableViewController { + + var meetingRoom:MeetingRoom? + var newReservation:Reservation? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func addNewItem(reservation:Reservation) { + if (self.meetingRoom?.reservations?.append(reservation)) == nil { + self.meetingRoom?.reservations = [reservation] + } + self.tableView.reloadData() + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = meetingRoom?.reservations?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + + // Configure the cell... + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = reservation.date.description + cell.detailTextLabel?.text = reservation.hostName + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReserveRoomViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReserveRoomViewController.swift" new file mode 100644 index 0000000..1b0a590 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ReserveRoomViewController.swift" @@ -0,0 +1,148 @@ +// +// ReserveRoomViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReserveRoomViewController: UITableViewController { + + @IBOutlet weak var hostNameField: UITextField! + @IBOutlet weak var datePicker: UIDatePicker! + @IBOutlet weak var attendeesField: UITextField! + @IBOutlet weak var equipmentField: UITextField! + @IBOutlet weak var cateringSwitch: UISwitch! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text + + if (host?.isEmpty)! { + return nil + } + reservation.hostName = host! + reservation.date = datePicker.date as NSDate + + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray + } + reservation.catering = cateringSwitch.isOn + return reservation + } + + @IBAction func cancelReservation(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + @IBAction func makeReservation(_ sender: Any) { + guard let reservation = newReservation() else { + self.dismiss(animated: true, completion: nil) + return + } + + switch self.presentingViewController { + case let tapbarC as UITabBarController: + if let navigationC = tapbarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let navigationC as UINavigationController: + if let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let reservationListVC as ReservationListViewController: + reservationListVC.addNewItem(reservation: reservation) + default: + break + } + + self.dismiss(animated: true, completion: nil) + } + + + // MARK: - Table view data source +/* + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_modal present/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..d0ea954 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..ad8d924 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..cb19e7c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,105 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..4231269 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/DataCenter.swift" @@ -0,0 +1,66 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..0d523b3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,111 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation +/* + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + } + */ +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..b153586 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationItem.title = "\(branch!.name) 정보" + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_nav/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..b4485a0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,597 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */; }; + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */; }; + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */; }; + AEB318AB1FB49D1900AEB094 /* EquipmentDefault.plist in Resources */ = {isa = PBXBuildFile; fileRef = AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */; }; + AEB318AD1FB4C41A00AEB094 /* EquipmentsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TintColorViewController.swift; sourceTree = ""; }; + AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = EquipmentDefault.plist; sourceTree = ""; }; + AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EquipmentsListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AEB318AA1FB49D1900AEB094 /* EquipmentDefault.plist */, + AEB318AC1FB4C41A00AEB094 /* EquipmentsListViewController.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */, + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */, + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AEB318AB1FB49D1900AEB094 /* EquipmentDefault.plist in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB318AD1FB4C41A00AEB094 /* EquipmentsListViewController.swift in Sources */, + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */, + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..28b9c84 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/AppDelegate.swift" @@ -0,0 +1,50 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { + return + } + applyTintColor(color: defaultColor) + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..639f10e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..7476872 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/DataCenter.swift" @@ -0,0 +1,84 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + var reservations:[Reservation]? + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} + +class Reservation { + var hostName:String + var date:NSDate + var attendees:Int + var equipments:[String] + var catering:Bool + + init() { + self.hostName = "host of meeting" + self.date = NSDate() + self.attendees = 1 + self.equipments = [] + self.catering = false + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentDefault.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentDefault.plist" new file mode 100644 index 0000000..50f805e --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentDefault.plist" @@ -0,0 +1,30 @@ + + + + + + amount + 12 + name + HDYE 22 + + + amount + 33 + name + DFO 33 + + + amount + 2 + name + WNJ 12 + + + amount + 15 + name + HP 2019 + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentsListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentsListViewController.swift" new file mode 100644 index 0000000..9831526 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/EquipmentsListViewController.swift" @@ -0,0 +1,120 @@ +// +// EquipmentsListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 10.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +let EquipmentFileName = "EquipmentDefault" + +class EquipmentsListViewController: UITableViewController { + + var equipments:Array = [] + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + guard let equipmentURL = Bundle.main.url(forResource: EquipmentFileName, withExtension: "plist") else { + print("no file") + return + } + if let equipmentArray = NSArray(contentsOf: equipmentURL) { + print(equipmentArray) + equipments.append(equipmentArray) + } + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return equipments.count + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "EquipmentCell", for: indexPath) + + // Configure the cell... + guard let equipment = equipments[indexPath.row] as? [String:AnyObject] else { + print("error") + return cell + } + + if let name = equipment["name"] as? String { + cell.textLabel?.text = name + } + + if let amount = equipment["amount"] as? Int { + cell.detailTextLabel?.text = String(amount) + } + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..b56d5ae --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,117 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReservationListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReservationListViewController.swift" new file mode 100644 index 0000000..7da14de --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReservationListViewController.swift" @@ -0,0 +1,119 @@ +// +// ReservationListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReservationListViewController: UITableViewController { + + var meetingRoom:MeetingRoom? + var newReservation:Reservation? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func addNewItem(reservation:Reservation) { + if (self.meetingRoom?.reservations?.append(reservation)) == nil { + self.meetingRoom?.reservations = [reservation] + } + self.tableView.reloadData() + } + + @IBAction func unwindToReservationList(segue:UIStoryboardSegue) { + + } + + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = meetingRoom?.reservations?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + + // Configure the cell... + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = reservation.date.description + cell.detailTextLabel?.text = reservation.hostName + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReserveRoomViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReserveRoomViewController.swift" new file mode 100644 index 0000000..b976043 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ReserveRoomViewController.swift" @@ -0,0 +1,154 @@ +// +// ReserveRoomViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReserveRoomViewController: UITableViewController { + + @IBOutlet weak var hostNameField: UITextField! + @IBOutlet weak var datePicker: UIDatePicker! + @IBOutlet weak var attendeesField: UITextField! + @IBOutlet weak var equipmentField: UITextField! + @IBOutlet weak var cateringSwitch: UISwitch! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text + + if (host?.isEmpty)! { + return nil + } + reservation.hostName = host! + reservation.date = datePicker.date as NSDate + + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray + } + reservation.catering = cateringSwitch.isOn + return reservation + } + + @IBAction func cancelReservation(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + @IBAction func makeReservation(_ sender: Any) { + guard let reservation = newReservation() else { + self.dismiss(animated: true, completion: nil) + return + } + + switch self.presentingViewController { + case let tapbarC as UITabBarController: + if let navigationC = tapbarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let navigationC as UINavigationController: + if let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let reservationListVC as ReservationListViewController: + reservationListVC.addNewItem(reservation: reservation) + default: + break + } + + self.dismiss(animated: true, completion: nil) + } + + + // MARK: - Table view data source +/* + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReserveDone" { + guard let reservation = newReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { + return + } + reservationListVC.addNewItem(reservation: reservation) + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/TintColorViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/TintColorViewController.swift" new file mode 100644 index 0000000..9ba2c19 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/TintColorViewController.swift" @@ -0,0 +1,76 @@ +// +// TintColorViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +enum TintColor:Int { + case Blue = 0, Red, Green, Purple + + var color:UIColor { get { + switch self { + case .Blue: + return UIColor.blue + case .Red: + return UIColor.red + case .Green: + return UIColor.green + case .Purple: + return UIColor.purple + } + } + + } +} + +let TintColorKey = "TintColor" + +func applyTintColor(color:UIColor) { + guard let window = UIApplication.shared.keyWindow else { + return + } + window.tintColor = color +} + +class TintColorViewController: UIViewController { + + @IBOutlet weak var tintColorSeg: UISegmentedControl! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + self.tintColorSeg.selectedSegmentIndex = userDefaultColor + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func tintColorChanged(_ sender: Any) { + let selectedIndex = self.tintColorSeg.selectedSegmentIndex + UserDefaults.standard.set(selectedIndex, forKey: TintColorKey) + + guard let changedColor = TintColor(rawValue: selectedIndex)?.color else { + return + } + applyTintColor(color: changedColor) + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_plist/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..d0ea954 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..b215d80 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..a05adab --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,107 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..4231269 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/DataCenter.swift" @@ -0,0 +1,66 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..0d523b3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,111 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation +/* + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + } + */ +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_tap&tool/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..fd9c07f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,585 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */; }; + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */, + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..fc60321 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/AppDelegate.swift" @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..8ebb8bc --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..7476872 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/DataCenter.swift" @@ -0,0 +1,84 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + var reservations:[Reservation]? + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} + +class Reservation { + var hostName:String + var date:NSDate + var attendees:Int + var equipments:[String] + var catering:Bool + + init() { + self.hostName = "host of meeting" + self.date = NSDate() + self.attendees = 1 + self.equipments = [] + self.catering = false + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..b56d5ae --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,117 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReservationListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReservationListViewController.swift" new file mode 100644 index 0000000..7da14de --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReservationListViewController.swift" @@ -0,0 +1,119 @@ +// +// ReservationListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReservationListViewController: UITableViewController { + + var meetingRoom:MeetingRoom? + var newReservation:Reservation? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func addNewItem(reservation:Reservation) { + if (self.meetingRoom?.reservations?.append(reservation)) == nil { + self.meetingRoom?.reservations = [reservation] + } + self.tableView.reloadData() + } + + @IBAction func unwindToReservationList(segue:UIStoryboardSegue) { + + } + + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = meetingRoom?.reservations?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + + // Configure the cell... + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = reservation.date.description + cell.detailTextLabel?.text = reservation.hostName + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReserveRoomViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReserveRoomViewController.swift" new file mode 100644 index 0000000..b976043 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ReserveRoomViewController.swift" @@ -0,0 +1,154 @@ +// +// ReserveRoomViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReserveRoomViewController: UITableViewController { + + @IBOutlet weak var hostNameField: UITextField! + @IBOutlet weak var datePicker: UIDatePicker! + @IBOutlet weak var attendeesField: UITextField! + @IBOutlet weak var equipmentField: UITextField! + @IBOutlet weak var cateringSwitch: UISwitch! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text + + if (host?.isEmpty)! { + return nil + } + reservation.hostName = host! + reservation.date = datePicker.date as NSDate + + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray + } + reservation.catering = cateringSwitch.isOn + return reservation + } + + @IBAction func cancelReservation(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + @IBAction func makeReservation(_ sender: Any) { + guard let reservation = newReservation() else { + self.dismiss(animated: true, completion: nil) + return + } + + switch self.presentingViewController { + case let tapbarC as UITabBarController: + if let navigationC = tapbarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let navigationC as UINavigationController: + if let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let reservationListVC as ReservationListViewController: + reservationListVC.addNewItem(reservation: reservation) + default: + break + } + + self.dismiss(animated: true, completion: nil) + } + + + // MARK: - Table view data source +/* + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReserveDone" { + guard let reservation = newReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { + return + } + reservationListVC.addNewItem(reservation: reservation) + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_unwind/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.pbxproj" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..87b3966 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.pbxproj" @@ -0,0 +1,589 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575A1FA704AF00397D38 /* AppDelegate.swift */; }; + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99575C1FA704AF00397D38 /* ViewController.swift */; }; + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE99575E1FA704AF00397D38 /* Main.storyboard */; }; + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE9957611FA704AF00397D38 /* Assets.xcassets */; }; + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */; }; + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */; }; + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */; }; + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */; }; + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189C1FB4641000AEB094 /* DataCenter.swift */; }; + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */; }; + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */; }; + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */; }; + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */; }; + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */; }; + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; + AE9957771FA704B000397D38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AE99574F1FA704AF00397D38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE9957561FA704AF00397D38; + remoteInfo = meetingRooms; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + AE9957571FA704AF00397D38 /* meetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99575A1FA704AF00397D38 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AE99575C1FA704AF00397D38 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AE99575F1FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AE9957611FA704AF00397D38 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AE9957641FA704AF00397D38 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AE9957661FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsTests.swift; sourceTree = ""; }; + AE9957711FA704AF00397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = meetingRoomsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = meetingRoomsUITests.swift; sourceTree = ""; }; + AE99577C1FA704B000397D38 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingRoomListViewController.swift; sourceTree = ""; }; + AEB3189C1FB4641000AEB094 /* DataCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfoViewController.swift; sourceTree = ""; }; + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationListViewController.swift; sourceTree = ""; }; + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReserveRoomViewController.swift; sourceTree = ""; }; + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TintColorViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AE9957541FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957681FA704AF00397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957731FA704B000397D38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AE99574E1FA704AF00397D38 = { + isa = PBXGroup; + children = ( + AE9957591FA704AF00397D38 /* meetingRooms */, + AE99576E1FA704AF00397D38 /* meetingRoomsTests */, + AE9957791FA704B000397D38 /* meetingRoomsUITests */, + AE9957581FA704AF00397D38 /* Products */, + ); + sourceTree = ""; + }; + AE9957581FA704AF00397D38 /* Products */ = { + isa = PBXGroup; + children = ( + AE9957571FA704AF00397D38 /* meetingRooms.app */, + AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */, + AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AE9957591FA704AF00397D38 /* meetingRooms */ = { + isa = PBXGroup; + children = ( + AE99575A1FA704AF00397D38 /* AppDelegate.swift */, + AE99575C1FA704AF00397D38 /* ViewController.swift */, + AE99575E1FA704AF00397D38 /* Main.storyboard */, + AEB318A81FB4975F00AEB094 /* TintColorViewController.swift */, + AEB318A61FB4861600AEB094 /* ReserveRoomViewController.swift */, + AEB318A41FB485D300AEB094 /* ReservationListViewController.swift */, + AEB318A21FB4807F00AEB094 /* RoomInfoViewController.swift */, + AEB3189C1FB4641000AEB094 /* DataCenter.swift */, + AEB3189E1FB4684600AEB094 /* BranchListViewController.swift */, + AEB318A01FB4685800AEB094 /* ServiceListViewController.swift */, + AE9957881FA7054800397D38 /* MeetingRoomListViewController.swift */, + AE9957611FA704AF00397D38 /* Assets.xcassets */, + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */, + AE9957661FA704AF00397D38 /* Info.plist */, + ); + path = meetingRooms; + sourceTree = ""; + }; + AE99576E1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXGroup; + children = ( + AE99576F1FA704AF00397D38 /* meetingRoomsTests.swift */, + AE9957711FA704AF00397D38 /* Info.plist */, + ); + path = meetingRoomsTests; + sourceTree = ""; + }; + AE9957791FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXGroup; + children = ( + AE99577A1FA704B000397D38 /* meetingRoomsUITests.swift */, + AE99577C1FA704B000397D38 /* Info.plist */, + ); + path = meetingRoomsUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AE9957561FA704AF00397D38 /* meetingRooms */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */; + buildPhases = ( + AE9957531FA704AF00397D38 /* Sources */, + AE9957541FA704AF00397D38 /* Frameworks */, + AE9957551FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = meetingRooms; + productName = meetingRooms; + productReference = AE9957571FA704AF00397D38 /* meetingRooms.app */; + productType = "com.apple.product-type.application"; + }; + AE99576A1FA704AF00397D38 /* meetingRoomsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */; + buildPhases = ( + AE9957671FA704AF00397D38 /* Sources */, + AE9957681FA704AF00397D38 /* Frameworks */, + AE9957691FA704AF00397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE99576D1FA704AF00397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsTests; + productName = meetingRoomsTests; + productReference = AE99576B1FA704AF00397D38 /* meetingRoomsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + AE9957751FA704B000397D38 /* meetingRoomsUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */; + buildPhases = ( + AE9957721FA704B000397D38 /* Sources */, + AE9957731FA704B000397D38 /* Frameworks */, + AE9957741FA704B000397D38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AE9957781FA704B000397D38 /* PBXTargetDependency */, + ); + name = meetingRoomsUITests; + productName = meetingRoomsUITests; + productReference = AE9957761FA704B000397D38 /* meetingRoomsUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AE99574F1FA704AF00397D38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = "황도증"; + TargetAttributes = { + AE9957561FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + }; + AE99576A1FA704AF00397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + AE9957751FA704B000397D38 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; + TestTargetID = AE9957561FA704AF00397D38; + }; + }; + }; + buildConfigurationList = AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AE99574E1FA704AF00397D38; + productRefGroup = AE9957581FA704AF00397D38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AE9957561FA704AF00397D38 /* meetingRooms */, + AE99576A1FA704AF00397D38 /* meetingRoomsTests */, + AE9957751FA704B000397D38 /* meetingRoomsUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AE9957551FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957651FA704AF00397D38 /* LaunchScreen.storyboard in Resources */, + AE9957621FA704AF00397D38 /* Assets.xcassets in Resources */, + AE9957601FA704AF00397D38 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957691FA704AF00397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957741FA704B000397D38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AE9957531FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AEB318A31FB4807F00AEB094 /* RoomInfoViewController.swift in Sources */, + AE99575D1FA704AF00397D38 /* ViewController.swift in Sources */, + AE99575B1FA704AF00397D38 /* AppDelegate.swift in Sources */, + AEB318A51FB485D300AEB094 /* ReservationListViewController.swift in Sources */, + AEB3189D1FB4641000AEB094 /* DataCenter.swift in Sources */, + AEB3189F1FB4684600AEB094 /* BranchListViewController.swift in Sources */, + AEB318A11FB4685800AEB094 /* ServiceListViewController.swift in Sources */, + AE9957891FA7054800397D38 /* MeetingRoomListViewController.swift in Sources */, + AEB318A71FB4861600AEB094 /* ReserveRoomViewController.swift in Sources */, + AEB318A91FB4975F00AEB094 /* TintColorViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957671FA704AF00397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE9957701FA704AF00397D38 /* meetingRoomsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE9957721FA704B000397D38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AE99577B1FA704B000397D38 /* meetingRoomsUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE99576D1FA704AF00397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE99576C1FA704AF00397D38 /* PBXContainerItemProxy */; + }; + AE9957781FA704B000397D38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AE9957561FA704AF00397D38 /* meetingRooms */; + targetProxy = AE9957771FA704B000397D38 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AE99575E1FA704AF00397D38 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE99575F1FA704AF00397D38 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AE9957631FA704AF00397D38 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AE9957641FA704AF00397D38 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AE99577D1FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = 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_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AE99577E1FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + 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_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_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 = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AE9957801FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AE9957811FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRooms/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRooms"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + AE9957831FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Debug; + }; + AE9957841FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/meetingRooms.app/meetingRooms"; + }; + name = Release; + }; + AE9957861FA704B000397D38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Debug; + }; + AE9957871FA704B000397D38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = meetingRoomsUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "--------.meetingRoomsUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = meetingRooms; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AE9957521FA704AF00397D38 /* Build configuration list for PBXProject "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE99577D1FA704B000397D38 /* Debug */, + AE99577E1FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE99577F1FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRooms" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957801FA704B000397D38 /* Debug */, + AE9957811FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957821FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957831FA704B000397D38 /* Debug */, + AE9957841FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9957851FA704B000397D38 /* Build configuration list for PBXNativeTarget "meetingRoomsUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE9957861FA704B000397D38 /* Debug */, + AE9957871FA704B000397D38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AE99574F1FA704AF00397D38 /* Project object */; +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..8491799 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/AppDelegate.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/AppDelegate.swift" new file mode 100644 index 0000000..b1cfed9 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/AppDelegate.swift" @@ -0,0 +1,51 @@ +// +// AppDelegate.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { + return + } + applyTintColor(color: defaultColor) + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,98 @@ +{ + "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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/LaunchScreen.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/LaunchScreen.storyboard" new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/LaunchScreen.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/Main.storyboard" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/Main.storyboard" new file mode 100644 index 0000000..53a8b0c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Base.lproj/Main.storyboard" @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/BranchListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/BranchListViewController.swift" new file mode 100644 index 0000000..fa28525 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/BranchListViewController.swift" @@ -0,0 +1,119 @@ +// +// BranchListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class BranchListViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.navigationController?.isToolbarHidden = true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + @IBAction func locationTurnOn(_ sender: Any) { + let locationAlert = UIAlertController(title:"위치정보요청", message: "위치정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다.", preferredStyle: .actionSheet) + + let locationAction = UIAlertAction(title: "위치정보켜기", style: .default, handler: {(action:UIAlertAction) -> Void in print("위치정보켜기 선택")}) + + let openMapAction = UIAlertAction(title: "지도에서 열기", style: .default, handler: {(action:UIAlertAction) -> Void in print("지도앱에서 열기 선택")}) + + locationAlert.addAction(locationAction) + locationAlert.addAction(openMapAction) + + self.present(locationAlert, animated: true, completion: nil) + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + let rowCount = dataCenter.branches.count + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath) + + // Configure the cell... + let branch = dataCenter.branches[indexPath.row] + cell.textLabel?.text = branch.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + + if segue.identifier == "ServiceSegue" { + if let destination = segue.destination as? ServiceListViewController { + if let selectedIndex = self.tableView.indexPathForSelectedRow?.row { + destination.branch = dataCenter.branches[selectedIndex] as Branch + } + } + } + + } +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/DataCenter.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/DataCenter.swift" new file mode 100644 index 0000000..7476872 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/DataCenter.swift" @@ -0,0 +1,84 @@ +// +// DataCenter.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import Foundation + +let dataCenter:DataCenter = DataCenter() + +class DataCenter { + var branches:[Branch] = [] + + init (){ + let banksyRoom = MeetingRoom(name:"Banksy", capacity: 4) + let kahloRoom = MeetingRoom(name:"Kahlo", capacity: 8) + let riveraRoom = MeetingRoom(name:"Rivera", capacity: 8) + let picasoRoom = MeetingRoom(name:"Picaso", capacity: 10) + + let vehicleService = Service(name: "차량예약") + let meetingRoomService = Service(name: "회의실예약") + let visitorService = Service(name: "방문자예약") + let deskService = Service(name: "데스크예약") + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picasoRoom] + + let pangyoBranch = Branch(name: "판교점") + let samsungBranch = Branch(name: "삼성점") + let yeoksamBranch = Branch(name: "역삼점") + let sinrimBranch = Branch(name: "신림점") + let songdooBranch = Branch(name: "송도점") + let anamBranch = Branch(name: "안암점") + pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] + + branches += [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdooBranch, anamBranch] + } +} + +class Branch { + let name:String + var services:[Service]? + + init(name:String) { + self.name = name + } +} + +class Service { + let name:String + var items:[MeetingRoom]? + + init(name:String) { + self.name = name + } +} + +class MeetingRoom { + let name:String + let capacity:Int + var reservations:[Reservation]? + + init(name:String, capacity:Int) { + self.name = name + self.capacity = capacity + } +} + +class Reservation { + var hostName:String + var date:NSDate + var attendees:Int + var equipments:[String] + var catering:Bool + + init() { + self.hostName = "host of meeting" + self.date = NSDate() + self.attendees = 1 + self.equipments = [] + self.catering = false + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Info.plist" new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/Info.plist" @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/MeetingRoomListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/MeetingRoomListViewController.swift" new file mode 100644 index 0000000..b56d5ae --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/MeetingRoomListViewController.swift" @@ -0,0 +1,117 @@ +// +// MeetingRoomListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class MeetingRoomListViewController: UITableViewController { + + var service:Service? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + + self.title = service?.name + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + //let categoryValues = Array(meetingRooms.values)[section] + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + //let orderMeetingRoooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + // Configure the cell... + //let categoryValue = Array(meetingRooms.values)[indexPath.section] + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + + cell.textLabel!.text = meetingRoom.name + cell.detailTextLabel!.text = String(meetingRoom.capacity) + return cell + } + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReservationListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReservationListViewController.swift" new file mode 100644 index 0000000..7da14de --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReservationListViewController.swift" @@ -0,0 +1,119 @@ +// +// ReservationListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReservationListViewController: UITableViewController { + + var meetingRoom:MeetingRoom? + var newReservation:Reservation? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func addNewItem(reservation:Reservation) { + if (self.meetingRoom?.reservations?.append(reservation)) == nil { + self.meetingRoom?.reservations = [reservation] + } + self.tableView.reloadData() + } + + @IBAction func unwindToReservationList(segue:UIStoryboardSegue) { + + } + + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = meetingRoom?.reservations?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) + + // Configure the cell... + guard let reservation = meetingRoom?.reservations?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = reservation.date.description + cell.detailTextLabel?.text = reservation.hostName + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReserveRoomViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReserveRoomViewController.swift" new file mode 100644 index 0000000..b976043 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ReserveRoomViewController.swift" @@ -0,0 +1,154 @@ +// +// ReserveRoomViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ReserveRoomViewController: UITableViewController { + + @IBOutlet weak var hostNameField: UITextField! + @IBOutlet weak var datePicker: UIDatePicker! + @IBOutlet weak var attendeesField: UITextField! + @IBOutlet weak var equipmentField: UITextField! + @IBOutlet weak var cateringSwitch: UISwitch! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func newReservation() -> Reservation? { + let reservation = Reservation() + let host = hostNameField.text + + if (host?.isEmpty)! { + return nil + } + reservation.hostName = host! + reservation.date = datePicker.date as NSDate + + if let equipmentArray = equipmentField.text?.split(separator: ",").map(String.init) { + reservation.equipments = equipmentArray + } + reservation.catering = cateringSwitch.isOn + return reservation + } + + @IBAction func cancelReservation(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + @IBAction func makeReservation(_ sender: Any) { + guard let reservation = newReservation() else { + self.dismiss(animated: true, completion: nil) + return + } + + switch self.presentingViewController { + case let tapbarC as UITabBarController: + if let navigationC = tapbarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let navigationC as UINavigationController: + if let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) + } + case let reservationListVC as ReservationListViewController: + reservationListVC.addNewItem(reservation: reservation) + default: + break + } + + self.dismiss(animated: true, completion: nil) + } + + + // MARK: - Table view data source +/* + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "ReserveDone" { + guard let reservation = newReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { + return + } + reservationListVC.addNewItem(reservation: reservation) + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/RoomInfoViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/RoomInfoViewController.swift" new file mode 100644 index 0000000..61bf80d --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/RoomInfoViewController.swift" @@ -0,0 +1,98 @@ +// +// RoomInfoViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class RoomInfoViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + /* + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } +*/ + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ServiceListViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ServiceListViewController.swift" new file mode 100644 index 0000000..091d906 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ServiceListViewController.swift" @@ -0,0 +1,113 @@ +// +// ServiceListViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + self.title = branch?.name + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + // Configure the cell... + guard let service = branch?.services?[indexPath.row] else { + return cell + } + + cell.textLabel?.text = service.name + + return cell + } + + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } + + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/TintColorViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/TintColorViewController.swift" new file mode 100644 index 0000000..9ba2c19 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/TintColorViewController.swift" @@ -0,0 +1,76 @@ +// +// TintColorViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 11. 9.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +enum TintColor:Int { + case Blue = 0, Red, Green, Purple + + var color:UIColor { get { + switch self { + case .Blue: + return UIColor.blue + case .Red: + return UIColor.red + case .Green: + return UIColor.green + case .Purple: + return UIColor.purple + } + } + + } +} + +let TintColorKey = "TintColor" + +func applyTintColor(color:UIColor) { + guard let window = UIApplication.shared.keyWindow else { + return + } + window.tintColor = color +} + +class TintColorViewController: UIViewController { + + @IBOutlet weak var tintColorSeg: UISegmentedControl! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) + self.tintColorSeg.selectedSegmentIndex = userDefaultColor + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + @IBAction func tintColorChanged(_ sender: Any) { + let selectedIndex = self.tintColorSeg.selectedSegmentIndex + UserDefaults.standard.set(selectedIndex, forKey: TintColorKey) + + guard let changedColor = TintColor(rawValue: selectedIndex)?.color else { + return + } + applyTintColor(color: changedColor) + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ViewController.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ViewController.swift" new file mode 100644 index 0000000..24bd9b0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRooms/ViewController.swift" @@ -0,0 +1,25 @@ +// +// ViewController.swift +// meetingRooms +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/meetingRoomsTests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/meetingRoomsTests.swift" new file mode 100644 index 0000000..bfbd8d6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsTests/meetingRoomsTests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsTests.swift +// meetingRoomsTests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest +@testable import meetingRooms + +class meetingRoomsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/Info.plist" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/Info.plist" new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/Info.plist" @@ -0,0 +1,22 @@ + + + + + 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/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/meetingRoomsUITests.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/meetingRoomsUITests.swift" new file mode 100644 index 0000000..4873bfa --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/meetingRooms_userdfault/meetingRoomsUITests/meetingRoomsUITests.swift" @@ -0,0 +1,36 @@ +// +// meetingRoomsUITests.swift +// meetingRoomsUITests +// +// Created by 황도증 on 2017. 10. 30.. +// Copyright © 2017년 황도증. All rights reserved. +// + +import XCTest + +class meetingRoomsUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/Contents.swift" new file mode 100644 index 0000000..de21388 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/Contents.swift" @@ -0,0 +1,130 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*메소드란 인스턴스 안에 종속된 함수 + 인스턴스에서 필요한 기능들 함수로 만들어 넣은 것 + 클래스, 구조체, 이너머레이션 모두 인스턴스 메소드를 가질 수 있다 + self는 그 자신을 가리킨다 + */ + +struct Task { + var title:String + var time:Int? + + var owner:Employee + var participant:Employee? + + var type:TaskType + enum TaskType { + case Call + case Report + case Meet + case Support + + var typeTitle:String { + get { + let titleString:String + switch self { + case .Call: + titleString = "Call" + case .Report: + titleString = "Report" + case .Meet: + titleString = "Meet" + case .Support: + titleString = "Support" + } + return titleString + } + } + } + + init(type:TaskType, owner:Employee) { + self.type = type + self.title = type.typeTitle + self.owner = owner + self.time = nil + self.participant = nil + } +} + +class Employee { + var name:String? + var phoneNumber:String? + var boss:Employee? + + init (name:String) { + self.name = name + } + + init(name:String, phone:String) { + self.name = name + self.phoneNumber = phone + } + + func report() { + if let myBoss = boss { + print("\(name!) reported to \(myBoss).") + } else { + print("\(name!) don't have a boss.") + } + } + + func callTaskToBoss() -> Task? { + if let myBoss = boss { + let callTask = Task(type: .Call, owner:self) + return callTask + } + return nil + } +} +var todayTask:[Task] = [] + +let me:Employee = Employee(name: "Alex", phone:"010-3398-8792") +let toby = Employee(name: "Toby") +toby.phoneNumber = "010-3392-8765" +me.boss = toby + +var reportTask = Task(type:.Report, owner:me) +todayTask += [reportTask] + +if let callTask = me.callTaskToBoss() { + todayTask += [callTask] +} + +todayTask[1].time = 15*60 + +print("Today task = \(todayTask)") + + +/*Driving struct에 car가 운행을 마칠 때 마다 car에 로그를 남기는 기능을 추가하려고 합니다. Driving 인스턴스를 매개변수로 받아 drivingLog 배열에 추가하고, mileage에 운행거리를 더하는 addLog함수를 Car 클래스에 더해보세요. addLog 함수에서 Driving 인스턴스를 매개변수로 받은 후 인스턴스를 drivingLog에 추가하고 mileage에 운행거리를 더하면 됩니다 */ + +class Car { + var drivingLog:[Driving] = [] + var mileage:Int = 0 + + // 매개변수로 Driving 인스턴스를 받으세요 + func addLog(driving:Driving) { + // 인자를 drivingLog 배열에 추가하세요 + drivingLog += [driving] + // mileage에 운행거리를 더하세요 + mileage += driving.distance + } +} + +struct Driving { + let car:Car + let distance:Int //운행 거리 + + func arrived() { + car.addLog(driving: self) + } +} + +let truck = Car() +let deliver = Driving(car: truck, distance:30) +deliver.arrived() + +print(truck.drivingLog) +print(truck.mileage) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/timeline.xctimeline" new file mode 100644 index 0000000..b8f966b --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/methods.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/Contents.swift" new file mode 100644 index 0000000..c88809f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/Contents.swift" @@ -0,0 +1,44 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*하나의 값으로 수렴하도록 할 때 사용하는 함수. 배열과 병합에 사용하는 함수를 매개변수로 받아서 하나의 값을 결과로 리턴한다. 개발 시 사용하는 많은 작업들은 reduce 함수를 이용해 해결할 수 있다 + + transaction의 총합을 구하기 + base는 시작 값이며 adder는 이번에 더할 값 + 축약 시 병합원칙을 간단한 오퍼레이터로 제공할 수 있다. + */ +let transactions = [600.0, 403.3, 408.3, 562.3, 902.2] + +func addVAT (source: Double) -> Double { + return source * 1.1 +} + +var vatPrices:[Double] = [] + +for transaction in transactions { + vatPrices += [addVAT(source: transaction)] +} + +func priceSum (base:Double, adder:Double) -> Double { + return base + adder +} + +var sum:Double = 0.0 +for price in vatPrices { + sum = priceSum(base: sum, adder: price) +} + +//reduce를 활용 +var sum2:Double = 0.0 +let sumReduce1 = vatPrices.reduce(0.0, priceSum) +let sumReduce2 = vatPrices.reduce(sum2, {base, adder in base + adder} ) +let sumReduce3 = vatPrices.reduce(0.0, +) + +// Double 배열로 하나의 문자열 만들기. 배열의 값을 이용해 하나의 문자열을 만들 때 reduce 함수 사용 가능 +let pricesString = vatPrices.reduce("", {$0 + "\($1)\n"}) +print(pricesString) + +//meetingRooms의 키, 값을 이용해 하나의 문자열 만들기. 시작할 문자열을 base 값으로 제공. 더해질 문자열을 adder로 제공 +var meetingRooms:[String:Int] = ["A":10, "B":20, "C":30, "D":40] +let desxriptionString = meetingRooms.reduce("We have meeting rooms : \n", {$0 + "\($1.key) for \($1.value) persons \n"}) diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/timeline.xctimeline" new file mode 100644 index 0000000..f0062b6 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/reduce.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/Contents.swift" new file mode 100644 index 0000000..b557368 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/Contents.swift" @@ -0,0 +1,39 @@ +//: Playground - noun: a place where people can play + +import UIKit + +/*고차함수 sort 함수는 배열과 정렬 조건이 있는 함수를 매개변수로 받아서, 정렬방식에 적당하게 정렬된 새로운 배열을 만드는 함수이다. + + ascendant는 < 을 사용하며 작은 것부터 큰 순으로 정렬됩니다. 비디오에서처럼 >를 사용하면 descendant 정렬이 됩니다 + + transaction을 크기에 따라 정렬하기 + 두 개의 값을 비교하는 정렬 기준을 함수로 제공 + 적용 시 조건에 따라 정렬된 배열 생성 + meetingRooms를 정원 순으로 정렬하기 + 딕셔너리에 sort를 적용하면 튜플의 배열로 변환 + meetingRooms의 value는 튜플에서 .1로 접근 가능 + */ +let transactions = [600.0, 403.3, 408.3, 562.3, 902.2] + +func addVAT (source: Double) -> Double { + return source * 1.1 +} + +var vatPrices:[Double] = [] + +for transaction in transactions { + vatPrices += [addVAT(source: transaction)] +} + +func ascedantSort (sort1:Double, sort2:Double) -> Bool { + return sort1 > sort2 +} + +let sortedPrice = vatPrices.sorted(by: ascedantSort) + +let sortedPrices2 = vatPrices.sorted(by: { sort1, sort2 in + return sort1 > sort2}) + +let sortedPrices3 = vatPrices.sorted(by: { $0 > $1 }) + +print("\(sortedPrices3)") diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/timeline.xctimeline" new file mode 100644 index 0000000..6b64abc --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/sort.playground/timeline.xctimeline" @@ -0,0 +1,16 @@ + + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/Contents.swift" new file mode 100644 index 0000000..aea7c6f --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/Contents.swift" @@ -0,0 +1,110 @@ +//: Playground - noun: a place where people can play + +import UIKit + + +//quiz 1 for loop + + +let startNum = [1.0,2.0,3.0,4.0,5.0] + +func addNum(source:Double) -> Double { + return source + 5 +} +/* +var endNum:[Double] = [] + +for num in startNum { + endNum += [addNum(source:num)] + print("\(num) have 5 more than startNum") +} +*/ + +var endNum:[Double] = [] +let a = startNum.map({let a = $0 + print("\(addNum(source: a)) have 5 more than StartNum") + endNum.append(addNum(source: a)) +}) + + + +//quiz 2 + +var biggerNum:[Double] = [] +/* +for num in endNum { + if num >= 7 { + biggerNum += [num] + } +} +*/ +endNum.map({ + let a = $0 + if a >= 7 { + biggerNum += [a] + } }) +print("\(biggerNum)") + + + +//quiz 3 +func numSum (base:Double, adder:Double) -> Double { + return base + adder +} + +var sum:Double = 0.0 +/* +for num in biggerNum { + sum = numSum(base:sum, adder:num) +} + */ +biggerNum.map({ let a = $0 + sum = numSum(base:sum, adder:a) +}) + +//add 50 at sum of biggerNum +var add50More = 50.0 + +print("\(sum)") + +// Quiz 4 + +let list4: [Double] = [10, 15, 20, 100, 150] +var result4: [Double] = [] +func reproduceSelf (input: Double)->Double{ + return Double(pow(input,2)+input) +} +/*for item in list4 { + result4.append(reproduceSelf(input: item)) +}*/ + +list4.map({ + let a = $0 + result4.append(reproduceSelf(input: a))}) +print("list4 is reproduced as \(result4)") + + +//Quiz 5 +let list5: [Int] = [2, 3, 9, 16, 20] +var sum5: Int = 0 +var result5: [Int] = [] + +/*for item in list5{ + sum5 += item + result5.append(sum5) +} +*/ +list5.map({ + let a = $0 + sum5 += a + result5.append(sum5) +}) +print ("Here are Sums of list5 step by step \(result5)") + + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/contents.xcplayground" new file mode 100644 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/Contents.swift" new file mode 100755 index 0000000..92d0f9b --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/Contents.swift" @@ -0,0 +1,89 @@ +//: Playground - noun: a place where people can play + +import UIKit + + +//quiz 1 for loop + + +let startNum = [1.0,2.0,3.0,4.0,5.0] + +func addNum(source:Double) -> Double { + return source + 5 +} + + +var endNum:[Double] = [] + + +for num in startNum { + + endNum += [addNum(source:num)] + print("\(num) have 5 more than startNum") + +} + + + + +//quiz 2 + + +var biggerNum:[Double] = [] + +for num in endNum { + if num >= 7 { + biggerNum += [num] + } +} + +print("\(biggerNum)") + + + +//quiz 3 + +func numSum (base:Double, adder:Double) -> Double { + return base + adder +} + +var sum:Double = 0.0 +for num in biggerNum { + sum = numSum(base:sum, adder:num) +} + + +//add 50 at sum of biggerNum +var add50More = 50.0 + +print("\(sum)") + +// Quiz 4 + +let list4: [Double] = [10, 15, 20, 100, 150] +var result4: [Double] = [] +func reproduceSelf (input: Double)->Double{ + return Double(pow(input,2)+input) +} +for item in list4 { + result4.append(reproduceSelf(input: item)) +} +print ("list4 is reproduced as \(result4)") + + +//Quiz 5 +let list5: [Int] = [2, 3, 9, 16, 20] +var sum5: Int = 0 +var result5: [Int] = [] +for item in list5{ + sum5 += item + result5.append(sum5) +} +print ("Here are Sums of list5 step by step \(result5)") + + + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/contents.xcplayground" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/contents.xcplayground" new file mode 100755 index 0000000..5da2641 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/contents.xcplayground" @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/hanme quiz.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/Contents.swift" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/Contents.swift" new file mode 100644 index 0000000..54fc5b3 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/Contents.swift" @@ -0,0 +1,50 @@ +//: Playground - noun: a place where people can play + +import UIKit + +//quiz 1 +let hoody = ["구진선", "황도증", "임새로미", "하한메"] +for receiver in hoody { + print(receiver + " received hoody") +} + +//quiz 2 +let num = [1, 2, 3, 4, 5] +for bigNum in num { + if bigNum > 3 { + print("\(bigNum) is bigger than 3") + } else { + print("\(bigNum) is less than 3") + } +} + +//quiz 3 +var personHeight:[String:Int] = ["황도증":175, "하한메":182, "정윤지":167, "윤성관":170] +let standard = 170 +for height in personHeight { + if height.value > standard { + print("\(height.key) is over 170cm") + } +} + +//quiz 4 +var hoodyname3:[String] = [] + +for receiver in hoody{ + if receiver.count==3 { + hoodyname3.append(receiver) + } + else{} +} + +print(hoodyname3) + + +//Quiz 5 +var transactions:[Int] = [1, 1, 1, 1, 1] +for var i in (1.. + + + \ No newline at end of file diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 0000000..919434a --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/playground.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/timeline.xctimeline" "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/timeline.xctimeline" new file mode 100644 index 0000000..28800e0 --- /dev/null +++ "b/\352\260\225\354\235\230 \355\224\204\353\241\234\354\240\235\355\212\270 \355\214\214\354\235\274/\352\263\240\354\260\250\354\233\220\355\225\250\354\210\230 \355\200\264\354\246\210/my quiz answer.playground/timeline.xctimeline" @@ -0,0 +1,11 @@ + + + + + + +