diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 484d5bbb..1703ca76 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ # codeowners' reviews are required before merging -* @PatrickKan @jeffkim2001 @ashayp22 +* @jeffkim2001 @ashayp22 @lasyaneti diff --git a/HIAPI/Models/Attendee.swift b/HIAPI/Models/Attendee.swift index 7da5a360..d5f43adc 100644 --- a/HIAPI/Models/Attendee.swift +++ b/HIAPI/Models/Attendee.swift @@ -26,4 +26,5 @@ public struct Attendee: Codable, APIReturnable { public let school: String public let major: String public let gender: String + public let dietary: [String]? } diff --git a/HIAPI/Models/Event.swift b/HIAPI/Models/Event.swift index 2a81ea9a..06f3f615 100644 --- a/HIAPI/Models/Event.swift +++ b/HIAPI/Models/Event.swift @@ -23,6 +23,47 @@ public struct EventContainer: Decodable, APIReturnable { } } +public struct StaffEventContainer: Decodable, APIReturnable { + public let events: [StaffEvent] + + public init(from data: Data) throws { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .secondsSince1970 + self = try decoder.decode(StaffEventContainer.self, from: data) + } +} + +public struct StaffEvent: Codable { + internal enum CodingKeys: String, CodingKey { + case id + case endTime + case eventType + case info = "description" + case locations + case name + case sponsor + case startTime + case points + case isAsync + case isPrivate + case displayOnStaffCheckin + } + + public var id: String + public let endTime: Date + public let eventType: String + public let info: String + public let locations: [Location] + public let name: String + public let sponsor: String + public let startTime: Date + public let points: Int + public let isAsync: Bool + public let isPrivate: Bool + public let displayOnStaffCheckin: Bool +} + + public struct Event: Codable { internal enum CodingKeys: String, CodingKey { case id diff --git a/HIAPI/Models/Profile.swift b/HIAPI/Models/Profile.swift index fdf360e3..faf6318b 100644 --- a/HIAPI/Models/Profile.swift +++ b/HIAPI/Models/Profile.swift @@ -29,7 +29,7 @@ public struct Profile: Codable, APIReturnable { case firstName case lastName case points - case timezone + case foodWave case discord case avatarUrl } @@ -38,7 +38,7 @@ public struct Profile: Codable, APIReturnable { public let firstName: String public let lastName: String public let points: Int - public let timezone: String + public let foodWave: Int public let discord: String public let avatarUrl: String } diff --git a/HIAPI/Models/User.swift b/HIAPI/Models/User.swift index d5c2b9a3..17011a10 100644 --- a/HIAPI/Models/User.swift +++ b/HIAPI/Models/User.swift @@ -28,7 +28,7 @@ public struct RolesContainer: Codable, APIReturnable { public struct Roles: OptionSet, Codable { public let rawValue: Int - public static let null = Roles(rawValue: 0) + public static let null = Roles([]) public static let user = Roles(rawValue: 1 << 0) public static let applicant = Roles(rawValue: 1 << 1) public static let attendee = Roles(rawValue: 1 << 2) @@ -93,6 +93,11 @@ fileprivate extension Optional where Wrapped == String { } } +public struct QRData: Codable, APIReturnable { + public let id: String + public let qrInfo: String +} + public struct DietaryRestrictions: OptionSet, Codable, APIReturnable { public let rawValue: Int diff --git a/HIAPI/Services/EventService.swift b/HIAPI/Services/EventService.swift index 489c779d..d833d3d7 100644 --- a/HIAPI/Services/EventService.swift +++ b/HIAPI/Services/EventService.swift @@ -29,6 +29,19 @@ public class EventService: BaseService { return APIRequest(service: self, endpoint: "checkin/", body: body, method: .POST) } + public static func staffCheckIn(userToken: String, eventId: String) -> APIRequest { + var body = HTTPBody() + body["userToken"] = userToken + body["eventId"] = eventId + return APIRequest(service: self, endpoint: "staff/checkin/", body: body, method: .POST) + } + + public static func getStaffCheckInEvents(authToken: String) -> APIRequest { + var header = HTTPHeaders() + header["Authorization"] = authToken + return APIRequest(service: self, endpoint: "filter/?displayOnStaffCheckin=true", headers: header, method: .GET) + } + public static func create(event: Event) -> APIRequest { let eventDict = [String: Any]() assert(false) diff --git a/HIAPI/Services/RegistrationService.swift b/HIAPI/Services/RegistrationService.swift index 03fa8fe6..f27280ff 100644 --- a/HIAPI/Services/RegistrationService.swift +++ b/HIAPI/Services/RegistrationService.swift @@ -21,4 +21,9 @@ public final class RegistrationService: BaseService { public static func getAttendee() -> APIRequest { return APIRequest(service: self, endpoint: "", method: .GET) } + + public static func getAttendeeRegistrationUserID(userID: String) -> APIRequest { + + return APIRequest(service: self, endpoint: "attendee/" + userID + "/", method: .GET) + } } diff --git a/HIAPI/Services/UserService.swift b/HIAPI/Services/UserService.swift index 58c209bc..6dd3aaa9 100644 --- a/HIAPI/Services/UserService.swift +++ b/HIAPI/Services/UserService.swift @@ -21,4 +21,8 @@ public final class UserService: BaseService { public static func getUser() -> APIRequest { return APIRequest(service: self, endpoint: "", headers: headers, method: .GET) } + + public static func getQR() -> APIRequest { + return APIRequest(service: self, endpoint: "qr/", method: .GET) + } } diff --git a/HackIllinois.xcodeproj/project.pbxproj b/HackIllinois.xcodeproj/project.pbxproj index 5735868e..29454f88 100644 --- a/HackIllinois.xcodeproj/project.pbxproj +++ b/HackIllinois.xcodeproj/project.pbxproj @@ -119,7 +119,7 @@ AC3B621625E8611C002386A2 /* HIProfileDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC3B621525E8611C002386A2 /* HIProfileDataSource.swift */; }; AC5E9FE326195CCF00674FCF /* HIEventType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5E9FE226195CCF00674FCF /* HIEventType.swift */; }; AC607EF0261CD6E300B88798 /* Stickers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AC607EEF261CD6E300B88798 /* Stickers.xcassets */; }; - AC607EF4261CD6E300B88798 /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = AC607EED261CD6E100B88798 /* Stickers.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + AC607EF4261CD6E300B88798 /* Stickers.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AC607EED261CD6E100B88798 /* Stickers.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; AC6F15A6261BB1B400422192 /* HIErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC6F15A5261BB1B400422192 /* HIErrorView.swift */; }; ACA63C8B25E7394D00A00D83 /* HIProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACA63C8A25E7394D00A00D83 /* HIProfile.swift */; }; ACAA717626017EC4000F42B0 /* HICollectionViewFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACAA717526017EC4000F42B0 /* HICollectionViewFlowLayout.swift */; }; @@ -132,7 +132,36 @@ BCEBD2DA23DE995700D32F5A /* HIPopupAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCEBD2D923DE995700D32F5A /* HIPopupAnimator.swift */; }; BF0FDA3925F4DCCD003B5DB1 /* HIScheduleSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0FDA3825F4DCCD003B5DB1 /* HIScheduleSegmentedControl.swift */; }; BFB1FD3E26105EA400500008 /* HIEditProfileCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB1FD3D26105EA400500008 /* HIEditProfileCell.swift */; }; + D134D30F296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D134D30E296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf */; }; + D14D3AE3295FBDA200EB7995 /* HIBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */; }; D3A309BC2211175200CBA351 /* PassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A309BB2211175200CBA351 /* PassKit.framework */; }; + DF3706382925DDAA000B4278 /* GoogleMapsBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706372925DDAA000B4278 /* GoogleMapsBase.framework */; }; + DF37063B2925DDB8000B4278 /* GoogleMaps.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706392925DDB7000B4278 /* GoogleMaps.framework */; }; + DF37063C2925DDB8000B4278 /* GoogleMapsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37063A2925DDB8000B4278 /* GoogleMapsCore.framework */; }; + DF37063E2925DDE7000B4278 /* GoogleMaps.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DF37063D2925DDE7000B4278 /* GoogleMaps.bundle */; }; + DF3706402925DE08000B4278 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37063F2925DE08000B4278 /* Accelerate.framework */; }; + DF3706422925DE0F000B4278 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706412925DE0F000B4278 /* CoreData.framework */; }; + DF3706442925DE15000B4278 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706432925DE15000B4278 /* CoreGraphics.framework */; }; + DF3706462925DE1B000B4278 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706452925DE1B000B4278 /* CoreImage.framework */; }; + DF3706482925DE22000B4278 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706472925DE22000B4278 /* CoreLocation.framework */; }; + DF37064A2925DE27000B4278 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706492925DE27000B4278 /* CoreTelephony.framework */; }; + DF37064C2925DE2F000B4278 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37064B2925DE2F000B4278 /* CoreText.framework */; }; + DF37064E2925DE34000B4278 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37064D2925DE34000B4278 /* GLKit.framework */; }; + DF3706502925DE38000B4278 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37064F2925DE38000B4278 /* ImageIO.framework */; }; + DF3706522925DE42000B4278 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706512925DE42000B4278 /* libc++.tbd */; }; + DF3706542925DE47000B4278 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706532925DE47000B4278 /* libz.tbd */; }; + DF3706562925DE4C000B4278 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706552925DE4C000B4278 /* Metal.framework */; }; + DF3706582925DE50000B4278 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706572925DE50000B4278 /* OpenGLES.framework */; }; + DF37065A2925DE57000B4278 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF3706592925DE57000B4278 /* QuartzCore.framework */; }; + DF37065C2925DE5D000B4278 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37065B2925DE5D000B4278 /* SystemConfiguration.framework */; }; + DF37065E2925DE66000B4278 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF37065D2925DE66000B4278 /* UIKit.framework */; }; + E1BF5E7A298B462F00A98390 /* HIStaffButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BF5E79298B462F00A98390 /* HIStaffButtonView.swift */; }; + DF5B27C5299197E80034A8B9 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5B27C4299197E80034A8B9 /* Array.swift */; }; + DF5B27C7299372AE0034A8B9 /* Hack_PopcornCart_Text.json in Resources */ = {isa = PBXBuildFile; fileRef = DF5B27C6299372AE0034A8B9 /* Hack_PopcornCart_Text.json */; }; + E170038A29679D08009B99A8 /* HIProfileCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E170038929679D08009B99A8 /* HIProfileCardView.swift */; }; + E1E4A5D9291C9BF800780BA1 /* HICarouselSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E4A5D6291C9BF700780BA1 /* HICarouselSwiftUIView.swift */; }; + E1E4A5DA291C9BF800780BA1 /* HIOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E4A5D7291C9BF700780BA1 /* HIOnboardingView.swift */; }; + E1E4A5DB291C9BF800780BA1 /* HIOnboardingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E4A5D8291C9BF700780BA1 /* HIOnboardingViewModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -153,15 +182,15 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 35D7CE9F20380ACF00654E28 /* Embed App Extensions */ = { + 35D7CE9F20380ACF00654E28 /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - AC607EF4261CD6E300B88798 /* Stickers.appex in Embed App Extensions */, + AC607EF4261CD6E300B88798 /* Stickers.appex in Embed Foundation Extensions */, ); - name = "Embed App Extensions"; + name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; }; 95E3143621FAD5B40092C22E /* Embed Frameworks */ = { @@ -304,8 +333,37 @@ BCEBD2D923DE995700D32F5A /* HIPopupAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HIPopupAnimator.swift; path = HackIllinois/UI/Animations/HIPopupAnimator.swift; sourceTree = SOURCE_ROOT; }; BF0FDA3825F4DCCD003B5DB1 /* HIScheduleSegmentedControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIScheduleSegmentedControl.swift; sourceTree = ""; }; BFB1FD3D26105EA400500008 /* HIEditProfileCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIEditProfileCell.swift; sourceTree = ""; }; + D134D30E296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-VariableFont_wght.ttf"; sourceTree = ""; }; + D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIBannerViewController.swift; sourceTree = ""; }; D3A309BA221116A600CBA351 /* HackIllinois.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HackIllinois.entitlements; sourceTree = ""; }; D3A309BB2211175200CBA351 /* PassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PassKit.framework; path = System/Library/Frameworks/PassKit.framework; sourceTree = SDKROOT; }; + DF3706372925DDAA000B4278 /* GoogleMapsBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleMapsBase.framework; sourceTree = ""; }; + DF3706392925DDB7000B4278 /* GoogleMaps.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleMaps.framework; sourceTree = ""; }; + DF37063A2925DDB8000B4278 /* GoogleMapsCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleMapsCore.framework; sourceTree = ""; }; + DF37063D2925DDE7000B4278 /* GoogleMaps.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = GoogleMaps.bundle; path = HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle; sourceTree = ""; }; + DF37063F2925DE08000B4278 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + DF3706412925DE0F000B4278 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + DF3706432925DE15000B4278 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + DF3706452925DE1B000B4278 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; + DF3706472925DE22000B4278 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + DF3706492925DE27000B4278 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; + DF37064B2925DE2F000B4278 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + DF37064D2925DE34000B4278 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; + DF37064F2925DE38000B4278 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + DF3706512925DE42000B4278 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + DF3706532925DE47000B4278 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + DF3706552925DE4C000B4278 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + DF3706572925DE50000B4278 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + DF3706592925DE57000B4278 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + DF37065B2925DE5D000B4278 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + DF37065D2925DE66000B4278 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + E1BF5E79298B462F00A98390 /* HIStaffButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIStaffButtonView.swift; sourceTree = ""; }; + DF5B27C4299197E80034A8B9 /* Array.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; + DF5B27C6299372AE0034A8B9 /* Hack_PopcornCart_Text.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Hack_PopcornCart_Text.json; sourceTree = ""; }; + E170038929679D08009B99A8 /* HIProfileCardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HIProfileCardView.swift; sourceTree = ""; }; + E1E4A5D6291C9BF700780BA1 /* HICarouselSwiftUIView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HICarouselSwiftUIView.swift; sourceTree = ""; }; + E1E4A5D7291C9BF700780BA1 /* HIOnboardingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HIOnboardingView.swift; sourceTree = ""; }; + E1E4A5D8291C9BF700780BA1 /* HIOnboardingViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HIOnboardingViewModel.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -313,7 +371,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DF37065E2925DE66000B4278 /* UIKit.framework in Frameworks */, + DF37065C2925DE5D000B4278 /* SystemConfiguration.framework in Frameworks */, + DF37065A2925DE57000B4278 /* QuartzCore.framework in Frameworks */, + DF3706582925DE50000B4278 /* OpenGLES.framework in Frameworks */, + DF3706562925DE4C000B4278 /* Metal.framework in Frameworks */, + DF3706542925DE47000B4278 /* libz.tbd in Frameworks */, + DF3706522925DE42000B4278 /* libc++.tbd in Frameworks */, + DF3706502925DE38000B4278 /* ImageIO.framework in Frameworks */, + DF37064E2925DE34000B4278 /* GLKit.framework in Frameworks */, + DF37064C2925DE2F000B4278 /* CoreText.framework in Frameworks */, + DF37064A2925DE27000B4278 /* CoreTelephony.framework in Frameworks */, + DF3706482925DE22000B4278 /* CoreLocation.framework in Frameworks */, + DF3706462925DE1B000B4278 /* CoreImage.framework in Frameworks */, + DF3706442925DE15000B4278 /* CoreGraphics.framework in Frameworks */, + DF3706422925DE0F000B4278 /* CoreData.framework in Frameworks */, + DF3706402925DE08000B4278 /* Accelerate.framework in Frameworks */, + DF37063B2925DDB8000B4278 /* GoogleMaps.framework in Frameworks */, + DF3706382925DDAA000B4278 /* GoogleMapsBase.framework in Frameworks */, 951E67F923C1C88200477703 /* Lottie in Frameworks */, + DF37063C2925DDB8000B4278 /* GoogleMapsCore.framework in Frameworks */, 951E67F623C1C83B00477703 /* Keychain in Frameworks */, D3A309BC2211175200CBA351 /* PassKit.framework in Frameworks */, 95E3143121FAD5B40092C22E /* HIAPI.framework in Frameworks */, @@ -372,6 +449,7 @@ 951827761EA35AF100049F79 = { isa = PBXGroup; children = ( + DF37063D2925DDE7000B4278 /* GoogleMaps.bundle */, 951827971EA35DB800049F79 /* HackIllinois */, 95E3142B21FAD5B40092C22E /* HIAPI */, AC607EEE261CD6E100B88798 /* Stickers */, @@ -393,6 +471,11 @@ 951827971EA35DB800049F79 /* HackIllinois */ = { isa = PBXGroup; children = ( + D134D30D296B3F40006EA589 /* Fonts */, + DF3706392925DDB7000B4278 /* GoogleMaps.framework */, + DF37063A2925DDB8000B4278 /* GoogleMapsCore.framework */, + DF3706372925DDAA000B4278 /* GoogleMapsBase.framework */, + E1E4A5D4291C9BF700780BA1 /* SwiftUI */, D3A309BA221116A600CBA351 /* HackIllinois.entitlements */, 957DB2E41FC2435100F8C45E /* ViewControllers */, 957DB2E91FC2453100F8C45E /* FlowControllers */, @@ -479,6 +562,7 @@ 9510F6A61FCB7E53007D19DB /* HIBaseScannerViewController.swift */, 95C3BE2F2008B99C0008ED79 /* HIBaseViewController.swift */, 35240BD0201408DB00E0C0D8 /* HICountdownViewController.swift */, + D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */, 95C18DC720096539004784B5 /* HIEventDetailViewController.swift */, 95C18DC920096539004784B5 /* HIEventListViewController.swift */, 9515E43622093E1300BCAF92 /* HIEventScannerViewController.swift */, @@ -487,7 +571,9 @@ 95CCEA1E203D6B3600E3E28C /* HINavigationController.swift */, 95C18DC820096539004784B5 /* HIScheduleViewController.swift */, 98CA2A3D25C899CF003E842A /* HIProfileViewController.swift */, + E170038929679D08009B99A8 /* HIProfileCardView.swift */, 60EAF98A273B1AC4002CD205 /* HIScanQRCodeViewController.swift */, + E1BF5E79298B462F00A98390 /* HIStaffButtonView.swift */, 1C9045D3274F065F00DDA74E /* HIOnboardingViewController.swift */, 3FBFA7AA27335554001FFF28 /* HILeaderboardListViewController.swift */, 3FBFA7B427335ABC001FFF28 /* HILeaderboardViewController.swift */, @@ -512,6 +598,7 @@ 9552D92721758E4C00A8C869 /* UIView+AutoLayout.swift */, 95CA922F201E60D300C46037 /* UIImage+QRCode.swift */, 1C63EE6827680DF500D60653 /* CIImage.swift */, + DF5B27C4299197E80034A8B9 /* Array.swift */, ); path = Extensions; sourceTree = ""; @@ -673,9 +760,53 @@ path = Cells; sourceTree = ""; }; + D134D30D296B3F40006EA589 /* Fonts */ = { + isa = PBXGroup; + children = ( + D134D30E296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf */, + ); + path = Fonts; + sourceTree = ""; + }; + E1E4A5D4291C9BF700780BA1 /* SwiftUI */ = { + isa = PBXGroup; + children = ( + E1E4A5D5291C9BF700780BA1 /* UI */, + E1E4A5D7291C9BF700780BA1 /* HIOnboardingView.swift */, + E1E4A5D8291C9BF700780BA1 /* HIOnboardingViewModel.swift */, + ); + name = SwiftUI; + path = HackIllinois/SwiftUI; + sourceTree = SOURCE_ROOT; + }; + E1E4A5D5291C9BF700780BA1 /* UI */ = { + isa = PBXGroup; + children = ( + DF5B27C6299372AE0034A8B9 /* Hack_PopcornCart_Text.json */, + E1E4A5D6291C9BF700780BA1 /* HICarouselSwiftUIView.swift */, + ); + path = UI; + sourceTree = ""; + }; EAE6D26341C3ACE27256067A /* Frameworks */ = { isa = PBXGroup; children = ( + DF37065D2925DE66000B4278 /* UIKit.framework */, + DF37065B2925DE5D000B4278 /* SystemConfiguration.framework */, + DF3706592925DE57000B4278 /* QuartzCore.framework */, + DF3706572925DE50000B4278 /* OpenGLES.framework */, + DF3706552925DE4C000B4278 /* Metal.framework */, + DF3706532925DE47000B4278 /* libz.tbd */, + DF3706512925DE42000B4278 /* libc++.tbd */, + DF37064F2925DE38000B4278 /* ImageIO.framework */, + DF37064D2925DE34000B4278 /* GLKit.framework */, + DF37064B2925DE2F000B4278 /* CoreText.framework */, + DF3706492925DE27000B4278 /* CoreTelephony.framework */, + DF3706472925DE22000B4278 /* CoreLocation.framework */, + DF3706452925DE1B000B4278 /* CoreImage.framework */, + DF3706432925DE15000B4278 /* CoreGraphics.framework */, + DF3706412925DE0F000B4278 /* CoreData.framework */, + DF37063F2925DE08000B4278 /* Accelerate.framework */, D3A309BB2211175200CBA351 /* PassKit.framework */, ); name = Frameworks; @@ -703,7 +834,7 @@ 9518277C1EA35AF100049F79 /* Frameworks */, 9518277D1EA35AF100049F79 /* Resources */, 1C4BDBAA2744A032003BB3BB /* ShellScript */, - 35D7CE9F20380ACF00654E28 /* Embed App Extensions */, + 35D7CE9F20380ACF00654E28 /* Embed Foundation Extensions */, 95E3143621FAD5B40092C22E /* Embed Frameworks */, ); buildRules = ( @@ -764,12 +895,11 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 1010; + LastUpgradeCheck = 1420; ORGANIZATIONNAME = HackIllinois; TargetAttributes = { 9518277E1EA35AF100049F79 = { CreatedOnToolsVersion = 8.3; - DevelopmentTeam = 8VNQTQM2L6; LastSwiftMigration = 1130; ProvisioningStyle = Automatic; SystemCapabilities = { @@ -800,7 +930,6 @@ developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, Base, ); @@ -833,6 +962,9 @@ 952D1542220D453D0041383A /* countdown-60.json in Resources */, 951827B41EA35E8B00049F79 /* LaunchScreen.storyboard in Resources */, 1C7561A5278E96750004D739 /* LightVespaText.json in Resources */, + D134D30F296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf in Resources */, + DF37063E2925DDE7000B4278 /* GoogleMaps.bundle in Resources */, + DF5B27C7299372AE0034A8B9 /* Hack_PopcornCart_Text.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -902,13 +1034,17 @@ 957D7CAC1FC2940800C4332A /* HackIllinois.xcdatamodeld in Sources */, 3FBFA7AB27335554001FFF28 /* HILeaderboardListViewController.swift in Sources */, 9510F6A71FCB7E53007D19DB /* HIBaseScannerViewController.swift in Sources */, + E1E4A5DA291C9BF800780BA1 /* HIOnboardingView.swift in Sources */, 95A7D290203D4F54005EAEAF /* HIAnnouncementCell.swift in Sources */, 9515E43722093E1300BCAF92 /* HIEventScannerViewController.swift in Sources */, 95A7D28F203D4F54005EAEAF /* HIEventCell.swift in Sources */, ACAA717626017EC4000F42B0 /* HICollectionViewFlowLayout.swift in Sources */, + DF5B27C5299197E80034A8B9 /* Array.swift in Sources */, + E170038A29679D08009B99A8 /* HIProfileCardView.swift in Sources */, 95C3BE302008B99C0008ED79 /* HIBaseViewController.swift in Sources */, BFB1FD3E26105EA400500008 /* HIEditProfileCell.swift in Sources */, 95CD0ED52015217E00D79DCC /* HIApplicationStateController.swift in Sources */, + E1E4A5DB291C9BF800780BA1 /* HIOnboardingViewModel.swift in Sources */, AC0DDDDC261111B60086BDE0 /* HITextView.swift in Sources */, 95A7D292203D4F54005EAEAF /* HILoginSelectionCell.swift in Sources */, 3C26401923ADE7AA004E1DBE /* Project+CoreDataProperties.swift in Sources */, @@ -931,11 +1067,14 @@ 95C18DC52009618C004784B5 /* HIHomeViewController.swift in Sources */, 35240BD1201408DB00E0C0D8 /* HICountdownViewController.swift in Sources */, 3C7E552723AA199900213E1F /* HITimeDataSource.swift in Sources */, + D14D3AE3295FBDA200EB7995 /* HIBannerViewController.swift in Sources */, 9510F6A11FCB7D6E007D19DB /* Event+CoreDataClass.swift in Sources */, + E1E4A5D9291C9BF800780BA1 /* HICarouselSwiftUIView.swift in Sources */, 951827A81EA35DB800049F79 /* AppDelegate.swift in Sources */, AC5E9FE326195CCF00674FCF /* HIEventType.swift in Sources */, AC3B621425E86053002386A2 /* Profile+CoreDataProperties.swift in Sources */, 9564E02F2218CE6F003A8EEB /* HIMapsDataSource.swift in Sources */, + E1BF5E7A298B462F00A98390 /* HIStaffButtonView.swift in Sources */, 953199C91FC25CA0009F2AA1 /* HICoreDataController.swift in Sources */, 95A7D28D203D4F54005EAEAF /* Identifiable.swift in Sources */, 9521A6A820191590009059C6 /* HIEventDataSource.swift in Sources */, @@ -1039,6 +1178,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1049,6 +1189,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=*]" = arm64; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1063,9 +1204,10 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + "OTHER_LDFLAGS[arch=*]" = "-ObjC"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -1098,6 +1240,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1108,6 +1251,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=*]" = arm64; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1116,8 +1260,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; + "OTHER_LDFLAGS[arch=*]" = "-ObjC"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; @@ -1134,8 +1279,13 @@ CODE_SIGN_ENTITLEMENTS = HackIllinois/HackIllinois.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 8VNQTQM2L6; + DEVELOPMENT_TEAM = 88CYB22L6D; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/HackIllinois", + ); INFOPLIST_FILE = HackIllinois/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1157,8 +1307,13 @@ CODE_SIGN_ENTITLEMENTS = HackIllinois/HackIllinois.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 8VNQTQM2L6; + DEVELOPMENT_TEAM = 88CYB22L6D; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/HackIllinois", + ); INFOPLIST_FILE = HackIllinois/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1259,8 +1414,8 @@ DEVELOPMENT_TEAM = 8VNQTQM2L6; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Stickers/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2021.1.2; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MARKETING_VERSION = 2022.1.2; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.hackillinois.ios.Stickers; @@ -1284,8 +1439,8 @@ DEVELOPMENT_TEAM = 8VNQTQM2L6; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Stickers/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2021.1.2; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MARKETING_VERSION = 2022.1.2; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.hackillinois.ios.Stickers; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1357,7 +1512,7 @@ repositoryURL = "https://github.com/airbnb/lottie-ios.git"; requirement = { kind = exactVersion; - version = 3.1.5; + version = 4.0.1; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/HackIllinois.xcodeproj/xcshareddata/xcschemes/HackIllinois.xcscheme b/HackIllinois.xcodeproj/xcshareddata/xcschemes/HackIllinois.xcscheme new file mode 100644 index 00000000..c8dab23a --- /dev/null +++ b/HackIllinois.xcodeproj/xcshareddata/xcschemes/HackIllinois.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HackIllinois.xcworkspace/xcshareddata/swiftpm/Package.resolved b/HackIllinois.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..8cc703d6 --- /dev/null +++ b/HackIllinois.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,32 @@ +{ + "pins" : [ + { + "identity" : "api-manager", + "kind" : "remoteSourceControl", + "location" : "https://github.com/rauhul/api-manager.git", + "state" : { + "revision" : "c8b6b426a4172cf1cd4568601cf36b6437d65ae8", + "version" : "0.4.0" + } + }, + { + "identity" : "keychain", + "kind" : "remoteSourceControl", + "location" : "https://github.com/rauhul/keychain.git", + "state" : { + "revision" : "5c8ad6af202395cdafaa7968af473da8bfe5c35f", + "version" : "0.2.0" + } + }, + { + "identity" : "lottie-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/airbnb/lottie-ios.git", + "state" : { + "revision" : "eb115967234671b725264422d82c9d1d6b226e5a", + "version" : "3.1.5" + } + } + ], + "version" : 2 +} diff --git a/HackIllinois/AppDelegate.swift b/HackIllinois/AppDelegate.swift index 83bd9322..651df825 100644 --- a/HackIllinois/AppDelegate.swift +++ b/HackIllinois/AppDelegate.swift @@ -14,10 +14,15 @@ import UIKit import CoreLocation import UserNotifications import HIAPI +import GoogleMaps @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { + private var obfuscatedApiKey: [UInt8] = [92, 213, 228, 193, 244, 27, 239, 139, 188, 14, 85, 191, 47, 237, 55, 13, 85, 89, 111, 212, 35, 80, 45, 104, 189, 229, + 33, 32, 70, 63, 90, 163, 173, 232, 167, 90, 203, 22, 169, 29, 156, 158, 160, 167, 98, + 174, 239, 247, 118, 96, 207, 104, 180, 14, 90, 58, 61, 89, 186, 89, 7, 114, 25, 255, 141, + 115, 113, 117, 78, 10, 150, 197, 161, 158, 98, 129, 87, 228] // Handle remote notification registration. func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { @@ -26,15 +31,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Send the token to notifications server AnnouncementService.sendToken(deviceToken: token) - .onCompletion { result in - do { - _ = try result.get() - } catch { - print(error) + .onCompletion { result in + do { + _ = try result.get() + } catch { + print(error) + } } - } - .authorize(with: user) - .launch() + .authorize(with: user) + .launch() } func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { @@ -43,6 +48,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { _ = HIThemeEngine.shared _ = HICoreDataController.shared _ = HILocalNotificationController.shared + GMSServices.provideAPIKey(String(bytes: obfuscatedApiKey.deobfuscated, encoding: .utf8)!) HIApplicationStateController.shared.initalize() return true } diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/100.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/100.png deleted file mode 100644 index e51e39a8..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/100.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/1024.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/1024.png deleted file mode 100644 index e7b0aab3..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/1024.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/114.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/114.png deleted file mode 100644 index 0b29d822..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/114.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/120.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/120.png deleted file mode 100644 index 80bb0e4f..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/120.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/144.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/144.png deleted file mode 100644 index ceb26450..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/144.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/152.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index b5c021a2..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/152.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/167.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/167.png deleted file mode 100644 index cb100117..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/167.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/180.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index 0290b35f..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/180.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/20.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/20.png deleted file mode 100644 index f2c65921..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/20.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/29 1.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/29 1.png new file mode 100644 index 00000000..1cdae295 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/29 1.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/29.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/29.png index c4e7b727..1cdae295 100644 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/29.png and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/40.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/40.png deleted file mode 100644 index 1ef29bd0..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/40.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/50.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/50.png deleted file mode 100644 index 61d328e8..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/50.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/57.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/57.png deleted file mode 100644 index 94d5d68a..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/57.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/58.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/58.png deleted file mode 100644 index 60ea7c12..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/58.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/60.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index 93eddc14..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/60.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/72.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/72.png deleted file mode 100644 index 2631868c..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/72.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/76.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/76.png deleted file mode 100644 index 95f703ed..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/76.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/80.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/80.png deleted file mode 100644 index 062d7809..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/80.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/87.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index 10f66397..00000000 Binary files a/HackIllinois/Assets.xcassets/AppIcon.appiconset/87.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/App Store iOS (1).png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/App Store iOS (1).png new file mode 100644 index 00000000..4934e06b Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/App Store iOS (1).png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/Contents.json b/HackIllinois/Assets.xcassets/AppIcon.appiconset/Contents.json index 65b74d7e..789d7ffb 100644 --- a/HackIllinois/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/HackIllinois/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1,158 @@ -{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} \ No newline at end of file +{ + "images" : [ + { + "filename" : "iPad Spotlight 40pt @1x 1.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "iPhone Notifications 20pt @3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "iPhone Settings 29x29pt @2x (2).png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "iPhone Settings 29x29pt @ 3x (1).png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "iPhone Spotlight 40pt @ 2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "iPhone Spotlight 40pt @ 3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "iPhone App iOS 5,6 57pt @ 1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "57x57" + }, + { + "filename" : "iPhone App iOS 5,6 57pt @ 2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "57x57" + }, + { + "filename" : "iPhone App 60pt @ 2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "iPhone App 60pt @ 3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "iPad Notifications 20pt @1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "iPad Notifications 20pt @2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "29 1.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "iPad Settings 29pt @2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "iPad Spotlight 40pt @1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "iPad Spotlight 40pt @2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "iPad Spotlight iOS 5,6 50pt @1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "50x50" + }, + { + "filename" : "iPad Spotlight iOS 5,6 50pt @2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "50x50" + }, + { + "filename" : "iPad App iOS 5,6 72pt @ 1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "72x72" + }, + { + "filename" : "iPad App iOS 5,6 72pt @ 2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "72x72" + }, + { + "filename" : "iPad App 76pt @ 1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "iPad App 76pt @ 2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "iPad Pro (12.9in) App 83.5pt @ 2x (1).png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "App Store iOS (1).png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 1x.png new file mode 100644 index 00000000..4b5f7691 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 2x.png new file mode 100644 index 00000000..0009b08f Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App 76pt @ 2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 1x.png new file mode 100644 index 00000000..8dc775e2 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 2x.png new file mode 100644 index 00000000..2e395592 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad App iOS 5,6 72pt @ 2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @1x.png new file mode 100644 index 00000000..d8502e07 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @2x.png new file mode 100644 index 00000000..8fd96d4a Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Notifications 20pt @2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Pro (12.9in) App 83.5pt @ 2x (1).png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Pro (12.9in) App 83.5pt @ 2x (1).png new file mode 100644 index 00000000..d821b817 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Pro (12.9in) App 83.5pt @ 2x (1).png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Settings 29pt @2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Settings 29pt @2x.png new file mode 100644 index 00000000..7a507c79 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Settings 29pt @2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x 1.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x 1.png new file mode 100644 index 00000000..8fd96d4a Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x 1.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x.png new file mode 100644 index 00000000..8fd96d4a Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @2x.png new file mode 100644 index 00000000..e208d086 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40pt @2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @1x.png new file mode 100644 index 00000000..c66af767 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @2x.png new file mode 100644 index 00000000..bb8c9a74 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPad Spotlight iOS 5,6 50pt @2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 2x.png new file mode 100644 index 00000000..0257c2bc Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 3x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 3x.png new file mode 100644 index 00000000..fa29b218 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App 60pt @ 3x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 1x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 1x.png new file mode 100644 index 00000000..4c180610 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 1x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 2x.png new file mode 100644 index 00000000..83e3ee8f Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone App iOS 5,6 57pt @ 2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Notifications 20pt @3x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Notifications 20pt @3x.png new file mode 100644 index 00000000..05a13659 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Notifications 20pt @3x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @ 3x (1).png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @ 3x (1).png new file mode 100644 index 00000000..f316c48e Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @ 3x (1).png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @2x (2).png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @2x (2).png new file mode 100644 index 00000000..5d501448 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29x29pt @2x (2).png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 2x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 2x.png new file mode 100644 index 00000000..dd5e0f89 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 2x.png differ diff --git a/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 3x.png b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 3x.png new file mode 100644 index 00000000..217990a9 Binary files /dev/null and b/HackIllinois/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40pt @ 3x.png differ diff --git a/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@1x.png b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@1x.png new file mode 100644 index 00000000..5d4887ee Binary files /dev/null and b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@2x.png b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@2x.png new file mode 100644 index 00000000..125c2159 Binary files /dev/null and b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@3x.png b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@3x.png new file mode 100644 index 00000000..820dc952 Binary files /dev/null and b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/BackgroundPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/LogoutButton.imageset/Contents.json b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/Contents.json similarity index 58% rename from HackIllinois/Assets.xcassets/LogoutButton.imageset/Contents.json rename to HackIllinois/Assets.xcassets/BackgroundPad.imageset/Contents.json index 3ded546d..14ae2f79 100644 --- a/HackIllinois/Assets.xcassets/LogoutButton.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/BackgroundPad.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "LogoutButton@1x.png", + "filename" : "BackgroundPad@1x.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "LogoutButton@2x.png", + "filename" : "BackgroundPad@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "LogoutButton@3x.png", + "filename" : "BackgroundPad@3x.png", "idiom" : "universal", "scale" : "3x" } @@ -19,8 +19,5 @@ "info" : { "author" : "xcode", "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" } } diff --git a/HackIllinois/Assets.xcassets/Banner.imageset/Banner@1x.png b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@1x.png new file mode 100644 index 00000000..6853d55d Binary files /dev/null and b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@1x.png differ diff --git a/HackIllinois/Assets.xcassets/Banner.imageset/Banner@2x.png b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@2x.png new file mode 100644 index 00000000..89f58b66 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Banner.imageset/Banner@3x.png b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@3x.png new file mode 100644 index 00000000..3679fba9 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Banner.imageset/Banner@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Banner.imageset/Contents.json b/HackIllinois/Assets.xcassets/Banner.imageset/Contents.json new file mode 100644 index 00000000..da3a0c30 --- /dev/null +++ b/HackIllinois/Assets.xcassets/Banner.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Banner@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Banner@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Banner@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@1x.png b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@1x.png new file mode 100644 index 00000000..5e64b713 Binary files /dev/null and b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@2x.png b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@2x.png new file mode 100644 index 00000000..9c96b194 Binary files /dev/null and b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@3x.png b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@3x.png new file mode 100644 index 00000000..f82b242c Binary files /dev/null and b/HackIllinois/Assets.xcassets/BannerPad.imageset/BannerPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/BannerPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/BannerPad.imageset/Contents.json new file mode 100644 index 00000000..612cdf61 --- /dev/null +++ b/HackIllinois/Assets.xcassets/BannerPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "BannerPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "BannerPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "BannerPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/FavoritedPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/Contents.json new file mode 100644 index 00000000..722f1684 --- /dev/null +++ b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "FavoritedPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "FavoritedPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "FavoritedPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@1x.png b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@1x.png new file mode 100644 index 00000000..11fd1158 Binary files /dev/null and b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@2x.png b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@2x.png new file mode 100644 index 00000000..202e04b7 Binary files /dev/null and b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@3x.png b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@3x.png new file mode 100644 index 00000000..879cabae Binary files /dev/null and b/HackIllinois/Assets.xcassets/FavoritedPad.imageset/FavoritedPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/Contents.json b/HackIllinois/Assets.xcassets/HILogo.imageset/Contents.json index 2e2b34a8..7b03edf6 100644 --- a/HackIllinois/Assets.xcassets/HILogo.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/HILogo.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "HILogo@1x.png", + "filename" : "Group 201.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "HILogo@2x.png", + "filename" : "Group 201@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "HILogo@3x.png", + "filename" : "Group 201@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201.png b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201.png new file mode 100644 index 00000000..797a0771 Binary files /dev/null and b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201.png differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@2x.png b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@2x.png new file mode 100644 index 00000000..7bf7c78a Binary files /dev/null and b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@2x.png differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@3x.png b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@3x.png new file mode 100644 index 00000000..8ace0e8f Binary files /dev/null and b/HackIllinois/Assets.xcassets/HILogo.imageset/Group 201@3x.png differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@1x.png b/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@1x.png deleted file mode 100644 index d70d06be..00000000 Binary files a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@2x.png b/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@2x.png deleted file mode 100644 index a69ff39c..00000000 Binary files a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@3x.png b/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@3x.png deleted file mode 100644 index 89949d1b..00000000 Binary files a/HackIllinois/Assets.xcassets/HILogo.imageset/HILogo@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (1).png b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (1).png new file mode 100644 index 00000000..235fea61 Binary files /dev/null and b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (1).png differ diff --git a/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (2).png b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (2).png new file mode 100644 index 00000000..cd7217f6 Binary files /dev/null and b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background (2).png differ diff --git a/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background.png b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background.png new file mode 100644 index 00000000..4bedf4f0 Binary files /dev/null and b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Background.png differ diff --git a/HackIllinois/Assets.xcassets/HomeBackground.imageset/Contents.json b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Contents.json new file mode 100644 index 00000000..06503aac --- /dev/null +++ b/HackIllinois/Assets.xcassets/HomeBackground.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Background (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Background (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Contents.json b/HackIllinois/Assets.xcassets/Indicator.imageset/Contents.json index 738962a4..25c06774 100644 --- a/HackIllinois/Assets.xcassets/Indicator.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Indicator.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Indicator@1x.png", + "filename" : "Date underline.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Indicator@2x.png", + "filename" : "Date underline (1).png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Indicator@3x.png", + "filename" : "Date underline (2).png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (1).png b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (1).png new file mode 100644 index 00000000..1f7b40fe Binary files /dev/null and b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (1).png differ diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (2).png b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (2).png new file mode 100644 index 00000000..23420def Binary files /dev/null and b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline (2).png differ diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline.png b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline.png new file mode 100644 index 00000000..6e782acd Binary files /dev/null and b/HackIllinois/Assets.xcassets/Indicator.imageset/Date underline.png differ diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@1x.png b/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@1x.png deleted file mode 100644 index d38e5598..00000000 Binary files a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@2x.png b/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@2x.png deleted file mode 100644 index 34056181..00000000 Binary files a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@3x.png b/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@3x.png deleted file mode 100644 index 1a9d9af6..00000000 Binary files a/HackIllinois/Assets.xcassets/Indicator.imageset/Indicator@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/IndicatorPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/Contents.json new file mode 100644 index 00000000..50e0cf54 --- /dev/null +++ b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "IndicatorPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "IndicatorPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "IndicatorPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@1x.png b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@1x.png new file mode 100644 index 00000000..148ec601 Binary files /dev/null and b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@2x.png b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@2x.png new file mode 100644 index 00000000..52bae19a Binary files /dev/null and b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@3x.png b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@3x.png new file mode 100644 index 00000000..2feaf62d Binary files /dev/null and b/HackIllinois/Assets.xcassets/IndicatorPad.imageset/IndicatorPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/LocationSign.imageset/Contents.json b/HackIllinois/Assets.xcassets/LocationSign.imageset/Contents.json new file mode 100644 index 00000000..778cdcdd --- /dev/null +++ b/HackIllinois/Assets.xcassets/LocationSign.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "LocationSign@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "LocationSign@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "LocationSign@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@1x.png b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@1x.png new file mode 100644 index 00000000..71fc194c Binary files /dev/null and b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@1x.png differ diff --git a/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@2x.png b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@2x.png new file mode 100644 index 00000000..f124a77f Binary files /dev/null and b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@2x.png differ diff --git a/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@3x.png b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@3x.png new file mode 100644 index 00000000..e3671685 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LocationSign.imageset/LocationSign@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Background.png b/HackIllinois/Assets.xcassets/Login.imageset/Background.png new file mode 100644 index 00000000..4d70e705 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Login.imageset/Background.png differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Background@2x.png b/HackIllinois/Assets.xcassets/Login.imageset/Background@2x.png new file mode 100644 index 00000000..71f5cd3f Binary files /dev/null and b/HackIllinois/Assets.xcassets/Login.imageset/Background@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Background@3x.png b/HackIllinois/Assets.xcassets/Login.imageset/Background@3x.png new file mode 100644 index 00000000..c3032af1 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Login.imageset/Background@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Contents.json b/HackIllinois/Assets.xcassets/Login.imageset/Contents.json index 13a0b444..58812d2b 100644 --- a/HackIllinois/Assets.xcassets/Login.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Login.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Login@1x.png", + "filename" : "Background.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Login@2x.png", + "filename" : "Background@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Login@3x.png", + "filename" : "Background@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Login@1x.png b/HackIllinois/Assets.xcassets/Login.imageset/Login@1x.png deleted file mode 100644 index fd095451..00000000 Binary files a/HackIllinois/Assets.xcassets/Login.imageset/Login@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Login@2x.png b/HackIllinois/Assets.xcassets/Login.imageset/Login@2x.png deleted file mode 100644 index 7315d483..00000000 Binary files a/HackIllinois/Assets.xcassets/Login.imageset/Login@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Login.imageset/Login@3x.png b/HackIllinois/Assets.xcassets/Login.imageset/Login@3x.png deleted file mode 100644 index f0e74abe..00000000 Binary files a/HackIllinois/Assets.xcassets/Login.imageset/Login@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background.png b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background.png new file mode 100644 index 00000000..26c85aac Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@2x.png b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@2x.png new file mode 100644 index 00000000..42667729 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@2x.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@3x.png b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@3x.png new file mode 100644 index 00000000..02bc7019 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Background@3x.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Contents.json new file mode 100644 index 00000000..58812d2b --- /dev/null +++ b/HackIllinois/Assets.xcassets/LoginBackgroundPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background.png b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background.png new file mode 100644 index 00000000..585a105a Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@2x.png b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@2x.png new file mode 100644 index 00000000..bc6b1f0f Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@2x.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@3x.png b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@3x.png new file mode 100644 index 00000000..1dc3e5d0 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Background@3x.png differ diff --git a/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Contents.json b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Contents.json new file mode 100644 index 00000000..58812d2b --- /dev/null +++ b/HackIllinois/Assets.xcassets/LoginBackgroundPhone.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Contents.json new file mode 100644 index 00000000..206b97c3 --- /dev/null +++ b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 199.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 199@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 199@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199.png b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199.png new file mode 100644 index 00000000..19c80145 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199.png differ diff --git a/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@2x.png b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@2x.png new file mode 100644 index 00000000..36ee4f84 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@2x.png differ diff --git a/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@3x.png b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@3x.png new file mode 100644 index 00000000..31d8dfd6 Binary files /dev/null and b/HackIllinois/Assets.xcassets/LoginLogoPad.imageset/Group 199@3x.png differ diff --git a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@1x.png b/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@1x.png deleted file mode 100644 index 7dc38290..00000000 Binary files a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@2x.png b/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@2x.png deleted file mode 100644 index 53a61289..00000000 Binary files a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@3x.png b/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@3x.png deleted file mode 100644 index a98ca9ff..00000000 Binary files a/HackIllinois/Assets.xcassets/LogoutButton.imageset/LogoutButton@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Contents.json index 77c9f4f2..7b03edf6 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding0@1x.png", + "filename" : "Group 201.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding0@2x.png", + "filename" : "Group 201@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding0@3x.png", + "filename" : "Group 201@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201.png new file mode 100644 index 00000000..797a0771 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@2x.png new file mode 100644 index 00000000..7bf7c78a Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@3x.png new file mode 100644 index 00000000..8ace0e8f Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Group 201@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@1x.png deleted file mode 100644 index c1014c04..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@2x.png deleted file mode 100644 index b2ceaf24..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@3x.png deleted file mode 100644 index a39c89f1..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding0.imageset/Onboarding0@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Contents.json index 387ffd43..69d633bd 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding1@1x.png", + "filename" : "Group 2.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding1@2x.png", + "filename" : "Group 2@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding1@3x.png", + "filename" : "Group 2@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2.png new file mode 100644 index 00000000..05e9bb96 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@2x.png new file mode 100644 index 00000000..9b6292c5 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@3x.png new file mode 100644 index 00000000..aa7adfd1 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Group 2@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@1x.png deleted file mode 100644 index 10513b8f..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@2x.png deleted file mode 100644 index 272f1a54..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@3x.png deleted file mode 100644 index 3a3194f0..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding1.imageset/Onboarding1@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Contents.json index 6a0a3c7f..84fb02e0 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding2@1x.png", + "filename" : "Group 3.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding2@2x.png", + "filename" : "Group 3@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding2@3x.png", + "filename" : "Group 3@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3.png new file mode 100644 index 00000000..537ce3de Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@2x.png new file mode 100644 index 00000000..cb69e791 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@3x.png new file mode 100644 index 00000000..6374fd90 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Group 3@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@1x.png deleted file mode 100644 index 2428c5d0..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@2x.png deleted file mode 100644 index 69da4cc5..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@3x.png deleted file mode 100644 index 8496c743..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding2.imageset/Onboarding2@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Contents.json index 559f8488..5648ae32 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding3@1x.png", + "filename" : "Group 6.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding3@2x.png", + "filename" : "Group 6@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding3@3x.png", + "filename" : "Group 6@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6.png new file mode 100644 index 00000000..a99b3903 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@2x.png new file mode 100644 index 00000000..60c7070d Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@3x.png new file mode 100644 index 00000000..1cb40520 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Group 6@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@1x.png deleted file mode 100644 index 2f2a7c86..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@2x.png deleted file mode 100644 index 5301710d..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@3x.png deleted file mode 100644 index 835b70d2..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding3.imageset/Onboarding3@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Contents.json index 59b0a50a..614720fa 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding4@1x.png", + "filename" : "Group 5.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding4@2x.png", + "filename" : "Group 5@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding4@3x.png", + "filename" : "Group 5@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5.png new file mode 100644 index 00000000..ca1e5b6e Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@2x.png new file mode 100644 index 00000000..4a0eb6f2 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@3x.png new file mode 100644 index 00000000..d58b83fb Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Group 5@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@1x.png deleted file mode 100644 index 8d95d509..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@2x.png deleted file mode 100644 index 9e8b00f4..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@3x.png deleted file mode 100644 index c8f30c39..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding4.imageset/Onboarding4@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Contents.json index d398f86b..89de8262 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Onboarding5@1x.png", + "filename" : "Group 4.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Onboarding5@2x.png", + "filename" : "Group 4@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Onboarding5@3x.png", + "filename" : "Group 4@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4.png new file mode 100644 index 00000000..8bd44f35 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@2x.png new file mode 100644 index 00000000..d351a050 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@3x.png new file mode 100644 index 00000000..526ab05e Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Group 4@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@1x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@1x.png deleted file mode 100644 index 27aa972d..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@2x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@2x.png deleted file mode 100644 index 5b4f98f2..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@3x.png b/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@3x.png deleted file mode 100644 index 6b1f4f02..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/Onboarding5.imageset/Onboarding5@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Contents.json index 32223348..609a5917 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "iPadOnboarding0@1x.png", + "filename" : "Group 8.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "iPadOnboarding0@2x.png", + "filename" : "Group 8@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "iPadOnboarding0@3x.png", + "filename" : "Group 8@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8.png new file mode 100644 index 00000000..2d683938 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@2x.png new file mode 100644 index 00000000..a4598cc5 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@3x.png new file mode 100644 index 00000000..895ae186 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/Group 8@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@1x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@1x.png deleted file mode 100644 index 20729224..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@2x.png deleted file mode 100644 index 38847b63..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@3x.png deleted file mode 100644 index 2e019040..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding0.imageset/iPadOnboarding0@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Contents.json index 6e5356d7..2c2154a8 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "iPadOnboarding1@1x.png", + "filename" : "Group 9.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "iPadOnboarding1@2x.png", + "filename" : "Group 9@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "iPadOnboarding1@3x.png", + "filename" : "Group 9@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9.png new file mode 100644 index 00000000..536800b8 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@2x.png new file mode 100644 index 00000000..c047df8d Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@3x.png new file mode 100644 index 00000000..003050bd Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/Group 9@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@1x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@1x.png deleted file mode 100644 index 01b25ae8..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@2x.png deleted file mode 100644 index 06fd2ecd..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@3x.png deleted file mode 100644 index d89f60d2..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding1.imageset/iPadOnboarding1@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Contents.json index 6536703b..19c53ad1 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "iPadOnboarding2@1x.png", + "filename" : "Group 12.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "iPadOnboarding2@2x.png", + "filename" : "Group 12@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "iPadOnboarding2@3x.png", + "filename" : "Group 12@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12.png new file mode 100644 index 00000000..e13ef7d9 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@2x.png new file mode 100644 index 00000000..3bee8e80 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@3x.png new file mode 100644 index 00000000..f913b721 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/Group 12@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@1x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@1x.png deleted file mode 100644 index 6068b188..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@2x.png deleted file mode 100644 index a956ff19..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@3x.png deleted file mode 100644 index 251894ea..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding2.imageset/iPadOnboarding2@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Contents.json index d08beb07..b57870b0 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "iPadOnboarding3@1x.png", + "filename" : "Group 11.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "iPadOnboarding3@2x.png", + "filename" : "Group 11@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "iPadOnboarding3@3x.png", + "filename" : "Group 11@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11.png new file mode 100644 index 00000000..0a8ce86a Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@2x.png new file mode 100644 index 00000000..5cf1e259 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@3x.png new file mode 100644 index 00000000..6d1e1534 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/Group 11@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@1x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@1x.png deleted file mode 100644 index 6dfea22e..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@2x.png deleted file mode 100644 index 79ae3ddc..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@3x.png deleted file mode 100644 index 7cde52c9..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding3.imageset/iPadOnboarding3@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Contents.json b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Contents.json index a92d48ed..c3bf0a44 100644 --- a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "iPadOnboarding4@1x.png", + "filename" : "Group 10.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "iPadOnboarding4@2x.png", + "filename" : "Group 10@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "iPadOnboarding4@3x.png", + "filename" : "Group 10@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10.png new file mode 100644 index 00000000..5e6da603 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@2x.png new file mode 100644 index 00000000..2ae21a98 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@3x.png new file mode 100644 index 00000000..a29e5403 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/Group 10@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@1x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@1x.png deleted file mode 100644 index a932b4f0..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@2x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@2x.png deleted file mode 100644 index 77c6b2fa..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@3x.png b/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@3x.png deleted file mode 100644 index 782abc9b..00000000 Binary files a/HackIllinois/Assets.xcassets/Onboarding/iPadOnboarding4.imageset/iPadOnboarding4@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (1).png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (1).png new file mode 100644 index 00000000..235fea61 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (1).png differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (2).png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (2).png new file mode 100644 index 00000000..cd7217f6 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background (2).png differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background.png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background.png new file mode 100644 index 00000000..4bedf4f0 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Background.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Contents.json b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Contents.json index 9bf2cecb..06503aac 100644 --- a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { + "filename" : "Background.png", "idiom" : "universal", - "filename" : "ProfileBackground@1x.png", "scale" : "1x" }, { + "filename" : "Background (1).png", "idiom" : "universal", - "filename" : "ProfileBackground@2x.png", "scale" : "2x" }, { + "filename" : "Background (2).png", "idiom" : "universal", - "filename" : "ProfileBackground@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@1x.png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@1x.png deleted file mode 100644 index 63f2fe7a..00000000 Binary files a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@2x.png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@2x.png deleted file mode 100644 index 69986cf2..00000000 Binary files a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@3x.png b/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@3x.png deleted file mode 100644 index 911095bc..00000000 Binary files a/HackIllinois/Assets.xcassets/ProfileBackground.imageset/ProfileBackground@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/Contents.json b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/Contents.json index ed68e563..b61ff2a5 100644 --- a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "ProfileContainer@1x.png", + "filename" : "ProfileContainer.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer.png b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer.png new file mode 100644 index 00000000..9cd60b2f Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@1x.png b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@1x.png deleted file mode 100644 index a116e86a..00000000 Binary files a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@2x.png b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@2x.png index 81eb9297..a2b94667 100644 Binary files a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@2x.png and b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@2x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@3x.png b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@3x.png index 5c0ed26d..ddfe8375 100644 Binary files a/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@3x.png and b/HackIllinois/Assets.xcassets/ProfileContainer.imageset/ProfileContainer@3x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileIcons/Contents.json b/HackIllinois/Assets.xcassets/ProfileIcons/Contents.json index da4a164c..73c00596 100644 --- a/HackIllinois/Assets.xcassets/ProfileIcons/Contents.json +++ b/HackIllinois/Assets.xcassets/ProfileIcons/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/Contents.json b/HackIllinois/Assets.xcassets/ProfileView/Contents.json similarity index 52% rename from Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/Contents.json rename to HackIllinois/Assets.xcassets/ProfileView/Contents.json index 9f88c11c..73c00596 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/Contents.json +++ b/HackIllinois/Assets.xcassets/ProfileView/Contents.json @@ -2,8 +2,5 @@ "info" : { "author" : "xcode", "version" : 1 - }, - "properties" : { - "filename" : "sticker-9.png" } } diff --git a/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Contents.json b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Contents.json new file mode 100644 index 00000000..df240cf1 --- /dev/null +++ b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Vector.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Vector@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Vector@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector.png b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector.png new file mode 100644 index 00000000..3a09275d Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@2x.png b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@2x.png new file mode 100644 index 00000000..5a720461 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@2x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@3x.png b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@3x.png new file mode 100644 index 00000000..dffb967d Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/LogoutButton.imageset/Vector@3x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Contents.json b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Contents.json new file mode 100644 index 00000000..5cb3509c --- /dev/null +++ b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Ticket.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Ticket@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Ticket@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket.png b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket.png new file mode 100644 index 00000000..1ed04c24 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@2x.png b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@2x.png new file mode 100644 index 00000000..c9e6f11c Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@2x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@3x.png b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@3x.png new file mode 100644 index 00000000..348c69c2 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketBack.imageset/Ticket@3x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Contents.json b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Contents.json new file mode 100644 index 00000000..5cb3509c --- /dev/null +++ b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Ticket.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Ticket@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Ticket@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket.png b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket.png new file mode 100644 index 00000000..1582f4cc Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@2x.png b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@2x.png new file mode 100644 index 00000000..03bbf715 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@2x.png differ diff --git a/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@3x.png b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@3x.png new file mode 100644 index 00000000..ddcef723 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ProfileView/TicketFront.imageset/Ticket@3x.png differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@1x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@1x.png new file mode 100644 index 00000000..4bedf4f0 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@1x.png differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@2x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@2x.png new file mode 100644 index 00000000..235fea61 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@2x.png differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@3x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@3x.png new file mode 100644 index 00000000..cd7217f6 Binary files /dev/null and b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Background@3x.png differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Contents.json b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Contents.json index f8b2c925..c091139b 100644 --- a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "ScheduleBackground@1x.png", + "filename" : "Background@1x.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "ScheduleBackground@2x.png", + "filename" : "Background@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "ScheduleBackground@3x.png", + "filename" : "Background@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@1x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@1x.png deleted file mode 100644 index 63f2fe7a..00000000 Binary files a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@2x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@2x.png deleted file mode 100644 index 69986cf2..00000000 Binary files a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@3x.png b/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@3x.png deleted file mode 100644 index 911095bc..00000000 Binary files a/HackIllinois/Assets.xcassets/ScheduleBackground.imageset/ScheduleBackground@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/SponsorPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/SponsorPad.imageset/Contents.json new file mode 100644 index 00000000..cf806720 --- /dev/null +++ b/HackIllinois/Assets.xcassets/SponsorPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "SponsorPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "SponsorPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "SponsorPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@1x.png b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@1x.png new file mode 100644 index 00000000..2c0cb2c4 Binary files /dev/null and b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@2x.png b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@2x.png new file mode 100644 index 00000000..04851aec Binary files /dev/null and b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@3x.png b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@3x.png new file mode 100644 index 00000000..0595a48c Binary files /dev/null and b/HackIllinois/Assets.xcassets/SponsorPad.imageset/SponsorPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/Contents.json b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/Contents.json index 6945ed88..ac23c5af 100644 --- a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "QRCode@1x.png", + "filename" : "qr-code.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "QRCode@2x.png", + "filename" : "qr-code-1.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "QRCode@3x.png", + "filename" : "qr-code-2.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@1x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@1x.png deleted file mode 100644 index 9cda0022..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@2x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@2x.png deleted file mode 100644 index 146604b2..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@3x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@3x.png deleted file mode 100644 index c5a1e14c..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/QRCode@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-1.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-1.png new file mode 100644 index 00000000..1a883f1a Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-1.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-2.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-2.png new file mode 100644 index 00000000..4ba70613 Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code-2.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code.png new file mode 100644 index 00000000..354a305b Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRCode.imageset/qr-code.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/Contents.json b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/Contents.json index cd8d1659..ca999c92 100644 --- a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/Contents.json +++ b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "QRScannerPopupTabIcon@1x.png", + "filename" : "qr-code@1x.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "QRScannerPopupTabIcon@2x.png", + "filename" : "qr-code@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "QRScannerPopupTabIcon@3x.png", + "filename" : "qr-code@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@1x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@1x.png deleted file mode 100644 index f3963d70..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@1x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@2x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@2x.png deleted file mode 100644 index 303c8e7d..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@2x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@3x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@3x.png deleted file mode 100644 index 6ca79a23..00000000 Binary files a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/QRScannerPopupTabIcon@3x.png and /dev/null differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@1x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@1x.png new file mode 100644 index 00000000..4ba70613 Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@1x.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@2x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@2x.png new file mode 100644 index 00000000..1a883f1a Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@2x.png differ diff --git a/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@3x.png b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@3x.png new file mode 100644 index 00000000..354a305b Binary files /dev/null and b/HackIllinois/Assets.xcassets/TabBarIcons/QRScannerPopupTabIcon.imageset/qr-code@3x.png differ diff --git a/HackIllinois/Assets.xcassets/TimePad.imageset/Contents.json b/HackIllinois/Assets.xcassets/TimePad.imageset/Contents.json new file mode 100644 index 00000000..c966f590 --- /dev/null +++ b/HackIllinois/Assets.xcassets/TimePad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "TimePad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "TimePad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "TimePad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@1x.png b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@1x.png new file mode 100644 index 00000000..3a30d478 Binary files /dev/null and b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@2x.png b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@2x.png new file mode 100644 index 00000000..52181bcd Binary files /dev/null and b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@3x.png b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@3x.png new file mode 100644 index 00000000..4005154f Binary files /dev/null and b/HackIllinois/Assets.xcassets/TimePad.imageset/TimePad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/Contents.json new file mode 100644 index 00000000..e2154602 --- /dev/null +++ b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "UnFavoritedPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "UnFavoritedPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "UnFavoritedPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@1x.png b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@1x.png new file mode 100644 index 00000000..cfa143a5 Binary files /dev/null and b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@2x.png b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@2x.png new file mode 100644 index 00000000..2a14d524 Binary files /dev/null and b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@3x.png b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@3x.png new file mode 100644 index 00000000..844ea70b Binary files /dev/null and b/HackIllinois/Assets.xcassets/UnFavoritedPad.imageset/UnFavoritedPad@3x.png differ diff --git a/HackIllinois/Assets.xcassets/Vector.imageset/Contents.json b/HackIllinois/Assets.xcassets/Vector.imageset/Contents.json new file mode 100644 index 00000000..ce358c1d --- /dev/null +++ b/HackIllinois/Assets.xcassets/Vector.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Vector@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Vector@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Vector@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/Vector.imageset/Vector@1x.png b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@1x.png new file mode 100644 index 00000000..b4cde56d Binary files /dev/null and b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@1x.png differ diff --git a/HackIllinois/Assets.xcassets/Vector.imageset/Vector@2x.png b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@2x.png new file mode 100644 index 00000000..8b769859 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@2x.png differ diff --git a/HackIllinois/Assets.xcassets/Vector.imageset/Vector@3x.png b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@3x.png new file mode 100644 index 00000000..f3a61e34 Binary files /dev/null and b/HackIllinois/Assets.xcassets/Vector.imageset/Vector@3x.png differ diff --git a/HackIllinois/Assets.xcassets/VectorPad.imageset/Contents.json b/HackIllinois/Assets.xcassets/VectorPad.imageset/Contents.json new file mode 100644 index 00000000..df36f7eb --- /dev/null +++ b/HackIllinois/Assets.xcassets/VectorPad.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "VectorPad@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "VectorPad@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "VectorPad@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@1x.png b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@1x.png new file mode 100644 index 00000000..26273f7d Binary files /dev/null and b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@1x.png differ diff --git a/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@2x.png b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@2x.png new file mode 100644 index 00000000..99a17baf Binary files /dev/null and b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@2x.png differ diff --git a/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@3x.png b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@3x.png new file mode 100644 index 00000000..37e9282e Binary files /dev/null and b/HackIllinois/Assets.xcassets/VectorPad.imageset/VectorPad@3x.png differ diff --git a/HackIllinois/Controllers/HILocalNotificationController.swift b/HackIllinois/Controllers/HILocalNotificationController.swift index 5b399bd1..38bd28ad 100644 --- a/HackIllinois/Controllers/HILocalNotificationController.swift +++ b/HackIllinois/Controllers/HILocalNotificationController.swift @@ -35,6 +35,8 @@ class HILocalNotificationController: NSObject { if granted { authorized?() } } case .provisional: break + case .ephemeral: + break @unknown default: os_log( "Unknown UNAuthorizationStatus %s", diff --git a/HackIllinois/DataSources/HIAnnouncementDataSource.swift b/HackIllinois/DataSources/HIAnnouncementDataSource.swift index 47ebe7b5..cfe5b5da 100644 --- a/HackIllinois/DataSources/HIAnnouncementDataSource.swift +++ b/HackIllinois/DataSources/HIAnnouncementDataSource.swift @@ -28,7 +28,7 @@ final class HIAnnouncementDataSource { } // Waive swiftlint warning - // swiftlint:disable:next function_body_length + // swiftlint:disable:next static func refresh(completion: (() -> Void)? = nil) { guard !isRefreshing else { completion?() diff --git a/HackIllinois/DataSources/HITimeDataSource.swift b/HackIllinois/DataSources/HITimeDataSource.swift index 414bad95..e0c1a813 100644 --- a/HackIllinois/DataSources/HITimeDataSource.swift +++ b/HackIllinois/DataSources/HITimeDataSource.swift @@ -18,16 +18,16 @@ final class HITimeDataSource { static var shared = HITimeDataSource() public static let defaultTimes = EventTimes( - eventStart: Date(timeIntervalSince1970: 1645833600), // Friday, February 25, 2021 6:00:00 PM CST - eventEnd: Date(timeIntervalSince1970: 1645999200), // Sunday, February 27, 2021 4:00:00 PM CST - hackStart: Date(timeIntervalSince1970: 1645837200), // Friday, February 25, 2021 7:00:00 PM CST - hackEnd: Date(timeIntervalSince1970: 1645977600), // Sunday, February 27, 2021 10:00:00 AM CST - fridayStart: Date(timeIntervalSince1970: 1645768800), // Friday, February 25, 2021 12:00:00 AM CST - fridayEnd: Date(timeIntervalSince1970: 1645855199), // Friday, February 25, 2021 11:59:59 PM CST - saturdayStart: Date(timeIntervalSince1970: 1645855200), // Saturday, February 26, 2021 12:00:00 AM CST - saturdayEnd: Date(timeIntervalSince1970: 1645941599), // Saturday, February 26, 2021 11:59:59 PM CST - sundayStart: Date(timeIntervalSince1970: 1645941600), // Sunday, February 27, 2021 12:00:00 AM CST - sundayEnd: Date(timeIntervalSince1970: 1646027999) // Sunday, February 27, 2021 11:59:59 PM CST + eventStart: Date(timeIntervalSince1970: 1677272400), // Friday, February 25, 2023 6:00:00 PM CST + eventEnd: Date(timeIntervalSince1970: 1677445200), // Sunday, February 27, 2023 4:00:00 PM CST + hackStart: Date(timeIntervalSince1970: 1677286800), // Friday, February 25, 2023 7:00:00 PM CST + hackEnd: Date(timeIntervalSince1970: 1677423600), // Sunday, February 27, 2023 10:00:00 AM CST + fridayStart: Date(timeIntervalSince1970: 1677218400), // Friday, February 25, 2023 12:00:00 AM CST + fridayEnd: Date(timeIntervalSince1970: 1677304799), // Friday, February 25, 2023 11:59:59 PM CST + saturdayStart: Date(timeIntervalSince1970: 1677304800), // Saturday, February 26, 2023 12:00:00 AM CST + saturdayEnd: Date(timeIntervalSince1970: 1677391199), // Saturday, February 26, 2023 11:59:59 PM CST + sundayStart: Date(timeIntervalSince1970: 1677391200), // Sunday, February 27, 2023 12:00:00 AM CST + sundayEnd: Date(timeIntervalSince1970: 1677477599) // Sunday, February 27, 2023 11:59:59 PM CST ) var eventTimes = HITimeDataSource.defaultTimes diff --git a/HackIllinois/Extensions/Array.swift b/HackIllinois/Extensions/Array.swift new file mode 100644 index 00000000..677e90b0 --- /dev/null +++ b/HackIllinois/Extensions/Array.swift @@ -0,0 +1,21 @@ +// +// Array.swift +// HackIllinois +// +// Created by HackIllinois Team on 2/6/23. +// Copyright © 2023 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import Foundation + +extension Array where Element == UInt8 { + var deobfuscated: [UInt8] { + let pre = prefix(count / 2) + let post = suffix(count / 2) + return zip(pre, post).map(^) + } +} diff --git a/HackIllinois/FlowControllers/HIApplicationStateController.swift b/HackIllinois/FlowControllers/HIApplicationStateController.swift index cf0002fa..27564cdc 100644 --- a/HackIllinois/FlowControllers/HIApplicationStateController.swift +++ b/HackIllinois/FlowControllers/HIApplicationStateController.swift @@ -12,18 +12,16 @@ import Foundation import UIKit +import SwiftUI import Keychain class HIApplicationStateController { - static var shared = HIApplicationStateController() - // MARK: - Properties var window = HIWindow(frame: UIScreen.main.bounds) var user: HIUser? var profile: HIProfile? var isGuest = false - // MARK: ViewControllers var loginFlowController = HILoginFlowController() var appFlowController = HITabBarController() @@ -35,20 +33,16 @@ class HIApplicationStateController { NotificationCenter.default.addObserver(self, selector: #selector(loginProfile), name: .loginProfile, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(getStarted), name: .getStarted, object: nil) } - deinit { NotificationCenter.default.removeObserver(self) } - func initalize() { window.makeKeyAndVisible() - resetPersistentDataIfNeeded() + reset2023IfNeeded() recoverUserIfPossible() recoverProfileIfPossible() - onboardingViewController.shouldDisplayAnimationOnNextAppearance = user == nil - UserDefaults.standard.set(true, forKey: HIConstants.APPLICATION_INSTALLED_KEY) let shouldShowOnboarding = UserDefaults.standard.object(forKey: HIConstants.SHOULD_SHOW_ONBOARDING_KEY) as? Bool ?? true updateWindowViewController(animated: false, shouldShowOnboarding: shouldShowOnboarding) @@ -57,13 +51,21 @@ class HIApplicationStateController { // MARK: - API extension HIApplicationStateController { + func reset2023IfNeeded() { + let didReset = UserDefaults.standard.object(forKey: "didReset2023") as? Bool ?? false + if !didReset { + _ = Keychain.default.purge() + HICoreDataController.shared.purge() + UserDefaults.standard.set(true, forKey: "didReset2023") + logoutUser() + } + } func resetPersistentDataIfNeeded() { guard !UserDefaults.standard.bool(forKey: HIConstants.APPLICATION_INSTALLED_KEY) else { return } _ = Keychain.default.purge() HICoreDataController.shared.purge() UserDefaults.standard.set(true, forKey: HIConstants.APPLICATION_INSTALLED_KEY) } - func recoverUserIfPossible() { guard Keychain.default.hasValue(forKey: HIConstants.STORED_ACCOUNT_KEY) else { return } guard let user = Keychain.default.retrieve(HIUser.self, forKey: HIConstants.STORED_ACCOUNT_KEY) else { @@ -76,7 +78,6 @@ extension HIApplicationStateController { } self.user = user } - func recoverProfileIfPossible() { guard Keychain.default.hasValue(forKey: HIConstants.STORED_PROFILE_KEY) else { return } guard let profile = Keychain.default.retrieve(HIProfile.self, forKey: HIConstants.STORED_PROFILE_KEY) else { @@ -85,7 +86,6 @@ extension HIApplicationStateController { } self.profile = profile } - func viewControllersFor(user: HIUser) -> [UIViewController] { var viewControllers = [UIViewController]() viewControllers.append(HIHomeViewController()) @@ -95,7 +95,6 @@ extension HIApplicationStateController { viewControllers.append(HILeaderboardViewController()) return viewControllers } - @objc func loginUser(_ notification: Notification) { guard let user = notification.userInfo?["user"] as? HIUser else { return } guard Keychain.default.store(user, forKey: HIConstants.STORED_ACCOUNT_KEY) else { return } @@ -108,7 +107,6 @@ extension HIApplicationStateController { UIApplication.shared.registerForRemoteNotifications() updateWindowViewController(animated: true, shouldShowOnboarding: false) } - @objc func logoutUser() { guard user != nil else { return } guard profile != nil else { return } @@ -118,7 +116,6 @@ extension HIApplicationStateController { profile = nil updateWindowViewController(animated: true, shouldShowOnboarding: false) } - @objc func loginProfile(_ notification: Notification) { guard let profile = notification.userInfo?["profile"] as? HIProfile else { return } guard Keychain.default.store(profile, forKey: HIConstants.STORED_PROFILE_KEY) else { return } @@ -129,37 +126,37 @@ extension HIApplicationStateController { // No longer need to show onboarding UserDefaults.standard.set(false, forKey: HIConstants.SHOULD_SHOW_ONBOARDING_KEY) } - func updateWindowViewController(animated: Bool, shouldShowOnboarding: Bool) { let viewController: UIViewController if shouldShowOnboarding { - viewController = onboardingViewController + // if #available(iOS 14.0, *) { + viewController = UIHostingController(rootView: HIOnboardingView()) + // } else { + // viewController = onboardingViewController + // } + // viewController = onboardingViewController } else if let user = user { prepareAppControllerForDisplay(with: user) viewController = appFlowController } else { viewController = loginFlowController } - let duration = animated ? 0.3 : 0 viewController.view.layoutIfNeeded() UIView.transition(with: window, duration: duration, options: .transitionCrossDissolve, animations: { self.window.rootViewController = viewController }, completion: nil) } - func prepareAppControllerForDisplay(with user: HIUser) { let appViewControllers = viewControllersFor(user: user) appFlowController.setupMenuFor(appViewControllers) appFlowController.selectedIndex = 0 - // Disable the middle tabbar button (QR Code) if let items = appFlowController.tabBar.items { if items.count >= 3 { items[2].isEnabled = false } } - HIEventDataSource.refresh() HIAnnouncementDataSource.refresh() HIProjectDataSource.refresh() diff --git a/HackIllinois/FlowControllers/HILoginFlowController.swift b/HackIllinois/FlowControllers/HILoginFlowController.swift index a4e8484e..38a773c8 100644 --- a/HackIllinois/FlowControllers/HILoginFlowController.swift +++ b/HackIllinois/FlowControllers/HILoginFlowController.swift @@ -11,12 +11,14 @@ // import UIKit +import AuthenticationServices import APIManager import Lottie import SafariServices import Keychain import HIAPI +#warning("ASWebAuthticationSession not tested") class HILoginFlowController: UIViewController { // MARK: - Properties @@ -35,7 +37,7 @@ class HILoginFlowController: UIViewController { } // prevents the login session from going out of scope during presentation - var loginSession: SFAuthenticationSession? + var loginSession: ASWebAuthenticationSession? // MARK: ViewControllers lazy var loginSelectionViewController = HILoginSelectionViewController(delegate: self) @@ -65,6 +67,14 @@ class HILoginFlowController: UIViewController { } } +// add ASWebAuthenticationPresentationContextProviding to the class +extension HILoginFlowController: ASWebAuthenticationPresentationContextProviding { + func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { + let window = UIApplication.shared.windows.first { $0.isKeyWindow } + return window ?? ASPresentationAnchor() + } +} + // MARK: - UIViewController extension HILoginFlowController { override func viewDidLoad() { @@ -96,7 +106,7 @@ private extension HILoginFlowController { } let loginURL = HIAPI.AuthService.oauthURL(provider: user.provider) - loginSession = SFAuthenticationSession(url: loginURL, callbackURLScheme: nil) { [weak self] (url, error) in + loginSession = ASWebAuthenticationSession(url: loginURL, callbackURLScheme: nil) { [weak self] (url, error) in if let url = url, let components = URLComponents(url: url, resolvingAgainstBaseURL: true), let queryItems = components.queryItems, @@ -108,7 +118,7 @@ private extension HILoginFlowController { profile.oauthCode = code self?.exchangeOAuthCodeForAPIToken(buildingUser: user, profile: profile, sender: sender) } else if let error = error { - if (error as? SFAuthenticationError)?.code == SFAuthenticationError.canceledLogin { + if (error as? ASWebAuthenticationSessionError)?.code == ASWebAuthenticationSessionError.canceledLogin { // do nothing } else { self?.presentAuthenticationFailure(withError: error, sender: sender) @@ -118,6 +128,7 @@ private extension HILoginFlowController { self?.presentAuthenticationFailure(withError: error, sender: sender) } } + loginSession?.presentationContextProvider = self loginSession?.start() } @@ -231,7 +242,6 @@ private extension HILoginFlowController { profile.firstName = apiProfile.firstName profile.lastName = apiProfile.lastName profile.points = apiProfile.points - profile.timezone = apiProfile.timezone profile.discord = apiProfile.discord profile.avatarUrl = apiProfile.avatarUrl DispatchQueue.main.async { diff --git a/HackIllinois/Fonts/Montserrat-VariableFont_wght.ttf b/HackIllinois/Fonts/Montserrat-VariableFont_wght.ttf new file mode 100644 index 00000000..656db666 Binary files /dev/null and b/HackIllinois/Fonts/Montserrat-VariableFont_wght.ttf differ diff --git a/HackIllinois/GoogleMaps.framework/GoogleMaps b/HackIllinois/GoogleMaps.framework/GoogleMaps new file mode 100755 index 00000000..23d5d2c0 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/GoogleMaps differ diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSAccessibilityLabels.h b/HackIllinois/GoogleMaps.framework/Headers/GMSAccessibilityLabels.h new file mode 100755 index 00000000..f3d8bb10 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSAccessibilityLabels.h @@ -0,0 +1,22 @@ +#import + +/** + * Accessibility identifier for the compass button. + * + * @related GMSMapView + */ +extern NSString *const kGMSAccessibilityCompass; + +/** + * Accessibility identifier for the "my location" button. + * + * @related GMSMapView + */ +extern NSString *const kGMSAccessibilityMyLocation; + +/** + * Accessibility identifier for the "out of quota" error label. + * + * @related GMSMapView + */ +extern NSString *const kGMSAccessiblityOutOfQuota; diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSAddress.h b/HackIllinois/GoogleMaps.framework/Headers/GMSAddress.h new file mode 100755 index 00000000..93debd56 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSAddress.h @@ -0,0 +1,76 @@ +// +// GMSAddress.h +// Google Maps SDK for iOS +// +// Copyright 2014 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + * A result from a reverse geocode request, containing a human-readable address. This class is + * immutable and should not be instantiated directly unless under testing circumstances. Obtain an + * instance via GMSGeocoder. + * + * Some of the fields may be nil, indicating they are not present. + */ +@interface GMSAddress : NSObject + +/** Location, or kLocationCoordinate2DInvalid if unknown. */ +@property(nonatomic, readonly) CLLocationCoordinate2D coordinate; + +/** Street number and name. */ +@property(nonatomic, copy, readonly, nullable) NSString *thoroughfare; + +/** Locality or city. */ +@property(nonatomic, copy, readonly, nullable) NSString *locality; + +/** Subdivision of locality, district or park. */ +@property(nonatomic, copy, readonly, nullable) NSString *subLocality; + +/** Region/State/Administrative area. */ +@property(nonatomic, copy, readonly, nullable) NSString *administrativeArea; + +/** Postal/Zip code. */ +@property(nonatomic, copy, readonly, nullable) NSString *postalCode; + +/** The country name. */ +@property(nonatomic, copy, readonly, nullable) NSString *country; + +/** An array of NSString containing formatted lines of the address. May be nil. */ +@property(nonatomic, copy, readonly, nullable) NSArray *lines; + +/** + * Returns the first line of the address. + */ +- (nullable NSString *)addressLine1 __GMS_AVAILABLE_BUT_DEPRECATED_MSG( + "This method is obsolete and will be removed in a future release. Use the lines property " + "instead."); + +/** + * Returns the second line of the address. + */ +- (nullable NSString *)addressLine2 __GMS_AVAILABLE_BUT_DEPRECATED_MSG( + "This method is obsolete and will be removed in a future release. Use the lines property " + "instead."); + +@end + +/** + * The former type of geocode results (pre-1.7). This remains here for migration and will be + * removed in future releases. + */ +@compatibility_alias GMSReverseGeocodeResult GMSAddress; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSCALayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSCALayer.h new file mode 100755 index 00000000..2ab6da2e --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSCALayer.h @@ -0,0 +1,20 @@ +// +// GMSCALayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * GMSCALayer is a superclass used by layers in the Google Maps SDK for iOS, such as GMSMapLayer and + * GMSPanoramaLayer. + * + * This is an implementation detail and it should not be instantiated directly. + */ +@interface GMSCALayer : CALayer +@end diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSCameraPosition.h b/HackIllinois/GoogleMaps.framework/Headers/GMSCameraPosition.h new file mode 100755 index 00000000..82067904 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSCameraPosition.h @@ -0,0 +1,166 @@ +// +// GMSCameraPosition.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * An immutable class that aggregates all camera position parameters. + */ +@interface GMSCameraPosition : NSObject + +/** + * Location on the Earth towards which the camera points. + */ +@property(nonatomic, readonly) CLLocationCoordinate2D target; + +/** + * Zoom level. Zoom uses an exponentional scale, where zoom 0 represents the entire world as a + * 256 x 256 square. Each successive zoom level increases magnification by a factor of 2. So at + * zoom level 1, the world is 512x512, and at zoom level 2, the entire world is 1024x1024. + */ +@property(nonatomic, readonly) float zoom; + +/** + * Bearing of the camera, in degrees clockwise from true north. + */ +@property(nonatomic, readonly) CLLocationDirection bearing; + +/** + * The angle, in degrees, of the camera from the nadir (directly facing the Earth). 0 is + * straight down, 90 is parallel to the ground. Note that the maximum angle allowed is dependent + * on the zoom. You can think of it as a series of line segments as a function of zoom, rather + * than a step function. For zoom 16 and above, the maximum angle is 65 degrees. For zoom 10 and + * below, the maximum angle is 30 degrees. + */ +@property(nonatomic, readonly) double viewingAngle; + +/** + * Designated initializer. Configures this GMSCameraPosition with all available camera properties. + * Building a GMSCameraPosition via this initializer (or by the following convenience constructors) + * will implicitly clamp camera values. + * + * @param target Location on the earth towards which the camera points. + * @param zoom The zoom level near the center of the screen. + * @param bearing Bearing of the camera in degrees clockwise from true north. + * @param viewingAngle The angle, in degrees, of the camera angle from the nadir (directly facing + * the Earth) + */ +- (instancetype)initWithTarget:(CLLocationCoordinate2D)target + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Convenience initializer for GMSCameraPosition for a particular target and zoom level. This will + * set the bearing and viewingAngle properties of this camera to zero defaults (i.e., directly + * facing the Earth's surface, with the top of the screen pointing north). + * + * @param target Location on the earth towards which the camera points. + * @param zoom The zoom level near the center of the screen. + */ +- (instancetype)initWithTarget:(CLLocationCoordinate2D)target zoom:(float)zoom; + +/** + * Convenience initializer for GMSCameraPosition for a particular latitidue, longitude and zoom + * level. This will set the bearing and viewingAngle properties of this camera to zero defaults + * (i.e., directly facing the Earth's surface, with the top of the screen pointing north). + * + * @param latitude The latitude component of the location towards which the camera points. + * @param longitude The latitude component of the location towards which the camera points. + * @param zoom The zoom level near the center of the screen. + */ +- (instancetype)initWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom; + +/** + * Convenience initializer for GMSCameraPosition, with latitude/longitude and all other camera + * properties as per -initWithTarget:zoom:bearing:viewingAngle:. + * + * @param latitude The latitude component of the location towards which the camera points. + * @param longitude The latitude component of the location towards which the camera points. + * @param zoom The zoom level near the center of the screen. + * @param bearing Bearing of the camera in degrees clockwise from true north. + * @param viewingAngle The angle, in degrees, of the camera angle from the nadir (directly facing + * the Earth) + */ +- (instancetype)initWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Convenience constructor for GMSCameraPosition for a particular target and zoom level. This will + * set the bearing and viewingAngle properties of this camera to zero defaults (i.e., directly + * facing the Earth's surface, with the top of the screen pointing north). + */ ++ (instancetype)cameraWithTarget:(CLLocationCoordinate2D)target zoom:(float)zoom; + +/** + * Convenience constructor for GMSCameraPosition, as per cameraWithTarget:zoom:. + */ ++ (instancetype)cameraWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom; + +/** + * Convenience constructor for GMSCameraPosition, with all camera properties as per + * initWithTarget:zoom:bearing:viewingAngle:. + */ ++ (instancetype)cameraWithTarget:(CLLocationCoordinate2D)target + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Convenience constructor for GMSCameraPosition, with latitude/longitude and all other camera + * properties as per initWithTarget:zoom:bearing:viewingAngle:. + */ ++ (instancetype)cameraWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Get the zoom level at which |meters| distance, at given |coord| on Earth, correspond to the + * specified number of screen |points|. + * + * For extremely large or small distances the returned zoom level may be smaller or larger than the + * minimum or maximum zoom level allowed on the camera. + * + * This helper method is useful for building camera positions that contain specific physical areas + * on Earth. + */ ++ (float)zoomAtCoordinate:(CLLocationCoordinate2D)coordinate + forMeters:(CLLocationDistance)meters + perPoints:(CGFloat)points; + +@end + +/** Mutable version of GMSCameraPosition. */ +@interface GMSMutableCameraPosition : GMSCameraPosition +@property(nonatomic) CLLocationCoordinate2D target; +@property(nonatomic) float zoom; +@property(nonatomic) CLLocationDirection bearing; +@property(nonatomic) double viewingAngle; +@end + +/** The maximum zoom (closest to the Earth's surface) permitted by the map camera. */ +FOUNDATION_EXTERN const float kGMSMaxZoomLevel; + +/** The minimum zoom (farthest from the Earth's surface) permitted by the map camera. */ +FOUNDATION_EXTERN const float kGMSMinZoomLevel; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSCameraUpdate.h b/HackIllinois/GoogleMaps.framework/Headers/GMSCameraUpdate.h new file mode 100755 index 00000000..3996d015 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSCameraUpdate.h @@ -0,0 +1,109 @@ +// +// GMSCameraUpdate.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +@class GMSCameraPosition; +@class GMSCoordinateBounds; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSCameraUpdate represents an update that may be applied to a GMSMapView. + * + * It encapsulates some logic for modifying the current camera. + * + * It should only be constructed using the factory helper methods below. + */ +@interface GMSCameraUpdate : NSObject + +/** + * Returns a GMSCameraUpdate that zooms in on the map. + * + * The zoom increment is 1.0. + */ ++ (GMSCameraUpdate *)zoomIn; + +/** + * Returns a GMSCameraUpdate that zooms out on the map. + * + * The zoom increment is -1.0. + */ ++ (GMSCameraUpdate *)zoomOut; + +/** + * Returns a GMSCameraUpdate that changes the zoom by the specified amount. + */ ++ (GMSCameraUpdate *)zoomBy:(float)delta; + +/** + * Returns a GMSCameraUpdate that sets the zoom to the specified amount. + */ ++ (GMSCameraUpdate *)zoomTo:(float)zoom; + +/** + * Returns a GMSCameraUpdate that sets the camera target to the specified coordinate. + */ ++ (GMSCameraUpdate *)setTarget:(CLLocationCoordinate2D)target; + +/** + * Returns a GMSCameraUpdate that sets the camera target and zoom to the specified values. + */ ++ (GMSCameraUpdate *)setTarget:(CLLocationCoordinate2D)target zoom:(float)zoom; + +/** + * Returns a GMSCameraUpdate that sets the camera to the specified GMSCameraPosition. + */ ++ (GMSCameraUpdate *)setCamera:(GMSCameraPosition *)camera; + +/** + * Returns a GMSCameraUpdate that transforms the camera such that the specified bounds are centered + * on screen at the greatest possible zoom level. The bounds will have a default padding of 64 + * points. + * + * The returned camera update will set the camera's bearing and tilt to their default zero values + * (i.e., facing north and looking directly at the Earth). + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds; + +/** + * This is similar to fitBounds: but allows specifying the padding (in points) in order to inset the + * bounding box from the view's edges. + * + * If the requested |padding| is larger than the view size in either the vertical or horizontal + * direction the map will be maximally zoomed out. + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds withPadding:(CGFloat)padding; + +/** + * This is similar to fitBounds: but allows specifying edge insets in order to inset the bounding + * box from the view's edges. + * + * If the requested |edgeInsets| are larger than the view size in either the vertical or horizontal + * direction the map will be maximally zoomed out. + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds + withEdgeInsets:(UIEdgeInsets)edgeInsets; + +/** + * Returns a GMSCameraUpdate that shifts the center of the view by the specified number of points in + * the x and y directions. X grows to the right, Y grows down. + */ ++ (GMSCameraUpdate *)scrollByX:(CGFloat)dX Y:(CGFloat)dY; + +/** + * Returns a GMSCameraUpdate that zooms with a focus point; the focus point stays fixed on screen. + */ ++ (GMSCameraUpdate *)zoomBy:(float)zoom atPoint:(CGPoint)point; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSCircle.h b/HackIllinois/GoogleMaps.framework/Headers/GMSCircle.h new file mode 100755 index 00000000..eb68873e --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSCircle.h @@ -0,0 +1,55 @@ +// +// GMSCircle.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * A circle on the Earth's surface (spherical cap). + */ +@interface GMSCircle : GMSOverlay + +/** Position on Earth of circle center. Ignores invalid positions. */ +@property(nonatomic) CLLocationCoordinate2D position; + +/** Radius of the circle in meters; must be positive. */ +@property(nonatomic) CLLocationDistance radius; + +/** + * The width of the circle's outline in screen points. Defaults to 1. As per GMSPolygon, the width + * does not scale when the map is zoomed. + * + * Setting strokeWidth to 0 results in no stroke. + */ +@property(nonatomic) CGFloat strokeWidth; + +/** The color of this circle's outline. The default value is black. */ +@property(nonatomic, nullable) UIColor *strokeColor; + +/** + * The interior of the circle is painted with fillColor. The default value is nil, resulting in no + * fill. + */ +@property(nonatomic, nullable) UIColor *fillColor; + +/** + * Convenience constructor for GMSCircle for a particular position and radius. Other properties will + * have default values. An invalid position will result in an overlay object that cannot be drawn on + * the map. + */ ++ (instancetype)circleWithPosition:(CLLocationCoordinate2D)position + radius:(CLLocationDistance)radius; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSCoordinateBounds+GoogleMaps.h b/HackIllinois/GoogleMaps.framework/Headers/GMSCoordinateBounds+GoogleMaps.h new file mode 100755 index 00000000..18f543f5 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSCoordinateBounds+GoogleMaps.h @@ -0,0 +1,42 @@ +// +// GMSCoordinateBounds+GoogleMaps.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import "GMSProjection.h" + +@class GMSPath; + +NS_ASSUME_NONNULL_BEGIN + +@interface GMSCoordinateBounds (GoogleMaps) + +/** + * Inits with bounds that encompass |region|. + */ +- (id)initWithRegion:(GMSVisibleRegion)region; + +/** + * Inits with bounds that encompass |path|. + */ +- (id)initWithPath:(GMSPath *)path; + +/** + * Returns a GMSCoordinateBounds representing the current bounds extended to include |path|. + */ +- (GMSCoordinateBounds *)includingPath:(GMSPath *)path; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSGeocoder.h b/HackIllinois/GoogleMaps.framework/Headers/GMSGeocoder.h new file mode 100755 index 00000000..a781c06a --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSGeocoder.h @@ -0,0 +1,73 @@ +// +// GMSGeocoder.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSAddress.h" + +@class GMSReverseGeocodeResponse; + +NS_ASSUME_NONNULL_BEGIN + +/** + * \defgroup GeocoderErrorCode GMSGeocoderErrorCode + * @{ + */ + +/** + * GMSGeocoder error codes, embedded in NSError. + */ +typedef NS_ENUM(NSInteger, GMSGeocoderErrorCode) { + kGMSGeocoderErrorInvalidCoordinate = 1, + kGMSGeocoderErrorInternal, +}; + +/**@}*/ + +/** + * Handler that reports a reverse geocoding response, or error. + * + * @related GMSGeocoder + */ +typedef void (^GMSReverseGeocodeCallback)(GMSReverseGeocodeResponse *_Nullable, NSError *_Nullable); + +/** + * Exposes a service for reverse geocoding. This maps Earth coordinates (latitude and longitude) to + * a collection of addresses near that coordinate. + */ +@interface GMSGeocoder : NSObject + +/* Convenience constructor for GMSGeocoder. */ ++ (GMSGeocoder *)geocoder; + +/** + * Reverse geocodes a coordinate on the Earth's surface. + * + * @param coordinate The coordinate to reverse geocode. + * @param handler The callback to invoke with the reverse geocode results. + * The callback will be invoked asynchronously from the main thread. + */ +- (void)reverseGeocodeCoordinate:(CLLocationCoordinate2D)coordinate + completionHandler:(GMSReverseGeocodeCallback)handler; + +@end + +/** A collection of results from a reverse geocode request. */ +@interface GMSReverseGeocodeResponse : NSObject + +/** Returns the first result, or nil if no results were available. */ +- (nullable GMSAddress *)firstResult; + +/** Returns an array of all the results (contains GMSAddress), including the first result. */ +- (nullable NSArray *)results; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSGeometryUtils.h b/HackIllinois/GoogleMaps.framework/Headers/GMSGeometryUtils.h new file mode 100755 index 00000000..b343d447 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSGeometryUtils.h @@ -0,0 +1,235 @@ +// +// GMSGeometryUtils.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +/** + * \defgroup GeometryUtils GMSGeometryUtils + * @{ + */ + +#import + +#import "GMSPath.h" + +@class GMSPath; +@class GMSStrokeStyle; +@class GMSStyleSpan; + +NS_ASSUME_NONNULL_BEGIN + +/** Average Earth radius in meters. */ +static const CLLocationDistance kGMSEarthRadius = 6371009.0; + +/** + * A point on the map. May represent a projected coordinate. + * + * x is in [-1, 1]. The axis direction is normal: y grows towards North, x grows towards East. (0, + * 0) is the center of the map. + * + * See GMSProject() and GMSUnproject(). + */ +typedef struct GMSMapPoint { + double x; + double y; +} GMSMapPoint; + +/** Projects |coordinate| to the map. |coordinate| must be valid. */ +FOUNDATION_EXPORT +GMSMapPoint GMSProject(CLLocationCoordinate2D coordinate); + +/** Unprojects |point| from the map. point.x must be in [-1, 1]. */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSUnproject(GMSMapPoint point); + +/** + * Returns a linearly interpolated point on the segment [a, b], at the fraction |t| from |a|. |t|==0 + * corresponds to |a|, |t|==1 corresponds to |b|. + * + * The interpolation takes place along the short path between the points potentially crossing the + * date line. E.g. interpolating from San Francisco to Tokyo will pass north of Hawaii and cross the + * date line. + */ +FOUNDATION_EXPORT +GMSMapPoint GMSMapPointInterpolate(GMSMapPoint a, GMSMapPoint b, double t); + +/** + * Returns the length of the segment [a, b] in projected space. + * + * The length is computed along the short path between the points potentially crossing the date + * line. E.g. the distance between the points corresponding to San Francisco and Tokyo measures the + * segment that passes north of Hawaii crossing the date line. + */ +FOUNDATION_EXPORT +double GMSMapPointDistance(GMSMapPoint a, GMSMapPoint b); + +/** + * Returns whether |point| lies inside of path. The path is always considered closed, regardless of + * whether the last point equals the first or not. + * + * Inside is defined as not containing the South Pole -- the South Pole is always outside. + * + * |path| describes great circle segments if |geodesic| is YES, and rhumb (loxodromic) segments + * otherwise. + * + * If |point| is exactly equal to one of the vertices, the result is YES. A point that is not equal + * to a vertex is on one side or the other of any path segment -- it can never be "exactly on the + * border". + * + * See GMSGeometryIsLocationOnPath() for a border test with tolerance. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryContainsLocation(CLLocationCoordinate2D point, GMSPath *path, BOOL geodesic); + +/** + * Returns whether |point| lies on or near |path|, within the specified |tolerance| in meters. + * |path| is composed of great circle segments if |geodesic| is YES, and of rhumb (loxodromic) + * segments if |geodesic| is NO. + * + * See also GMSGeometryIsLocationOnPath(point, path, geodesic). + * + * The tolerance, in meters, is relative to the spherical radius of the Earth. If you need to work + * on a sphere of different radius, you may compute the equivalent tolerance from the desired + * tolerance on the sphere of radius R: tolerance = toleranceR * (RadiusEarth / R), with + * RadiusEarth==6371009. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryIsLocationOnPathTolerance(CLLocationCoordinate2D point, GMSPath *path, + BOOL geodesic, CLLocationDistance tolerance); + +/** + * Same as GMSGeometryIsLocationOnPath(point, path, geodesic, tolerance), with a default tolerance + * of 0.1 meters. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryIsLocationOnPath(CLLocationCoordinate2D point, GMSPath *path, BOOL geodesic); + +/** + * Returns the great circle distance between two coordinates, in meters, on Earth. + * + * This is the shortest distance between the two coordinates on the sphere. + * + * Both coordinates must be valid. + */ +FOUNDATION_EXPORT +CLLocationDistance GMSGeometryDistance(CLLocationCoordinate2D from, CLLocationCoordinate2D to); + +/** + * Returns the great circle length of |path|, in meters, on Earth. + * + * This is the sum of GMSGeometryDistance() over the path segments. + * + * All the coordinates of the path must be valid. + */ +FOUNDATION_EXPORT +CLLocationDistance GMSGeometryLength(GMSPath *path); + +/** + * Returns the area of a geodesic polygon defined by |path| on Earth. + * + * The "inside" of the polygon is defined as not containing the South pole. + * + * If |path| is not closed, it is implicitly treated as a closed path nevertheless and the result is + * the same. + * + * All coordinates of the path must be valid. + * + * The polygon must be simple (not self-overlapping) and may be concave. + * + * If any segment of the path is a pair of antipodal points, the result is undefined -- because two + * antipodal points do not form a unique great circle segment on the sphere. + */ +FOUNDATION_EXPORT +double GMSGeometryArea(GMSPath *path); + +/** + * Returns the signed area of a geodesic polygon defined by |path| on Earth. + * + * The result has the same absolute value as GMSGeometryArea(); it is positive if the points of path + * are in counter-clockwise order, and negative otherwise. + * + * The same restrictions as on GMSGeometryArea() apply. + */ +FOUNDATION_EXPORT +double GMSGeometrySignedArea(GMSPath *path); + +/** + * Returns the initial heading (degrees clockwise of North) at |from| of the shortest path to |to|. + * + * The returned value is in the range [0, 360). + * + * Returns 0 if the two coordinates are the same. + * + * Both coordinates must be valid. + * + * To get the final heading at |to| one may use (GMSGeometryHeading(|to|, |from|) + 180) modulo 360. + */ +FOUNDATION_EXPORT +CLLocationDirection GMSGeometryHeading(CLLocationCoordinate2D from, CLLocationCoordinate2D to); + +/** + * Returns the destination coordinate, when starting at |from| with initial |heading|, travelling + * |distance| meters along a great circle arc, on Earth. + * + * The resulting longitude is in the range [-180, 180). + * + * Both coordinates must be valid. + */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSGeometryOffset(CLLocationCoordinate2D from, CLLocationDistance distance, + CLLocationDirection heading); + +/** + * Returns the coordinate that lies the given |fraction| of the way between the |from| and |to| + * coordinates on the shortest path between the two. + * + * The resulting longitude is in the range [-180, 180). + */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSGeometryInterpolate(CLLocationCoordinate2D from, + CLLocationCoordinate2D to, double fraction); + +/** + * Returns an NSArray of GMSStyleSpan constructed by repeated application of style and length + * information from |styles| and |lengths| along |path|. + * + * |path| the path along which the output spans are computed. + * |styles| an NSArray of GMSStrokeStyle. Wraps if consumed. Can't be empty. + * |lengths| an NSArray of NSNumber; each entry gives the length of the corresponding + * style from |styles|. Wraps if consumed. Can't be empty. + * |lengthKind| the interpretation of values from |lengths| (geodesic, rhumb or projected). + * + * Example: a polyline with alternating black and white spans: + * + *
+ * GMSMutablePath *path;
+ * NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]],
+ *                     [GMSStrokeStyle solidColor:[UIColor blackColor]]];
+ * NSArray *lengths = @[@100000, @50000];
+ * polyline.path = path;
+ * polyline.spans = GMSStyleSpans(path, styles, lengths, kGMSLengthRhumb);
+ * 
+ */ +FOUNDATION_EXPORT +NSArray *GMSStyleSpans(GMSPath *path, NSArray *styles, + NSArray *lengths, GMSLengthKind lengthKind); + +/** + * Similar to GMSStyleSpans(path, styles, lengths, lengthKind) but additionally takes an initial + * length offset that will be skipped over relative to the |lengths| array. + * + * |lengthOffset| the length (e.g. in meters) that should be skipped initially from |lengths|. + */ +FOUNDATION_EXPORT +NSArray *GMSStyleSpansOffset(GMSPath *path, NSArray *styles, + NSArray *lengths, GMSLengthKind lengthKind, + double lengthOffset); + +/**@}*/ + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSGroundOverlay.h b/HackIllinois/GoogleMaps.framework/Headers/GMSGroundOverlay.h new file mode 100755 index 00000000..a3a83047 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSGroundOverlay.h @@ -0,0 +1,85 @@ +// +// GMSGroundOverlay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSOverlay.h" + +@class GMSCoordinateBounds; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSGroundOverlay specifies the available options for a ground overlay that exists on the Earth's + * surface. Unlike a marker, the position of a ground overlay is specified explicitly and it does + * not face the camera. + */ +@interface GMSGroundOverlay : GMSOverlay + +/** + * The position of this GMSGroundOverlay, or more specifically, the physical position of its anchor. + * If this is changed, |bounds| will be moved around the new position. + */ +@property(nonatomic) CLLocationCoordinate2D position; + +/** + * The anchor specifies where this GMSGroundOverlay is anchored to the Earth in relation to + * |bounds|. If this is modified, |position| will be set to the corresponding new position within + * |bounds|. + */ +@property(nonatomic) CGPoint anchor; + +/** + * Icon to render within |bounds| on the Earth. If this is nil, the overlay will not be visible + * (unlike GMSMarker which has a default image). + */ +@property(nonatomic, nullable) UIImage *icon; + +/** + * Sets the opacity of the ground overlay, between 0 (completely transparent) and 1 (default) + * inclusive. + */ +@property(nonatomic) float opacity; + +/** + * Bearing of this ground overlay, in degrees. The default value, zero, points this ground overlay + * up/down along the normal Y axis of the earth. + */ +@property(nonatomic) CLLocationDirection bearing; + +/** + * The 2D bounds on the Earth in which |icon| is drawn. Changing this value will adjust |position| + * accordingly. + */ +@property(nonatomic, nullable) GMSCoordinateBounds *bounds; + +/** + * Convenience constructor for GMSGroundOverlay for a particular |bounds| and |icon|. Will set + * |position| accordingly. + */ ++ (instancetype)groundOverlayWithBounds:(nullable GMSCoordinateBounds *)bounds + icon:(nullable UIImage *)icon; + +/** + * Constructs a GMSGroundOverlay that renders the given |icon| at |position|, as if the image's + * actual size matches camera pixels at |zoomLevel|. + */ ++ (instancetype)groundOverlayWithPosition:(CLLocationCoordinate2D)position + icon:(nullable UIImage *)icon + zoomLevel:(CGFloat)zoomLevel; + +@end + +/** + * The default position of the ground anchor of a GMSGroundOverlay: the center point of the icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSGroundOverlayDefaultAnchor; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorBuilding.h b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorBuilding.h new file mode 100755 index 00000000..c40d960f --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorBuilding.h @@ -0,0 +1,43 @@ +// +// GMSIndoorBuilding.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + + +#import + +@class GMSIndoorLevel; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Describes a building which contains levels. + */ +@interface GMSIndoorBuilding : NSObject + +/** + * Array of GMSIndoorLevel describing the levels which make up the building. + * The levels are in 'display order' from top to bottom. + */ +@property(nonatomic, strong, readonly) NSArray *levels; + +/** + * Index in the levels array of the default level. + */ +@property(nonatomic, assign, readonly) NSUInteger defaultLevelIndex; + +/** + * If YES, the building is entirely underground and supports being hidden. + */ +@property(nonatomic, assign, readonly, getter=isUnderground) BOOL underground; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorDisplay.h b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorDisplay.h new file mode 100755 index 00000000..883a9812 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorDisplay.h @@ -0,0 +1,66 @@ +// +// GMSIndoorDisplay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +@class GMSIndoorBuilding; +@class GMSIndoorLevel; + +NS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSIndoorDisplay. */ +@protocol GMSIndoorDisplayDelegate +@optional + +/** + * Raised when the activeBuilding has changed. The activeLevel will also have already been updated + * for the new building, but didChangeActiveLevel: will be raised after this method. + */ +- (void)didChangeActiveBuilding:(nullable GMSIndoorBuilding *)building; + +/** + * Raised when the activeLevel has changed. This event is raised for all changes, including + * explicit setting of the property. + */ +- (void)didChangeActiveLevel:(nullable GMSIndoorLevel *)level; + +@end + +/** + * Provides ability to observe or control the display of indoor level data. + * + * Like GMSMapView, GMSIndoorDisplay may only be used from the main thread. + */ +@interface GMSIndoorDisplay : NSObject + +/** GMSIndoorDisplay delegate */ +@property(nonatomic, weak, nullable) id delegate; + +/** + * Provides the currently focused building, will be nil if there is no building with indoor data + * currently under focus. + */ +@property(nonatomic, readonly, nullable) GMSIndoorBuilding *activeBuilding; + +/** + * Provides and controls the active level for activeBuilding. Will be updated whenever + * activeBuilding changes, and may be set to any member of activeBuilding's levels property. May + * also be set to nil if the building is underground, to stop showing the building (the building + * will remain active). + * + * Will always be nil if activeBuilding is nil. + * + * Any attempt to set it to an invalid value will be ignored. + */ +@property(nonatomic, nullable) GMSIndoorLevel *activeLevel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorLevel.h b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorLevel.h new file mode 100755 index 00000000..b92efc6f --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSIndoorLevel.h @@ -0,0 +1,32 @@ +// +// GMSIndoorLevel.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Describes a single level in a building. + * + * Multiple buildings can share a level - in this case the level instances will compare as equal, + * even though the level numbers/names may be different. + */ +@interface GMSIndoorLevel : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** Localized display name for the level, e.g. "Ground floor". */ +@property(nonatomic, copy, readonly, nullable) NSString *name; + +/** Localized short display name for the level, e.g. "1". */ +@property(nonatomic, copy, readonly, nullable) NSString *shortName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMapID.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMapID.h new file mode 100755 index 00000000..c9541c75 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMapID.h @@ -0,0 +1,29 @@ +// +// GMSMapID.h +// Google Maps SDK for iOS +// +// Copyright 2019 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** An opaque identifier for a custom map configuration. */ +@interface GMSMapID : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** Creates a new mapID with the given string value. */ +- (instancetype)initWithIdentifier:(NSString *)identifier NS_DESIGNATED_INITIALIZER; + +/** Creates a new mapID with the given string value. */ ++ (instancetype)mapIDWithIdentifier:(NSString *)identifier + NS_SWIFT_UNAVAILABLE("Use initializer instead"); + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMapLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMapLayer.h new file mode 100755 index 00000000..f5ed5eda --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMapLayer.h @@ -0,0 +1,111 @@ +// +// GMSMapLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSCALayer.h" + +NS_ASSUME_NONNULL_BEGIN + +/* + * The following layer properties and constants describe the camera properties that may be animated + * on the custom model layer of a GMSMapView with Core Animation. For simple camera control and + * animation, please see the helper methods in GMSMapView+Animation.h, and the camera object + * definition within GMSCameraPosition.h. + * + * Changing layer properties triggers an implicit animation, e.g.:- + * mapView_.layer.cameraBearing = 20; + * + * An explicit animation, replacing the implicit animation, may be added after changing the + * property, for example: + *
+ *   CAMediaTimingFunction *curve = [CAMediaTimingFunction functionWithName:
+ *                                   kCAMediaTimingFunctionEaseInEaseOut];
+ *   CABasicAnimation *animation =
+ *       [CABasicAnimation animationWithKeyPath:kGMSLayerCameraBearingKey];
+ *   animation.duration = 2.0f;
+ *   animation.timingFunction = curve;
+ *   animation.toValue = @20;
+ *   [mapView_.layer addAnimation:animation forKey:kGMSLayerCameraBearingKey];
+ * 
+ * + * To control several implicit animations, Core Animation's transaction support may be used, for + * example: + *
+ *   [CATransaction begin];
+ *   [CATransaction setAnimationDuration:2.0f];
+ *   mapView_.layer.cameraBearing = 20;
+ *   mapView_.layer.cameraViewingAngle = 30;
+ *   [CATransaction commit];
+ * 
+ * + * Note that these properties are not view-based. Please see "Animating View and Layer Changes + * Together" in the + * View Programming Guide for iOS. + */ + +/** + * kGMSLayerCameraLatitudeKey ranges from [-85, 85], and values outside this range will be clamped. + * + * @related GMSMapLayer + */ +extern NSString *const kGMSLayerCameraLatitudeKey; + +/** + * kGMSLayerCameraLongitudeKey ranges from [-180, 180), and values outside this range will be + * wrapped to within this range. + * + * @related GMSMapLayer + */ +extern NSString *const kGMSLayerCameraLongitudeKey; + +/** + * kGMSLayerCameraBearingKey ranges from [0, 360), and values are wrapped. + * + * @related GMSMapLayer + */ +extern NSString *const kGMSLayerCameraBearingKey; + +/** + * kGMSLayerCameraZoomLevelKey ranges from [kGMSMinZoomLevel, kGMSMaxZoomLevel], and values are + * clamped. + * + * @related GMSMapLayer + */ +extern NSString *const kGMSLayerCameraZoomLevelKey; + +/** + * kGMSLayerCameraViewingAngleKey ranges from zero (i.e., facing straight down) and to between 30 + * and 45 degrees towards the horizon, depending on the model zoom level. + * + * @related GMSMapLayer + */ +extern NSString *const kGMSLayerCameraViewingAngleKey; + +/** + * GMSMapLayer is a custom subclass of CALayer, provided as the layer class on GMSMapView. This + * layer should not be instantiated directly. It provides model access to the camera normally + * defined on GMSMapView. + * + * Modifying or animating these properties will typically interrupt any current gesture on + * GMSMapView, e.g., a user's pan or rotation. Similarly, if a user performs an enabled gesture + * during an animation, the animation will stop 'in-place' (at the current presentation value). + */ +@interface GMSMapLayer : GMSCALayer +@property(nonatomic) CLLocationDegrees cameraLatitude; +@property(nonatomic) CLLocationDegrees cameraLongitude; +@property(nonatomic) CLLocationDirection cameraBearing; +@property(nonatomic) float cameraZoomLevel; +@property(nonatomic) double cameraViewingAngle; +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMapStyle.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMapStyle.h new file mode 100755 index 00000000..6c1e4b7e --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMapStyle.h @@ -0,0 +1,55 @@ +// +// GMSMapStyle.h +// Google Maps SDK for iOS +// +// Copyright 2016 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSMapStyle holds details about a style which can be applied to a map. + * + * With style options you can customize the presentation of the standard Google map styles, changing + * the visual display of features like roads, parks, and other points of interest. As well as + * changing the style of these features, you can also hide features entirely. This means that you + * can emphasize particular components of the map or make the map complement the content of your + * app. + * + * For more information see: https://developers.google.com/maps/documentation/ios-sdk/styling + */ +@interface GMSMapStyle : NSObject + +/** + * Creates a style using a string containing JSON. + * + * Returns nil and populates |error| (if provided) if |style| is invalid. + */ ++ (nullable instancetype)styleWithJSONString:(NSString *)style + error:(NSError *__autoreleasing _Nullable *)error; + +/** + * Creates a style using a file containing JSON. + * + * Returns nil and populates |error| (if provided) if |style| is invalid, the file cannot be read, + * or the URL is not a file URL. + */ ++ (nullable instancetype)styleWithContentsOfFileURL:(NSURL *)fileURL + error:(NSError *__autoreleasing _Nullable *)error; + +@end + +/** + * Calculates a hash value for the given string. + * @param string The string to use to calculate the hash value. + * @return The hash value. + * @note The current implementation uses an MD5 hash, which is sufficient for uniquifying styles. + */ +NSUInteger GMSStyleHashForString(NSString *string); + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMapView+Animation.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMapView+Animation.h new file mode 100755 index 00000000..41e5ff00 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMapView+Animation.h @@ -0,0 +1,61 @@ +// +// GMSMapView+Animation.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import "GMSMapView.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSMapView (Animation) offers several animation helper methods. + * + * During any animation, retrieving the camera position through the camera property on GMSMapView + * returns an intermediate immutable GMSCameraPosition. This camera position will typically + * represent the most recently drawn frame. + */ +@interface GMSMapView (Animation) + +/** Animates the camera of this map to |cameraPosition|. */ +- (void)animateToCameraPosition:(GMSCameraPosition *)cameraPosition; + +/** + * As animateToCameraPosition:, but changes only the location of the camera (i.e., from the current + * location to |location|). + */ +- (void)animateToLocation:(CLLocationCoordinate2D)location; + +/** + * As animateToCameraPosition:, but changes only the zoom level of the camera. + * + * This value is clamped by [kGMSMinZoomLevel, kGMSMaxZoomLevel]. + */ +- (void)animateToZoom:(float)zoom; + +/** + * As animateToCameraPosition:, but changes only the bearing of the camera (in degrees). Zero + * indicates true north. + */ +- (void)animateToBearing:(CLLocationDirection)bearing; + +/** + * As animateToCameraPosition:, but changes only the viewing angle of the camera (in degrees). This + * value will be clamped to a minimum of zero (i.e., facing straight down) and between 30 and 45 + * degrees towards the horizon, depending on the relative closeness to the earth. + */ +- (void)animateToViewingAngle:(double)viewingAngle; + +/** + * Applies |cameraUpdate| to the current camera, and then uses the result as per + * animateToCameraPosition:. + */ +- (void)animateWithCameraUpdate:(GMSCameraUpdate *)cameraUpdate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMapView.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMapView.h new file mode 100755 index 00000000..e9fb90e3 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMapView.h @@ -0,0 +1,521 @@ +// +// GMSMapView.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import "GMSMapLayer.h" + +@class GMSCameraPosition; +@class GMSCameraUpdate; +@class GMSCoordinateBounds; +@class GMSIndoorDisplay; +@class GMSMapID; +@class GMSMapStyle; +@class GMSMapView; +@class GMSMarker; +@class GMSOverlay; +@class GMSProjection; +@class GMSUISettings; + +NS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSMapView. */ +@protocol GMSMapViewDelegate + +@optional + +/** + * Called before the camera on the map changes, either due to a gesture, animation (e.g., by a user + * tapping on the "My Location" button) or by being updated explicitly via the camera or a + * zero-length animation on layer. + * + * @param mapView The map view that was tapped. + * @param gesture If YES, this is occurring due to a user gesture. + */ +- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture; + +/** + * Called repeatedly during any animations or gestures on the map (or once, if the camera is + * explicitly set). This may not be called for all intermediate camera positions. It is always + * called for the final position of an animation or gesture. + */ +- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position; + +/** + * Called when the map becomes idle, after any outstanding gestures or animations have completed (or + * after the camera has been explicitly set). + */ +- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position; + +/** + * Called after a tap gesture at a particular coordinate, but only if a marker was not tapped. This + * is called before deselecting any currently selected marker (the implicit action for tapping on + * the map). + */ +- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called after a long-press gesture at a particular coordinate. + * + * @param mapView The map view that was tapped. + * @param coordinate The location that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called after a marker has been tapped. + * + * @param mapView The map view that was tapped. + * @param marker The marker that was tapped. + * @return YES if this delegate handled the tap event, which prevents the map from performing its + * default selection behavior, and NO if the map should continue with its default selection + * behavior. + */ +- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker; + +/** + * Called after a marker's info window has been tapped. + */ +- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called after a marker's info window has been long pressed. + */ +- (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called after an overlay has been tapped. + * + * This method is not called for taps on markers. + * + * @param mapView The map view that was tapped. + * @param overlay The overlay that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay; + +/** + * Called after a POI has been tapped. + * + * @param mapView The map view that was tapped. + * @param placeID The placeID of the POI that was tapped. + * @param name The name of the POI that was tapped. + * @param location The location of the POI that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView + didTapPOIWithPlaceID:(NSString *)placeID + name:(NSString *)name + location:(CLLocationCoordinate2D)location; + +/** + * Called when a marker is about to become selected, and provides an optional custom info window to + * use for that marker if this method returns a UIView. + * + * If you change this view after this method is called, those changes will not necessarily be + * reflected in the rendered version. + * + * The returned UIView must not have bounds greater than 500 points on either dimension. As there + * is only one info window shown at any time, the returned view may be reused between other info + * windows. + * + * Removing the marker from the map or changing the map's selected marker during this call results + * in undefined behavior. + * + * @return The custom info window for the specified marker, or nil for default + */ +- (nullable UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker; + +/** + * Called when mapView:markerInfoWindow: returns nil. If this method returns a view, it will be + * placed within the default info window frame. If this method returns nil, then the default + * rendering will be used instead. + * + * @param mapView The map view that was pressed. + * @param marker The marker that was pressed. + * @return The custom view to display as contents in the info window, or nil to use the default + * content rendering instead + */ + +- (nullable UIView *)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker; + +/** + * Called when the marker's info window is closed. + */ +- (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called when dragging has been initiated on a marker. + */ +- (void)mapView:(GMSMapView *)mapView didBeginDraggingMarker:(GMSMarker *)marker; + +/** + * Called after dragging of a marker ended. + */ +- (void)mapView:(GMSMapView *)mapView didEndDraggingMarker:(GMSMarker *)marker; + +/** + * Called while a marker is dragged. + */ +- (void)mapView:(GMSMapView *)mapView didDragMarker:(GMSMarker *)marker; + +/** + * Called when the My Location button is tapped. + * + * @return YES if the listener has consumed the event (i.e., the default behavior should not occur), + * NO otherwise (i.e., the default behavior should occur). The default behavior is for the + * camera to move such that it is centered on the user location. + */ +- (BOOL)didTapMyLocationButtonForMapView:(GMSMapView *)mapView; + +/** + * Called when the My Location Dot is tapped. + * + * @param mapView The map view that was tapped. + * @param location The location of the user when the location dot was tapped. + */ +- (void)mapView:(GMSMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location; + +/** + * Called when tiles have just been requested or labels have just started rendering. + */ +- (void)mapViewDidStartTileRendering:(GMSMapView *)mapView; + +/** + * Called when all tiles have been loaded (or failed permanently) and labels have been rendered. + */ +- (void)mapViewDidFinishTileRendering:(GMSMapView *)mapView; + +/** + * Called when map is stable (tiles loaded, labels rendered, camera idle) and overlay objects have + * been rendered. + */ +- (void)mapViewSnapshotReady:(GMSMapView *)mapView; + +@end + +/** + * \defgroup MapViewType GMSMapViewType + * @{ + */ + +/** + * Display types for GMSMapView. + */ +typedef NS_ENUM(NSUInteger, GMSMapViewType) { + /** Basic maps. The default. */ + kGMSTypeNormal GMS_SWIFT_NAME_2_0_3_0(Normal, normal) = 1, + + /** Satellite maps with no labels. */ + kGMSTypeSatellite GMS_SWIFT_NAME_2_0_3_0(Satellite, satellite), + + /** Terrain maps. */ + kGMSTypeTerrain GMS_SWIFT_NAME_2_0_3_0(Terrain, terrain), + + /** Satellite maps with a transparent label overview. */ + kGMSTypeHybrid GMS_SWIFT_NAME_2_0_3_0(Hybrid, hybrid), + + /** No maps, no labels. Display of traffic data is not supported. */ + kGMSTypeNone GMS_SWIFT_NAME_2_0_3_0(None, none), + +}; + +/**@}*/ + +/** + * \defgroup FrameRate GMSFrameRate + * @{ + */ + +/** + * Rendering frame rates for GMSMapView. + */ +typedef NS_ENUM(NSUInteger, GMSFrameRate) { + /** Use the minimum frame rate to conserve battery usage. */ + kGMSFrameRatePowerSave, + + /** + * Use a median frame rate to provide smoother rendering and conserve processing cycles. + */ + kGMSFrameRateConservative, + + /** + * Use the maximum frame rate for a device. For low end devices this will be 30 FPS, + * for high end devices 60 FPS. + */ + kGMSFrameRateMaximum, +}; + +/**@}*/ + +/** + * \defgroup MapViewPaddingAdjustmentBehavior GMSMapViewPaddingAdjustmentBehavior + * @{ + */ + +/** + * Constants indicating how safe area insets are added to padding. + */ +typedef NS_ENUM(NSUInteger, GMSMapViewPaddingAdjustmentBehavior) { + /** Always include the safe area insets in the padding. */ + kGMSMapViewPaddingAdjustmentBehaviorAlways, + + /** + * When the padding value is smaller than the safe area inset for a particular edge, use the safe + * area value for layout, else use padding. + */ + kGMSMapViewPaddingAdjustmentBehaviorAutomatic, + + /** + * Never include the safe area insets in the padding. This was the behavior prior to version 2.5. + */ + kGMSMapViewPaddingAdjustmentBehaviorNever, +}; + +/**@}*/ + +/** + * This is the main class of the Google Maps SDK for iOS and is the entry point for all methods + * related to the map. + * + * The map should be instantiated via the convenience constructor [GMSMapView mapWithFrame:camera:]. + * It may also be created with the default [[GMSMapView alloc] initWithFrame:] method (wherein its + * camera will be set to a default location). + * + * GMSMapView can only be read and modified from the main thread, similar to all UIKit objects. + * Calling these methods from another thread will result in an exception or undefined behavior. + */ +@interface GMSMapView : UIView + +/** GMSMapView delegate. */ +@property(nonatomic, weak, nullable) IBOutlet id delegate; + +/** + * Controls the camera, which defines how the map is oriented. Modification of this property is + * instantaneous. + */ +@property(nonatomic, copy) GMSCameraPosition *camera; + +/** + * Returns a GMSProjection object that you can use to convert between screen coordinates and + * latitude/longitude coordinates. + * + * This is a snapshot of the current projection, and will not automatically update when the camera + * moves. It represents either the projection of the last drawn GMSMapView frame, or; where the + * camera has been explicitly set or the map just created, the upcoming frame. It will never be nil. + */ +@property(nonatomic, readonly) GMSProjection *projection; + +/** + * Controls whether the My Location dot and accuracy circle is enabled. Defaults to NO. + */ +@property(nonatomic, getter=isMyLocationEnabled) BOOL myLocationEnabled; + +/** + * If My Location is enabled, reveals where the user location dot is being drawn. If it is disabled, + * or it is enabled but no location data is available, this will be nil. This property is + * observable using KVO. + */ +@property(nonatomic, readonly, nullable) CLLocation *myLocation; + +/** + * The marker that is selected. Setting this property selects a particular marker, showing an info + * window on it. If this property is non-nil, setting it to nil deselects the marker, hiding the + * info window. This property is observable using KVO. + */ +@property(nonatomic, nullable) GMSMarker *selectedMarker; + +/** + * Controls whether the map is drawing traffic data, if available. This is subject to the + * availability of traffic data. Defaults to NO. + */ +@property(nonatomic, getter=isTrafficEnabled) BOOL trafficEnabled; + +/** + * Controls the type of map tiles that should be displayed. Defaults to kGMSTypeNormal. + */ +@property(nonatomic) GMSMapViewType mapType; + +/** + * Controls the style of the map. + * + * A non-nil mapStyle will only apply if mapType is Normal. + */ +@property(nonatomic, nullable) GMSMapStyle *mapStyle; + +/** + * Minimum zoom (the farthest the camera may be zoomed out). Defaults to kGMSMinZoomLevel. Modified + * with -setMinZoom:maxZoom:. + */ +@property(nonatomic, readonly) float minZoom; + +/** + * Maximum zoom (the closest the camera may be to the Earth). Defaults to kGMSMaxZoomLevel. Modified + * with -setMinZoom:maxZoom:. + */ +@property(nonatomic, readonly) float maxZoom; + +/** + * If set, 3D buildings will be shown where available. Defaults to YES. + * + * This may be useful when adding a custom tile layer to the map, in order to make it clearer at + * high zoom levels. Changing this value will cause all tiles to be briefly invalidated. + */ +@property(nonatomic, getter=isBuildingsEnabled) BOOL buildingsEnabled; + +/** + * Sets whether indoor maps are shown, where available. Defaults to YES. + * + * If this is set to NO, caches for indoor data may be purged and any floor currently selected by + * the end-user may be reset. + */ +@property(nonatomic, getter=isIndoorEnabled) BOOL indoorEnabled; + +/** + * Gets the GMSIndoorDisplay instance which allows to observe or control aspects of indoor data + * display. + */ +@property(nonatomic, readonly) GMSIndoorDisplay *indoorDisplay; + +/** + * Gets the GMSUISettings object, which controls user interface settings for the map. + */ +@property(nonatomic, readonly) GMSUISettings *settings; + +/** + * Controls the 'visible' region of the view. By applying padding an area around the edge of the + * view can be created which will contain map data but will not contain UI controls. + * + * If the padding is not balanced, the visual center of the view will move as appropriate. Padding + * will also affect the |projection| property so the visible region will not include the padding + * area. GMSCameraUpdate fitToBounds will ensure that both this padding and any padding requested + * will be taken into account. + * + * This property may be animated within a UIView-based animation block. + */ +@property(nonatomic) UIEdgeInsets padding; + +/** + * Controls how safe area insets are added to the padding values. Like padding, safe area insets + * position map controls such as the compass, my location button and floor picker within the device + * safe area. + * + * Defaults to kGMSMapViewPaddingAdjustmentBehaviorAlways. + */ +@property(nonatomic) GMSMapViewPaddingAdjustmentBehavior paddingAdjustmentBehavior; + +/** + * Defaults to YES. If set to NO, GMSMapView will generate accessibility elements for overlay + * objects, such as GMSMarker and GMSPolyline. + * + * This property is as per the informal UIAcessibility protocol, except for the default value of + * YES. + */ +@property(nonatomic) BOOL accessibilityElementsHidden; + +/** + * Accessor for the custom CALayer type used for the layer. + */ +@property(nonatomic, readonly, retain) GMSMapLayer *layer; + +/** + * Controls the rendering frame rate. Default value is kGMSFrameRateMaximum. + */ +@property(nonatomic) GMSFrameRate preferredFrameRate; + +/** + * If not nil, constrains the camera target so that gestures cannot cause it to leave the specified + * bounds. + */ +@property(nonatomic, nullable) GMSCoordinateBounds *cameraTargetBounds; + +/** + * Builds and returns a map view with a frame and camera target. + */ ++ (instancetype)mapWithFrame:(CGRect)frame camera:(GMSCameraPosition *)camera; + +/** + * Convenience initializer to build and return a map view with a frame, map ID, and camera target. + */ ++ (instancetype)mapWithFrame:(CGRect)frame + mapID:(GMSMapID *)mapID + camera:(GMSCameraPosition *)camera + NS_SWIFT_UNAVAILABLE("Use initializer instead"); + +/** + * Builds and returns a map view, with a frame and camera target. + */ +- (instancetype)initWithFrame:(CGRect)frame camera:(GMSCameraPosition *)camera; + +/** + * Builds and returns a map view with a frame, map ID, and camera target. + */ +- (instancetype)initWithFrame:(CGRect)frame + mapID:(GMSMapID *)mapID + camera:(GMSCameraPosition *)camera; + +/** + * Tells this map to power up its renderer. This is optional and idempotent. + */ +- (void)startRendering __GMS_AVAILABLE_BUT_DEPRECATED_MSG( + "This method is obsolete and will be removed in a future release."); + +/** + * Tells this map to power down its renderer. This is optional and idempotent. + */ +- (void)stopRendering __GMS_AVAILABLE_BUT_DEPRECATED_MSG( + "This method is obsolete and will be removed in a future release."); + +/** + * Clears all markup that has been added to the map, including markers, polylines and ground + * overlays. This will not clear the visible location dot or reset the current mapType. + */ +- (void)clear; + +/** + * Sets |minZoom| and |maxZoom|. This method expects the minimum to be less than or equal to the + * maximum, and will throw an exception with name NSRangeException otherwise. + */ +- (void)setMinZoom:(float)minZoom maxZoom:(float)maxZoom; + +/** + * Build a GMSCameraPosition that presents |bounds| with |padding|. The camera will have a zero + * bearing and tilt (i.e., facing north and looking directly at the Earth). This takes the frame and + * padding of this GMSMapView into account. + * + * If the bounds is invalid this method will return a nil camera. + */ +- (nullable GMSCameraPosition *)cameraForBounds:(GMSCoordinateBounds *)bounds + insets:(UIEdgeInsets)insets; + +/** + * Changes the camera according to |update|. The camera change is instantaneous (with no animation). + */ +- (void)moveCamera:(GMSCameraUpdate *)update; + +/** + * Check whether the given camera positions would practically cause the camera to be rendered the + * same, taking into account the level of precision and transformations used internally. + */ +- (BOOL)areEqualForRenderingPosition:(GMSCameraPosition *)position + position:(GMSCameraPosition *)otherPosition; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMarker.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMarker.h new file mode 100755 index 00000000..ea283c7d --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMarker.h @@ -0,0 +1,161 @@ +// +// GMSMarker.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSMarkerAnimation.h" +#import "GMSOverlay.h" + +@class GMSMarkerLayer; +@class GMSPanoramaView; + +NS_ASSUME_NONNULL_BEGIN + +/** + * A marker is an icon placed at a particular point on the map's surface. A marker's icon is drawn + * oriented against the device's screen rather than the map's surface; i.e., it will not necessarily + * change orientation due to map rotations, tilting, or zooming. + */ +@interface GMSMarker : GMSOverlay + +/** Marker position. Animated. */ +@property(nonatomic) CLLocationCoordinate2D position; + +/** Snippet text, shown beneath the title in the info window when selected. */ +@property(nonatomic, copy, nullable) NSString *snippet; + +/** + * Marker icon to render. If left nil, uses a default SDK place marker. + * + * Supports animated images, but each frame must be the same size or the behavior is undefined. + * + * Supports the use of alignmentRectInsets to specify a reduced tap area. This also redefines how + * anchors are specified. For an animated image the value for the animation is used, not the + * individual frames. + */ +@property(nonatomic, nullable) UIImage *icon; + +/** + * Marker view to render. If left nil, falls back to the |icon| property instead. + * + * Supports animation of all animatable properties of UIView, except |frame| and |center|. Changing + * these properties or their corresponding CALayer version, including |position|, is not supported. + * + * Note that the view behaves as if |clipsToBounds| is set to YES, regardless of its actual value. + */ +@property(nonatomic, nullable) UIView *iconView; + +/** + * Controls whether the icon for this marker should be redrawn every frame. + * + * Note that when this changes from NO to YES, the icon is guaranteed to be redrawn next frame. + * + * Defaults to YES. + * Has no effect if |iconView| is nil. + */ +@property(nonatomic) BOOL tracksViewChanges; + +/** + * Controls whether the info window for this marker should be redrawn every frame. + * + * Note that when this changes from NO to YES, the info window is guaranteed to be redrawn next + * frame. + * + * Defaults to NO. + */ +@property(nonatomic) BOOL tracksInfoWindowChanges; + +/** + * The ground anchor specifies the point in the icon image that is anchored to the marker's position + * on the Earth's surface. This point is specified within the continuous space [0.0, 1.0] x [0.0, + * 1.0], where (0,0) is the top-left corner of the image, and (1,1) is the bottom-right corner. + * + * If the image has non-zero alignmentRectInsets, the top-left and bottom-right mentioned above + * refer to the inset section of the image. + */ +@property(nonatomic) CGPoint groundAnchor; + +/** + * The info window anchor specifies the point in the icon image at which to anchor the info window, + * which will be displayed directly above this point. This point is specified within the same space + * as groundAnchor. + */ +@property(nonatomic) CGPoint infoWindowAnchor; + +/** + * Controls the animation used when this marker is placed on a GMSMapView (default + * kGMSMarkerAnimationNone, no animation). + */ +@property(nonatomic) GMSMarkerAnimation appearAnimation; + +/** + * Controls whether this marker can be dragged interactively (default NO). + */ +@property(nonatomic, getter=isDraggable) BOOL draggable; + +/** + * Controls whether this marker should be flat against the Earth's surface (YES) or a billboard + * facing the camera (NO, default). + */ +@property(nonatomic, getter=isFlat) BOOL flat; + +/** + * Sets the rotation of the marker in degrees clockwise about the marker's anchor point. The axis of + * rotation is perpendicular to the marker. A rotation of 0 corresponds to the default position of + * the marker. Animated. + * + * When the marker is flat on the map, the default position is north aligned and the rotation is + * such that the marker always remains flat on the map. When the marker is a billboard, the default + * position is pointing up and the rotation is such that the marker is always facing the camera. + */ +@property(nonatomic) CLLocationDegrees rotation; + +/** + * Sets the opacity of the marker, between 0 (completely transparent) and 1 (default) inclusive. + */ +@property(nonatomic) float opacity; + +/** + * Provides the Core Animation layer for this GMSMarker. + */ +@property(nonatomic, readonly) GMSMarkerLayer *layer; + +/** + * The |panoramaView| specifies which panorama view will attempt to show this marker. Note that if + * the marker's |position| is too far away from the |panoramaView|'s current panorama location, it + * will not be displayed as it will be too small. + * + * Can be set to nil to remove the marker from any current panorama view it is attached to. + * + * A marker can be shown on both a panorama and a map at the same time. + */ +@property(nonatomic, weak, nullable) GMSPanoramaView *panoramaView; + +/** Convenience constructor for a default marker. */ ++ (instancetype)markerWithPosition:(CLLocationCoordinate2D)position; + +/** Creates a tinted version of the default marker image for use as an icon. */ ++ (UIImage *)markerImageWithColor:(nullable UIColor *)color; + +@end + +/** + * The default position of the ground anchor of a GMSMarker: the center bottom point of the marker + * icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSMarkerDefaultGroundAnchor; + +/** + * The default position of the info window anchor of a GMSMarker: the center top point of the marker + * icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSMarkerDefaultInfoWindowAnchor; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerAnimation.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerAnimation.h new file mode 100755 index 00000000..a0dab0f3 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerAnimation.h @@ -0,0 +1,36 @@ +// +// GMSMarkerAnimation.h +// Google Maps SDK for iOS +// +// Copyright 2021 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * \defgroup MarkerAnimation GMSMarkerAnimation + * @{ + */ + +/** + * Animation types for GMSMarker. + */ +typedef NS_ENUM(NSUInteger, GMSMarkerAnimation) { + /** No animation (default). */ + kGMSMarkerAnimationNone = 0, + + /** The marker will pop from its groundAnchor when added. */ + kGMSMarkerAnimationPop, + + /** The marker will fade in when added. */ + kGMSMarkerAnimationFadeIn, +}; + +/**@}*/ + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerLayer.h new file mode 100755 index 00000000..05389551 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMarkerLayer.h @@ -0,0 +1,47 @@ +// +// GMSMarkerLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSOverlayLayer.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSMarkerLayer is a subclass of GMSOverlayLayer, available on a per-marker basis, that allows + * animation of several properties of its associated GMSMarker. + * + * Note that this CALayer is never actually rendered directly, as GMSMapView is provided entirely + * via an OpenGL layer. As such, adjustments or animations to 'default' properties of CALayer will + * not have any effect. + */ +@interface GMSMarkerLayer : GMSOverlayLayer + +/** Latitude, part of |position| on GMSMarker. */ +@property(nonatomic) CLLocationDegrees latitude; + +/** Longitude, part of |position| on GMSMarker. */ +@property(nonatomic) CLLocationDegrees longitude; + +/** Rotation, as per GMSMarker. */ +@property(nonatomic) CLLocationDegrees rotation; + +/** Opacity, as per GMSMarker. */ +@property(atomic) float opacity; + +@end + +extern NSString *const kGMSMarkerLayerLatitude; +extern NSString *const kGMSMarkerLayerLongitude; +extern NSString *const kGMSMarkerLayerRotation; +extern NSString *const kGMSMarkerLayerOpacity; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSMutablePath.h b/HackIllinois/GoogleMaps.framework/Headers/GMSMutablePath.h new file mode 100755 index 00000000..d3092de9 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSMutablePath.h @@ -0,0 +1,59 @@ +// +// GMSMutablePath.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSPath.h" + +/** + * GMSMutablePath is a dynamic (resizable) array of CLLocationCoordinate2D. All coordinates must be + * valid. GMSMutablePath is the mutable counterpart to the immutable GMSPath. + */ +@interface GMSMutablePath : GMSPath + +/** Adds |coord| at the end of the path. */ +- (void)addCoordinate:(CLLocationCoordinate2D)coord; + +/** Adds a new CLLocationCoordinate2D instance with the given lat/lng. */ +- (void)addLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude; + +/** + * Inserts |coord| at |index|. + * + * If this is smaller than the size of the path, shifts all coordinates forward by one. Otherwise, + * behaves as replaceCoordinateAtIndex:withCoordinate:. + */ +- (void)insertCoordinate:(CLLocationCoordinate2D)coord atIndex:(NSUInteger)index; + +/** + * Replace the coordinate at |index| with |coord|. If |index| is after the end, grows the array with + * an undefined coordinate. + */ +- (void)replaceCoordinateAtIndex:(NSUInteger)index withCoordinate:(CLLocationCoordinate2D)coord; + +/** + * Remove entry at |index|. + * + * If |index| < count decrements size. If |index| >= count this is a silent no-op. + */ +- (void)removeCoordinateAtIndex:(NSUInteger)index; + +/** + * Removes the last coordinate of the path. + * + * If the array is non-empty decrements size. If the array is empty, this is a silent no-op. + */ +- (void)removeLastCoordinate; + +/** Removes all coordinates in this path. */ +- (void)removeAllCoordinates; + +@end diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSOrientation.h b/HackIllinois/GoogleMaps.framework/Headers/GMSOrientation.h new file mode 100755 index 00000000..9a3ce3df --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSOrientation.h @@ -0,0 +1,50 @@ +// +// GMSOrientation.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * GMSOrientation is a tuple of heading and pitch used to control the viewing + * direction of a GMSPanoramaCamera. + */ +typedef struct { + /** + * The camera heading (horizontal angle) in degrees. Type used to represent + * the direction in degrees from 0 to 359.9. True north is 0, east is 90, + * south is 180, and west is 270. + */ + const CLLocationDirection heading; + + /** + * The camera pitch (vertical angle), in degrees from the horizon. The |pitch| + * range is [-90,90], although it is possible that not the full range is + * supported. A positive value looks up and a negative value looks down. + */ + const double pitch; +} GMSOrientation; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Returns a GMSOrientation with the given |heading| and |pitch|. + * + * @related GMSOrientation + */ +inline static GMSOrientation GMSOrientationMake(CLLocationDirection heading, + double pitch) { + GMSOrientation orientation = {heading, pitch}; + return orientation; +} + +#ifdef __cplusplus +} +#endif diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSOverlay.h b/HackIllinois/GoogleMaps.framework/Headers/GMSOverlay.h new file mode 100755 index 00000000..52e7d8d2 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSOverlay.h @@ -0,0 +1,66 @@ +// +// GMSOverlay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +@class GMSMapView; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSOverlay is an abstract class that represents some overlay that may be attached to a specific + * GMSMapView. It may not be instantiated directly; instead, instances of concrete overlay types + * should be created directly (such as GMSMarker, GMSPolyline, and GMSPolygon). + * + * This supports the NSCopying protocol; [overlay_ copy] will return a copy of the overlay type, but + * with |map| set to nil. + */ +@interface GMSOverlay : NSObject + +/** + * Title, a short description of the overlay. Some overlays, such as markers, will display the title + * on the map. The title is also the default accessibility text. + */ +@property(nonatomic, copy, nullable) NSString *title; + +/** + * The map this overlay is on. Setting this property will add the overlay to the map. Setting it to + * nil removes this overlay from the map. An overlay may be active on at most one map at any given + * time. + */ +@property(nonatomic, weak, nullable) GMSMapView *map; + +/** + * If this overlay should cause tap notifications. Some overlays, such as markers, will default to + * being tappable. + */ +@property(nonatomic, getter=isTappable) BOOL tappable; + +/** + * Higher |zIndex| value overlays will be drawn on top of lower |zIndex| value tile layers and + * overlays. Equal values result in undefined draw ordering. Markers are an exception that + * regardless of |zIndex|, they will always be drawn above tile layers and other non-marker + * overlays; they are effectively considered to be in a separate z-index group compared to other + * overlays. + */ +@property(nonatomic) int zIndex; + +/** + * Overlay data. You can use this property to associate an arbitrary object with this overlay. + * Google Maps SDK for iOS neither reads nor writes this property. + * + * Note that userData should not hold any strong references to any Maps objects, otherwise a retain + * cycle may be created (preventing objects from being released). + */ +@property(nonatomic, nullable) id userData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSOverlayLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSOverlayLayer.h new file mode 100755 index 00000000..b0b8cf23 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSOverlayLayer.h @@ -0,0 +1,30 @@ +// +// GMSOverlayLayer.h +// Google Maps SDK for iOS +// +// Copyright 2018 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSOverlayLayer is a custom subclass of CALayer, and an abstract baseclass for GMSOverlay layers + * that allow custom animations. + * + * Note that this CALayer or any subclass are never actually rendered directly, as GMSMapView is + * provided entirely via an OpenGL layer. As such, adjustments or animations to 'default' properties + * of CALayer will not have any effect. + * + * This is an implementation detail and it should not be instantiated directly. + */ +@interface GMSOverlayLayer : CALayer + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanorama.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanorama.h new file mode 100755 index 00000000..70400f28 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanorama.h @@ -0,0 +1,34 @@ +// +// GMSPanorama.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +@class GMSPanoramaLink; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPanorama represents metadata for a specific panorama on the Earth. This class is not + * instantiable directly and is obtained via GMSPanoramaService or GMSPanoramaView. + */ +@interface GMSPanorama : NSObject + +/** The precise location of this panorama. */ +@property(nonatomic, readonly) CLLocationCoordinate2D coordinate; + +/** The ID of this panorama. Panoramas may change ID over time, so this should not be persisted */ +@property(nonatomic, copy, readonly) NSString *panoramaID; + +/** An array of GMSPanoramaLink describing the neighboring panoramas. */ +@property(nonatomic, copy, readonly) NSArray *links; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCamera.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCamera.h new file mode 100755 index 00000000..4b9cc47a --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCamera.h @@ -0,0 +1,81 @@ +// +// GMSPanoramaCamera.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSOrientation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPanoramaCamera is used to control the viewing direction of a GMSPanoramaView. It does not + * contain information about which particular panorama should be displayed. + */ +@interface GMSPanoramaCamera : NSObject + +/** + * Designated initializer. Configures this GMSPanoramaCamera with |orientation|, |zoom| and |FOV|. + * These values will be clamped to acceptable ranges. + */ +- (id)initWithOrientation:(GMSOrientation)orientation zoom:(float)zoom FOV:(double)FOV; + +/** + * Convenience constructor specifying heading and pitch as part of |orientation|, plus |zoom| and + * default field of view (90 degrees). + */ ++ (instancetype)cameraWithOrientation:(GMSOrientation)orientation zoom:(float)zoom; + +/** + * Convenience constructor specifying |heading|, |pitch|, |zoom| with default field of view (90 + * degrees). + */ ++ (instancetype)cameraWithHeading:(CLLocationDirection)heading pitch:(double)pitch zoom:(float)zoom; + +/** + * Convenience constructor for GMSPanoramaCamera, specifying all camera properties with heading and + * pitch as part of |orientation|. + */ ++ (instancetype)cameraWithOrientation:(GMSOrientation)orientation zoom:(float)zoom FOV:(double)FOV; + +/** + * Convenience constructor for GMSPanoramaCamera, specifying all camera properties. + */ ++ (instancetype)cameraWithHeading:(CLLocationDirection)heading + pitch:(double)pitch + zoom:(float)zoom + FOV:(double)FOV; + +/** + * The field of view (FOV) encompassed by the larger dimension (width or height) of the view in + * degrees at zoom 1. This is clamped to the range [1, 160] degrees, and has a default value of 90. + * + * Lower FOV values produce a zooming in effect; larger FOV values produce an fisheye effect. + * + * Note: This is not the displayed FOV if zoom is anything other than 1. User zoom gestures + * control the zoom property, not this property. + */ +@property(nonatomic, readonly) double FOV; + +/** + * Adjusts the visible region of the screen. A zoom of N will show the same area as the central + * width/N height/N area of what is shown at zoom 1. + * + * Zoom is clamped to the implementation defined range [1, 5]. + */ +@property(nonatomic, readonly) float zoom; + +/** + * The camera orientation, which groups together heading and pitch. + */ +@property(nonatomic, readonly) GMSOrientation orientation; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCameraUpdate.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCameraUpdate.h new file mode 100755 index 00000000..96dd4c29 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaCameraUpdate.h @@ -0,0 +1,37 @@ +// +// GMSPanoramaCameraUpdate.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPanoramaCameraUpdate represents an update that may be applied to a GMSPanoramaView. + * It encapsulates some logic for modifying the current camera. + * It should only be constructed using the factory helper methods below. + */ +@interface GMSPanoramaCameraUpdate : NSObject + +/** Returns an update that increments the camera heading with |deltaHeading|. */ ++ (GMSPanoramaCameraUpdate *)rotateBy:(CGFloat)deltaHeading; + +/** Returns an update that sets the camera heading to the given value. */ ++ (GMSPanoramaCameraUpdate *)setHeading:(CGFloat)heading; + +/** Returns an update that sets the camera pitch to the given value. */ ++ (GMSPanoramaCameraUpdate *)setPitch:(CGFloat)pitch; + +/** Returns an update that sets the camera zoom to the given value. */ ++ (GMSPanoramaCameraUpdate *)setZoom:(CGFloat)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLayer.h new file mode 100755 index 00000000..4b18a876 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLayer.h @@ -0,0 +1,57 @@ +// +// GMSPanoramaLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSCALayer.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * kGMSLayerPanoramaHeadingKey ranges from [0, 360). + * + * @related GMSPanoramaLayer + */ +extern NSString *const kGMSLayerPanoramaHeadingKey; + +/** + * kGMSLayerPanoramaPitchKey ranges from [-90, 90]. + * + * @related GMSPanoramaLayer + */ +extern NSString *const kGMSLayerPanoramaPitchKey; + +/** + * kGMSLayerCameraZoomLevelKey ranges from [1, 5], default 1. + * + * @related GMSPanoramaLayer + */ +extern NSString *const kGMSLayerPanoramaZoomKey; + +/** + * kGMSLayerPanoramaFOVKey ranges from [1, 160] (in degrees), default 90. + * + * @related GMSPanoramaLayer + */ +extern NSString *const kGMSLayerPanoramaFOVKey; + +/** + * GMSPanoramaLayer is a custom subclass of CALayer, provided as the layer class on GMSPanoramaView. + * This layer should not be instantiated directly. + */ +@interface GMSPanoramaLayer : GMSCALayer +@property(nonatomic) CLLocationDirection cameraHeading; +@property(nonatomic) double cameraPitch; +@property(nonatomic) float cameraZoom; +@property(nonatomic) double cameraFOV; +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLink.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLink.h new file mode 100755 index 00000000..419545fc --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaLink.h @@ -0,0 +1,30 @@ +// +// GMSPanoramaLink.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Links from a GMSPanorama to neighboring panoramas. */ +@interface GMSPanoramaLink : NSObject + +/** Angle of the neighboring panorama, clockwise from north in degrees. */ +@property(nonatomic) CGFloat heading; + +/** + * Panorama ID for the neighboring panorama. + * Do not store this persistenly, it changes in time. + */ +@property(nonatomic, copy) NSString *panoramaID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaService.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaService.h new file mode 100755 index 00000000..01ea8373 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaService.h @@ -0,0 +1,83 @@ +// +// GMSPanoramaService.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSPanoramaSource.h" + +@class GMSPanorama; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Callback for when a panorama metadata becomes available. + * If an error occurred, |panorama| is nil and |error| is not nil. + * Otherwise, |panorama| is not nil and |error| is nil. + * + * @related GMSPanoramaService + */ +typedef void (^GMSPanoramaCallback)(GMSPanorama *_Nullable panorama, NSError *_Nullable error); + +/** + * GMSPanoramaService can be used to request panorama metadata even when a GMSPanoramaView is not + * active. + * + * Get an instance like this: [[GMSPanoramaService alloc] init]. + */ +@interface GMSPanoramaService : NSObject + +/** + * Retrieves information about a panorama near the given |coordinate|. + * + * This is an asynchronous request, |callback| will be called with the result. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + callback:(GMSPanoramaCallback)callback; + +/** + * Similar to requestPanoramaNearCoordinate:callback: but allows specifying a search radius (meters) + * around |coordinate|. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius + callback:(GMSPanoramaCallback)callback; + +/** + * Similar to requestPanoramaNearCoordinate:callback: but allows specifying the panorama source type + * near the given |coordinate|. + * + * This API is experimental and may not always filter by source. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + source:(GMSPanoramaSource)source + callback:(GMSPanoramaCallback)callback; + +/** + * Similar to requestPanoramaNearCoordinate:callback: but allows specifying a search radius (meters) + * and the panorama source type near the given |coordinate|. + * + * This API is experimental and may not always filter by source. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius + source:(GMSPanoramaSource)source + callback:(GMSPanoramaCallback)callback; + +/** + * Retrieves information about a panorama with the given |panoramaID|. + * + * |callback| will be called with the result. Only panoramaIDs obtained from the Google Maps SDK for + * iOS are supported. + */ +- (void)requestPanoramaWithID:(NSString *)panoramaID callback:(GMSPanoramaCallback)callback; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaSource.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaSource.h new file mode 100755 index 00000000..f97d176c --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaSource.h @@ -0,0 +1,30 @@ +// +// GMSPanoramaSource.h +// Google Maps SDK for iOS +// +// Copyright 2017 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * \defgroup PanoramaSource GMSPanoramaSource + * @{ + */ + +/** + * Source types for Panoramas. Used to specify the source of a StreetView Panorama. + * + * This API is experimental. Results may not always match expectations. + */ +typedef NS_ENUM(NSUInteger, GMSPanoramaSource) { + /** Panoramas of locations either inside or outside. */ + kGMSPanoramaSourceDefault = 0, + /** Panoramas of locations outside. */ + kGMSPanoramaSourceOutside, +}; + +/**@}*/ diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaView.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaView.h new file mode 100755 index 00000000..e7e6f69a --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPanoramaView.h @@ -0,0 +1,299 @@ +// +// GMSPanoramaView.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSOrientation.h" +#import "GMSPanoramaLayer.h" +#import "GMSPanoramaSource.h" + +@class GMSMarker; +@class GMSPanorama; +@class GMSPanoramaCamera; +@class GMSPanoramaCameraUpdate; +@class GMSPanoramaView; + +NS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSPanoramaView. */ +@protocol GMSPanoramaViewDelegate +@optional + +/** + * Called when starting a move to another panorama. + * + * This can be the result of interactive navigation to a neighbouring panorama. + * + * At the moment this method is called, the |view|.panorama is still pointing to the old panorama, + * as the new panorama identified by |panoID| is not yet resolved. panoramaView:didMoveToPanorama: + * will be called when the new panorama is ready. + */ +- (void)panoramaView:(GMSPanoramaView *)view willMoveToPanoramaID:(NSString *)panoramaID; + +/** + * This is invoked every time the |view|.panorama property changes. + */ +- (void)panoramaView:(GMSPanoramaView *)view didMoveToPanorama:(nullable GMSPanorama *)panorama; + +/** + * Called when the panorama change was caused by invoking moveToPanoramaNearCoordinate:. The + * coordinate passed to that method will also be passed here. + */ +- (void)panoramaView:(GMSPanoramaView *)view + didMoveToPanorama:(GMSPanorama *)panorama + nearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called when moveNearCoordinate: produces an error. + */ +- (void)panoramaView:(GMSPanoramaView *)view + error:(NSError *)error + onMoveNearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called when moveToPanoramaID: produces an error. + */ +- (void)panoramaView:(GMSPanoramaView *)view + error:(NSError *)error + onMoveToPanoramaID:(NSString *)panoramaID; + +/** + * Called repeatedly during changes to the camera on GMSPanoramaView. This may not be called for all + * intermediate camera values, but is always called for the final position of the camera after an + * animation or gesture. + */ +- (void)panoramaView:(GMSPanoramaView *)panoramaView didMoveCamera:(GMSPanoramaCamera *)camera; + +/** + * Called when a user has tapped on the GMSPanoramaView, but this tap was not consumed (taps may be + * consumed by e.g., tapping on a navigation arrow). + */ +- (void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point; + +/** + * Called after a marker has been tapped. May return YES to indicate the event has been fully + * handled and suppress any default behavior. + */ +- (BOOL)panoramaView:(GMSPanoramaView *)panoramaView didTapMarker:(GMSMarker *)marker; + +/** + * Called when the panorama tiles for the current view have just been requested and are beginning to + * load. + */ +- (void)panoramaViewDidStartRendering:(GMSPanoramaView *)panoramaView; + +/** + * Called when the panorama tiles have been loaded (or permanently failed to load) and rendered on + * screen. + */ +- (void)panoramaViewDidFinishRendering:(GMSPanoramaView *)panoramaView; + +@end + +/** + * A panorama is used to display Street View imagery. It should be constructed via [[GMSPanoramaView + * alloc] initWithFrame:], and configured post-initialization. + * + * All properties and methods should be accessed on the main thread, similar to all UIKit objects. + * The GMSPanoramaViewDelegate methods will also be called back only on the main thread. + * + * The backgroundColor of this view is shown while no panorama is visible, such as while it is + * loading or if the panorama is later set to nil. The alpha color of backgroundColor is not + * supported. + */ +@interface GMSPanoramaView : UIView + +/** + * The panorama to display; setting it will transition to a new panorama. This is animated, except + * for the initial panorama. + * + * Can be set to nil to clear the view. + */ +@property(nonatomic, nullable) GMSPanorama *panorama; + +/** GMSPanoramaView delegate. */ +@property(nonatomic, weak, nullable) IBOutlet id delegate; + +/** + * Sets the preference for whether all gestures should be enabled (default) or disabled. + * + * This does not limit programmatic movement of the camera or control of the panorama. + */ +- (void)setAllGesturesEnabled:(BOOL)enabled; + +/** + * Controls whether orientation gestures are enabled (default) or disabled. If enabled, users may + * use gestures to change the orientation of the camera. + * + * This does not limit programmatic movement of the camera. + */ +@property(nonatomic) BOOL orientationGestures; + +/** + * Controls whether zoom gestures are enabled (default) or disabled. If enabled, users may pinch to + * zoom the camera. + * + * This does not limit programmatic movement of the camera. + */ +@property(nonatomic) BOOL zoomGestures; + +/** + * Controls whether navigation gestures are enabled (default) or disabled. If enabled, users may use + * a single tap on navigation links or double tap the view to change panoramas. + * + * This does not limit programmatic control of the panorama. + */ +@property(nonatomic) BOOL navigationGestures; + +/** + * Controls whether the tappable navigation links are hidden or visible (default). Hidden navigation + * links cannot be tapped. + */ +@property(nonatomic) BOOL navigationLinksHidden; + +/** + * Controls whether the street name overlays are hidden or visible (default). + */ +@property(nonatomic) BOOL streetNamesHidden; + +/** + * Controls the panorama's camera. Setting a new camera here jumps to the new camera value, with no + * animation. + */ +@property(nonatomic) GMSPanoramaCamera *camera; + +/** + * Accessor for the custom CALayer type used for the layer. + */ +@property(nonatomic, readonly, retain) GMSPanoramaLayer *layer; + +/** + * Animates the camera of this GMSPanoramaView to |camera|, over |duration| (specified in seconds). + */ +- (void)animateToCamera:(GMSPanoramaCamera *)camera animationDuration:(NSTimeInterval)duration; + +/** + * Modifies the camera according to |cameraUpdate|, over |duration| (specified in seconds). + */ +- (void)updateCamera:(GMSPanoramaCameraUpdate *)cameraUpdate + animationDuration:(NSTimeInterval)duration; + +/** + * Requests a panorama near |coordinate|. + * + * Upon successful completion panoramaView:didMoveToPanorama: and + * panoramaView:didMoveToPanorama:nearCoordinate: will be sent to GMSPanoramaViewDelegate. + * + * On error panoramaView:error:onMoveNearCoordinate: will be sent. + * + * Repeated calls to moveNearCoordinate: result in the previous pending (incomplete) transitions + * being cancelled -- only the most recent of moveNearCoordinate: and moveToPanoramaId: will proceed + * and generate events. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Similar to moveNearCoordinate: but allows specifying a search radius (meters) around + * |coordinate|. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate radius:(NSUInteger)radius; + +/** + * Similar to moveNearCoordinate: but allows specifying a source near |coordinate|. + * + * This API is experimental and may not always filter by source. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate source:(GMSPanoramaSource)source; + +/** + * Similar to moveNearCoordinate: but allows specifying a search radius (meters) around + * |coordinate| and a source. + * + * This API is experimental and may not always filter by source. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius + source:(GMSPanoramaSource)source; + +/** + * Requests a panorama with |panoramaID|. + * + * Upon successful completion panoramaView:didMoveToPanorama: will be sent to + * GMSPanoramaViewDelegate. + * + * On error panoramaView:error:onMoveToPanoramaID: will be sent. + * + * Repeated calls to moveToPanoramaID: result in the previous pending (incomplete) transitions being + * cancelled -- only the most recent of moveNearCoordinate: and moveToPanoramaId: will proceed and + * generate events. + * + * Only panoramaIDs obtained from the Google Maps SDK for iOS are supported. + */ +- (void)moveToPanoramaID:(NSString *)panoramaID; + +/** + * For the current view, returns the screen point the |orientation| points through. This value may + * be outside the view for forward facing orientations which are far enough away from straight + * ahead. + * + * The result will contain NaNs for camera orientations which point away from the view, where the + * implied screen point would have had a negative distance from the camera in the direction of + * orientation. + */ +- (CGPoint)pointForOrientation:(GMSOrientation)orientation; + +/** + * Given a point for this view, returns the current camera orientation pointing through that screen + * location. At the center of this view, the returned GMSOrientation will be approximately equal to + * that of the current GMSPanoramaCamera. + */ +- (GMSOrientation)orientationForPoint:(CGPoint)point; + +/** + * Convenience constructor for GMSPanoramaView, which searches for and displays a GMSPanorama near + * |coordinate|. This performs a similar action to that of moveNearCoordinate:, and will call the + * same delegate methods. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame nearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Similar to panoramaWithFrame:nearCoordinate: but allows specifying a search radius (meters) + * around |coordinate|. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame + nearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius; + +/** + * Convenience constructor for GMSPanoramaView, which searches for and displays a GMSPanorama near + * |coordinate|. This performs a similar action to that of moveNearCoordinate:source, and will call + * the same delegate methods. + * + * This API is experimental and may not always filter by source. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame + nearCoordinate:(CLLocationCoordinate2D)coordinate + source:(GMSPanoramaSource)source; +/** + * Convenience constructor for GMSPanoramaView, which searches for and displays a GMSPanorama near + * |coordinate|. This performs a similar action to that of moveNearCoordinate:radius:source, and + * will call the same delegate methods. + * + * This API is experimental and may not always filter by source. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame + nearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius + source:(GMSPanoramaSource)source; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPath.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPath.h new file mode 100755 index 00000000..311e2f05 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPath.h @@ -0,0 +1,112 @@ +// +// GMSPath.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPath encapsulates an immutable array of CLLocationCooordinate2D. All the coordinates of a + * GMSPath must be valid. The mutable counterpart is GMSMutablePath. + */ +@interface GMSPath : NSObject + +/** Convenience constructor for an empty path. */ ++ (instancetype)path; + +/** Initializes a newly allocated path with the contents of another GMSPath. */ +- (id)initWithPath:(GMSPath *)path; + +/** Get size of path. */ +- (NSUInteger)count; + +/** Returns kCLLocationCoordinate2DInvalid if |index| >= count. */ +- (CLLocationCoordinate2D)coordinateAtIndex:(NSUInteger)index; + +/** + * Initializes a newly allocated path from |encodedPath|. This format is described at: + * https://developers.google.com/maps/documentation/utilities/polylinealgorithm + */ ++ (nullable instancetype)pathFromEncodedPath:(NSString *)encodedPath; + +/** Returns an encoded string of the path in the format described above. */ +- (NSString *)encodedPath; + +/** + * Returns a new path obtained by adding |deltaLatitude| and |deltaLongitude| to each coordinate + * of the current path. Does not modify the current path. + */ +- (instancetype)pathOffsetByLatitude:(CLLocationDegrees)deltaLatitude + longitude:(CLLocationDegrees)deltaLongitude; + +@end + +/** + * kGMSEquatorProjectedMeter may be useful when specifying lengths for segment in "projected" units. + * The value of kGMSEquatorProjectedMeter, 1/(pi * EarthRadius), represents the length of one meter + * at the equator in projected units. For example to specify a projected length that corresponds + * to 100km at the equator use 100000 * kGMSEquatorProjectedMeter. + * See [GMSPath segmentsForLength:kind:], [GMSPath lengthOfKind:] and kGMSLengthProjected. + */ +extern const double kGMSEquatorProjectedMeter; + +/** + * \defgroup LengthKind GMSLengthKind + * @{ + */ + +/** + * GMSLengthKind indicates the type of a length value, which can be geodesic (in meters), rhumb + * length (in meters) and projected length (in GMSMapPoint units). + */ +typedef NS_ENUM(NSUInteger, GMSLengthKind) { + /* + * Geodesic length, in meters, along geodesic segments. May be useful, for example, to specify + * lengths along the the trajectory of airplanes or ships. + */ + kGMSLengthGeodesic, + + /* + * Rhumb length, in meters, along rhumb (straight line) segments. May be useful, for example, to + * draw a scale bar on a map. The visual size of a segment of a given length depens on the + * latitude. + */ + kGMSLengthRhumb, + + /* + * Length in projected space, along rhumb segments. Projected length uses the same units as + * GMSMapPoint - the Earth equator circumference has length 2. It is possible to specify projected + * length in units corresponding to 1 meter at the equator by multiplying with + * kGMSEquatorProjectedMeter, equal to 1/(pi * EarthRadius). + * + * Projected length may be useful, for example, to specify segments with the same visual length + * regardless of latitude. + */ + kGMSLengthProjected +}; + +/**@}*/ + +@interface GMSPath (GMSPathLength) + +/** + * Returns the fractional number of segments along the path that correspond to |length|, + * interpreted according to |kind|. See GMSLengthKind. + */ +- (double)segmentsForLength:(CLLocationDistance)length kind:(GMSLengthKind)kind; + +/** + * Returns the length of the path, according to |kind|. See GMSLengthKind. + */ +- (CLLocationDistance)lengthOfKind:(GMSLengthKind)kind; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPolygon.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPolygon.h new file mode 100755 index 00000000..817c9e8c --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPolygon.h @@ -0,0 +1,59 @@ +// +// GMSPolygon.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSOverlay.h" + +@class GMSPath; +@class GMSPolygonLayer; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPolygon defines a polygon that appears on the map. A polygon (like a polyline) defines a + * series of connected coordinates in an ordered sequence; additionally, polygons form a closed loop + * and define a filled region. + */ +@interface GMSPolygon : GMSOverlay + +/** The path that describes this polygon. The coordinates composing the path must be valid. */ +@property(nonatomic, copy, nullable) GMSPath *path; + +/** + * The array of GMSPath instances that describes any holes in this polygon. The coordinates + * composing each path must be valid. + */ +@property(nonatomic, copy, nullable) NSArray *holes; + +/** The width of the polygon outline in screen points. Defaults to 1. */ +@property(nonatomic) CGFloat strokeWidth; + +/** The color of the polygon outline. Defaults to nil. */ +@property(nonatomic, nullable) UIColor *strokeColor; + +/** The fill color. Defaults to blueColor. */ +@property(nonatomic, nullable) UIColor *fillColor; + +/** Whether this polygon should be rendered with geodesic correction. */ +@property(nonatomic) BOOL geodesic; + +/** Provides the Core Animation layer for this GMSPolygon. */ +@property(nonatomic, readonly) GMSPolygonLayer *layer; + +/** + * Convenience constructor for GMSPolygon for a particular path. Other properties will have default + * values. + */ ++ (instancetype)polygonWithPath:(nullable GMSPath *)path; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPolygonLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPolygonLayer.h new file mode 100755 index 00000000..f1860a53 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPolygonLayer.h @@ -0,0 +1,49 @@ +// +// GMSPolygonLayer.h +// Google Maps SDK for iOS +// +// Copyright 2018 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import "GMSOverlayLayer.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPolygonLayer is a subclass of GMSOverlayLayer, available on a per-polygon basis, that allows + * animation of several properties of its associated GMSPolygon. + * + * Note that this CALayer is never actually rendered directly, as GMSMapView is provided entirely + * via an OpenGL layer. As such, adjustments or animations to 'default' properties of CALayer will + * not have any effect. + */ +@interface GMSPolygonLayer : GMSOverlayLayer + +/** The width of the polygon outline in screen points. */ +@property(nonatomic) CGFloat strokeWidth; + +/** + * The color of the polygon outline. This is an assign property, there is an expectation for the + * GMSPolygon to own the reference if necessary. + */ +@property(nonatomic, assign, nullable) CGColorRef strokeColor; + +/** + * The fill color. This is an assign property, there is an expectation for the GMSPolygon to own the + * reference if necessary. + */ +@property(nonatomic, assign, nullable) CGColorRef fillColor; + +@end + +extern NSString *const kGMSPolygonLayerStrokeWidth; +extern NSString *const kGMSPolygonLayerStrokeColor; +extern NSString *const kGMSPolygonLayerFillColor; + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSPolyline.h b/HackIllinois/GoogleMaps.framework/Headers/GMSPolyline.h new file mode 100755 index 00000000..9f67db1f --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSPolyline.h @@ -0,0 +1,61 @@ +// +// GMSPolyline.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSOverlay.h" +#import "GMSStyleSpan.h" + +@class GMSPath; + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSPolyline specifies the available options for a polyline that exists on the Earth's surface. + * It is drawn as a physical line between the points specified in |path|. + */ +@interface GMSPolyline : GMSOverlay + +/** + * The path that describes this polyline. + */ +@property(nonatomic, copy, nullable) GMSPath *path; + +/** + * The width of the line in screen points. Defaults to 1. + */ +@property(nonatomic) CGFloat strokeWidth; + +/** + * The UIColor used to render the polyline. Defaults to [UIColor blueColor]. + */ +@property(nonatomic) UIColor *strokeColor; + +/** Whether this line should be rendered with geodesic correction. */ +@property(nonatomic) BOOL geodesic; + +/** + * Convenience constructor for GMSPolyline for a particular path. Other properties will have + * default values. + */ ++ (instancetype)polylineWithPath:(nullable GMSPath *)path; + +/** + * An array containing GMSStyleSpan, the spans used to render this polyline. + * + * If this array contains fewer segments than the polyline itself, the final segment will be applied + * over the remaining length. If this array is unset or empty, then |strokeColor| is used for the + * entire line instead. + */ +@property(nonatomic, copy, nullable) NSArray *spans; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSProjection.h b/HackIllinois/GoogleMaps.framework/Headers/GMSProjection.h new file mode 100755 index 00000000..a9350e0d --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSProjection.h @@ -0,0 +1,76 @@ +// +// GMSProjection.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +/** + * GMSVisibleRegion contains the four points defining the polygon that is visible in a map's camera. + * + * This polygon can be a trapezoid instead of a rectangle, because a camera can have tilt. If the + * camera is directly over the center of the camera, the shape is rectangular, but if the camera is + * tilted, the shape will appear to be a trapezoid whose smallest side is closest to the point of + * view. + */ +typedef struct { + /** Bottom left corner of the camera. */ + CLLocationCoordinate2D nearLeft; + + /** Bottom right corner of the camera. */ + CLLocationCoordinate2D nearRight; + + /** Far left corner of the camera. */ + CLLocationCoordinate2D farLeft; + + /** Far right corner of the camera. */ + CLLocationCoordinate2D farRight; +} GMSVisibleRegion; + +/** + * Defines a mapping between Earth coordinates (CLLocationCoordinate2D) and coordinates in the map's + * view (CGPoint). A projection is constant and immutable, in that the mapping it embodies never + * changes. The mapping is not necessarily linear. + * + * Passing invalid Earth coordinates (i.e., per CLLocationCoordinate2DIsValid) to this object may + * result in undefined behavior. + * + * This class should not be instantiated directly unless under testing conditions. Instead, obtain + * it via projection on GMSMapView. + */ +@interface GMSProjection : NSObject + +/** Maps an Earth coordinate to a point coordinate in the map's view. */ +- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; + +/** Maps a point coordinate in the map's view to an Earth coordinate. */ +- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point; + +/** + * Converts a distance in meters to content size. This is only accurate for small Earth distances, + * as it uses CGFloat for screen distances. + */ +- (CGFloat)pointsForMeters:(CLLocationDistance)meters + atCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns whether a given coordinate (lat/lng) is contained within the projection. + */ +- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns the region (four location coordinates) that is visible according to the projection. If + * padding was set on GMSMapView, this region takes the padding into account. + * + * The visible region can be non-rectangular. The result is undefined if the projection includes + * points that do not map to anywhere on the map (e.g., camera sees outer space). + */ +- (GMSVisibleRegion)visibleRegion; + +@end diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSServices.h b/HackIllinois/GoogleMaps.framework/Headers/GMSServices.h new file mode 100755 index 00000000..4ea29d55 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSServices.h @@ -0,0 +1,96 @@ +// +// GMSServices.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Service class for the Google Maps SDK for iOS. + * + * This class is not thread safe. All methods should only be invoked on the main thread. + */ +@interface GMSServices : NSObject + +/** + * Provides the shared instance of GMSServices for the Google Maps SDK for iOS, creating it if + * necessary. Classes such as GMSMapView and GMSPanoramaView will hold this instance to provide + * their connection to Google. + * + * This is an opaque object. If your application often creates and destroys view or service classes + * provided by the Google Maps SDK for iOS, it may be useful to hold onto this object directly, as + * otherwise your connection to Google may be restarted on a regular basis. It also may be useful to + * take this object in advance of the first map creation, to reduce initial map creation performance + * cost. + * + * This method will throw an exception if provideAPIKey: has not been called. + */ ++ (id)sharedServices; + +/** + * Provides your API key to the Google Maps SDK for iOS. This key is generated for your application + * via the Google Cloud Platform Console, and is paired with your application's bundle ID to + * identify it. This must be called exactly once by your application before any iOS Maps SDK + * object is initialized. + * + * @return YES if the APIKey was successfully provided. + */ ++ (BOOL)provideAPIKey:(NSString *)APIKey; + +/** + * Provides your API options to the Google Maps SDK for iOS. Pass an array containing an NSString + * for each option. These options apply to all maps. + * + * This may be called exactly once by your application and must be called before any iOS Maps SDK + * object is initialized. + * + * @return YES if all the APIOptions were successfully provided. + */ ++ (BOOL)provideAPIOptions:(NSArray *)APIOptions; + +/** + * Enables the map to render using Metal instead of OpenGL. + * + * The rendering might look very slightly different between renderers. The default is @c NO and + * value must be updated before the services instance is initialized. + * + * This property must be set from the main thread. + */ ++ (void)setMetalRendererEnabled:(BOOL)enabled; + +/** + * Enables reporting of abnormal SDK terminations such as the app crashes while the SDK is still + * running. This allows Google to improve SDK stability when applicable. The default is @c YES and + * value must be updated before the services instance is initialized. + * + * This property must be set from the main thread. + */ ++ (void)setAbnormalTerminationReportingEnabled:(BOOL)enabled; + +/** + * Returns the open source software license information for Google Maps SDK for iOS. This + * information must be made available within your application. + */ ++ (NSString *)openSourceLicenseInfo; + +/** + * Returns the version for this release of the Google Maps SDK for iOS. For example, "1.0.0" + */ ++ (NSString *)SDKVersion; + +/** + * Returns the long version for this release of the Google Maps SDK for iOS. For example, "1.0.0 + * (102.1)". + */ ++ (NSString *)SDKLongVersion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSStampStyle.h b/HackIllinois/GoogleMaps.framework/Headers/GMSStampStyle.h new file mode 100755 index 00000000..43d64659 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSStampStyle.h @@ -0,0 +1,56 @@ +// +// GMSStampStyle.h +// Google Maps SDK for iOS +// +// Copyright 2020 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * The abstract base class for polyline styles that draw a repeating image over a @c GMSStyleSpan. + */ +@interface GMSStampStyle : NSObject + +/** + * The image or texture that will repeated over a stroke. + * Note that this image will be compressed into a square - so for best results have a square image. + * The rendered stamps will be the width of the line that the GMSStrokeStyle is set on. The image + * will be oriented with the top of the image towards the start point, and the bottom of the image + * towards the end point. For example, if the underlying line has two points and the start point is + * directly above the endpoint, the stamp will appear in an upright orientation. + */ +@property(nonatomic, readonly) UIImage *stampImage; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +/** A polyline style that draws a repeating image over a @c GMSStyleSpan. */ +@interface GMSTextureStyle : GMSStampStyle + +/** + * Returns a texture stamp style with the given image. + * + * @param image A @c UIImage object to use as the stamp image. + * @return An initialized texture stamp style. + */ ++ (instancetype)textureStyleWithImage:(UIImage *)image + NS_SWIFT_UNAVAILABLE("Use initializer instead"); + +/** + * Returns an initialized texture stamp style with the given image. + * + * @param image A @c UIImage object to use as the stamp image. + * @return An initialized texture stamp style. + */ +- (instancetype)initWithImage:(UIImage *)image NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSStrokeStyle.h b/HackIllinois/GoogleMaps.framework/Headers/GMSStrokeStyle.h new file mode 100755 index 00000000..04a0099d --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSStrokeStyle.h @@ -0,0 +1,35 @@ +// +// GMSStrokeStyle.h +// Google Maps SDK for iOS +// +// Copyright 2019 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +@class GMSStampStyle; + +NS_ASSUME_NONNULL_BEGIN + +/** Describes the drawing style for one-dimensional entities such as polylines. */ +@interface GMSStrokeStyle : NSObject + +/** + * A repeated image over the stroke to allow a user to set a 2D texture on top of a stroke. + * If the image has transparent or semi-transparent portions, the underlying stroke color will show + * through in those places. Solid portions of the stamp will completely cover the base stroke. + */ +@property(nonatomic, strong, nullable) GMSStampStyle *stampStyle; + +/** Creates a solid color stroke style. */ ++ (instancetype)solidColor:(UIColor *)color; + +/** Creates a gradient stroke style interpolating from |fromColor| to |toColor|. */ ++ (instancetype)gradientFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSStyleSpan.h b/HackIllinois/GoogleMaps.framework/Headers/GMSStyleSpan.h new file mode 100755 index 00000000..08462bcf --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSStyleSpan.h @@ -0,0 +1,51 @@ +// +// GMSStyleSpan.h +// Google Maps SDK for iOS +// +// Copyright 2019 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSStrokeStyle.h" + +NS_ASSUME_NONNULL_BEGIN +/** Describes the style for some region of a polyline. */ +@interface GMSStyleSpan : NSObject + +/** + * Factory returning a solid color span of length one segment. Equivalent to + * [GMSStyleSpan spanWithStyle:[GMSStrokeStyle solidColor:|color|] segments:1]. + */ ++ (instancetype)spanWithColor:(UIColor *)color; + +/** + * Factory returning a solid color span with a given number of segments. Equivalent to + * [GMSStyleSpan spanWithStyle:[GMSStrokeStyle solidColor:|color|] segments:|segments|]. + */ ++ (instancetype)spanWithColor:(UIColor *)color segments:(double)segments; + +/** + * Factory returning a span with the given |style| of length one segment. Equivalent to + * [GMSStyleSpan spanWithStyle:|style| segments:1]. + */ ++ (instancetype)spanWithStyle:(GMSStrokeStyle *)style; + +/** + * Factory returning a span with the given |style| and length in number of segments. + * |segments| must be greater than 0 (i.e. can't be 0). + */ ++ (instancetype)spanWithStyle:(GMSStrokeStyle *)style segments:(double)segments; + +/** The style of this span. */ +@property(nonatomic, readonly) GMSStrokeStyle *style; + +/** The length of this span in number of segments. */ +@property(nonatomic, readonly) double segments; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSSyncTileLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSSyncTileLayer.h new file mode 100755 index 00000000..ca3f91bb --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSSyncTileLayer.h @@ -0,0 +1,35 @@ +// +// GMSSyncTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import "GMSTileLayer.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSSyncTileLayer is an abstract subclass of GMSTileLayer that provides a sync interface to + * generate image tile data. + */ +@interface GMSSyncTileLayer : GMSTileLayer + +/** + * As per requestTileForX:y:zoom:receiver: on GMSTileLayer, but provides a synchronous interface to + * return tiles. This method may block or otherwise perform work, and is not called on the main + * thread. + * + * Calls to this method may also be made from multiple threads so implementations must be + * threadsafe. + */ +- (nullable UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSTileLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSTileLayer.h new file mode 100755 index 00000000..5ad82706 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSTileLayer.h @@ -0,0 +1,105 @@ +// +// GMSTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +@class GMSMapView; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Stub tile that is used to indicate that no tile exists for a specific tile coordinate. May be + * returned by tileForX:y:zoom: on GMSTileOverlay. + */ +FOUNDATION_EXTERN UIImage *const kGMSTileLayerNoTile; + +/** + * GMSTileReceiver is provided to GMSTileLayer when a tile request is made, allowing the callback to + * be later (or immediately) invoked. + */ +@protocol GMSTileReceiver +- (void)receiveTileWithX:(NSUInteger)x + y:(NSUInteger)y + zoom:(NSUInteger)zoom + image:(nullable UIImage *)image; +@end + +/** + * GMSTileLayer is an abstract class that allows overlaying of custom image tiles on a specified + * GMSMapView. It may not be initialized directly, and subclasses must implement the + * tileForX:y:zoom: method to return tiles. + * + * At zoom level 0 the whole world is a square covered by a single tile, and the coordinates |x| and + * |y| are both 0 for that tile. At zoom level 1, the world is covered by 4 tiles with |x| and |y| + * being 0 or 1, and so on. + */ +@interface GMSTileLayer : NSObject + +/** + * requestTileForX:y:zoom:receiver: generates image tiles for GMSTileOverlay. It must be overridden + * by subclasses. The tile for the given |x|, |y| and |zoom| _must_ be later passed to |receiver|. + * + * Specify kGMSTileLayerNoTile if no tile is available for this location; or nil if a transient + * error occured and a tile may be available later. + * + * Calls to this method will be made on the main thread. See GMSSyncTileLayer for a base class that + * implements a blocking tile layer that does not run on your application's main thread. + */ +- (void)requestTileForX:(NSUInteger)x + y:(NSUInteger)y + zoom:(NSUInteger)zoom + receiver:(id)receiver; + +/** + * Clears the cache so that all tiles will be requested again. + */ +- (void)clearTileCache; + +/** + * The map this GMSTileOverlay is displayed on. Setting this property will add the layer to the map. + * Setting it to nil removes this layer from the map. A layer may be active on at most one map at + * any given time. + */ +@property(nonatomic, weak, nullable) GMSMapView *map; + +/** + * Higher |zIndex| value tile layers will be drawn on top of lower |zIndex| value tile layers and + * overlays. Equal values result in undefined draw ordering. + */ +@property(nonatomic) int zIndex; + +/** + * Specifies the number of pixels (not points) that the returned tile images will prefer to display + * as. For best results, this should be the edge length of your custom tiles. Defaults to 256, which + * is the traditional size of Google Maps tiles. + * + * Values less than the equivalent of 128 points (e.g. 256 pixels on retina devices) may not perform + * well and are not recommended. + * + * As an example, an application developer may wish to provide retina tiles (512 pixel edge length) + * on retina devices, to keep the same number of tiles + * per view as the default value of 256 would give on a non-retina device. + */ +@property(nonatomic) NSInteger tileSize; + +/** + * Specifies the opacity of the tile layer. This provides a multiplier for the alpha channel of tile + * images. + */ +@property(nonatomic) float opacity; + +/** + * Specifies whether the tiles should fade in. Default YES. + */ +@property(nonatomic) BOOL fadeIn; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSUISettings.h b/HackIllinois/GoogleMaps.framework/Headers/GMSUISettings.h new file mode 100755 index 00000000..0b81e5c0 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSUISettings.h @@ -0,0 +1,91 @@ +// +// GMSUISettings.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** Settings for the user interface of a GMSMapView. */ +@interface GMSUISettings : NSObject + +/** + * Sets the preference for whether all gestures should be enabled (default) or disabled. This + * doesn't restrict users from tapping any on screen buttons to move the camera (e.g., compass or + * zoom controls), nor does it restrict programmatic movements and animation. + */ +- (void)setAllGesturesEnabled:(BOOL)enabled; + +/** + * Controls whether scroll gestures are enabled (default) or disabled. If enabled, users may drag to + * pan the camera. This does not limit programmatic movement of the camera. + */ +@property(nonatomic) BOOL scrollGestures; + +/** + * Controls whether zoom gestures are enabled (default) or disabled. If enabled, users may double + * tap/two-finger tap or pinch to zoom the camera. This does not limit programmatic movement of the + * camera. + */ +@property(nonatomic) BOOL zoomGestures; + +/** + * Controls whether tilt gestures are enabled (default) or disabled. If enabled, users may use a + * two-finger vertical down or up swipe to tilt the camera. This does not limit programmatic control + * of the camera's viewingAngle. + */ +@property(nonatomic) BOOL tiltGestures; + +/** + * Controls whether rotate gestures are enabled (default) or disabled. If enabled, users may use a + * two-finger rotate gesture to rotate the camera. This does not limit programmatic control of the + * camera's bearing. + */ +@property(nonatomic) BOOL rotateGestures; + +/** + * Controls whether gestures by users are completely consumed by the GMSMapView when gestures are + * enabled (default YES). This prevents these gestures from being received by parent views. + * + * When the GMSMapView is contained by a UIScrollView (or other scrollable area), this means that + * gestures on the map will not be additional consumed as scroll gestures. However, disabling this + * (set to NO) may be useful to support complex view hierarchies or requirements. + */ +@property(nonatomic) BOOL consumesGesturesInView; + +/** + * Enables or disables the compass. The compass is an icon on the map that indicates the direction + * of north on the map. + * + * If enabled, it is only shown when the camera is rotated away from its default orientation + * (bearing of 0). When a user taps the compass, the camera orients itself to its default + * orientation and fades away shortly after. If disabled, the compass will never be displayed. + */ +@property(nonatomic) BOOL compassButton; + +/** + * Enables or disables the My Location button. This is a button visible on the map that, when tapped + * by users, will center the map on the current user location. + */ +@property(nonatomic) BOOL myLocationButton; + +/** + * Enables (default) or disables the indoor floor picker. + * + * If enabled, it is only visible when the view is focused on a building with indoor floor data. If + * disabled, the selected floor can still be controlled programmatically via the indoorDisplay + * mapView property. + */ +@property(nonatomic) BOOL indoorPicker; + +/** + * Controls whether rotate and zoom gestures can be performed off-center and scrolled around + * (default YES). + */ +@property(nonatomic) BOOL allowScrollGesturesDuringRotateOrZoom; + +@end diff --git a/HackIllinois/GoogleMaps.framework/Headers/GMSURLTileLayer.h b/HackIllinois/GoogleMaps.framework/Headers/GMSURLTileLayer.h new file mode 100755 index 00000000..71671667 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GMSURLTileLayer.h @@ -0,0 +1,56 @@ +// +// GMSURLTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import "GMSTileLayer.h" + +@class NSURL; + +NS_ASSUME_NONNULL_BEGIN + +/** + * |GMSTileURLConstructor| is a block taking |x|, |y| and |zoom| and returning an NSURL, or nil to + * indicate no tile for that location. + * + * @related GMSURLTileLayer + */ +typedef NSURL *_Nullable (^GMSTileURLConstructor)(NSUInteger x, NSUInteger y, NSUInteger zoom); + +/** + * GMSURLTileProvider fetches tiles based on the URLs returned from a GMSTileURLConstructor. For + * example: + *
+ *   GMSTileURLConstructor constructor = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) {
+ *     NSString *URLStr =
+ *         [NSString stringWithFormat:@"https://example.com/%d/%d/%d.png", x, y, zoom];
+ *     return [NSURL URLWithString:URLStr];
+ *   };
+ *   GMSTileLayer *layer =
+ *       [GMSURLTileLayer tileLayerWithURLConstructor:constructor];
+ *   layer.userAgent = @"SDK user agent";
+ *   layer.map = map;
+ * 
+ * + * GMSURLTileProvider may not be subclassed and should only be created via its convenience + * constructor. + */ +@interface GMSURLTileLayer : GMSTileLayer + +/** Convenience constructor. |constructor| must be non-nil. */ ++ (instancetype)tileLayerWithURLConstructor:(GMSTileURLConstructor)constructor; + +/** + * Specify the user agent to describe your application. If this is nil (the default), the default + * iOS user agent is used for HTTP requests. + */ +@property(nonatomic, copy, nullable) NSString *userAgent; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMaps.framework/Headers/GoogleMaps.h b/HackIllinois/GoogleMaps.framework/Headers/GoogleMaps.h new file mode 100755 index 00000000..ee10b3c7 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Headers/GoogleMaps.h @@ -0,0 +1,46 @@ +#import "GMSIndoorBuilding.h" +#import "GMSIndoorLevel.h" +#import "GMSAddress.h" +#import "GMSCALayer.h" +#import "GMSCameraPosition.h" +#import "GMSCameraUpdate.h" +#import "GMSCircle.h" +#import "GMSCoordinateBounds+GoogleMaps.h" +#import "GMSGeocoder.h" +#import "GMSGeometryUtils.h" +#import "GMSGroundOverlay.h" +#import "GMSIndoorDisplay.h" +#import "GMSMapID.h" +#import "GMSMapLayer.h" +#import "GMSMapStyle.h" +#import "GMSMapView+Animation.h" +#import "GMSMapView.h" +#import "GMSMarker.h" +#import "GMSMarkerAnimation.h" +#import "GMSMarkerLayer.h" +#import "GMSMutablePath.h" +#import "GMSOrientation.h" +#import "GMSOverlay.h" +#import "GMSOverlayLayer.h" +#import "GMSPanorama.h" +#import "GMSPanoramaCamera.h" +#import "GMSPanoramaCameraUpdate.h" +#import "GMSPanoramaLayer.h" +#import "GMSPanoramaLink.h" +#import "GMSPanoramaService.h" +#import "GMSPanoramaSource.h" +#import "GMSPanoramaView.h" +#import "GMSPath.h" +#import "GMSPolygon.h" +#import "GMSPolygonLayer.h" +#import "GMSPolyline.h" +#import "GMSProjection.h" +#import "GMSServices.h" +#import "GMSStampStyle.h" +#import "GMSStrokeStyle.h" +#import "GMSStyleSpan.h" +#import "GMSSyncTileLayer.h" +#import "GMSTileLayer.h" +#import "GMSUISettings.h" +#import "GMSURLTileLayer.h" +#import "GMSAccessibilityLabels.h" diff --git a/HackIllinois/GoogleMaps.framework/Modules/module.modulemap b/HackIllinois/GoogleMaps.framework/Modules/module.modulemap new file mode 100755 index 00000000..38ca6666 --- /dev/null +++ b/HackIllinois/GoogleMaps.framework/Modules/module.modulemap @@ -0,0 +1,23 @@ +framework module GoogleMaps { + umbrella header "GoogleMaps.h" + export * + module * { export * } + link "m" + link "z" + link framework "CoreData" + link framework "CoreFoundation" + link framework "CoreGraphics" + link framework "CoreImage" + link framework "CoreLocation" + link framework "CoreTelephony" + link framework "CoreText" + link framework "Foundation" + link framework "GLKit" + link framework "ImageIO" + link framework "Metal" + link framework "OpenGLES" + link framework "QuartzCore" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" +} diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Assets.car b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Assets.car new file mode 100755 index 00000000..fbbf25cd Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Assets.car differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom new file mode 100755 index 00000000..deaabbc4 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileProto.mom b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileProto.mom new file mode 100755 index 00000000..3a83243c Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileProto.mom differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileVersionID.mom b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileVersionID.mom new file mode 100755 index 00000000..2ba69475 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/StorageWithTileVersionID.mom differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist new file mode 100755 index 00000000..38c1a01e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Assets.car b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Assets.car new file mode 100755 index 00000000..53c78e92 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Assets.car differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf new file mode 100755 index 00000000..2aca5f5f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png new file mode 100755 index 00000000..852182ef Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png new file mode 100755 index 00000000..be8282a8 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png new file mode 100755 index 00000000..680ef5df Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png new file mode 100755 index 00000000..af7815cc Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png new file mode 100755 index 00000000..d6e9e8fe Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png new file mode 100755 index 00000000..668d8fe8 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShaders.metallib b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShaders.metallib new file mode 100755 index 00000000..dac00674 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShaders.metallib differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShadersSim.metallib b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShadersSim.metallib new file mode 100755 index 00000000..1442fa30 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSShadersSim.metallib differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png new file mode 100755 index 00000000..a3d86c40 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png new file mode 100755 index 00000000..37dcbef3 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png new file mode 100755 index 00000000..09129cd2 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist new file mode 100755 index 00000000..3821e63b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf new file mode 100755 index 00000000..4717d70c Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings new file mode 100755 index 00000000..7d5d573b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png new file mode 100755 index 00000000..cec89b6e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png new file mode 100755 index 00000000..7a3d29d0 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png new file mode 100755 index 00000000..74eace5e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png new file mode 100755 index 00000000..11fee99e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png new file mode 100755 index 00000000..a73d1d6e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png new file mode 100755 index 00000000..df8c234e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png new file mode 100755 index 00000000..dccbf03d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png new file mode 100755 index 00000000..c09a65f7 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png new file mode 100755 index 00000000..379be629 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings new file mode 100755 index 00000000..7fd197d3 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings new file mode 100755 index 00000000..c1f92991 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings new file mode 100755 index 00000000..4803e47f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png new file mode 100755 index 00000000..7f7c2fed Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings new file mode 100755 index 00000000..94a75ba8 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings new file mode 100755 index 00000000..8030d8f1 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings new file mode 100755 index 00000000..5c98926b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings new file mode 100755 index 00000000..c03b33c7 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings new file mode 100755 index 00000000..c03b33c7 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings new file mode 100755 index 00000000..c03b33c7 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings new file mode 100755 index 00000000..d4d625cb Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings new file mode 100755 index 00000000..28e15b50 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings new file mode 100755 index 00000000..28e15b50 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings new file mode 100755 index 00000000..8a93b819 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings new file mode 100755 index 00000000..7f18b50c Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings new file mode 100755 index 00000000..339bbb98 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings new file mode 100755 index 00000000..7e1faf62 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings new file mode 100755 index 00000000..f121b386 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings new file mode 100755 index 00000000..e73adca3 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings new file mode 100755 index 00000000..2eed3af7 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt.png new file mode 100755 index 00000000..c44be9a2 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@2x.png new file mode 100755 index 00000000..afe4d23c Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@3x.png new file mode 100755 index 00000000..6bbadd2f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt.png new file mode 100755 index 00000000..eef5bffc Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@2x.png new file mode 100755 index 00000000..fb7a1ed5 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@3x.png new file mode 100755 index 00000000..d73437bf Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_closed_place_waypoint_alert_night_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png new file mode 100755 index 00000000..db933c80 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png new file mode 100755 index 00000000..65fee675 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt.png new file mode 100755 index 00000000..a765b86d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@2x.png new file mode 100755 index 00000000..01a79a69 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@3x.png new file mode 100755 index 00000000..90542c30 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large.png new file mode 100755 index 00000000..21d2e709 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@2x.png new file mode 100755 index 00000000..3aaa92b6 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@3x.png new file mode 100755 index 00000000..9cb93b78 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle_large@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt.png new file mode 100755 index 00000000..15d18be3 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@2x.png new file mode 100755 index 00000000..3d59b085 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@3x.png new file mode 100755 index 00000000..f478c9bd Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_border_waypoint_alert_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt.png new file mode 100755 index 00000000..06a98828 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@2x.png new file mode 100755 index 00000000..db9bc9a2 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@3x.png new file mode 100755 index 00000000..44a93a86 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt.png new file mode 100755 index 00000000..453bc6ee Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@2x.png new file mode 100755 index 00000000..f0f0e904 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@3x.png new file mode 100755 index 00000000..a60770ca Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_checkpoint_waypoint_alert_night_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt.png new file mode 100755 index 00000000..bd408df8 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@2x.png new file mode 100755 index 00000000..c8c176de Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@3x.png new file mode 100755 index 00000000..c70a31a1 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt.png new file mode 100755 index 00000000..81b60288 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@2x.png new file mode 100755 index 00000000..f631de5f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@3x.png new file mode 100755 index 00000000..e07bccee Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_covid_medical_waypoint_alert_night_32pt@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off.png new file mode 100755 index 00000000..2bf7984e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@2x.png new file mode 100755 index 00000000..565195fb Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@3x.png new file mode 100755 index 00000000..4be8cb32 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_location_off@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png new file mode 100755 index 00000000..dccdcfd4 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png new file mode 100755 index 00000000..ccb840e4 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png new file mode 100755 index 00000000..0300f62e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings new file mode 100755 index 00000000..73141967 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings new file mode 100755 index 00000000..d78248fd Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings new file mode 100755 index 00000000..1495ebdc Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ka.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ka.lproj/GMSCore.strings new file mode 100755 index 00000000..3b9711da Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ka.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings new file mode 100755 index 00000000..ee6a254f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lt.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lt.lproj/GMSCore.strings new file mode 100755 index 00000000..ab0f769c Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lt.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lv.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lv.lproj/GMSCore.strings new file mode 100755 index 00000000..17b3913e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/lv.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings new file mode 100755 index 00000000..a00271f9 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/my.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/my.lproj/GMSCore.strings new file mode 100755 index 00000000..6d2a46ca Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/my.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings new file mode 100755 index 00000000..a3b68054 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings new file mode 100755 index 00000000..21c77cbc Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings new file mode 100755 index 00000000..3294963e Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png new file mode 100755 index 00000000..23c22ba5 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png new file mode 100755 index 00000000..05120207 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings new file mode 100755 index 00000000..55b8a3b6 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings new file mode 100755 index 00000000..55b8a3b6 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings new file mode 100755 index 00000000..738f6e1b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings new file mode 100755 index 00000000..709dc67d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png new file mode 100755 index 00000000..b6ba5ec0 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png new file mode 100755 index 00000000..08672e68 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png new file mode 100755 index 00000000..ba0b0a55 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png new file mode 100755 index 00000000..6317a5c3 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png new file mode 100755 index 00000000..45a66a47 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png new file mode 100755 index 00000000..ed0424b5 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png new file mode 100755 index 00000000..b2efb5d4 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png new file mode 100755 index 00000000..664e9f65 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png new file mode 100755 index 00000000..dabc3522 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings new file mode 100755 index 00000000..7f1499bb Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings new file mode 100755 index 00000000..79508966 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sq.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sq.lproj/GMSCore.strings new file mode 100755 index 00000000..eb0c5f62 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sq.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sr.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sr.lproj/GMSCore.strings new file mode 100755 index 00000000..2741a27d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sr.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings new file mode 100755 index 00000000..5d3434a6 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sw.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sw.lproj/GMSCore.strings new file mode 100755 index 00000000..9fa3dc97 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sw.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings new file mode 100755 index 00000000..d6436541 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings new file mode 100755 index 00000000..0e549e1d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings new file mode 100755 index 00000000..19927a81 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings new file mode 100755 index 00000000..c165157d Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings new file mode 100755 index 00000000..22f6eb1f Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings new file mode 100755 index 00000000..fc14ec8b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings new file mode 100755 index 00000000..eb0695c4 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Info.plist b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Info.plist new file mode 100755 index 00000000..962000e0 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/Info.plist differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left.png new file mode 100755 index 00000000..c8e4a419 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@2x.png new file mode 100755 index 00000000..3e8fdcae Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@3x.png new file mode 100755 index 00000000..1d8aee7b Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_left@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right.png new file mode 100755 index 00000000..61897145 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@2x.png new file mode 100755 index 00000000..8abc3f78 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@3x.png new file mode 100755 index 00000000..7c35f064 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/bubble_right@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error.png new file mode 100755 index 00000000..c74eda99 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@2x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@2x.png new file mode 100755 index 00000000..a640b5ac Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@2x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@3x.png b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@3x.png new file mode 100755 index 00000000..a4ecc4ba Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/ic_error@3x.png differ diff --git a/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz new file mode 100755 index 00000000..50f2a2a6 Binary files /dev/null and b/HackIllinois/GoogleMaps.framework/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz differ diff --git a/HackIllinois/GoogleMapsBase.framework/GoogleMapsBase b/HackIllinois/GoogleMapsBase.framework/GoogleMapsBase new file mode 100755 index 00000000..e8d243de Binary files /dev/null and b/HackIllinois/GoogleMapsBase.framework/GoogleMapsBase differ diff --git a/HackIllinois/GoogleMapsBase.framework/Headers/GMSCompatabilityMacros.h b/HackIllinois/GoogleMapsBase.framework/Headers/GMSCompatabilityMacros.h new file mode 100755 index 00000000..1d58b003 --- /dev/null +++ b/HackIllinois/GoogleMapsBase.framework/Headers/GMSCompatabilityMacros.h @@ -0,0 +1,19 @@ +// +// GMSCompatabilityMacros.h +// Google Maps SDK for iOS +// +// Copyright 2015 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if defined(SWIFT_SDK_OVERLAY_UIKIT_EPOCH) +#define GMS_SWIFT_NAME_2_0_3_0(name_swift_2, name_swift_3) \ + NS_SWIFT_NAME(name_swift_3) +#else +#define GMS_SWIFT_NAME_2_0_3_0(name_swift_2, name_swift_3) \ + NS_SWIFT_NAME(name_swift_2) +#endif diff --git a/HackIllinois/GoogleMapsBase.framework/Headers/GMSCoordinateBounds.h b/HackIllinois/GoogleMapsBase.framework/Headers/GMSCoordinateBounds.h new file mode 100755 index 00000000..0f6c2cdb --- /dev/null +++ b/HackIllinois/GoogleMapsBase.framework/Headers/GMSCoordinateBounds.h @@ -0,0 +1,75 @@ +// +// GMSCoordinateBounds.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * GMSCoordinateBounds represents a rectangular bounding box on the Earth's surface. + * GMSCoordinateBounds is immutable and can't be modified after construction. + */ +@interface GMSCoordinateBounds : NSObject + +/** The North-East corner of these bounds. */ +@property(nonatomic, readonly) CLLocationCoordinate2D northEast; + +/** The South-West corner of these bounds. */ +@property(nonatomic, readonly) CLLocationCoordinate2D southWest; + +/** + * Returns NO if this bounds does not contain any points. For example, + * [[GMSCoordinateBounds alloc] init].valid == NO. + * + * When an invalid bounds is expanded with valid coordinates via includingCoordinate: or + * includingBounds:, the resulting bounds will be valid but contain only the new coordinates. + */ +@property(nonatomic, readonly, getter=isValid) BOOL valid; + +/** + * Inits the northEast and southWest bounds corresponding to the rectangular region defined by the + * two corners. + * + * It is ambiguous whether the longitude of the box extends from |coord1| to |coord2| or vice-versa; + * the box is constructed as the smaller of the two variants, eliminating the ambiguity. + */ +- (id)initWithCoordinate:(CLLocationCoordinate2D)coord1 coordinate:(CLLocationCoordinate2D)coord2; + +/** + * Returns a GMSCoordinateBounds representing the current bounds extended to include the passed-in + * coordinate. + * + * If the current bounds is invalid, the result is a valid bounds containing only |coordinate|. + */ +- (GMSCoordinateBounds *)includingCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns a GMSCoordinateBounds representing the current bounds extended to include the entire + * other bounds. + * + * If the current bounds is invalid, the result is a valid bounds equal to |other|. + */ +- (GMSCoordinateBounds *)includingBounds:(GMSCoordinateBounds *)other; + +/** + * Returns YES if |coordinate| is contained within this bounds. This includes points that lie + * exactly on the edge of the bounds. + */ +- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns YES if |other| overlaps with this bounds. Two bounds are overlapping if there is at least + * one coordinate point contained by both. + */ +- (BOOL)intersectsBounds:(GMSCoordinateBounds *)other; + +@end + +NS_ASSUME_NONNULL_END diff --git a/HackIllinois/GoogleMapsBase.framework/Headers/GMSDeprecationMacros.h b/HackIllinois/GoogleMapsBase.framework/Headers/GMSDeprecationMacros.h new file mode 100755 index 00000000..6000d968 --- /dev/null +++ b/HackIllinois/GoogleMapsBase.framework/Headers/GMSDeprecationMacros.h @@ -0,0 +1,22 @@ +// +// GMSDeprecationMacros.h +// Google Maps SDK for iOS +// +// Copyright 2015 Google LLC +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#ifndef IPHONE_MAPS_SDK_BASE_API_GMSDEPRECATIONMACROS_H_ +#define IPHONE_MAPS_SDK_BASE_API_GMSDEPRECATIONMACROS_H_ + +#ifndef __GMS_AVAILABLE_BUT_DEPRECATED +#define __GMS_AVAILABLE_BUT_DEPRECATED __deprecated +#endif + +#ifndef __GMS_AVAILABLE_BUT_DEPRECATED_MSG +#define __GMS_AVAILABLE_BUT_DEPRECATED_MSG(msg) __deprecated_msg(msg) +#endif + +#endif diff --git a/HackIllinois/GoogleMapsBase.framework/Headers/GoogleMapsBase.h b/HackIllinois/GoogleMapsBase.framework/Headers/GoogleMapsBase.h new file mode 100755 index 00000000..95ec44c0 --- /dev/null +++ b/HackIllinois/GoogleMapsBase.framework/Headers/GoogleMapsBase.h @@ -0,0 +1,3 @@ +#import "GMSCompatabilityMacros.h" +#import "GMSCoordinateBounds.h" +#import "GMSDeprecationMacros.h" diff --git a/HackIllinois/GoogleMapsBase.framework/Modules/module.modulemap b/HackIllinois/GoogleMapsBase.framework/Modules/module.modulemap new file mode 100755 index 00000000..ad1d2fba --- /dev/null +++ b/HackIllinois/GoogleMapsBase.framework/Modules/module.modulemap @@ -0,0 +1,15 @@ +framework module GoogleMapsBase { + umbrella header "GoogleMapsBase.h" + export * + module * { export * } + link "z" + link framework "CoreFoundation" + link framework "CoreGraphics" + link framework "CoreLocation" + link framework "CoreTelephony" + link framework "CoreText" + link framework "Foundation" + link framework "QuartzCore" + link framework "Security" + link framework "UIKit" +} diff --git a/HackIllinois/GoogleMapsCore.framework/GoogleMapsCore b/HackIllinois/GoogleMapsCore.framework/GoogleMapsCore new file mode 100755 index 00000000..b99da4dc Binary files /dev/null and b/HackIllinois/GoogleMapsCore.framework/GoogleMapsCore differ diff --git a/HackIllinois/GoogleMapsCore.framework/Modules/module.modulemap b/HackIllinois/GoogleMapsCore.framework/Modules/module.modulemap new file mode 100755 index 00000000..7e481676 --- /dev/null +++ b/HackIllinois/GoogleMapsCore.framework/Modules/module.modulemap @@ -0,0 +1,21 @@ +framework module GoogleMapsCore { + export * + link "m" + link "z" + link framework "CoreData" + link framework "CoreFoundation" + link framework "CoreGraphics" + link framework "CoreImage" + link framework "CoreLocation" + link framework "CoreTelephony" + link framework "CoreText" + link framework "Foundation" + link framework "GLKit" + link framework "ImageIO" + link framework "Metal" + link framework "OpenGLES" + link framework "QuartzCore" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" +} diff --git a/HackIllinois/Info.plist b/HackIllinois/Info.plist index cd70585b..5674f670 100644 --- a/HackIllinois/Info.plist +++ b/HackIllinois/Info.plist @@ -39,6 +39,10 @@ Used to scan in attendees for events NSLocationWhenInUseUsageDescription Used to display your current location in maps + UIAppFonts + + Montserrat-VariableFont_wght.ttf + UIBackgroundModes remote-notification diff --git a/HackIllinois/Misc/Constants.swift b/HackIllinois/Misc/Constants.swift index 1c390f00..be84ef95 100644 --- a/HackIllinois/Misc/Constants.swift +++ b/HackIllinois/Misc/Constants.swift @@ -23,8 +23,23 @@ struct HIConstants { return "org.hackillinois.ios.pass_prompted_\(user.id)" } // Images - static let PROFILE_IMAGES: [String: HIImage] = ["https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-0.png": \.profile0, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-1.png": \.profile1, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-2.png": \.profile2, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-3.png": \.profile3, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-4.png": \.profile4, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-5.png": \.profile5, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-6.png": \.profile6, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-7.png": \.profile7, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-8.png": \.profile8, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-9.png": \.profile9, "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/profile-10.png": \.profile10] + private static let url = "https://hackillinois-upload.s3.amazonaws.com/photos/profiles-2022/" + + static let PROFILE_IMAGES: [String: HIImage] = [ + "\(url)profile-0.png": \.profile0, + "\(url)profile-1.png": \.profile1, + "\(url)/profile-2.png": \.profile2, + "\(url)/profile-3.png": \.profile3, + "\(url)/profile-4.png": \.profile4, + "\(url)/profile-5.png": \.profile5, + "\(url)/profile-6.png": \.profile6, + "\(url)/profile-7.png": \.profile7, + "\(url)/profile-8.png": \.profile8, + "\(url)/profile-9.png": \.profile9, + "\(url)/profile-10.png": \.profile10 + ] static let LEADERBOARD_PROFILE_LIMIT = 10 static let MAX_EVENT_DESCRIPTION_LENGTH = 75 static let ASYNC_EVENT_TIME_TEXT = "All Day" + static let ONLINE_EVENT_LOCATION_TEXT = "Online" } diff --git a/HackIllinois/Misc/Formatters.swift b/HackIllinois/Misc/Formatters.swift index caf8ae16..1b0bdea8 100644 --- a/HackIllinois/Misc/Formatters.swift +++ b/HackIllinois/Misc/Formatters.swift @@ -41,45 +41,45 @@ extension Date { switch timeSinceDate { // YEARS - case (2 * YEAR_IN_SECONDS)... : + case (2 * YEAR_IN_SECONDS)...: let years = Int(floor(timeSinceDate/YEAR_IN_SECONDS)) return "\(years)y ago" - case (1 * YEAR_IN_SECONDS)... : + case (1 * YEAR_IN_SECONDS)...: return "last year" // MONTH - case (2 * MONTH_IN_SECONDS)... : + case (2 * MONTH_IN_SECONDS)...: let month = Int(floor(timeSinceDate/MONTH_IN_SECONDS)) return "\(month)mo ago" - case (1 * MONTH_IN_SECONDS)... : + case (1 * MONTH_IN_SECONDS)...: return "last month" // WEEK - case (2 * WEEK_IN_SECONDS)... : + case (2 * WEEK_IN_SECONDS)...: let week = Int(floor(timeSinceDate/WEEK_IN_SECONDS)) return "\(week)w ago" - case (1 * WEEK_IN_SECONDS)... : + case (1 * WEEK_IN_SECONDS)...: return "last week" // DAY - case (2 * DAY_IN_SECONDS)... : + case (2 * DAY_IN_SECONDS)...: let day = Int(floor(timeSinceDate/DAY_IN_SECONDS)) return "\(day)d ago" - case (1 * DAY_IN_SECONDS)... : + case (1 * DAY_IN_SECONDS)...: return "yesterday" // HOUR - case (2 * HOUR_IN_SECONDS)... : + case (2 * HOUR_IN_SECONDS)...: let hour = Int(floor(timeSinceDate/HOUR_IN_SECONDS)) return "\(hour)h ago" - case (1 * HOUR_IN_SECONDS)... : + case (1 * HOUR_IN_SECONDS)...: return "an hour ago" // MINUTE - case (2 * MINUTE_IN_SECONDS)... : + case (2 * MINUTE_IN_SECONDS)...: let minute = Int(floor(timeSinceDate/MINUTE_IN_SECONDS)) return "\(minute)m ago" - case (1 * MINUTE_IN_SECONDS)... : + case (1 * MINUTE_IN_SECONDS)...: return "a minute ago" // SECOND diff --git a/HackIllinois/Misc/MixTypeComparable.swift b/HackIllinois/Misc/MixTypeComparable.swift index 40ccc65b..89847d6e 100644 --- a/HackIllinois/Misc/MixTypeComparable.swift +++ b/HackIllinois/Misc/MixTypeComparable.swift @@ -19,11 +19,11 @@ protocol MixTypeComparable: Comparable { } extension MixTypeComparable { - public static func <(lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { + public static func < (lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { return lhs.comparable < rhs.comparable } - public static func ==(lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { + public static func == (lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { return lhs.comparable == rhs.comparable } } diff --git a/HackIllinois/Models/CoreDataModels/HackIllinois.xcdatamodeld/HackIllinois.xcdatamodel/contents b/HackIllinois/Models/CoreDataModels/HackIllinois.xcdatamodeld/HackIllinois.xcdatamodel/contents index c38e5fc5..90825541 100644 --- a/HackIllinois/Models/CoreDataModels/HackIllinois.xcdatamodeld/HackIllinois.xcdatamodel/contents +++ b/HackIllinois/Models/CoreDataModels/HackIllinois.xcdatamodeld/HackIllinois.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -74,12 +74,4 @@ - - - - - - - - \ No newline at end of file diff --git a/HackIllinois/Models/HIProfile.swift b/HackIllinois/Models/HIProfile.swift index 74419031..a5cbe5d8 100644 --- a/HackIllinois/Models/HIProfile.swift +++ b/HackIllinois/Models/HIProfile.swift @@ -25,6 +25,7 @@ struct HIProfile: Codable { var firstName = "" var lastName = "" var points = 0 + var foodWave = 0 var timezone = "" var discord = "" var avatarUrl = "" diff --git a/HackIllinois/SwiftUI/HIOnboardingView.swift b/HackIllinois/SwiftUI/HIOnboardingView.swift new file mode 100644 index 00000000..7a8f376e --- /dev/null +++ b/HackIllinois/SwiftUI/HIOnboardingView.swift @@ -0,0 +1,79 @@ +// +// HIOnboardingView.swift +// HackIllinois +// +// Created by HackIllinois Team on 10/29/22. +// Copyright © 2022 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import Foundation +import SwiftUI +import UIKit +import Lottie + +struct HIOnboardingView: View { + @StateObject private var viewModel = HIOnboardingViewModel() + var body: some View { + ZStack { + Image("Login") + .resizable() + .ignoresSafeArea() + .zIndex(-1) + if viewModel.shouldDisplayAnimationOnNextAppearance { + VStack { + LottieView(shouldDisplayAnimationOnNextAppearance: $viewModel.shouldDisplayAnimationOnNextAppearance) + } + } else { + VStack { + Spacer() + HICarouselSwiftUIView(carouselData: viewModel.data) + Button { + NotificationCenter.default.post(name: .getStarted, object: nil) + }label: { + Text("GET STARTED") + .font(.title2.bold()) + .tracking(3) + } + .padding() + .font(.title3.bold()) + .frame(width: 350, height: 50) + .foregroundColor(.white) + .background(Color.clear) + .overlay(RoundedRectangle(cornerRadius: 20) + .stroke(.white, lineWidth: 5)) + Spacer() + } + } + } + } +} + +// MARK: - SwiftUI => LottieView +struct LottieView: UIViewRepresentable { + @Binding var shouldDisplayAnimationOnNextAppearance: Bool + func makeUIView(context: UIViewRepresentableContext) -> UIView { + let view = UIView(frame: .zero) + let animationView = LottieAnimationView(name: "Hack_PopcornCart_Text") + animationView.contentMode = .scaleAspectFit + animationView.frame = view.frame + animationView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + view.addSubview(animationView) + animationView.play { _ in + withAnimation(.easeInOut(duration: 1)) { + shouldDisplayAnimationOnNextAppearance.toggle() + } + } + return view + } + func updateUIView(_ uiView: UIViewType, context: Context) { return } +} + +struct HIOnboardingView_Previews: PreviewProvider { + static var previews: some View { + HIOnboardingView() + } +} diff --git a/HackIllinois/SwiftUI/HIOnboardingViewModel.swift b/HackIllinois/SwiftUI/HIOnboardingViewModel.swift new file mode 100644 index 00000000..199247b4 --- /dev/null +++ b/HackIllinois/SwiftUI/HIOnboardingViewModel.swift @@ -0,0 +1,32 @@ +// +// HIOnboardingViewModel.swift +// HackIllinois +// +// Created by HackIllinois Team on 10/30/22. +// Copyright © 2022 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import SwiftUI + +class HIOnboardingViewModel: ObservableObject { + @Published var data: [CarouselData] = UIDevice.current.userInterfaceIdiom == .pad ? [ + CarouselData(image: #imageLiteral(resourceName: "Onboarding0"), titleText: "Welcome!", descriptionText: "Swipe to see what our app has to offer!"), + CarouselData(image: UIImage(named: "iPadOnboarding0"), titleText: "Home", descriptionText: "See how much time you have left to hack!"), + CarouselData(image: UIImage(named: "iPadOnboarding1"), titleText: "Schedule", descriptionText: "See the times and details of all of our events."), + CarouselData(image: UIImage(named: "iPadOnboarding2"), titleText: "Scan for Points", descriptionText: "Scan QR codes at events to obtain points!"), + CarouselData(image: UIImage(named: "iPadOnboarding3"), titleText: "Profile", descriptionText: "View your points, tier, and other personal information."), + CarouselData(image: UIImage(named: "iPadOnboarding4"), titleText: "Leaderboard", descriptionText: "See who is leading HackIllinois 2023 in points earned!") + ] : [ + CarouselData(image: #imageLiteral(resourceName: "Onboarding0"), titleText: "Welcome!", descriptionText: "Swipe to see what our app has to offer!"), + CarouselData(image: UIImage(named: "Onboarding1"), titleText: "Home", descriptionText: "See how much time you have left to hack!"), + CarouselData(image: UIImage(named: "Onboarding2"), titleText: "Schedule", descriptionText: "See the times and details of all of our events."), + CarouselData(image: UIImage(named: "Onboarding3"), titleText: "Scan for Points", descriptionText: "Scan QR codes at events to obtain points!"), + CarouselData(image: UIImage(named: "Onboarding4"), titleText: "Profile", descriptionText: "View your points, tier, and other personal information."), + CarouselData(image: UIImage(named: "Onboarding5"), titleText: "Leaderboard", descriptionText: "See who is leading HackIllinois 2023 in points earned!") + ] + @Published var shouldDisplayAnimationOnNextAppearance = true +} diff --git a/HackIllinois/SwiftUI/UI/HICarouselSwiftUIView.swift b/HackIllinois/SwiftUI/UI/HICarouselSwiftUIView.swift new file mode 100644 index 00000000..27a2a89d --- /dev/null +++ b/HackIllinois/SwiftUI/UI/HICarouselSwiftUIView.swift @@ -0,0 +1,97 @@ +// +// HICarouselSwiftUIView.swift +// HackIllinois +// +// Created by HackIllinois Team on 10/29/22. +// Copyright © 2022 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import Foundation +import SwiftUI + +struct CarouselData: Hashable { + let image: UIImage? + let titleText: String + let descriptionText: String +} + +struct HICarouselSwiftUIView: View { + var carouselData: [CarouselData] + @State private var currentIndex = 0 + var body: some View { + VStack { + TabView(selection: $currentIndex) { + ForEach(0.. HILabel +struct HILableSUI: UIViewRepresentable { + var text: String + var style: HILabel.Style? + func makeUIView(context: Context) -> UILabel { + let label = HILabel(style: style) + label.text = text + return label + } + func updateUIView(_ uiView: UILabel, context: Context) { + return + } +} + +struct CarouselSwiftUIView_Previews: PreviewProvider { + static var previews: some View { + HIOnboardingView() + } +} diff --git a/HackIllinois/SwiftUI/UI/Hack_PopcornCart_Text.json b/HackIllinois/SwiftUI/UI/Hack_PopcornCart_Text.json new file mode 100644 index 00000000..8ee0e1dc --- /dev/null +++ b/HackIllinois/SwiftUI/UI/Hack_PopcornCart_Text.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.1.1","a":"","k":"","d":"","tc":""},"fr":24,"ip":0,"op":120,"w":491,"h":600,"nm":"Hack_PopcornCart_Rigged","ddd":0,"assets":[{"id":"image_0","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_1","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_2","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_3","w":491,"h":486,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAesAAAHmCAYAAABTbaZ/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAf3ElEQVR4nO3de3DdV30g8O+5ejlx/EggjxIvlmMnA6ZgZeiGhO42Ssua2W7ZiDyIWzaxaAtdEjLxhbLdllki6HSXmba5ZsBkt9Pd2NB2E0ITZ2jZxtCidElJU7qxoQkklmOZ2jSJaWLLcWzJ996zf+hKluQrS37oZX8+M57R/b3uuX597znne74nAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBWSzPdAGBu6Wtt7cgR7TlHW4poi4hFx7l8V47ojYhIKbZGxL4U0VsZPLb1/N7efVPfYpj7BGtmjf4Na7pmug2ML/f1zxt44Ptr8iuHl9Y7X1hxYRSWXxiFSxZGnNcS6byWyC/0RUREZevuqGzbXfe56fx5u5ra3/gXhcsveGHqWj+7VKvRfc6d93fPdDuYOxpnugFwVL57pltAfbm/EgMPPRv5lcOjjqfzWqLpxiuj8d0rI128YNz7m257R+SD/VF5/PkY2PTEcBCPiMivHF468LUdv9b8iy1RuOjcKfsMs0mhkCIiume4GcwhgjUwoYH//Uzkl14bdazpxiujae07Is1vmdQz0vyWaFz95mhc/eYob/l+DGx4LPKr/YMn+ytx5Gs7ovkXV0ZqaTjdzYc5rzDTDQBmt/Lju0cF6nReS8z79Hui+fafmXSgHqtx9ZvjnD94fxRWXDh8LL/0WpS/VX+o/MyT22a6BcwtgjWzwqF717TOdBs4Vt7fH+XH9wy/Tue1xLx7boqGn77slJ+dLl4Q8+65cVTArvz9C5H395/ys2e9FK0z3QTmFglmzAoDG9Z05sj3jTm8KyJtnIn2MGjgj5/uqO45sGro9bxPv+e0BOqR8sH+OPzRP41qz96IiChcumBb8/vfsvm0vskMSpEX54i7xh5vHug/PxU3y4ZnUgRrZoX+Dbf0RsToLOOcNrV85P7OmWgPEa+0ti4u5Hhl6HXz2quj6bZ3TMl7VXf8OA596I+Pvk6x7Pze3t4pebMZ0L/hln1xzBK39KmWO+7vmon2MPcYBmfG1ZZsHbMcqJpj47Q3hmGFiM6hn9MlC6PxxqmbZi0sf3003XjlyPdeN2VvNhNyqjNSkO8e2HCzuWsmRbBmRg1sWNM5zpKtXdahzqyUjwbr5rVXn3Qy2WQ1rR3Ra8/RMaVvNs2qDdFV73iOQreAzWQI1syIQ/euae3fcMvmOvPUg1I+s3pWs1zOuS3nvC7n3FX7tS698Y2XRQwmlZ3ueep60vyWaHz3yqGXS19pbW2d8jedJud8+P7eyGlTnVOLchS6D3/+Fn/fOS5z1ky5sZXJckR7inztuDeYq542OeeOiFgfdaYhIiLyq6/+/ZGHN/xjwztbpqWnW3n8+Tj8ya9GREQ1xXXn9/Z2T8f7Todc6lg80NzSG+OXZ90fOW2ONFieNUKlM45SFIVpMHqY+7jfEFNsax44rJcxDXLO6yPirm8/uS0e+epfxZ98+WvD5xYsmB/vftdPx0fvvO3tS279jbdXX9oS+cAzU96mQtulR3+OaI8zqMpXKm7eN7Dh5vYche6oH7AXRcprRx5Q6YwhhsGZNXKkx5r7+9stZ5l6OeeuiLir63e+EB+8oys+8Z8+FEsuvXj4/IEDB+MrD2+Jd/7sf4gHH9oShYtWR5q/fMrbleYP1hSPiEhxtId5pmi+48GtKartEbF/ptvC3CJYM0ukT827436BehrknNsi4u7S574Y/+uLD8dH77wtFiyYH12fuL3u9R/7zd+NR7/xeBQuWh1RmNoks4iIwvILI3I8srC3d+OUv9kMaL7jwa3NA/2tOdJjM90W5g7Bmpm0P3LaVC2kZdabTquu3XtejGve0RY/fPbr8cu3vTciIlb/3Dvjh89+Pb79zT+KhQvPG33D79wbUWiJwuIr6z3vtGr6pX/5i4t+2HtGZYOPlYqb98274/72ajVdFxGPzHR7mP3MWTMjqtV0ncSZGXP9H2780/jK5q/Hl7/0+7HyTUczvQ8cOBi/evvd0df36qgb9vzoxXjwoS1x0y9cGfHyE1PauMLb3zglW2UObLhlfc5pcRSqmyOnzhRpc/Md92+civearNq/ge5c6lg80DRv/dg5axgiWDMjBOqZkXNuj4h45gc7oq/v1XjwoUfj7t/68PD5P9z0UDz9/R11792954VIzRfWPTdWWrAy0vzlkVoujGhcGFHtj9y/N/LBHYOJatXx6383XV7snvwnmrycoj0ir4qc1kZEVCMWR8yOwjupuHlf/4Y1vTPdDmYvwRrOIvmlLR9JF60efv0vllwSBw4cjAcf3hLvftc74y1vHj+J7NtPboviBM9PLRdGumh1pOYL4+nv74gnnvzGcC/96nesimuuujbigquj+vITkfc/VfcZ5Z7SvojYHBGbG1cUT0uN8FzqWDyQY/HpeBbMBMEazhJHtpfac7nvxpFL5779t9vins99Mfr6Xo17PvfFuOaqVePev/JNx88GTy0XRuENN8XTz+6OT/3Xz8SihQvi6e/3xO49Lw5e8PkvxYIF8+Oez3w83v2uayO3XBjVl7bUe9SiiFgbEWvLPaVdEbHuVIP2QHPLxhizljxFvrZ/w5ou+RLMBRLM4CyRUnTl/sGdrZZceklERDz6jceHe759fa/Go994fNz7/8WSSyLKffVPFlqGA/X7bv1YPPHkd6PrEx+Oj95526jLDhw4GB+8oys++p9/d3CofNGECWtLI+Lhck9pc95ZOumecc7RHSm2jToW6bFI1a0n+0yYToI1nAUGniu1RcS1Ue2PPLA3br5h9XGv7/rE7fHDZ78eT39nc9x8w+pYsGB+3Pze1ZEP7a57feH110bfq0fik7/9+fjVzhvjns98PC59w8Vx03tXR/HO2+LmG1aPWsf9lYe3DC4Hu+DqyS4Hu75aju6TDdjzPvLA+pbbH2g7WvJzcKlgy+1fPmO24uTMJljDWSAVjm7Kkfc9FddctSpW/9w761578w2rh5dzLVgwP37/v308PnrnbbFw4XlRrZcJXmiJtGBl/M9ND8Vrrx2KX117Q9z03qNfBoofuTV+Ze2N0Xfg4KjbhpaDpQUrxz6xrpxi1akE7IiI5iOH11Wr6brmgcPrT/YZ9VS2l7aWe0q53FPqPJ3PhSHmrOEsUMjRnmuT1fnAM5EXrIx7PvPxeN+tH4tnfvD8qGuHhshH+pW1NwwmhNUZBk/nLImIiC8/tCX2/OjFeN+tH4v/s/m/D58fOlZvOdi3n9wWV79lybjJZmPlFKsqldgYcXK7ctWK7nSfzL3jGXiu1JZTDE3233ekp9QWOfalFK0NDbEuLSsq9MMp07OGGXDoc2vaD927pnW63m9EMImIiOoLX40F8w7FXzzyP6L4kVtjwYL5w+d27zl2mXM+uD2qP65fcCu1DC7n2vOjF+ueX7jgvGMC9ZBnvr/jZKqiXT+berApjf7ikCLuSinujoi15Ur9rTHhRAnWMA1GBuaBDWs6C4X8zUI17zz0uTXtU/3edYeNq/1R3fOVyPufiuKdt8XT39kcD3zp9+KBL/1e3PTe1bH3x68MXRi57+movvDnk36/JZdeEk88+d245dZfj4/95u9G34FXj6mINmS8ID4JXSd74+lyZHupvbK9tLUWmOvLYU6c08IwOEyxQ/euaS1U89b+Dbcsioj9OfLwjksp5baY4l2VyuVoSykiHzgYaUQPOqr9g73lfU9Fmr88rn7riKVZ1Zej+uPvTljAJCIiV/ojxeD89oEDB+PRbzx+NKv8yYgHH6q7PCsiIlYeZ133BJaWe0qdjSuKG0/2AadB+9gRi5FSjm2NU1TghbOPYA1TrKEa7fnoloijt0ZMqSOXOjZO5QYmeXD+NPIPdkWe1xLp0gsjXbAwolyO3PdaRPnlqL783cHjI4P5ZB0ezBC/5qpVseUv/2bcy5ZcenHcfMO7ByunPbwl+vpeHVzXPbD9ZD9aR9QqkA08V2pLKToaG2P9dM0RpxRbY3D3rLr7U+ekCAunj2FwmGK1+tO76p1Lka8daG7pPfz5W6ZsD+/mK4rDa4nzj/ZG9e+eicqjT0TlL78T1b97JnLP7nED9a/fsy2W/fyfx0//8rfiQ5/+Tnzl67uj7+CRUdfk/r0R5b74lc4bxm3Dkksvjkdr8+N3/9aH48tf+v249ZfeEwsXnhf5YP3yppNw/dAPTU3Rm1LcXanE1iPbS+0n+8AT0biiuLmhIdpSHr1+e4Sls2lunblNsIZpkCP1Huf0opSifYqbsCsaG445mBacG4WrVo7bo144vymWXHpxfP3PNkXhvBXx8dK2WHXzlvjQp78TW759NBGt+uPH4pqrVg0v+Rrr5hvePSqJbeWbLotPfPyDkQ/tHnft9mTU1o/HiN700pTim0d6Sqd1adZ40rJibxTGry9erYaiK5wWgjVMsUP3rmlNka89ziW7IuWNU9yM7qgTkNNbl0c0jj8bdtO/WRK797wYb/mpjlHVzb7+xIvxa7/99/GvOv8qnnm+b3iDjq5P3F43YNdLJDv3nMaovvDVk/w4tfaPHmreP3w84q7K9tLWU1mTPVljAvKmxhXFVK3GldVqXDlyVANOhWANUyxV8vhrgnPa1HLHA63TUEmrOy08d3S73jDxHPXKyxbGXe+/fNzze146NNzDrr60ZThgD2WVX/qGwaplDz68ZUSGeUTkclT3fHnC5LUTNGquurYme+tQ73uqNF1e7M45rkspio0rip0Rg1MPAjWnkwQzzloDz5XaCoVYHxGRc3SNtzVj3llaXC5H28lu3dhypH/jQHNLe460OOXoHblncTVPzxaNjSuKG8s9pfVxTsuiODQYIAsrlkzq3nXvvyJe2T8QX/yzY6fdb3zXkvjljmXDr6svbYl0cEdc3XZ1XHPVx499WD4S+dXamu3TG6gjxmzUMXSsUIjugedK7VMZPGt/N7qn6vkgWHPWqgXqayMiUopvlntKjzQ0ROfQ/GfeWWqtVKKrUomOlGJRZXtpW8PlxRPupdUyvYd71wMb1nTnyPdFxP555cPT1vtKKboKy5eUqv+wI9KCcyPOmXwxkmd3DQ5jr/33rbF4QVOsvGxhrLxsUSy5+Jxjrs0HdwwmjTUuHNwys+XCyEf6Isp9R+eny+XjDr+fqNqf1XgWTUfAhqkkWMNR11cq0VvuKW1NORZXKqPX0B5vTe2JaL7j/o0DG27e2nzHg9MaOBqWF9dXtpc688t9q04kUD/zfF/87ff+OS696Jzo+o9vmfwblvsil/vqZnvnPXsjLf2JyT9rHI2Ng/PFaVmx98j20nWRoiMNfjEa28sWsJnTzFlzNuutc2xRRFw7TmDeX+fYSZnuQD2kkqOz8Nbl+9PF50/6nie++88REbH6mmNrhp+sfKQSec/eU33MrpFrqpsuL3Y3rSiua1xRbI2ID8Sxy+UWFQpxSlttwkwRrDlr5Vw3WB9P9xQ0Y1o1X1Hcmgv5PSdS/GQoWF/9tgtOX0Neejnyj04tWOcYv5Rn44rixsYVxdaUohijv2QtrZbn/p8jZx/BGiYppTPkP/lKOnbB9XH0HSxHRMTKy+oW6jph1Z7dkQ+8FvnlvsgvH7uL12Q1NsSEa6kblhfXV6vRPrJwSU6xarrWYcPpIlhz1iqc4DaLZ2uBi2eeH+yY1ksmm4y8Z29Ue3YP/vqb70becbQISvUfdgwmm524TWlZsXcyFzZfUdxaaIz2iNg0dCxF3DVdlc7gdBCsOSuVe0obTzhhLJ3cHspz3YGDJxVMh+VD/ZF37B78deC10ScP9Uf1+3UrsR7P/oaGE9t1Ky0r7qutgT4asJP5a+YOwZqzSt5ZWlzZXtoaEWsnvHiMFHHXVBfYmA5DGdST0XfwSCyY3zj881TIP9ob1e+dUA+7c2SvurKjtK7cU+rMO0utE904JmAvqlQmHkqH2UCw5qyRd5YWVyqx9VSWYNWW/8zpgF3LoJ4ws/2Z5/tizW88MdyzXv9HJ7k71qGJi5/kH+2Nyt98L6o/6J0oS/wDjSuKw4lleWepNecoRcR9lUrsrGwvba3sKK07Xo95TMBeazicuUCw5qxRLkdb1K9ydSIWFQrRfQYMnx63vOkzz/fFr9+zLa5+6+vi/973s3HX+y+P+x7ZGc88f+IJYfmllyd34aH+yLteOF7S2QfG7l89tmecU6zKOUqVSrxS7iltHK+33bii2DmUdJbSiQ2pw0xQFIWzRmNj9FYq4+8/fAIW1QJ/96m36tTVeobtEREpRW9DQ2yexJ7Om+M4UwFLLj4nvvb5fz38et37r4ir3/q6WP9Hz8UffPKnJt22/NLLEeXxS4vVU3cNeI4PNl4+OlCXe0obY8Q2mXWsrVRi7ZGe0mcbG6Jr7O9JoTHaK5XojYhryz2lzrFfBGA20bPmrJGWFXsbGqKttvZ203H2IZ5QzjFRMJxyeWdpcbmn1J1SfDOluDuluDsGh4N7Jxqqrw0lj5vZtXB+0zHHrn7b6+L3PnZiMwjVH5xY8lhacG6ki45dz93QGF8Z+frI9lJXRLRGxGNxnM8RUduBa7Ay3agEwbSsuC/n4aTBrhNqKEwzPWvOKrXEpOGh07yz1Fotx+YJ5rEfyXlUUlb3bChZWa5EV6rVNh9jaKi+dYIedldE3Hci71kviI+n2rN7UvPVwxobBrfsHCPl2Db2czRdXuwae92R7aX245UbjYiHj/SUPtu0orhuxHO6j2wvfSqluFvvmtlMsOaslpYVe/POUkelEjvrnN5frcasrCVd2X7P7TniruNcsqhajc6I8bOdaztxdUb9gH9K8p69o9ZTT6ixIQpvaq2/ZWdhcjuTjdj5al2tF70uxny22j7X7YXGaB/6AtB0ebGrsn34+km9F0w3w+Cc9Wq97cfqnFo32wL10NKznNKGia6tVmPCJLiGhuiI01jzPCIi7/qnwWInk5QWnBuFq1ZGuvTCeqf3F0YE67yz1DqZ5L7GFcXNjSuK7TnHdTHmzzanWFUtj04SrEasyylWyQxnthKsYdCoHmjKsW02DolWKhMO2Z+QtKy4r1qN9jgdAftQf1SfenbS89RpwblR+MnlUXjn2+r3qCMi51g/cgi8XI7OSiVeqWwvbT2yvdQ10dx80+XF7sYVxfYY3Nhj+DOODdi1XvmmlKJzUo2HaSZYQxybcFUdHBKdVWqBqf6Qdbk8uORpxBxxSjGpnTearyhubWiItlNJuItyOap79kaUK5EuWBjpgoVH27Hg3OFjafmSKPzk8mj4mSsHg3T93vTgfTm2jZ2bHgqmOcWqlOLuQiGeKveUemtrq1vHe1bjiuLGhoZojYhHho6NDdgNDbEuItrPgGV5nIHMWUNNQ0O0VSrRUa3G1tk2/B0RkVL9Ye380stR/cGuKCxfEjEiSEbEneWe0tsaGqJjoqVctamAtiPbS10pxbo40eVtjY3Vwoolp/PL//5aPe9hlR2ldTnXXSe/tLa2ulTuKT2Sc6yv9ZRHqf0edNSeU4oYDNiVSmyMGPw9OrK9tLFSiY4wd80so2cNNbX60RtnY6Ae16H+qD71XBTetHS8Xuq15crklyU1XV7samiI1pzjUzHBkqiaRyLiA9VqvD1O39z3/mr1aAJYRES5p9RZW2b12Ihf9VyfUnyz3FPqrSXPHaO2E9eVI9p7fWVHaV1ERGNjrI8Y/SUBZgM9a5gjakVdRqn27B53bfKQFNEZJzCsXwuSXRHRlXeWWiuVaMs5hueGC4XYV63G1sbG2DoyoA48V2ovFGJznFqVuMcaGqKjccXokYBa/sDGsRcPty+ivZCjfcR8/tKIuK/cU+qKiK6x+QfNVxS31pbtdQ9VPRt4rtSdlhW3Htle6j2F9sOUEKxhjkjLir1HekqfTSOWbOWXXo60sH5y1ggnXbGtNjzeGxOUJ40YDoBt5XKsO4mh9F1RJ6ieaPvyzlJrtRodUY3OWuAeN2inZcV9eWepvVKJzRFxbUOKjRHR1tgY6/PO0uJJVIGDaWMYHOaQphXFdbUh6sEh3BMs5TnV0rLivqGh9FqluPGGqyMGP8MjMVjzu/V0ZN+nZcXehuXF9Q2XF9saGmJZjvhsDH4RGAraozZiqU19tEfEppxiVbmn1JmWFfcJ1Mw2aaYbwJmvf8Mteeyxljse8HfvFOSdpcXlcrTlZ3e1Fd60dF8cvxLZY7WANGMGniu1jUyQa2yM3pHbXE612vx1Z9Sy6XOOT43NNK/VGu9oaIiJKr9Nif4Na7oi8t2jj6ZPtdxxf9d0t4XZx3+YTLl6wTpSbEs5uiOqG5vveHDuJHTNUoOFUuquv561VdhmwpHtpfbaEP31Kce2So7Okb835Z7Sxpyjt14506nS/4X3dUS10BEpd8QxUweCNYMMgzMzcqzKEXflKDx1eMOa7kP3rmmd6SbNZbVlTpvGHH5MoB6tViSlo6EhluUUWwuF6B6ZNd7QEOtSOppMN5X6v/C+jv4Nt/RGTg9Hymvj1HeD4wymZ82Uq9uzPtb+FGld8x33b5zq9pzpBp4rtTU1Ra9514nVssk3RkRv44piZ+3Y4ojhrPgp0f/5NRtrAXoCetYMEqyZcpMM1hERkSJ9QMCe+2q91Y6I4XnqfUPFSobm2wuFaKstAZvW+et6asPji2uV7KZMLnUsHmhp6Y482ZKxgjWDBGum3OENa7qHfk6R22KC4T4Be+7KO0uLaz3V68e5ZEdEHLsPZsRjOUdXvcpjZ5JJ9qh35Ui9ERGFiI3+LRAhWDMDDt27prVQjc6IPN5a3P3VQmo758P3905vyzhVR3pK69Pxt+6cyAdm4wYqp8Phz9+yLqXBMqd17EqRupoGDm9Oxc2mLziGYM2MOe6QYE6bWj5yf+f0t4qTVZv/rbcv+Ik9J8d1Z1oPO5c6Fg80t/RG3S+nhrqZmGxwZkwqbt7X3N/fHqnObk8pr5UhPreUy6dne8mUzrxNNPqbWjqjTqDOOYoCNZMhWDOjUnHzvmpKHVFnE4hUyR0z0CSmw4itPOtYeuDfXv3svqWt3ftbW9e/0traPk2tmjKpcOwXmRzpsXkfeWB9ncvhGIbBmRUGNtyyPo+d60yxrVpJs25faY4qP/D0TblcPS8OHFnR/IFrVjR2tF08mfvyrn+KtPQnxj0/8IW/jiN/+tTw68Y3v+6/FP7d5d869RbPjEIhf3PssWo1XXfOnfd3z0BzmINs5MEsUd0YURgdrHOsqvefHLNH3j8QuW+wl1z+f7ujsWNy9UTynr2DO4Wd01L3fDpvzPEL5v12oTDpFYBzwS6BmhNhGJxZQcnRuanwxgXDP1ce3xH5xQMT3pNf7ot84LWoPvVsRLlc/5pXjztMPucNLc2CyRKsgZPW+NNLRr0+/MmvRj44fqDNBw5G9R921H5+LSqPPRXVp56NfODgqOsq23aPep0umnAb0DmlENmXU06IYA2ctLSoJZp+/rLh19WevXHoQ38SlcefH33hof6o9uyO6pPPHJNcllYsibTgaDCubNsT1Z69R88vbImGy8+fmg8wQ3Ika6k5IeasmTVypOPtfcwsVfjJi6I54vVHHvvH5fngkXn5hb44/MmvRjqvJQrLL4x0TlM03fpTkS5aGGnhuZFf7ouoDYWnpT8xKlBHRAx8YcRfg6ZCufkXlm/LkV6d5o81pQoRvTPdBuYW2eDAafNKa+vihoj2XI2OSDG85WO6ZGHM+/R7orD89UcvPtQf1T17o7BicCg9H+yPgQ1/HeVHn9kVObpTIborEZvP7+3VC+WsJ1gDU6avtbUz5+iKiKXpvJZouvHKaLyxLdL80dnelb/t/ceBB76zsfzdPQ+d39trPhfGEKyBKVcL2uuj1tMurLzkucKS87+Xrrj4W+d+fKPCIDABwRqYFrUh8o5KRPf5vb29M90eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICp8v8BfWquDLdHvIoAAAAASUVORK5CYII=","e":1},{"id":"image_4","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_5","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_6","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_7","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_8","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_9","w":491,"h":486,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Preparing for the Day 3 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[255.656,525.729,0],"to":[0,-1,0],"ti":[0,1,0]},{"t":77,"s":[255.656,519.729,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[17.43,17.43,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[27.795,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,23.264]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[27.795,0],[0,-23.415]],"v":[[-775.394,-254.445],[-818.9,-254.445],[-818.9,-148.702],[-799.262,-148.702],[-799.262,-179.216],[-775.394,-179.216],[-730.378,-216.831]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[17.221,0],[0,0],[0,0],[0,0],[0,-13.293]],"o":[[0,0],[0,0],[0,0],[17.221,0],[0,13.293]],"v":[[-776.301,-195.833],[-799.262,-195.833],[-799.262,-237.828],[-776.301,-237.828],[-750.167,-216.831]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[0,0],"to":[0,16.443],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1.602,"s":[0,98.66],"to":[0,0],"ti":[0,16.443]},{"t":20.0205078125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1.602,"s":[50]},{"t":20.0205078125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.438,-8.459],[0,0],[0,0],[0,0],[0,0],[0,0],[-14.351,0],[-1.662,-0.302],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-16.466],[1.36,0],[0,0],[-13.445,0]],"v":[[-696.087,-217.586],[-696.087,-229.369],[-714.063,-229.369],[-714.063,-148.702],[-695.18,-148.702],[-695.18,-187.827],[-671.766,-212.752],[-667.385,-212.299],[-667.385,-230.275]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[0,0],"to":[0,25.346],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":3.203,"s":[0,152.074],"to":[0,0],"ti":[0,25.346]},{"t":22.4228515625,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3.203,"s":[30]},{"t":22.4228515625,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"r","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.511],[23.566,0],[0,-24.019],[-27.04,0],[-7.251,8.611],[0,0],[9.064,0],[2.266,11.783],[0,0]],"o":[[0,-25.227],[-24.019,0],[0,24.019],[13.898,0],[0,0],[-5.74,5.891],[-14.049,0],[0,0],[0.151,-1.813]],"v":[[-576.73,-188.582],[-617.517,-230.275],[-659.21,-189.035],[-614.646,-147.644],[-582.168,-160.787],[-592.289,-172.418],[-614.193,-163.657],[-640.327,-182.993],[-577.032,-182.993]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-12.236,0],[-1.511,-11.632],[0,0]],"o":[[12.387,0],[0,0],[1.813,-11.783]],"v":[[-617.517,-215.169],[-594.706,-195.531],[-640.478,-195.531]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.288},"t":1.602,"s":[0,0],"to":[0,59.589],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4.004,"s":[0,203.414],"to":[0,0],"ti":[0,33.902]},{"t":25.6259765625,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.288]},"t":1.602,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4.004,"s":[0]},{"t":25.6259765625,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"e","np":5,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[23.566,0],[6.345,-7.704],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.272,0],[0,25.076]],"o":[[-11.028,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.496,7.402],[23.566,0],[0,-24.925]],"v":[[-514.549,-230.275],[-541.287,-218.794],[-541.287,-229.369],[-559.263,-229.369],[-559.263,-119.396],[-540.38,-119.396],[-540.38,-158.521],[-514.549,-147.644],[-473.611,-189.035]],"c":true},"ix":2},"nm":"p","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[13.596,0],[0,15.408],[-13.596,0],[0,-15.408]],"o":[[-13.596,0],[0,-15.408],[13.596,0],[0,15.408]],"v":[[-516.663,-163.808],[-540.682,-189.035],[-516.663,-214.263],[-492.796,-189.035]],"c":true},"ix":2},"nm":"p","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.28},"t":2.402,"s":[0,0],"to":[0,57.24],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5.605,"s":[0,201.633],"to":[0,0],"ti":[0,33.605]},{"t":24.8251953125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.28]},"t":2.402,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5.605,"s":[0]},{"t":24.8251953125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"p","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[23.264,0],[8.611,-6.647],[0,0],[-9.064,0],[0,-11.028],[0,0],[0,0],[0,-13.445],[-18.43,0],[-4.532,6.949],[0,0],[0,0],[0,0]],"o":[[-12.991,0],[0,0],[6.042,-4.985],[13.445,0],[0,0],[0,0],[-24.472,0],[0,14.049],[12.085,0],[0,0],[0,0],[0,0],[0,-23.264]],"v":[[-426.596,-230.275],[-460.736,-220.305],[-453.334,-206.558],[-428.862,-214.565],[-408.771,-197.041],[-408.771,-195.833],[-429.618,-195.833],[-463.153,-171.814],[-433.092,-147.644],[-407.714,-158.521],[-407.714,-148.702],[-389.888,-148.702],[-389.888,-195.984]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.215,0],[0,6.798],[-12.84,0],[0,0],[0,0]],"o":[[-9.668,0],[0,-5.891],[0,0],[0,0],[-3.172,8.308]],"v":[[-429.164,-161.391],[-444.573,-172.569],[-428.258,-183.295],[-408.771,-183.295],[-408.771,-173.929]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":3.203,"s":[0,0],"to":[0,34.024],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":7.207,"s":[0,204.145],"to":[0,0],"ti":[0,34.024]},{"t":27.2275390625,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3.203,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7.207,"s":[0]},{"t":27.2275390625,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"a","np":5,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.438,-8.459],[0,0],[0,0],[0,0],[0,0],[0,0],[-14.351,0],[-1.662,-0.302],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-16.466],[1.36,0],[0,0],[-13.445,0]],"v":[[-348.387,-217.586],[-348.387,-229.369],[-366.363,-229.369],[-366.363,-148.702],[-347.48,-148.702],[-347.48,-187.827],[-324.066,-212.752],[-319.685,-212.299],[-319.685,-230.275]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.277},"t":4.004,"s":[0,0],"to":[0,57.392],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8.809,"s":[0,204.691],"to":[0,0],"ti":[0,34.115]},{"t":29.6298828125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.277]},"t":4.004,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8.809,"s":[0]},{"t":29.6298828125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"r","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.949,0],[0,6.647],[6.949,0],[0,-6.345]],"o":[[7.1,0],[0,-6.194],[-6.949,0],[0,6.345]],"v":[[-294.596,-242.662],[-282.511,-254.445],[-294.596,-265.322],[-306.681,-253.992]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-304.113,-148.702],[-285.23,-148.702],[-285.23,-229.369],[-304.113,-229.369]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4.805,"s":[0,0],"to":[0,33.438],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10.41,"s":[0,200.629],"to":[0,0],"ti":[0,33.438]},{"t":31.2314453125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4.805,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10.41,"s":[0]},{"t":31.2314453125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"i","np":5,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[19.336,0],[6.194,-7.402],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.445,0],[0,-14.351],[0,0],[0,0],[0,0]],"o":[[-11.783,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-16.164],[12.085,0],[0,0],[0,0],[0,0],[0,-24.321]],"v":[[-214.991,-230.275],[-242.787,-218.945],[-242.787,-229.369],[-260.763,-229.369],[-260.763,-148.702],[-241.88,-148.702],[-241.88,-189.488],[-219.372,-213.809],[-200.187,-192.51],[-200.187,-148.702],[-181.304,-148.702],[-181.304,-194.927]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5.605,"s":[0,0],"to":[0,33.333],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12.012,"s":[0,200],"to":[0,0],"ti":[0,33.333]},{"t":32.8330078125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5.605,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12.012,"s":[0]},{"t":32.8330078125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"n","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[11.33,0],[0,-23.415],[-23.112,0],[-6.647,7.251],[0,0],[17.825,0],[7.1,5.891],[0,0],[-15.106,0],[0,29.306],[0,0]],"o":[[0,0],[-6.647,-8.006],[-23.112,0],[0,23.415],[10.876,0],[0,0],[0,16.315],[-11.179,0],[0,0],[9.215,7.553],[28.249,0],[0,0],[0,0]],"v":[[-95.176,-229.369],[-95.176,-218.643],[-123.123,-230.275],[-163.91,-191.452],[-123.123,-152.327],[-96.083,-163.053],[-96.083,-158.823],[-121.763,-134.351],[-151.523,-144.019],[-159.982,-129.819],[-120.706,-118.338],[-77.2,-160.938],[-77.2,-229.369]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[14.2,0],[0,13.747],[-14.351,0],[0,-13.596]],"o":[[-14.351,0],[0,-13.596],[14.2,0],[0,13.747]],"v":[[-120.253,-168.34],[-144.876,-191.452],[-120.253,-214.263],[-95.781,-191.452]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6.406,"s":[0,0],"to":[0,33.333],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12.812,"s":[0,200],"to":[0,0],"ti":[0,33.333]},{"t":36.0361328125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6.406,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12.812,"s":[0]},{"t":36.0361328125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"g","np":5,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-7.855,0],[-2.87,-1.964],[0,0],[6.496,0],[0,-16.919],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[3.928,0],[0,0],[-4.23,-3.021],[-18.732,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.611]],"v":[[21.018,-246.59],[31.441,-243.266],[36.728,-257.466],[19.658,-261.847],[-9.195,-233.901],[-9.195,-228.764],[-22.488,-228.764],[-22.488,-213.658],[-9.195,-213.658],[-9.195,-148.702],[9.688,-148.702],[9.688,-213.658],[31.29,-213.658],[31.29,-228.764],[9.084,-228.764],[9.084,-233.598]],"c":true},"ix":2},"nm":"f","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8.008,"s":[0,0],"to":[0,25],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16.016,"s":[0,150],"to":[0,0],"ti":[0,25]},{"t":39.2392578125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8.008,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16.016,"s":[5]},{"t":39.2392578125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"f","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-24.774,0],[0,24.17],[25.076,0],[0,-24.17]],"o":[[25.076,0],[0,-24.17],[-24.774,0],[0,24.17]],"v":[[78.642,-147.644],[121.695,-189.035],[78.642,-230.275],[35.74,-189.035]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[13.747,0],[0,15.408],[-13.596,0],[0,-15.408]],"o":[[-13.596,0],[0,-15.408],[13.747,0],[0,15.408]],"v":[[78.642,-163.808],[54.774,-189.035],[78.642,-214.263],[102.661,-189.035]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8.809,"s":[0,0],"to":[0,28.333],"ti":[0,9.651]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18.418,"s":[0,170],"to":[0,-37.757],"ti":[0,22.708]},{"t":42.4423828125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8.809,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18.418,"s":[2]},{"t":42.4423828125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.438,-8.459],[0,0],[0,0],[0,0],[0,0],[0,0],[-14.351,0],[-1.662,-0.302],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-16.466],[1.36,0],[0,0],[-13.445,0]],"v":[[157.113,-217.586],[157.113,-229.369],[139.137,-229.369],[139.137,-148.702],[158.02,-148.702],[158.02,-187.827],[181.434,-212.752],[185.815,-212.299],[185.815,-230.275]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9.609,"s":[0,0],"to":[0,30],"ti":[0,22.113]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":23.224,"s":[0,180],"to":[0,-38.877],"ti":[0,15.916]},{"t":44.0439453125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9.609,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23.224,"s":[1]},{"t":44.0439453125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"r","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.928,0],[0,7.855],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-17.674,0],[-4.532,3.625]],"o":[[-2.87,2.266],[-7.251,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,17.825],[6.798,0],[0,0]],"v":[[286.741,-166.527],[276.166,-163.204],[264.988,-175.289],[264.988,-213.658],[286.59,-213.658],[286.59,-228.764],[264.988,-228.764],[264.988,-247.194],[246.105,-247.194],[246.105,-228.764],[232.812,-228.764],[232.812,-213.658],[246.105,-213.658],[246.105,-174.835],[273.901,-147.644],[292.028,-153.082]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":11.211,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33.634,"s":[0,200],"to":[0,0],"ti":[0,0]},{"t":48.0478515625,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11.211,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33.634,"s":[0]},{"t":48.0478515625,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"t","np":3,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[19.336,0],[6.194,-6.647],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.445,0],[0,-14.351],[0,0],[0,0],[0,0]],"o":[[-11.179,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-16.164],[12.085,0],[0,0],[0,0],[0,0],[0,-24.321]],"v":[[352.909,-230.275],[326.02,-220.003],[326.02,-260.79],[307.137,-260.79],[307.137,-148.702],[326.02,-148.702],[326.02,-189.488],[348.528,-213.809],[367.713,-192.51],[367.713,-148.702],[386.596,-148.702],[386.596,-194.927]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12.012,"s":[0,0],"to":[0,33.333],"ti":[0,26.811]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":38.438,"s":[0,200],"to":[0,-14.123],"ti":[0,5.253]},{"t":50.4501953125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12.012,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38.438,"s":[0]},{"t":50.4501953125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"h","np":3,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.511],[23.566,0],[0,-24.019],[-27.04,0],[-7.251,8.611],[0,0],[9.064,0],[2.266,11.783],[0,0]],"o":[[0,-25.227],[-24.019,0],[0,24.019],[13.898,0],[0,0],[-5.74,5.891],[-14.049,0],[0,0],[0.151,-1.813]],"v":[[486.47,-188.582],[445.684,-230.275],[403.99,-189.035],[448.554,-147.644],[481.032,-160.787],[470.911,-172.418],[449.007,-163.657],[422.873,-182.993],[486.168,-182.993]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-12.236,0],[-1.511,-11.632],[0,0]],"o":[[12.387,0],[0,0],[1.813,-11.783]],"v":[[445.684,-215.169],[468.494,-195.531],[422.722,-195.531]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12.812,"s":[0,0],"to":[0,33.333],"ti":[0,21.326]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":42.442,"s":[0,200],"to":[0,-8.384],"ti":[0,3.3]},{"t":52.0517578125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12.812,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42.442,"s":[0]},{"t":52.0517578125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"e","np":5,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,31.723],[34.291,0],[0,0]],"o":[[0,0],[34.291,0],[0,-31.723],[0,0],[0,0]],"v":[[547.15,-148.702],[593.375,-148.702],[651.081,-201.573],[593.375,-254.445],[547.15,-254.445]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,-21.904],[23.566,0]],"o":[[0,0],[0,0],[23.566,0],[0,21.904],[0,0]],"v":[[566.788,-165.318],[566.788,-237.828],[592.468,-237.828],[631.291,-201.573],[592.468,-165.318]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":14.414,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51.251,"s":[0,200],"to":[0,0],"ti":[0,0]},{"t":56.8564453125,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14.414,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51.251,"s":[0]},{"t":56.8564453125,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"D","np":5,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[23.264,0],[8.611,-6.647],[0,0],[-9.064,0],[0,-11.028],[0,0],[0,0],[0,-13.445],[-18.43,0],[-4.532,6.949],[0,0],[0,0],[0,0]],"o":[[-12.991,0],[0,0],[6.042,-4.985],[13.445,0],[0,0],[0,0],[-24.472,0],[0,14.049],[12.085,0],[0,0],[0,0],[0,0],[0,-23.264]],"v":[[700.054,-230.275],[665.914,-220.305],[673.316,-206.558],[697.788,-214.565],[717.879,-197.041],[717.879,-195.833],[697.033,-195.833],[663.497,-171.814],[693.558,-147.644],[718.937,-158.521],[718.937,-148.702],[736.762,-148.702],[736.762,-195.984]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.215,0],[0,6.798],[-12.84,0],[0,0],[0,0]],"o":[[-9.668,0],[0,-5.891],[0,0],[0,0],[-3.172,8.308]],"v":[[697.486,-161.391],[682.077,-172.569],[698.392,-183.295],[717.879,-183.295],[717.879,-173.929]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15.215,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":55.255,"s":[0,200],"to":[0,0],"ti":[0,0]},{"t":59.2587890625,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15.215,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55.255,"s":[0]},{"t":59.2587890625,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"a","np":5,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.647,0],[3.625,3.474],[0,0],[-8.006,0],[-7.402,18.279],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[-3.625,8.006],[-5.136,0],[0,0],[5.136,4.683],[13.445,0],[0,0],[0,0]],"v":[[816.191,-229.369],[790.661,-169.699],[765.283,-229.369],[745.645,-229.369],[780.842,-148.4],[779.483,-145.227],[765.283,-134.049],[751.385,-139.638],[743.832,-125.74],[765.434,-118.338],[796.553,-142.206],[834.318,-229.369]],"c":true},"ix":2},"nm":"y","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705882353,0.956862745098,0.823529411765,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20.021,"s":[0,0],"to":[0,28.333],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":59.259,"s":[0,170],"to":[0,0],"ti":[0,28.333]},{"t":61.662109375,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20.021,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59.259,"s":[15]},{"t":61.662109375,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"y","np":3,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.12012012012,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"Roof","parent":6,"refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[245.056,242.972,0],"ix":2},"a":{"a":0,"k":[245.056,242.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"Right wheel","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":120,"s":[360]}],"ix":10},"p":{"a":0,"k":[372.806,399.222,0],"ix":2},"a":{"a":0,"k":[372.806,342.222,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"Left Wheel","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":120,"s":[360]}],"ix":10},"p":{"a":0,"k":[140.556,398.972,0],"ix":2},"a":{"a":0,"k":[140.556,341.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"Cart print","parent":6,"refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[245.056,242.972,0],"ix":2},"a":{"a":0,"k":[245.056,242.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Cart body","refId":"image_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[245.5,309,0],"to":[0,-0.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":11,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":23,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":31,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":49,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":62,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":70,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":75,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":89,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":105,"s":[245.5,309,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":115,"s":[245.5,305,0],"to":[0,0,0],"ti":[0,-0.667,0]},{"t":120,"s":[245.5,309,0]}],"ix":2},"a":{"a":0,"k":[245.5,243,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"RightCottonCandy","parent":6,"refId":"image_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[-14.574]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-0.956]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-10.167]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6.68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[-1.736]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[7.32]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-1.74]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[6.75]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-5.174]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[5.484]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[-6.26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[4.355]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[-9.784]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3.394]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-10.094]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[-0.64]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[-25.48]},{"t":120,"s":[0]}],"ix":10},"p":{"a":0,"k":[187.056,221.972,0],"ix":2},"a":{"a":0,"k":[187.056,221.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"LeftCottonCandy","parent":6,"refId":"image_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[5.305]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[-11.218]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-5.562]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[-11.57]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[1.663]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[-4.863]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[11.142]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[1.452]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[10.633]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[-4.918]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[7.13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-7.976]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[6.117]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[-5.267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[1.761]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[-8.506]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[1.278]},{"t":120,"s":[0]}],"ix":10},"p":{"a":0,"k":[168.056,221.222,0],"ix":2},"a":{"a":0,"k":[168.056,221.222,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"MidCotton Candy","parent":6,"refId":"image_7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[179.056,222.472,0],"to":[0,-0.25,0],"ti":[0,-0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[179.056,220.972,0],"to":[0,0.333,0],"ti":[0,-0.375,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[179.056,224.472,0],"to":[0,0.375,0],"ti":[0,-0.125,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[179.056,223.222,0],"to":[0,0.125,0],"ti":[0,0.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[179.056,225.222,0],"to":[0,-0.25,0],"ti":[0,0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[179.056,221.722,0],"to":[0,-0.167,0],"ti":[0,0.292,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[179.056,224.222,0],"to":[0,-0.292,0],"ti":[0,0.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[179.056,219.972,0],"to":[0,-0.25,0],"ti":[0,-0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[179.056,222.722,0],"to":[0,0.167,0],"ti":[0,-0.417,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[179.056,220.972,0],"to":[0,0.417,0],"ti":[0,-0.042,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[179.056,225.222,0],"to":[0,0.042,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[179.056,221.222,0],"to":[0,0,0],"ti":[0,0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[179.056,225.222,0],"to":[0,-0.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[179.056,220.222,0],"to":[0,0,0],"ti":[0,-0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[179.056,225.222,0],"to":[0,0.167,0],"ti":[0,-0.083,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[179.056,221.222,0],"to":[0,0.083,0],"ti":[0,0.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[179.056,225.722,0],"to":[0,-0.25,0],"ti":[0,0.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[179.056,219.722,0],"to":[0,-0.537,0],"ti":[0,-0.463,0]},{"t":119,"s":[179.056,222.5,0]}],"ix":2},"a":{"a":0,"k":[179.056,222.472,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"popcorn windo","parent":6,"refId":"image_8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[245.056,242.972,0],"ix":2},"a":{"a":0,"k":[245.056,242.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"popcorn","parent":6,"refId":"image_9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[245.056,242.972,0],"ix":2},"a":{"a":0,"k":[245.056,242.972,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/HackIllinois/Tests.playground/Pages/Generic Diff.xcplaygroundpage/Contents.swift b/HackIllinois/Tests.playground/Pages/Generic Diff.xcplaygroundpage/Contents.swift index 72e62a34..09bc08d9 100644 --- a/HackIllinois/Tests.playground/Pages/Generic Diff.xcplaygroundpage/Contents.swift +++ b/HackIllinois/Tests.playground/Pages/Generic Diff.xcplaygroundpage/Contents.swift @@ -18,11 +18,11 @@ protocol MixTypeComparable: Comparable { } extension MixTypeComparable { - static func <(lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { + static func < (lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { return lhs.comparable < rhs.comparable } - static func ==(lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { + static func == (lhs: Self, rhs: Other) -> Bool where Other: MixTypeComparable, Self.ComparableType == Other.ComparableType { return lhs.comparable == rhs.comparable } } diff --git a/HackIllinois/UI/Animations/Refresh/refresh.json b/HackIllinois/UI/Animations/Refresh/refresh.json index de78ee58..b699ecdf 100644 --- a/HackIllinois/UI/Animations/Refresh/refresh.json +++ b/HackIllinois/UI/Animations/Refresh/refresh.json @@ -1 +1 @@ -{"v":"4.8.0","meta":{"g":"LottieFiles AE ","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":64.0000026067734,"w":300,"h":300,"nm":"Loading cake AI","ddd":0,"assets":[{"id":"image_0","w":243,"h":243,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"Strawberries","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,149.988,0],"ix":2},"a":{"a":0,"k":[121.318,121.305,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[290.646,-40.682],[-40.682,-40.682],[-40.682,285.4],[290.646,285.4]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"},{"inv":false,"mode":"s","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-80.682],[120.42,-76.896],[120.453,-75.684],[120.618,-69.566],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[307.318,-69.682],[271.259,-68.232],[259.713,-67.768],[201.449,-65.425],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[366.318,121.318],[308.075,55.348],[289.425,34.223],[201.449,-65.425],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[269.318,267.318],[284.548,90.759],[289.425,34.223],[201.449,-65.425],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[123.318,300.318],[305.945,198.747],[364.425,166.223],[201.449,-65.425],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.318,246.318],[312.47,268.97],[412.425,276.223],[359.449,22.575],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-23.182,183.318],[110.02,299.383],[225.925,316.223],[404.449,79.575],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-46.682,120.318],[21.57,277.796],[43.425,328.223],[449.449,136.575],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[14.318,16.318],[-100.734,247.269],[-137.575,321.223],[512.449,226.575],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[512.449,226.575],[120.818,-62.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[512.449,226.575],[245.818,-3.182],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[512.449,226.575],[307.818,121.818],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[61.449,323.575],[259.818,261.818],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[61.449,323.575],[117.818,294.818],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-137.575,321.223],[-54.551,301.575],[-14.182,251.818],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-124.575,93.223],[-102.551,179.575],[-64.182,119.818],[121.818,121.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-124.575,93.223],[-102.551,179.575],[15.818,12.818],[121.818,121.818]],"c":true}]},{"t":64.0000026067734,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.318,-68.682],[-135.875,82.19],[-124.575,93.223],[-56.551,47.575],[121.818,-31.182],[121.818,121.818]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 2"}],"ip":0,"op":150.000006109625,"st":0,"bm":0}],"markers":[]} +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.0.2","a":"","k":"","d":"","tc":""},"fr":24,"ip":0,"op":477,"w":643,"h":700,"nm":"RiggedFerrisWheel","ddd":0,"assets":[{"id":"image_0","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_1","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_2","w":643,"h":661,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoMAAAKVCAYAAAC04eEIAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAgAElEQVR4nOzd3ZNc13nf++9v7d3dM9PzPngjaYKmKDiUJcd2kjr3/lN8c05VElG2q1TRJS5ZhSonpPWfnPuDOlXH8YlzYpuyLSoCEJqkRFEg8TKY1+7ee/1y0UOIyjHJAUWiMcDvw0INCTb2PAuzZs3Tz97rWRAREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREc8ILTqAiIjHyb5auLm9SlOXKS4AzJqOaXPE7350KF2tCw4xIuKxSjIYEc8M33rjcuf64jwJLEuyBlCFqRYz12Z/0Os9vfrdDxYda0TE45JkMCKeGL7x5oheO5RuY1pKAzAUEzzd5f2Du/qjq92Xuu71q+30xa1XC3UDyppcV6EsU+qASqGUHuoUOHLVQVv0P/TK9248aeOIiPg6JBmMiCfC51ftytRVB1+2audbb1zp4KJqvwXNpvAa0gr2EFGwe2BCKYem7kG518A/6JXvvfelx1HVoLKk4hZcQNVVHfR7bd++m+pjRDwpkgxGxEL5+tV29sLGd1QYC9Yx48+u2jX7bfE7j1K1863XNzqPviOxibUjaQvYrK6rghEqxXYPPi5oD7Rr1bt2udNa13XltcmXHoe0ghnME04qaAr1yCr7rbj1m1QfIyK+Ku2iA4iIZ9zlrZcFq79etWOFqnnVrtaHVTuKl3pofeuNyamrdv3oeZqyhFkTbNTqbclbgnXECq6NoMM6qPKoiKKqHjxF/YvAzS83jroOrCAPoRRUK2iCOKB6qdcjjiMi4mtSFh1ARDy75lW7ekHUDVS2VOoORecr9aLlS5YuVelSFRexz8nsQN3qqr/lG2+OTvM5usK28DL2GNdV5lW7beAc5hL4EnCR4nOCzWrWkVaRVjq3L3z5cZRzFS4aXbJ5zuhSxRdA51W0Q9VWD9857TgiIr4uqQxGxOJ8UrWjrgs2a9WW5G3B2j9btUM6qdpNUPeFVTvb6m79J8BDoVEVy4IxsAressu2ike2j2QVYCbrkMKy7CXwxiON42H1kZNxeF59hAa5kzms1qgIidrZerTqY0TE1yDJYESciq9fbXlu58K0rdvzXblzlbI77MpdfnHn9qPuku0K26r9CmieoMkbmC2kLew1cAOaUrwnUyp1VqRjKOPOeoHTJFHFhb40iBaVFtcBaKR5kraJy6bwx4IjzzeUDKprU6wGqTn1OKhL89vbrILWsT81DgaYGfBAuFTUlaJj0GHn5pGTQd94c0TxxalZ/+RrYTf9wP0upbujb37/9qNcLyKebUkGI+IL+e0f7szaekXqmiKWRRlS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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ/q/wNY0XGDf9tcNQAAAABJRU5ErkJggg==","e":1},{"id":"image_3","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_4","w":643,"h":661,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoMAAAKVCAYAAAC04eEIAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAgAElEQVR4nOzdaZdc13Hm+/8T5+RYmYUCYGuAOICT5G7cvpZEmlKb/hrQh4Q+gF/f1ZLalEBRHkqiJJDgJMiUBRJDVY7nxHNfZIGSffu2SaBIdJHxWwtrAYWsyr3PqpMZGXtHbCillFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJK+YzocQ+glFI+d3Zc5Yd667VnA+DZF9/KH3LVSPm4h1ZKKZ+3CgZLKV8KV32tufXe81/NbV5Ma5iKaKIPIwk7M3q1LJpt88dvPPfr2z/UD/rHPeZSSvk8VDBYSvnC+9sb//iVbZOXSAZBP7I1pGEQUrjvpaaxM3uCrTpvJN1bRvPeL575zp3HPfZSSvmsVTBYSvlMvfLGj+ZMp/M//9o2tuvju7P7h1eubD7r5//+zdcvu8+LIscOpiLGRiObgeQGJLBt9YKN8TrQKhuOabe/+ekT37v9WY/xxVvXp6PFYKZh3z74mjdNp+7+8sd/9Xf3P+vnL6V8uVUwWEo5dVd9rXnv7Ree7OEg+mxoGEQfkepDtrNt0r06obuD7dHvP6uA50EgmKG9cD+ztAcxCTwyDCU3fhANJp2krdEKs1DDItNHDLtfflYB4cvvv3qxWTeX0hqqcUvvNiMCIDLTTfRJrIaN/3DpyRsf1NJ1KeWzUMFgKeVUvfz+qxe9HT7Zuht2NOOgH2EGUnychUs7JbYEWxOrdpt/+Mbzb719msHOt2++fjDq87kM7cneB81DuYeYQkzsHOJoEcJYYpsnWUGbY4WPke65z/vdhJ+/dumlxWmN7crh4XA2Wz/P1hPkSRKjpmFIurUiTK+wejt7tLtGET5uVqvfVqawlHLaKhgspZyaB5k45AliipqJnCPD0HKjVCiwrV2Qo13wJbPI4N+eeurGr08jILzqa83bb7/w39qeqVufszkH3seeI/acTIVGEq0hjHtgK8Ua59LWUcj3QfdS3FXovVef/u4vT+ES8eKt69NYN98Mcuye6e46eRLWMMOtUgGSwmnTCTaglemXShY5zjc+j6XrUsqXRwWDpZRT8bc3/vErPd2Tu0xczkPaQ0wTjcMM0m4lhxx2ZK9kY2JtWIY4zvSR3Xxw+fnfvPGoAeHL7796Uav2sqTzFgeGc2HOGc5ZOZO1J2mMGDgdCqXTG4eWso85CQRJ7rrhjvCddrW6/qhZuSuHh8PpdPNfJU+UOXdoT8meYAIan1yjxkhh9UR2idbgFWYREUeZPtoo/rmKW0opp6X9zx9SSin/ey/euj7tF92TDqa7JdmYg2eGPWVOQCNEiyLAJqND3sgsHQxtWhpHqPPbb16+B7z3SANajy4GHvXkWGgSMLVyzzATmgNz4ylmhNBu2drrQENDg2VDJ7yhZ60mVm7GXwEeKRjcG28vB/3I6Rlu5mHPE2aGicgx0ghFCATORBul1woWSbTYESFGzr+66ms/qz2EpZTTUMFgKeWRNcv2Cbc5DJhh72HPjPeNZoGmPsnCYTfs9gt2RmvECNzKFsgyvaK5fOXw8INHqTSW+7mbHEbGEHKUaCzFBJhAzlDsY89AY+RGVg9apB2ABVvhtYgVeGRrmAPOPco12mUr+7nF1IpZ2HOsOXgesIc0wYywW4CUepmt8RKfXDu8C1xx9/a7zzwNvPUoYyqlFIB43AMopZxtL966PpX7ucgxvSdO7aWZyZpj71scgM9jXwRfSOkC0gWRB8A5zH5KM4s9xFR4Mp0tnnjoAdm77S/ZtIgWMwgY2jkSHmOmtvfA+7txcRHyAHtfYk9iIjyWNTQ5lGixB+bRgkH1g68GMXLPNHqmNnt2zrD3DQdOzmMuABeBi7vrlQcB50D7kj++Rqidttk8edXXmkcZUymlQGUGS/nCueprza1fX5oej/aaaR9DdfeXq/1xf5rVsH9u3MVB13ggYpzkWGISaM94T2iOmVvsCY0RTRgb1sAQOZQY1CNvE6+CGMt8lUfIelkSyrCjQTSSGzla7AGKgewRMGUX4I1BC0RvWGEGItpUtoEa7FYi6OOhA68rh4dDtqtJtjmKXiPkidE0pBkwA+aCmcUUMSCRpA5YEmpJa7ea7Y6ItchV2qO3fvPseeCPDzuu/50Xb12fju+tGrfzibr7S4CqZC7li6mCwVK+IF5+/9WL6gdfffdNT3IQMaaPrnXQThmu+v5vbr6+od/eXqz3HmkJ9j/abmOG+gFoKDSSNUp5LJhK2jOeC+bIe5jWpre8EmptUmIre+30WKFRkiM6TV68dX36sAGskXanzP3HryOlhRRAgFrwxLDWyUpJgEwqJGGJ//hDHsJguplmRsg5NBrJHoY02gXPmgB7wD4ww4wRAm8MQ2x2garWWGORIzuGNsPBMGacYjB45fBwOJ9uLvVwEItsNoO9iOgamgnhzO/deK1v7DvqV3+owLCUL44KBks54168dX3abuMyK08CjbLNUWQ/QNHQZwC4aTKy66Jpz82ny0uvvPvz93781HdvncbzN3SjDFp6txKtncOwBsgjw25ZVsyBfe2ygZ2sIyCBNXhlNNxlxNxCtIpsx/dWD5eJkxw3XkucSTQmnYB3exXdS+oNW8wG+Ri0Dbw2bGQ64x6pt5U4+13u0m5C24e9RnuNpx1uyGxQ0+6qmBmENASNnZ5Yu4BQsGccoKV2PRC3hpXsEaHByf7BVhGNnfsPO6Y/d9XXmrffvHwpWH0F3OIYSRq2kW3mx79Dhr5LMc/B9Csvv/mL28erwdufxykypZTPVgWDpZxhL7//6kUtdJnGA8O0Vz9RH2PDkHRzUplqeqcU257cNGi16Ri99NbP5s88c/PGo1akpjV0h4gMKxp2fftaWQ3QIg13e/U0A8/ZFWX0oCV4IEWbZBNWg9TYqdhl7h5ayJs+oyeyV6gjvRVskthArk6WhVugx24sOuAYWBmtlWx2DbHVhd1nqOusu48yJksKRZPKIBXIjfXxMvQAM0RMDQegBgjMyjDY9UNUE+kmQxF493OsR24PdtXXmnffff5bEtMU0xamUo5Bwz7dSs0uKO+diuhSbAJWbrrxbNTPX7x1/Vef1RaEUsrno4LBUs6ob998/UCrvBzEqCfnIfYsTUWOMUOJ1klD7PbkpdgqWWdo2eBBZrTvvvVCAr99lHGEvOn9iWMSAVhIj776+v/L0dzHeSA1G5GbXa8+rQQLYKhdAGhgjQhDDywFxxLHmKXxKuS1HWt6b7PpP3jUcaXxf9Ld1R//+c8f+8geBILR97PeMWukWaKpkkmGRoEGVp4E5pFkdiLWCUuCpSLbWLZXXrx1/bACwlLOrqomLuUMunJ4OBzAZbca9k3OTypSzxkOEp2X4oIzLkq+gHUh5QvKPG84OPlzjsb7dj75yrs/v/QoY+lp12ptOTLsXnaG1UnuER32BrwGH2M+BN8PswS2wNbOTlZvuTdOCKedq/3xQ2cst6P+DyFvglxnah14BblEHIPuG+4a7sjcBt+WuC1zB3EX6753AeHCaGVypcbHzz791h8edjzHvRayLTLlSIVTVh92H1KH2SLWmIXgruDD3RI2a6GNTSfvrqfstNXLkW76R9q397sbz17OTnudmzntSVPuk98RZZ5P+QIZF8i4kPKFlM6jPB/kAY59Oeah7iDWzTersrmUs6syg6WcQfPp5lKfDKR+hptdRWp4P6wZME1yHNLQKMDI6hBrWUvjwUlfPxT0m47nrxwe/vFh937ZmyXZdAp1TneIbcJWaC20crDEtJhkd/xbb7GUfRxodVK8sbF3ZxVDdkmsXrv03YfONL126aXF92++/gGcFKU4BuBGmZJ2DaXDXiEG7L7ijNgEXiVeyD4CjkGLQKtIvfUoy+nbxXAxGG/6kLtdYMdW8ibxRrBid40GCOXHxSyxBhbgpfAKxRr75Bqpc/bduGseOhh85Y0fzTvpoIluDzd7Ts1wzkMxN5oiJrJGyA0gWR2wBS8Nw4A2w0Jhddnfeu/5rwKnsg+1lPL5qmCwlDPmyuHh0P3qIqGJaCYp9gLN2PX1m1vMdhWqGu2aPGPkrdFaYoRpMgSQoK7F23OT9deBdx5mPDmN2+2ab0jeAJtE65Mgb5lmKNwI0rvMV6PAJGvEwvYx0tKwMqwDNqjZkPrXR71OT17+7XvvvfPsBfUxEG4yLCMsesRG1hDTAoGVgTvj1cly8pEVR1YeZTb/+g/Pfeehrs0Dh1eubL73zs+PMbPovU7FGnINWsoMjVskbDqJIQB2B15KcUx6keQSWJlYh7wBb772/I0PH3ZMbsZfcauhaCaZ7AU5I2KOvY80M5oKj5BbUkLuTq7byKHWmbvY1fQW2673U1QwWMqZVMvEpZwx50bdgSUF/Qg8Rp7YuWexl6Fd1W5y4PR50AXEBeBCwDnkudBcqT2SKelJj8em/+rDjue1Sy8tnM2H2XkNLEFLzAJzHPJ9TpZkDR8iPpR1W6GPEHeR7gkfOXxMsACWJlfK1SMHgz/UD/rtkDd6dNfK+7vn0l3BncAfGX9E6EPsDwl9aPyhiDsBd0D3rLwf8PvLz/725486FgA32w9MrEyucC4xC9nHlo6E7gF3Q/pQ1m3sDzEfiriTcNfSfYljBQvIpYlVD+8+bLbyqq81vXQQ7keJx7uzkWNis2c0w94/aQp+Aesi4gLSBeDAeB97LmlmmAomksaZ2vv2zdcPTuNalVI+X5UZLOWs8XZOGwP3MUIaaXf+7thmKnIPmDs0x+xhDwiMtdotD4uEXvJa9soRozDDxOeuHB4OH3apeLA9+v12PL0IjGSGlhvsIGVEZ7wOM7AUxuzapXgtvEBxpMwjFAvwwn3z/k9fePHeaVyq1y69tHjx1vXDdqnn+o6/VLhLewUxxgzADSFhG6uzvDVeA4tGvvXE0zf/6bTO//3pE9+7/b13fn6XRmPQyPYgHI0zd90P7Q0w2mUrtestaG8lLcELpPtpHUMuiP7eX3YHbz/sWG79+tLUAwmf9IYkR+yyyVORexYz0L7FTLsqZ+32fnLMroC5BzY6uZayR02jYWxjBtw5jetVSvn8VDBYyhnTD2NE75ZwS2oADBwakh5ZGgtNZc8N++yWhVN4YYTxVrACjRwMwwwwAzVNOxveHwMPFQz++K/+7v4r7/78nU3HQHYDUggn9LLXIsbI7UmzZ2O6QBuTSzIX7JZk70ff3L78/G/e+NkpXq/XLr20uOprv7z13vNf3SZPK3Nm55BgoNRJexabiJ7stkL32kG8dVp9GP9cN8i324UmimzlUEYi0yd02p2EMtBujx7GSez2XkIsnByHfETEUXTN4d+/8ML6oQcync7Vu931dWTgYEhqaOXQaCxpajwTPgeaYAtriQhMj9lYLL0LatuIXY/IXpsD4P1TulyllM9JBYOlnDVbT6LJhoxAblA0u56CbmUN/KdmzzPEHNR5161kBbvg7+SxjeUGFO5PdhE+gh8/9d1b37/5+lDi6T4NIuVdkOPIoXenj4SwkTqb7W7ZlIWkRUPc2Uz7X5xWJu7PnfzMW9j/+n9/8E+Twd3tZDyJYbYhrySN7dR61Uez/CxbpJxkKn81XPF/pRIUFnTCG6MR8sA+CQatDNRZXoOWiKXEUebm9Z88//2Hrmx+IPoIB/+u7yE6ObLPHsqMkfZA+0BINCfNuncNwqGV1Bi3ToUjmyaith6VcgZVMFjKGZNN9A358b+duTt6bXf82i6mkwMUwPDkOLXAxO5xD5oCpjjlRnb/8Mx33n7l3Z9vevNcwpbwWmiENcRutVtjtFGPOTn5I1dJe+tCN//V3z/zCNmuT0LKf9o1lz7+TJ/nf+MkIPyXWDffDPouYSPHyjAEBjK7Fi3hJOmMNwErlPfbrjn8Hy98/99OczyBBBLsOt+kBCLAIRTGQ6AxJ8U2D36HjE5+97A+646IpZTPUgWDpZwxSi16NftqbFKJ6LFTqGNXKdvZ2giWu+9wD1ohNtidQn06ezlSyjQ4mtgd2nYKfvzUd29dOTz847nh8km38UQ6d/vjFI0lydh2NkHXS3dH2+bG/3juO6ca4Pyf7mTp+p9vvff8V7vOXzc+1zQM+6TVyekrMqZRF85lZnvr6WfefPO0sqbb2K5pB7sFX5RgC/Un2dwEOoiNd6e13ANksVSy5U/tcTKkXW9Ik6ixrdVpjK+U8vmqYLCUR3TV15rfvfmti5184PA0+mxgl8FTatFad+6u2zundYarvVk2Vg/RpbIj1UmxAW8lrW0vtVsONuElVu6WGb2QWZ0USGwltk46Qp0z+1df+P6pFG3ArpUK8OZVX3v7rd88ez6anAgOjNQ3ecTW280obr926cUv7akVHy9dw61X3vjRPEez/WbdT7bux20bfd/1R6NmfPT1p2/c+6F+0P/0FJ+7j2Y5zL530/TZZ4e0hdxibSStdy12WCA14C0pyawQR7s9p2wsb3B0hLsHfQ/7hkdqgv3nrhweDg/m67/YbmP25/dVyBsli27S33n6G+/c+Sy2FZTyZVOp/VIe0lVfa95+8/KloPlKKqI1AxoPUhnuJLV2OJJe205s8fZfLz/39q1HffP69s3XDybuvoniQp86L/K8pPO7M205B+wDM8QE03p3+tsGcgG6D9wT3MmTFitYHwr/9n8+99I/n8Z1KWfDf3/z+n/riK9IeSHQQYrzQucN5wLO2Z4J9gwDQIgtZom5j7gnc8f4juCOIz7C+eGF/tz/80iFLeyCwPl0c8l9XkxFNO6Gapr2z++rzOgVbG0th43/8FkU+5TyZVKZwVIewou3rk/ff4vnpBhZngTd2IpxilYZDZEiw324R96Gcm0143dvPnf+xVvXbzxKkcIvnvnOnf/+5vVlhtc0rOi1TDMKGBA0Nkjq7VxitQFOPagi5kjmKMWxYIG1TLxuPXjkc3fL2RKDuK3OB7sG4VqFWZocCbU2gehBa+zBbo+gOsNK4tj4yKGF0JKT3pAQHzxqIPjtm68fDNhc7pMBoUnQj1GMevnf3VcK9/TehLzptpp9752fHzz11I1fV5awlIdTwWApn9KLt65PY918MyPHTvYamEJMjEYkw93xXRHgJNVLbESsBcveGsYyRi/eun74KAHhMpr3hnjW2MsMjcSuClX5cX+6DWhA0GJ7dxxdrBEL4DiUR04tsmER8PufXP7rR65OLWfLpSdvfPD+O8981X0zQoxsBkatZIQyOel7GCd9D3eV4VtgEdbC+EjomN1y8rIf528fZTwvv//qRa3yslsNA/aAKdIkrRHJYHdf7doAqVeHtD3Z0ziSc3DzzWfiqq/9qgLCUj69CgZL+RSu+lrz/ls8l5FjnHM1MXNqZnkqcow1JN2eNOk1okPeJFrJGqlxq+yDZXvlqq/9/GHfuH7xzHfu/O1vr/+ha9Rit7ArO0jTB2y9a0UyUDpASHTYW6QlsHDqyPIRne4uZoNfn/JlKmfAD/WD/pU3fnRjO56OAwakw0jIabuTY0Uw5ONWN04pNsYrwzLQUVpHkMct8cZPH2H/54u3rk+9bp6k9VCZcxNzwx5oKuXIJ/fVx/ua5K12R+MtvQtk21ZNc/PNZwD+5dGvTilfLhUMlvIpvPf2C0/2MG7SM4i5zH7iWaA9kgmhEdCCAykldUrWCi0TD8I0ONRgv/POt54Cbj7sWL7x/Ftvv/vu86NIok+zK/j01vbaMAJaxa4y1c5ewSZhLbQALRBHzWj9i3/62ouPrc1Kebx+/Fd/d//l91/9jdfNf1ETkLmrKsYbh0f2gybigNTb7sTHfQ8XOI9SvvGTZ7/7SGc3t9u4HO6GaWa4mYP3A82cuQcxUTAEWu/a3fRIXe4KoUayB2LXwLuR/vKVd39+qfYQlvLpVAFJKZ/QlcPD4Wy0+m8Z2mvgwHBOcGDnjIjd8W94jGhJgiAx3Ulbl2My71u6f3I+7t0e7iyWo394lCrjq77W/O7Gs5e7RpcasdeLCb3GRA5xtIFPgkE6pAdv5CvU31tMhj/7p6/9dQWCZbdEu21fwN63mIoY27u+hw9+hxIlyo6MDY1XjVl2kb/52dN/89YjP/eqvawm54kOgHPh2AfvW5phpv/xvlJ6Y7SSWNi+D9zbnT3N3Qz98emnb/y0lotL+eQqM1jKJzQdHX81Qo0VE6OpYY/MvV0g6H2hWcJE9shSyE6jdcDSdkMEyrRDHbAVXo/Hy68B7z7smE7e8N789s3Xb0/UPSN0EMHI1iDDLT3KBsuRzr5D3tiDd55+5sap9awrZ99Pn/je7SuHh/ens8UTbTZPpnMUaJRB636XXaZxRqpTeAv5QXb9mz87hXZE7bI56FsGqJnQMwlyanJmmAvm4JmIiZ1DJJGkpTVikXYTenDeNl3aa2XO3vrNs+eBPz7q2Er5sqhgsJRPKAbtvO89CmuEPHYygZicZATnmLnEHmiXxbA6werPqjF7iC3ptcPLcIwa5SMFgw/84pnv3AFe//bN1w+a7Pdl7wdN04ektGm8HXXxb197/saHp92zrnwxnGSo37pyePj+bHL/vNSeJ2OUIbXq1GeTW+dHjPnja5f+5tT6Q/bSQVpD7SqZxxATlNNAe8YzrH3v7qsRqEHu2VXGDyThpCfY7LLeMbY9Gg79F1QwWMonVsFgKZ/U1hO1bt1rIBhEaEh6bJgAU0sz4JzwFNMKOqPF7qgu9+C1YKXQEDO0GbjR3mkO8SQovHOaP7N8uZwEhR+c/PlMvfLGj+YdgBkAAwdDMke7wM8TpJlgfpIlnBo3nFQ0YzB0go3QKs0IGNIwyO5076tSvujqUPFSPo10q/CugtduU26FhqDh7s0r94wPgAvGByj3wBPQUGiY+tP3Sm7UR/PirevTxz2tUh4XSwplg6OVaXdZdYbenaIzSjHBntmcBy5q11x9DxgLjwgG7ApdWuSWdOtd8/VSyidUwWApn5KRvDs6NmQ13lUOt0CLNYSYAhdBk5OMR4vU/vnjDbIUVq/xvVXzmKdUymNjpNg1RpJQWAokGTWGRlbrYISYAhdyl4kfWrRCze6eSkmKSEcgWariyFI+hQoGS/mUhC2wCAMGW3ZaJNCza9Z7H9iC0iJlJ9gKUsTJ99uwa+/xOOdTyuPWgyGc+OP7QrukYe4O0HHPbnn4WLDF9DJpSHv3+ARn7H5G4371OOdTyllTwWApn1DIG2f0aWeG0s4esRVsLTa7YhEWwF3gQ+AuZiFYnfz/1qazs89Qpp1J80jHd5Vyll361q1FOFPODLkPu5fVm+wQW9Ibw9roGHwHuA3cRywEa2CL2IbVhdSH3YfVq+XUClxK+TKoYLCUT8jR3HeoQ2yVbBAbw8ZobbO0OWYXCH6k3ZvWR8Bdm2ObpdHa7L7v5Pu3pq8zgcuX1g/1g56BlhJbTIfYJmwenJdMeCk4Au6B/nRfiXuGY9gFhZbWmd4gtkgdzaCOVyzlU6hq4lI+oWZ9fDvH068HsU5yLbQKWBqGMo1Cst0j7foKSr3staSl00eI493jtTJeh2LdtKt/e9zzKuVxarbNH40OeuVGxDpgZXIla3HSSgaZDmtoEUi90usUi7CPQQvIZcAqM9ZNeHOw2qu2MqV8CpUZLOUT+vFf/d19+rhtckWjJWZhcYx8hLhn+w7Bh9gfSrqN/aGDj2zfQdwD37c4xixotOx7/fF/Pvm3Hz7ueZXyOH3juV/f7hoWZndPJSxsHck+At1XchfrI4t/d18J7oLuWT5ScExoSeQS/Pbfv/BCbb8o5VOozGApn0I/6d5v17oADCUG2E1ait1G923aYxFtOiXCdnaBVqBlmuPARymOsBbrvfjl455PKY/bD/WD/ts3X3972DARDDEDQWAJsnfExs6RiBY7QIl3J/ggFogjZxxZeazg7hNPv/Xbxz2nUs6aKr8vXwhXfa357dsvzPca/7uefce9Fi9c/u390zx67eX3X72odfNf1MSc9Nxmb3dCApOAYYo2EmXgMF3CBljKHEscE7rv3Pz81We/X/sFSznx/ZuvX07nk9j7ipjb7AVME48DjVJulAqHHwSDG3iQofdRI93fpP/na8+9dPe0xnTl8HC4d+5oPsjB6N/9x2Jxv7oAlC+SCgbLmXbl8HA4n24uuc+LAGrcpiKi60O0dtP37tU19p31Hr9/7dJLp1Jl+CAgjNDMydRiajQK5xDFnzLuzi4VG+G1zELBIr19vQLBUv6/HgSEJ/fVHjARHmO3KFqUwuEH91XYq2xYuNc9jba/+OkT37t9GuN45Y0fzbeD2dflfp6KUOM2uj4Asm0ynNnTrBu4c38xvHVyakspZ1YFg+XMeuXdn1/qNv56RDYdzTjoR4qmzd5N6OR3O9Q5+y7UbEyu+j5v/ez5l987led/40fzfjx+ITsdIE9oNAwzzHQTSIkdoT7Fht6bxs1H6fW/vPrC9++dxvOX8kX07ZuvH4zpv0XGPPFYaEQwcGb8x/tKfa6j4fcH24NfnsY+wau+1vzuxrOXe+nArYYixyQDm8GuMTakcTTq6dmmvI7wcbb9OzRXLKEAACAASURBVKcViJbyOFQwWM6k7998/bL7vIg8QUxRM5FzhBmk1IQciS2rF2xSf1pSws0HTz/7mzdPa+n45fdfvdhsm780/prNwIoIKdJOObNPfj9k+IefPP/X1e6ilE/gqq81v3vzWxe3TV4K9edJt6FoLEm209n3ye8b9++e1oerq77WvPvu89/KTntNdHuomSQe02ss0UpuANLKsPuUT1rg5CqyPXbDrX945jtvn8ZYSvm8VTBYzpwHgWA0mvWZs5D2ENOEUVjDtNuPMwhSl2Kr9FrBIpPjiDyKTu/95IWX3jztsb3yxo/mf/7v2ldUyqN7cF91Tatur+1Oa7vHAw8Cwej7Wedmvlum9lQwETlyMFRGY6VsZUid5bWtFeQyIo4yfTRo9eaPn/rurdMcWymfhwoGy5ny8vuvXtSqvZyhPdn7oHnIM4s90hOHhrJboUh2BRzGa6OVgmOnj0K6L+me+uZXla0rpfzNjZ8+KbVfNZxT432lZnLOLKZCY1tDyS2Ace5OHoo15DIdxyEfId1zn/fb7eof60NgOWuqtUw5M676WvP228MnaT1sYM/WDDy3PTeaBZpijYHWpiGUhq3MSrBM0xIRmRhnqvGzV33t9mlWGpdSzpYrh4fDYPWVCPZs9pyagfeJmGH2DFPJI+zWSEg9yTbJlcQQuwEr7ZTo+/HkCeBXj3tepXwaFQyWM+Od3z19EH02KU0NU4u9sGZG+5AzSzPwBBhKCuwENhYrzFC7vmWW1Cd0ODfv3nzqL4Cq7C3lS2o+3VwCt8DEu9eWvUAzdisPM+QZaJzQBg9OGfImzMJEq0gZOaBLvJXzqy/euv7OaS9ll/JZqmCwnBntsjnoBhpG349QTAJNrdyD2IPYB88NU8HIcovVC68TFicFJSnRgzdyrGyP0vwlFQyW8qXVwwGOkZRjJRNgYjRFDwJC5haT2L2uCOhAK0ItdijVG2+BNcQ6w0uW/gvg3cc6sVI+hQoGy5mxbZs56QFNjNRraOVIaJxiKnIPYi57Dkx2fcnobZYyjXc9oLdWrNMeBTkSGkbDXzzueZVSHo8rh4fD6FeNpCFomKGRMsdoFxBqlxWcG88wY3AIbXdH5u2WGhAbHKvEYyKHJ0Vs+497bqV8GnU2cTkzos9G6ZZ06/AAMzAMhUdKjTFT8NzivNAFzHlgH7GHPHFoZOcoTo68QrRk0171teZxz62U8vk7aD4apSIUbtNuwwwIBqCR8Ag0sZgJn0NcELpgOJCZB0zBY8PQ5AjR4mgzaFs497jnVsqnUZnBcqYospEiSAeKBrmx3SINLA9lTWTmhpnhWLgDDVEMsFtZjeVACluNlHHr15emQFX/lfIl1EQfVkhSY2WQu9cVdltNBjJD0AS0bzwC7hLe2BrC7kOlUIPdSIR7hVsNH/e8Svk0KjNYvhAMkhFY3rVMCkGAxJ9aKP0vWyld+tat2uhdypeY+/4TtFlzsHsNEan/1eOrVVs5syozWM6UdJMik1Aqs4dIRIfdgbaglfDR7u9sgBWwwe4wneU+UGKngrTtai1TypfTan/cx7LJNjL7zD6IzHDK6jE9Ume8UbKSuGfTOFjJrBBbrA7T2+4J9bLthiTjw8c9t1I+jcoMljPDau63QUeow+osdYiN0hvQyrAA3Te6A9wG37G4DywMq91Gb7YptkidU10Ef3zc8yqlPB6vXXppQbBNZx9Sh7PDbMEb4TX2UmaBuGf4CHFbcAdxhFn65MOmFBty97oSSeemr20n5UypzGA5O0br26yGf4G8ldjo5FxQQktgGFZYpGBt00jqlayRjyUdkyx2Z4l6ncQ65E1EU21lSvkSa+CO1Jzr5a16rcJaWblKWAgPkGTTSSywArsTrGyOJI7ZPW4NXmfGuglvY9PXh8xyplQwWM6Mp7/xzp23335h0aSmSa6EVpiF2fX7SpEBW9sfN51WxMawwjqyfLwrKtEy8Mrho0tPvlnBYClfYttR/4dmE18PtEpYiVxihopoZMvQS15jDZFl0wEbxML4KKzFLnDUksarHt396Qvfv/e451XKp1HLxOXM+KF+0A/6uIX7JWaR9rHMsfF90F3BXdsfgT7E3AZ9aPsj23eAuyHdD/tIyTGwbDLeqv2CpXy5vXbppUVYv8f9UqFFKo4tHZF5H7gnuIP1EXAbc1vmI9CHMneQ7lm+H+JIwaIxS203h497TqV8WpUZLGfKT57/6z+8/OYvDiK2A9w02EKyvDtZxGiEaJ0ZikhMF2hjckmysOII6SjUvf+Ty3/zzuOeTynl8Xvy8m/fe/vGN/eayFa4ybAwmdDJXgFDFK0zFVJv0xmvhJZCx2kd4Txy69/8rLKC5QyqYLCcOU8/+5s33333+RanlDJJelcxvCIY7k4fkXDaVo/YmFgZFgHHcvevT1y++U+Pex6llP8z/FA/6F+8df0my2Ya6oXCgk6wTTTCDMAtEsZJuFOyAZbAAvI45RvXn/6btx73XEp5GNUXqZxJV32tee/tF57s7aeaYC/xmF5jxEB2Yylkp6Uesw28ptFSzptPXH7rt7U8XEr5j676WvPeO8990/hr7plKMbFzSDBQ6qRvqY3USd4kXoOWffpXrz33Up1FXM6sCgbLmfbKGz+ab5rZUzHovmJrSDJQRGN6icZypsQW5Qe57d98tZZwSin/iZfff/Ui68Ez2PvRakS6tSJMr3BkOnvJm+wHt3Kvu/napZeqcX050yoYLF8IVw4Ph7PJ/fOZMYxozgNkk0dpLb+yPffh37/wwvpxj7GUcra8eOv6NNa5L40mym4O0Nl3phnLGfN79bpSvigqGCyfiVfe+NGc6XT+51/bxnZ9fHd2//DKlc3jGlcppfyf7MVb16ejxWCmYf/xnn5vmk7d/eWP/+rvqpl1+UxUMFhOzcf7+OAg+mzUuFXfNKYTQLZNulcndHewPfp9vbCVUsrOy++/erFZN5fSGqYi1LiNrg/YvXY22fed2s2w8R8uPXnjg9r3XE5TBYPlVLz8/qsXvR0+STKQchzWiIYB6Y8/3aadxG7jtYlVu80/fOP5t96uF7VSypfVlcPD4Wy2fp6tJ0GMsu1Hu/3PbkPaBYPGTdD1PRvJm4zmaLg+frM+UJfTUsFgeWTfv/n6Zfd5MYhRRrcnYpx4HNYwpUZ2o8D2rj9X4LXJFY2WuW3/cPn537xRAWEp5ctmtyex+WbrbpihPfdMRYwNQ4lWcgOQVuLspNjYXhkt1bCg3f7mp0987/bjnkc5+yoYLI/kb2/841d6uieRJ2pi7mQPmCBPZI3SbiWHHHY4SW+sWONcEiwi40jkB088+9YvKyAspXxZXDk8HE6nm/8qeaLsZ46YRc8UeWIzJDTctbMBh3P3QZq10Ur2cQbHTR/3lw2//MUz37nzuOdTzrZqOl0e2ou3rk/7RfekyDFNMyc9N5oHTEFTK0eCgVAgQ6qTtIVcCYbpaLOxog/eeuvZu0D16SqlfCnsjbeXG3fDNDM55rbnhj1gKsXYyQCdbLOxepHbRCvwEmixm75JJs5vXvW11+rDdHkUFQyWh9Ys2ycitk3C1JkziDn2vuUZxJTUBDGwaYQt0SXeCBaGAbghhUM5wM9eOTz816o0LqV80b38/qsXtern2WjPaGZ7Ho59kzOjPZMTSSO8WyZGpKS1zBIYOtwoBVaapn/nnW89Bdx8rJMqZ1oFg+WhvHjr+lSLfk40E9AU+qnIGTAD7StzZjHFGkpqEhxSJ1jZHiiiUaaF+3Rs1TSb/dHqKeDG455bKaV8ltQPvhpolH03CTQ17JmcEbEf9szSVGicJ+/Rknun1oiRTCtCiDR04A3ZPXHV196t7GB5WBUMlocy7uJgIwXuRygmkUwNU6GZYU7EHHuGGFtuw9jpDcEyiCadSPQ4NoJ14pXkr1HBYCnlC+zK4eGQ7WqSbY7Uxxh5AkyN9sKeGe+DZk5PQgwthLVldw5ya7HLFMIWvE57JTx+53dPHwBVTFIeSjzuAZSzabuNWWsGtoY2Q4dGEGNLY8TU9i5DCOexLyRcQBxgzY1nJ/sKxymPRY7CDJEnL966Pn3ccyullM/KYLqZpiJsDRONbIYixuCJxRRphtlHnE+4YHMedJ5gHzwHz0hPEo9ljYRGmEFsh/P//NlL+V+rzGB5KA3dqA81yK1SrWGgYIA9FhobT2H3KVdoDBhz7LCFtmlWQsOwhyha0q2apm2PN/U7Wf5f9u69S67qOvf/95l716Xr0pIgMbbMRcbC8Tg6v5ELGDNM3gZ5keQF5A3YOQfMxbl0QjB3sGx8DEjq7rruPZ/fH9WKHcdgB0uuVjM/Y/RgdCOJNcWumk+tvddapVxY08aTrWjp3UpqEQMng5CGoLHTB4gZ5lBiKpDxEgugA1aOs/dOMwAGUtMq+wqD5Uurxlu+lLSGEdmQEciNpCDdIDeYFjEUjL27bXwIdMgptMQMBC24tRTIDSjcZ9ReR6WUi67pJMfZe19Gg9xitwltiGHCSGIKXDYEOIA1aIg8kN2m3SB27527BSX19lm+tLpNXL6UkH/nql9L8n/fvzK4+7P87X+X9QZWSim/Rbv3TAGBf3/QMxUGy5dXM4PlS+lp13amGptUYqdCid0hd0Jbmw1igbFEb2uJWCO2Nh24D6tHToOjidwetN2+ayullPvltNdi2Nr0ThE94cTqEb3k3tbu/XO3n6AwgVgAG9i9d4bdS+qNE5NK9X3T19F05UurMFi+FHuzbD3ojLuErcSWZCOxMVoBS8QAYXb7Chqx2u0x6JXEGscGeUuyJdSZXL169ZnFvmsrpZT7ZbsYLgbjTdeG+j7pdquCcytp49QaWBIe7J4R9PrsXsrGcCq8FF5ZsZG9VbA16tLZjzdNhcHypdVt4vKl5CQ+6cQ2xQazVXoNucIsgIXlY8NtzGegTzGfArcwd7BP5F0oNF6nYmN5LfSLfddVSin309GNG5tofdr3bCS24uwDtFkiFogT7GPwLdCnZ1+fCW5LOsFaymfvncRG8kby5uvX3/p037WVB1fNDJYv5dWrzyyeffsnt4OcZhMr91oRLI0HOBp2Dw52hqV2RyoZszWsQKeWTpR5Ciwgl+q9dvY/23ddpZRyv7nZfhzbuJKOFfrPI+aG8m4fQRG98Qp5AGDTCa+cLBHHxie7W8e5NM2qJ2vD6fJHqTBYvrTB9uTn/Wh8BTOSGGBaHOFIlOotrcI5NGrY3SbudreHWTrzRIqTVJ4iLaPnw//z1HN39l1TKaXcby8/+v1Pvv/+a5+5Yxz2EGgdboRA6p3eOjSUd2cTh91bsdHubsqJrZPAp4YF0d/58+7ye/utqDzoKgyWL+1H3/3b4+c/eO1Db3Ng3BBN7E5IojfeyoyQBkgBYLvHXhutJC2QT5VxYvlXjz75zr/tuZxSSvmT6Qb53rD3rFe0+OysYSkFXQbrsId5djaxpF721rtnCBegE8RJSCfRNUf/8NRT633XUx5stRS9/NGee/f1a+l8TM65pWlI00TjIIc2A7MLg5gupA68MiwdnArfWo4HL//z1//ydM9llFLKn9TTN1+ZDNb8f4kuKzVDTJAP5N2pIqmzMIhTYpvEBnKJWUTEiXPz2ktPPvfxvusoD74Kg+WeeP6D165223xy92bWHIgc2xpit5ztf+XIPlKdpbXtVTS+eWV7qT7VllK+sp6++cpksOG79PEQOjtmDo0kWqfCQrITqZO8MbFC/Z2mGxz94/W//OW+x18uhgqD5Z65cXQ0nMwWj9I3jwb9yNYwFE0qQzSWMwl1dP0dR/9WfaItpRR4wS82Nz+8/kh2/aN2c2j6odS0qQwkRapPZ6+GRZ+++a1vvftWLRgp91KFwXLPveAXm3fefPJKNHnQKi6npGzyJDt1HPCr2kuwlFJ+t+ff+OG8a+aXHJ5I/ZhGXdflyXC4OXn00Y9uVwgspZRSSimllFJKKaWUUkoppZRSSimllFJKKV9WLSD5Cnr+jR/OmUzmv/mzbWzXp7dnx0c3bmz2Na5SSin339M3X5mMFoOZhv1/HjzhTdOpO17+6Lt/e7zPsZX9qDD4FfGCX2w+fO+px3q4HH02Edn00TRNt9sDMJtMpzqIO4Ptyc/rDaGUUi6WZz966eFm3VxNa5iKUONWfTYA4Sbd9H1Psx42/uXVx976uFYuf3VUGPwKePajlx72dvgYyUDKcVgjGgbZuwntrgE7e8RWYmti1XT+f9+8/s579WZQSikPthtHR8PZbH2drQ+CGPXkuGkY9kkbZ8eFgk2oo2eb8jrCp81q9dOaGPhqqDB4wT337uvX3OfDQYwyuqmIceJxWMOUmpAjseVIxNbyOtBKZpHB/3v88bf+owJhKaU8mJ6++cok1s13GvqRxcQ9ExFjwxAx0Nn5xw5npLqUN4FWJleR7Wk/3vzHy49+/5N911HurwqDF9gP3vqnr/V0jzmYRGiWmTOIA8ljWaO020BK7Aj3JFujldEq5JNMTu3m42vX33yjAmEppTxYbhwdDSeTzf8Kcoxz7ohZ9Lvzj41GiAF3w6CVIXWW11hLYKng1H0er6P51598669v7bmcch+1v/+XlAfR0zdfmfSL7rHdoeee45gHzFFOIA6sHAkGQAB2Rm95HdbKwcKmURMhdX7v7Wt3gA/3XFIppZT/gel4e61xN0yYyzG3PTdMjabCYxwDQWNJInvLWxFrYGQzIB1qgrH7v3jBL75SkwIXV4XBC6pZto+q6dpE07BmmMO0ZsIzO6dC47NPhUGETXZCa8MC3MqWSWSlorl24+jo41ppXEopD4ZnP3rpYa36eTaa2kwtz8NxaHIWMEsYC49sWrBAHcnWwRJyaNQaiUwLd++//xePA+/uu65yf1QYvICevvnKRIt+bjEBJk6mBFPJcxyHQU4tT7CGKBpsg7ZGS4khpknJiBRsgc1ktngUeGfPpZVSSvkDqB884pah+jwATQRTkzMiDrFnkqZCI2BgUlgd8sZoKNRIRnKf0EG7cfaPveAXP6jZwYupwuAFNO7ickbf4Bj1qTHkga2J0Aw8dzDHmiLGltvdFKA2MkPLjRKDetsdwTqsZbp5hAqDpZRy7t04OhqyXR2o9VjE2NIB5MRoGvbM+BA0S3siMTxbPtCBVgEtthIS0xGxEbkKcvTOm09eAX615/LKfRD7HkC597bbmKU1tBlEeGQ0EhoLDgxTWXPDJcEV7IcwDxlfNr5kM0UcCO9uIcAwyZF7Jk/ffGWy79pKKaV8scFkM0lFkAwcGso52s0C+sBignaPDgkun/WAh0GXQYe2ZxYTKQ6ERiJHtoa2hoNhM9t3beX+qJnBC6ihGznckhqAW0IDpUcWI8HYYqJkbjEXGlnuZZ0ACazBK6Ph7plCBjhahdvxnVWz79pKKaV8sWnjSYcb0i0wUNA6NYzdLODYMAZPMYeSZgZBLkEBdEYr2aNf9wC3iqa183DftZX7o8LgBZTWECGkQITSjRUNcrt7YTMExsDMcAixtpxhVsBQihbcYjVIIRxI0TVtbUVUSikPAEuCCEBONciNpQa7FQwxI8TEcAlosAKxNgwkWqNGdutQBG5SGVjVAy6ouk18AYX8n6t+/YV7SSqAAO+Wi/wWI6GsF38ppVxcgt30wb4HUvanZgYvoJ52Hd4aOwVJRJLuE/WSd9sHiLXwKdALOptVBluZznaP6Yns00pQYmc/bbt911ZKKeWLnfZajEhDJjQmnGT0wj1S5/QWsQGWglvGAVoiNjJbm05271AvZ9rqse0m62i6C6rC4AVkb5bppg+ps93JbFNshTdCKwdL2S3GiIEhEUtZp5BLE2vJG5ItwRayC7x++er3FvuurZRSyhfbLoaLwXjTh9ztgt3u3PnEG8GKYCkzNMiwAQnY2JwKFoI10vrXPUAdSTfuosLgBVW3iS+gnMQn0u5FbLy+e94waGn7FPsYuCPxmeFTxCeGW8jHIk4FC86OpVOyQWw78/N911VKKeX3O7pxYxOtTwm2gdcSG5OrQCvMEvsEcwe4hfgE8wnoM8FtSSeYhewV5Oru5IDkzdevv/Xpvmsr90fNDF5Ar159ZvHs2z/5lKY7CLSytUw8FBooCBsbOqGh5AZjyRvQCnwqOLG9CFglsWpgpb6rMFhKKQ8IN9uPm9Xwcq9+HdYSPDQeGBpJeLeP4BrcIsm4F16RXiCdGJ8gFoFXJlahvjacvsAqDF5Qg+3Jz7fN5GE1LDFDQYuzIWVEB157t6o4AGN13m0ps5R9aukEdBJw2nXNhz9+6uk7+66plFLKH+blR7//yffff+2WzChhGNYAq/FuSXBPsLEZgXY5QOqxtkkuhU9tnQQ+TXxK5vFlX6qj6C6wCoMX1I+++7fHz3/w2vvbzi2m4WyPmIQe2Mgxktym3SjCODvBxrACTkEnDp+oy0+uXX/rjR/vu6BSSin/I90g32uWMZH61m5CYWQyYbu7DczuSFJQ2Jm7BSRriYXRKeIkpJPI5l//4amn1vuup9w/tZT8gnvu3devCT/Rp+cRTJ1MhMcOhpiBOds3ynSIbeAV1jLDp4FvbUd6+dWrz9TCkVJKeQA9ffOVyXDl/51wyREzJVPBQcIIM5DcGCmsHrFNeQNeYRYRceLcvPbSk899vO86yv1VYfAr4PkPXru67fxtxAQxkTW6u6u8pZCxI3uSrRQbO5dN45uXt5f/rT4NllLKg+3pm69Mhhv/Rd/FFcRE0tjOIcFAqQBJ4bTptFtdvHLkcdMNjv7x+l/+ct/jL/dfhcGviBtHR8NLw+Vj2fqxu+dMKqIxvQDC6gl16nRbxFv1BlBKKRfHC36xufnh9Uc2W30TfNg0DEm3VgTAbj/B7Gm0dN/+7Ikn33y7Fox8dVQY/Ip5wS8277z55JVo8iCiuQKQTZ5kp44DflW3hEsp5WJ7/o0fzrtmfinUjTOY0KjrujwZDjcnjz760e0KgaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkopD67adPqcesEvNu//7InL7bK5vG2befTZ3P132UQ/6Prj7qC/9fKj3/9kn+MspZTy1VW96mKoMHgO/eCtf/ratsmrSreNNXTTDftsmlAfAOkm26Drxabp82QZzYc/+dZf39r3uEsppXx13O1VJIOgH9EwUB+NtTvmVG5M9J36doP64+pV51eFwXPkBb/YvP/Od74t93PkA+QDO0Y0DEi3IZ2FQSehjt4bE6vWWrrh5v/91l+/t+cSSimlXHC/2ascTESORYwxA0SbVqPAdva7XsU20ErWonrV+VRh8Jx4wS82H3xw/S/cMYnoZ5maIiYixiJHqWiVGQJnKLE64TVohftFRHNq9H69yEoppdwvd3tVdppG08+UmgEHicaBR9ittYuCjkjMVrABltWrzq8Kg+fEc+++fs19PkzrQ2XM0zkLaYp8kNYIGAjvnsUwnaUu0ApymY7TkE9QHjdN8+aPHv+bm/utppRSykX03LuvX+uTP5dzTuNDWTPEBHxgNAozMA4Aox52s4LVq863CoPnwPNv/HDetQffydC0wZcwh+BDi+nuRRZjzBCfhUGpF14br4CFpRNSd8DHiNuny/FLRzdubPZbVSmllIvkbq9Sk3PTXsI+lHOW0izMNPEYMZB1t1d1iA3OJdWrzrV23wMosB3MvkGTwwam2WtGMMfMhA+Fpk5PCIbcnRkUXaI19lKOVqQkEuhTbCezxaPAO3stqpRSyoWyHcy+0dijzJwYT4KcEXGIPTdMJU0wQ8RZr3Kn9DrF6Ld7lfGmetX5UWFwz24cHQ3l1Rw8TjQWOlAyMZoBc4s5Yoo9Bu3+fyVbRS5NDBQWKTvoBFsR62YbX6deYKWUUu6Ru72qh7FoDhATwwTnTMSc8NxmKjFGd3uVN0YrUKuwEiXsehU063ZL9apzIvY9gK+6S6PucirC1pBeY8jxbiUxU0tTWXPDJdAV4CHgIYsrEJfAhzZT4ID0QaKxnKOMbvr8Gz+c77m0UkopF8SlUXc5IptoNTI5Eh7DWSCUZ9hzwSXgCvZD2FcsrhA6FLugGMlk16sYVa86X2pmcM+yyYnklp4BYoA0dGooeSRpYpgCh5gZeAyyYIUdAWlYW1rJjGQGhqGiabtmfgk43nd9pZRSHnzZ5ISeAbglGDgZSgy1u6M1tpk6mMvMwSMAoSV2GHrBxtLKYhjWEHugpnrVeVFhcM8yNUTZKqIhs9m90DSwGcoMkMeYA/DcaCYwcILobK2MR4iBocVuCTdK2tS6FgeVUkq5JzI1JCKQG2U0llsULXZre0Qwkj0BHYKmQFo02m0tswSG4FZ2m6ZFaujduHrVuVC3ic8J0wskIzkzAFlusELQgEaCOTADBpgWuQkkpSNAgRRIAKmoF1gppZR7xkhIkjIQUjqMAiGbRrvn2gfe9arpbpsZGkFjkOwQikBCqVDtaHJe1MzgnkV4kwbRePdByiYisS2rt5zeJcUNcGKwYIvosPrEJpS2DbuvQITT+66tlFLKxbDrVTa27UiwHUrZibFEb7sDbbS77ZsptjL92W1iW0pwGozDaVefOicqDO5Z9LHI1p377JF6iQ7TsQt8W9AKeYlpwJvdxygtMcvdCSRsMFuZjnBvqyfURZ+391pYKaWUCyP6WECXRPQZ2ZPqIDtQJ2nt9NqhhUyAN7ubW16Clob1rl9FZ9EF6rB7GvXeVq86D+o28Z6tJ9sT9+oItpgt6c2vj5nLpcypzDFwC/Qp6BPgNuY4YQEsZK+M10lsJLbOvnv8+geney6tlFLKBbGebE8UbCW2ZGwkNiLWxivjFfJv9So+NbqNdCxYgFayV0pvUt5QvepcqTC4Z69efWYRrU8lb2i8glhhLTGnJk4tHxtuA7eQPkX6DPwZcDvwscQpsDRaKb1OvA7pw7/X3/V7Lq2UUsoF8erVZxbZNCcprwOvjVYmWchKwQAAIABJREFUlyJOsU6Q7vyXXgWfynwGedvo2PgkgwWhZcDainUPH1SvOh/qNvE5sE7dHCouBawSlo7/XHUVQj1mC4x+fQKJOtnrhIVSJ5ZPJU4FC6Pl5e7w3f1WVEop5aK526ugX+FmIRhmuMGEkhRsCYY4d70q1JlYQy7lOIE8FToFFtAv/7y//N5eCyr/qVbynBM/+Okr33Ybj9o+NFySPU/tDgDf7eGUw7PzHo3U//fzHn0MuuM2/+3HT3yvdnQvpZRyz/3gp698O1s/hpuzXrU7m/i3etXurqPUC6+NV3KcOnzi1DHkHbf+9+pV50fNDJ4T37z+znsffHB9hB3KUOIM6MDrNCPQAO1mBg09ZhvECnLp1GmIk17x0Y+feLpeXKWUUu6Lb15/57333vrOWOpDTQjrc3sVdpdSF8QqxYLUIuSTJD768RN/U73qHKlnBs+Jv9ff9Y8//tZ/5Lb9pSOPQXcS37Ljs8Cfhf0Z5hPMJ7vnMfSp4VbCbdHflvzTa9d++i/7rqOUUsrF9ff6u/7a9TffsJuPUX8n4fbn9SpHfLbrVf5McDsabnXkm098661/3Xcd5b+q28Tn0PMfvHa12+aTyAcixpgBorV2U+929oQ6erYRedI0zZs/evxvbu573KWUUr46nv/gtavbzt8WOf7iXuVNE3GyUb756rVnfr7vcZf/rsLgOXXj6Gh4eb7+s02vrzV0l8mmtfrd6SJuktAnqf7jJ59455e1GquUUso+3Dg6Gh4ebv+86/znv6tXSfyqj/xl9arzrcLgA+Lpm69MxndWza3+yvroxo3NvsdTSiml/LbqVaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU8qdWx9HdR3/17uuXx3DZ4QlbH9z9udUc25vlsNvc+tF3//Z4n2MspZRS9ql65f5VGLwP/urd1y8fZP9YWkMaBjYDhVt3EoBa26lOYutsPh1sT35eF3oppZSvkt/slW41JN3+Zq+MJtOpLuRN78Gt6pX3T4XBe+y5d1+/5j4fdqshnQ+i1cjeXeRWBoAcSaiTvDG5MrEaBO//6PG/ubnv8ZdSSin3291eGcSokw+CfuTQUBnN3V4ZVo/YSmxNrkDLpokPq1feexUG76G7F3eGpk0wdc9EeGwYSrQpNWCHSZvOeE2jZWOWvTkNxYf/91t//d6+6yillFLul+feff1apv+sCaaZ/RQ1E9mjX/dKzsIgidhmak3jldKnSp/StD+rXnlvVRi8R7731suPBc3XotHM9qGlqc0UfCA8wgws7S5wqSfZWl5jFgoWmT6x4ljD7dHLj37/k33XU0oppdxrd3slrQ+VmqU1C+UU4sDkEDPgLJs4dr0y8IrQMu3TiDhxn8ce9f9evfLeqTB4Dzz/xg/nXXvwHQcTzCXQXOG5UjPEJPE4zCDlFiCszvJGaJVmEeIkrRPR3ybi05PF+LWjGzc2+66rlFJKuVfu9sq7kyaYwwzN5ZwCE6GxYWDciLDs3tIa55JgIXMKukPoWNl/cmc5+Un1ynuj3fcALoLtYPaNiK41moSYGs+xD43mwFRwgDyS1QCk1Ak2hkXAAEshk6iTczuddt8E3t1vVaWUUsq9sx3MvkGTQ8MkUzOCOfYcYm5yCox3d9LUELahE16DRrbbtEIo6emhqV55D1UY/CPdODoayqs5+ABp4p6JYRpoRnie1jykiWHM2d+35E5oZbtNOSQn0AMbaDfQf526wEsppVwQv9Erx/Q6QJpEMjGagQ9DzCxPjEZAiwHYGpbAABSSEeoMW/BG7h6heuU9EfsewIPu0qi7nIqwNZQ1Eh4Ljy0mZ88MHhouk1wBPbz74rLtS5hDoZlSU5ID0FjOkbKfPf/GD+f7rq2UUkq5Fy6Nustq3IoYJ7teiZggppJnieakLmM9dNYnH0JcMVxSaG5piuIg5YPdwkyN3DOpXnlv1MzgH2nLeqSmbd0zEAwcDMkYmxwLTQRT7DnyHBhhjFkhWosU3lgxthiFNTQeKpq2a+aXgNpPqZRSygNvy3rU9GoJtxGMMhmiHIEOUBwIZsAheAYMMUYshcLODGKLvMIeGQ1tBjQMcjQ7pHrlH63C4B9JGh6o7xopGtst0EpusYYWw4CxzRTpEDRFNnACpGAFGlkMMIO0W8KNkja1rsU9pZRSLgRpeNArG4VbUg1yazOQGNgeIcbgKXDWK+mxW1APWiMGNkMcLZGtUEtmk6u2euU9UGHwHrAkK0MOGQIpwCHR2ruLHjNCPgQMbIEBopUVpENCloNUICkVdYGXUkq5MBr1QR9C3vVJI4uGpAFaxABrbLgk2IA22C2iSbsVCGU4FQhBhGvi5J6oZwb/SBHeAIjGYAubXeAzdiInOBEdaAlagTtMj8n89e9BDiswZ9+XUkopF0GEN6JxNrsel2d9zlYSpMFYPdBpt2hkDfSIBFImz/4kK7CoXnkv1czgH6lpvNEmekdmSj2mF3RAJ8XG6TXSEnlg6GQMWjpYafepZ5tiK6sjssfR474fDrcn+66tlFJKuReaxptt5xSRdvbCPVIXzs5oK1iDVtjHiC2QwAJYCTYWW1BnuQ+rx041ka2G1SvvgQqDf6RVm7eGnTsptiRbiQ3k1rACVogF0OBIwWD3u7zZbZ6Zi4CV0dryOpKNY3fBP/roR7f3WVcppZRyr6zavNVkdPTdFsVWxCbljawVZikYWg4HXZiBkcFrw6lhIVjJXmFvMrQN2Dr77hvfeuvOvmu7COo28R/p1avPLLCWKa8Fm90GmSwFC9unmGOh28KfGX+6++Izw22kYxOnWIuwVibWltd9+ubf6+/6fddWSiml3AuvXn1m0fR5IpqN8do665VigTi1fAzclvnM8Knxp8BnwB2JE8yp0cpoFXhlxTr7QfXKe6RmBu+BftTfbFbDeapbpjUKGBjakMKSjbfgZShaADs70IpkafmE4NRoQbIMtJL7D/ZdUymllHIv9aP+JhtdDrSytQQPE1pJYTsDb42Gkhqx65Xa9crFbvLEJxKnwNLkKth+uO+aLopahXOPPPv2T76jpvsmbg6xD8GHkmZOJrsNMhlabgBk9buVUixTnIZ9YulY6I7S//Z/rj/91p7LKaWUUu65Z9/+yXdMPqbGh2EuYc3tnCEmoDFoKByJ/bt6JegO4k7f5NGPn/jeO/uu56KomcF75Ikn33z7w/efnPXpUONQioQevAGPEIM4O5vYcm+zJbQSLIwWKI7l7hePfvvdOlqnlFLKhfTEk2++/d47T11S9oFDGekwHY61yRHhgTOaAFvuUWyM12FOQQuk4976xbXH337/x/su5gKpmcF76Ombr0y08JNS80gjptavZwUxA6EA8G6rma3xOtAKs+gdv7j25E9fq+cfSimlXGRP33xl0q50HfIRS1MydkfMhUbYbciBw/+lV1rLNAsTH1evvPcqDN5jL/jF5v33/+JxZ/+Y5AMRY7sf4mgDB0CiRNkFsTa5aoj/+Mcn/+b9fY+9lFJK+VN4wS82733wrSea5HHUHCQeRzJIq5HcaJcEq1f+iVQYvE9uHB0NLw2Xj3WD+Jp7JqFsFNHIdtoZ2Zx0g+4Xf7a5/LN/eOqp9b7HW0oppfyp3e2VKX8dNQcZbkJnd9Ey++qVfxoVBv8EbhwdDS83n43ufn/1L24uaoq7lFJK+bW7vbJrducNP379g9PqlaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKf+d9j2AB9Hzb/xwzmQy73sNMzVss+s1iuVpr8VT1356XAdrl1JKKffeC36xef9nT1we5GC03cYMIMKbpvFm1eatV68+s9j3GB9EFQb/QC/4xebmh9cf2fT6WvTZ0DAg3VoSgGy7iZ6ebYR+dbwY3jy6cWOz73GXUkopD7obR0fD+WRz1X0+HJEN2bZ9ZNNI0RmHMwl1kT7tR/3Nlx/9/if7HvODpMLgH+Dpm69Mhku+3RMj5AORY8xAatpUBpIi1aezl7xJmnUTeZJt/35dkKWUUsqX9/wHr13tNv6GWw1FjsMa2QxSbjibkIlUT7ClZ2tyRRufnpyM3qpJmT9MhcHf4+mbr0xi3XxH8kH0TJEPEo+FRpiBpQCQnUid5I2JFe4WShY5zjcqEJZSSin/c8+9+/o19/lwhqZNME08ptcYMZBppYwkvOvBbI3XWEvMAulOf5D/VreOf78Kg1/gbhBseyZ9k3OlZogJ8oG8C4MpNwDCKbFNYgO5xCwi4iTTJwy7f6tAWEoppfzhvvfWy48FzdfU5BzH3NKU9AH4wGiEaBHCOKwesQWvDEsHp8o8Sbe3rj3509fqWf4v1u57AOdZu41rlg/6xnPsQ2AmNANNUh4HDPFZGJR6kq3INcHIRIsdEcLb9qkbR0fHNV1dSiml/H7Pv/HDeUfztQxNG8c87bnEzDANacIuDA6UjsRG9JbXtpY6681yKNTxwTtPPQn8dN81nWcVBj/Hsx+99DArH1iaNDA1mhE+xJobpkoOMjTU3b9Du7diI7Oy3WJHInCmcDeddt8E3t1vVaWUUsr5tx3MvkGTwwam2WtGMLc5FJoZT4THNsOUQuCUOiXrECPbbRCRwkgZ6r75/Bs//MWPvvu3x/uu67yqMPg51A8eEf1YxIGlqfE0rBn2HJhJmmKPEQOARJ3IldESFJJBTkMH7cbZP/aCX/ygpqpLKaWUz/f0zVcmWvRzdxxYmiAmkZoaZgrPbWZIU5zDMI0DK70BVoYBEbvFxdClY0vDOtuDR4AKg5+jwuDvcOPoaMh2dZDESNJYeGw4ACYWM+DQ5Bx0gDUEEGyBpUKt0wil7Y6ItchVkKN33nzyCvCrfdZWSimlnGexyIdpmkFII/qz/itNgGlac9g9toU0NrRYibyWWRiH7ZTocKyFVwnjptE3gbf2XNq5FfsewHk0mGwmqYimYWgzMAyFx4gDzITdp5I56DL4obOvK4ZLtmfIB5bGQqMgh7aGtoaDYTPbd22llFLKeSYND2wGtoaGYVjDxGPwQYiJpBn2IcllwVkP5rLFHDQNmIDGJkcOjSIZpPvh82/8cL7v2s6rmhn8HaaNJ1vR9r0bSS1igGNge0h4hHWANQNfAk+xhFjslmZrY1iFc4g0sBlgt6FolH1diKWUUsoXaOhGlhuS5mzF8CCSQUpD8JjkAHmGdGgYCzqb1kEvtLFZgIaEB2EGabdNRLPvus6zCoOfo+kkhwK5Ic/+aTeJmoA28SDgwOgQ0WJALIGBRGvU2G6QAikcbpSqrXxKKaWUL5DWECHvNpUOZQaKRnKDOZug0RBpCr5kWCE6mSG4RW5lwhkNkRIKS+qatnrw56jbxL9HYv+un8vYYHZfHSI/78+QMf7df04ppZRSfsNASwAR1q7H/raznzmBDpQWd3+tRVS//R+qmcHf4bTXYtja9E4R6ciejE6iC6lzeoPYYE4RCGRYglbgDWZrqQvosXrCKUf2TX+y79pKKaWU88xddBG9M9xHOjPUk9kJdcAWscWswMdCW+Nut3iEtWGDs8PqUXZpJVZvO/tp2+27tvOqwuDvsF0MF4PxplOoc9LJbHeni3gjWBEsMQMEmFUKCW2RT7CXIlakNxlsArY2He678aapZe2llFLKFxgM8qTbqgvRpdiSbKXYCK8NS5shohHRJR5IJNYKfMrZxIxgbbNVsDHZNcTq5atP17F0n6PC4O9wdOPG5vvvv3aKPROsU7GGXIGWMkPjFondBcpwlwndkSyRToxPCS0CVrsd0b2OYPH1J9/6dN+1lVJKKefZqs1bw84bpC0ZmyBXCSuZBTCIUNg2eBXQ2krwRmiBfEKyNFoZ1gEb1Gz61M/3Xdd5VmHwc7jZftyshpdT3QprCYyEB45otHtYsFNolXYLILnHWgMLmZPdJxQtQMuAVWZ7szacLqWUUr7Yq1efWTz79k9uhbYTmli510piYbnFCjItxdbKYVqNds/2bxNWSk4tTsAniAWwNLl6OA/f33dd51mFwc/x8qPf/+TZt3/yKzUaYYaGQTgaZ5JSj70RDOMsDBr1CjaYJbuL9oTkBLQg8viJb7399sv7LqqUUkp5APQH3Uex1hXMyHIbpklLku2IjvQKNAw7LCWoE16DlsinkT4xOgUWbvKn//DUU+t913SeVRj8AqerwXuzUT9XZCtHZCQyvfBWxMrebSOz+9Xq7dwarYClUqeWTxAn0W7/uWYFSymllD/Mq1efWfzgrX9619p+R00EdoAs1CVeSx5BDFKEsGV6754pXAELS6cojvvkF9cef/v9H++7oHOu9tz5PZ6++cokls2NUHfZ0pRkguJAzhHBwKkIJIcTsxVsDEuZRQanbd++/o/X//KX+66jlFJKedB8762XH1M01yI0czIFDoTHCSOJ1rnLMSF1ODujFaGl7NPe8YtrT/70tZqM+f0qDP4BbhwdDefT1beNv07vAxHjRLsLUbkLg1Zv00lsba/C+Znd/8tLTz13Z9/jL6WUUh5Uz3700sOxba7bPtz1X48xAykaKwOHhVNim2LTmGXXNR9eu/7mGxUE/zAVBv8Hnv3opYe1ab9J+GFbQ9JtSAGQdjahnj7ubNR/9OST7/ysLsJSSinlj/eCX2zee/vaVbXto+6ZtOFBn25CijSORr2z70zzS/Wbd2si5n+mwuCXcOPoaDhul4fR5MHdn2UbHUNuv3r1mdrHqJRSSrlPnn/jh/Oczg679eY/T1Ebu119uhndPrpxY7PPsZVSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllHJfad8DeBA8ffOVyfjOqrn7/Y+++7fH+xxPKaWUUv6rF/xic/M/rk7ufr86HPevXn1msc8xPSgqDH6OZz966eF22VzupcsAqYhWnTq3Dmcy0NLN9uMnvvn+rb/X3/X7Hm8ppZTyVfOCX2xufnj9kc5cZusDS2rUB0Dn1gTbBm4169NPaiLn81UY/C1P33xl0m7jGlsfuNUw3I9sBlZESCHb6ewJdeq86Zv2dAvv/eRbf31r32MvpZRSvip+8NY/fW3b5FWSgZRjkoHCrSIagLQzUr2CbS829PHJ6Wrw3tGNG5t9j/28qTD4G5796KWHvR0+FuQY+YDeB25iFMkgrSZwJHaEepJtwibQStaiY/vhj68/++G+ayillFIuuufeff2a+3wY+QD5QMTYaGQzCBwAiTLkPoNtoJXJFZ3udBP/e90+/q8qDJ75q3dfvzzq89tBjDL6mUPT6JkYjUSOUmoC7f6+nB1ia2INLBWcZvrE2b9XgbCUUkq5f+4GQTU5z9QUMYE4CDyyPZCiQam0EqlTem20InIp+zTg9masf61A+GsVBoEbR0fDyWTzv9qeCU0e9vZc1mx3gfnAaCi5VSoycJju7qxgwkLi1JnHSHc2in+pW8allFLKvff8B69d7Tb+hpqc45inPQ9pankiYmznUFZjJCJ7ki1iI7PIYKGME5THEf5/jz7x7j/XM/877b4HcB5cGi4fsz3MYIqbmaw5kXNbU9BEaIw1SKXkcJKdFGs7l+EYgIMIJHLU5beBV/ddUymllHKR3Dg6Gnab1TccTJwxA8+JOLRzZjR15kGEhonbANmRyBvwyjAMR0tYpNz10d/88PojwM1913UexL4HsG83jo6GvXTZYmJpauVUkTPMYZhLgsvIV8APheJh44dlPWS4DHEJfJhmZjN1MpV05dmPXnp433WVUkopF8lkdPpIKkL4IMQkpCn2HOIw4JKkK1gPheJhpIfAV4SvCF02XEo8TzOzNG3kyTZ54gW/2Pz+//LF95WfGZyMTh+JUAMxJnUQ5MTw/7N3r9txndeZ7//PXKuOqAJBMS05tCRLshh7N/cYPsiRPazcBn2R8gXkAtp2bymyZTvNjmzJ1tFMpIQURAB1XGs++0OBjpKW7KRNpyBw/sbgIFBEAe8sLI45a673cCA0y9Bc9hyYIo1tNzKJvBEegRpLiOyFOsMm8SpX8ZfA3X3HVkoppVwazeCanGMR41ROhA4iOSA8wz4EzYwnNkOBkHrDCnsgKZBS0BtvMGtlP/vtr5+7CvzLvkPbt0e+GJSGk3Q3FBpGeJSpsaRJkhOZGXAIzLAngtYijVYyrSQn9CI2aa8Cj4SGavXf9h1XKaWUclm8cOe1aSyySWmYypHQiPQYNLE5MJrLzBEHQmNhJd6GWdoKSXZ6m8E68NjEyNZw2OiIKgbrNrHcz2kYYLeYAcFA9khoDJ4IDjCHwFXDNfBV4NAwc3oqPLZzFDB88HzS7Utv/Gi+79hKKaWUy2B8f9WkItrwAEdrMyQYGkbgMTBBzIAj8GOGa0qOjOaIaeKJ8CjM0GaI3RIMMpj+sZ/9KHjkO4MA2UdI2aBosNuUW1kDpN2FZqaIQ2AK2ggDWhMaYg9EtFY2Rg2pIOKRL7JLKaWUh2Y6nUefTWaG1LTIDRkNcosYyIwE4xQHMleAFvkU6IFVmAFigDnflHq3Q0hf+RqozuDvBVJkKs6325EkgywC0RgGwAwYWGpAYTskhUkptVtPTKqpLXtKKaWUh8abpgPwg/1+kRAChBUg2TQyDTBk17xp2X0uy2FJFnKmHnyvVl3la6oYJJvoZTuxM5S2U4Qt98Ip0wGbgCVwD7OQ2VjuBL3tXlZa7o0TwmnnYfNEHXdTSimlPATqTpbCjiYSbOHEWJCSeuMesQVvgFPgGFghbzAdUm8rZexQgu3G2WeTew7tQnjkbxMPuv7EbVzpRUeqs+gktiRbS2vBCjjz7ssXhHtZC2CFWMveWNpiOod6yE7y5m9v3FjvM65SSinlsjjur64Pct1L2dvRY3cS28QbJZvzXL0g1JJ0513DjaWFzAq8FmxSbCPVGfpI9X3Tn+w7tovgke8MosEJvbb0bAWbkNfGK2Als0CcAveBjy3uYd0zfIJ9gjkDLcErxEbpNaFO6J/2HFUppZRyady+eXOjlgWxy9USm8TrQCvEQqEF4kTmGHEXdM9wrOQTSacyC+OV8DrljfGaYNvGtk4MozqDfPmrv7r7wbvPflnJWsTu/EJYSgwTh1JYdDJDoAEstDZeAqdpnwkWwNJ4HcQqu23taF5KKaU8RG62H8Yqrqa8hljHrhu4BA/IjN2+gt6AhmDC9Ia15QWpU0lnkAvQUmitTp/8z2e+f2/fcV0Ej3xn8If6QR/RfGhid1GZhdKntk8DnQDHMh8T3JO5i7hr/DHEMdL9kE4UnCm0oNFS9P/0yo3v3d93XKWUUspl8uqT370r6b7RErOwfWr5FHwCum98DPoYcRdzD/meQx/bPka6b/nUijPMAvqliLf2HdNF8ch3BgF+/PS373z33Z8d5dYDWloyQk4SOoKN0BJ7YDnksJ2d0BrnEsWZk1OkUymPj7ZH/3vf8ZRSSimXUWxX72g8nYU96O3AEZJtuxOxtnN4vt2bQH3YW8MKchnJmcWppLO+H7z7yo1vfLTveC6KKgbPnZ6O3pqNVhP1imwMqZTohNdpRrJbJOE0oR68MbGyWQidWT5tms0v/vaZWjhSSiml/Dn8+Ot/c/LiB6/8OtfN/xNNKDMRu5yc9orQgMxmt1+MbbEVsYFcJnEWcNZb//jM879+4+/2HMtFUvvrfMrN27eHk9Hir4J4PIKDxGMRY8NQcmMUYIfd5+4CW4OWqL/Ptvtp3R4upZRS/vxe/OCVa9q2N7APLaZkTIgchhmk1ACESZtut+WMVrhfZLR3nnnmzb//oX7Q7zuGi6SKwc/w0ns/u75NvqLsZ3aMaBgo1ZjdRpWEuki6FJsGv/vkM799sy6sUkop5b/Ozdu3h/OD1VdxPpHEKLw7FjblBkCOdGSv9CaiOVPf/MNPnq9bw5+lisHPccsvN7/99XNXh0P+wnDFYpp9BGKLdH/Y+KPD9fxu7SdYSiml7M8Ld16bsuQvhnAl4QoNA3eSFSdCn4wyP/4fN779z/seZymllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppfzf074HcNG9cOe1aZP9ZJCDEYA3TafuZPnjr//Nyb7HVkoppRS45ZebO7+6PmU6nT947KzXohn1m59e/85in2P7Iqhi8DPc8svNnfeffyK3eS2tYSoiIhtLAmiy7zu1mwaOTxbDO7dv3tzse8yllFLKo+alN340dzN+vJeOANS4TUUAyHZm9C39Sh58+OWv/uruD/WDfr8jvpiqGPx3vvn260cDeEbpVuTY1rBpGGZmmAiwo4mkZ9uLTUu/irb54MdPf/vOvsdeSimlPApu+eXmd28990wvHdEwCDRK90NF02bvBkBkOqKnZxvkWtL92K7eqTt7/6cqBj/lr9969amgeTyIUUZ3IGJsNLIZSLQGCWxnj9hKzQb3S6Mlbj78ynO//k296yillFL+fG755ea9957/mjumTXBgMU08DjO0GRjtOoNgm05ia3tltFTDgnb761ef/O7dfcdxkVQxeO77b/3i8Z7uKQfTCM2cHAAT4XHCSHLjVCiwrD7lTcAas0iziMjT6PT+T2585zf7jqWUUkq5jB4UgtnpQM55hGZpDoTHwmMUbdotgMKJ1Qk2RivMIsJn7vNk1bS3f/7st473Hc9FUcUguzkHXTv5K+QJ+FAR87RmAdOUJ7JHOFqUAWGUHcmW0FLmLO2zkE5QnkQ//N8/ef4bH+07plJKKeWy+eu3Xn1Kap/APqTxoRxziwPSE8QeSefAAAAgAElEQVQkzNByYyRZPcrOaBVoZfvU8mlEnOK8d7KYvF5z/nfafQ/gItgOZn+p6AdGB2HNMIfYM8szEVPMGHlgRcg2jk54RTJKMSCiycRY6aZ77pZfrkmqpZRSykP00hs/mnc0j6eYNuLAjjnOOdJM6AA8tTQEWiSBU9KG864gQaMMOTG4Ozjovgy8ve+4LoJHvhh86Y0fzTv3811XUFMnB4aZwnMch8o8QDGxcohpMIlyY2klMVBKkJbUJ3Q4Nx988FdfAn6379hKKaWUy6IfHVwTfdvCNNGB4QCdN3DE3GgqPAYG2JLUOb1BXhhabCmcCb1ot87+qZu3b/+uuoNVDLJph0dN4xZi7J4x5CSkqa0ZeE7EzPYMayRoEGm0BpayGwUYevAGx1p4Rb99nCoGSymllIemhyMcIynHSibAROgAMUeey56jmGIGwkq7E6wMg7AjITEdERuRq8Dj2eTkKvDhvmPbt0e+GIxBO8/eQ6GhyPFuBXGOQVPDgexDw1xogt0iUrDEtJZM0hGxTrwKPLI1NLv9jkoppZTyp3vpjR/Nuz4bSUPQMEMjZY4RE6NpWDPDofFMYkQiSR34TBAWvYgNZi1ylI4RZthEW8UgEPsewN5tPVG4Jd1KtAQD7Qq6kcTEYiozhzxCXLO4ClxB56uNpbGdw7CG2C3BgHT70hs/mv+xH11KKaWUP+5sdNBEZKNwm3YbZuDQEDQSHhlPQQdhDjFXEdfO8/YcmIqYgMcEQ1tDmZaGQe8Y7Tu2i+CR7wwCZB8hZVjRYDfIrUwLtKAReAw6BA4wKyB3E1I9SLkV0abcBNE6M4ioIruUUkp5SA4aT7s+gsyQmsbKUEYgt5gBYgAeGaagI/AAdLLbVoah7QFBi93IbiQa9agP1a4qVGfw34hMxfl2O5JkkGUhgt1rNRJqvPscC4Ukk//mYmpqy55SSinlodnGdg1gHhRvEvp3uVYILHADDADZBJ+Tk43Uqqt8TXUGCXlD4yTDDvekU1Ja7pX0hi2wARZAL7wlWSO2AZ2dnawenIaEcDrzqHnikV+dVEoppTwMg9PtJoeRbpqkd4J67Ey5R+olddhb0Aq4DzTAymItsQV6TG87kXphuyH7bHK/kV0Mj3xnUMkiM/pdIagOsRVslN4AK2BpcQo+Rr5nOEacAAvjlYmNYIPpLDqUndJnf3vjxnrPoZVSSimXwvWv3Vn0btLZdw71ODt2Rd5WYg1eIRagE+BjwT3MseAUs5S0BjYSW0yXYhtJ1zs/3nNoF8IjXwx2k/5YwZbeG+SNiLXxKsWCYBHoROgY6R7WXdA94Bj5RMSZYGG0Mlop2UjNJjX4533HVUoppVwWu4Mc4j6hzvI6FRvjNWiJWWLOSO6Dj0H3DPcIjtl1CU9tnwFLoZXwmoxdYTjhX/Yc2oXwyN8mfvXJ797967dfXzbEOsm1zruBIgakG5QWsbUZYRrCidkCC/AZ0hnOZcAqiVVDro/y8N19x1VKKaVcKqP1XXeDa+r7tYiVYSE8MLTaSeM18kCJjHuj9a5p45OwzhIWQksaryA//On1v17sO6yL4JEvBgE02LzPKg5Ao8SDgDbDIUTiXvYaGEiOdBixVXqNWJB5aukUdBpwBn6nbhGXUkopD9erT3737ou/+fldmhwnjMIaYDXCYSmd3gqPkmilFKiP3WriZVgLy6eSzkDLxl5m1/9m3zFdFFUMsrvAvv/ma/9E4wFuGuMAGbIPYmNyZDMQUmCAzuF1WktJC+RTi1N633vq2d++ue94SimllMuon3QfNMs4lPrWNA22LAzeEqxlDcNuQRBKm+1ufj/LQKeZOgWfdm3++u9ufO/+vuO5KGpJ9blbfrl5773nv4bzCWXM0xwgpsJjmyGiDSkSW/ZuJ/PzC8zBmfDxcjx49Zdf+sbZvmMppZRSLqsX7rw2Ha78/yY6kjWzdIA8kTUyObTUAGCM6QLv5vUHi0zOmvBb//PZ77yx5zAulCoGP+WWX27effdrTzfun7aY0nuSeByhYVpN4ADbVo/YGq+xlo3yo6P+6Bd1e7iUUkr583vhzmvT4cZf6/rmsUaeJh4LjTADyQ2AHWnRYbY0XjVmKesffvLct2te/79TxeBneOmNH8274eRZwtdEjEm3GbTRo2xwpHq770D320H89sdPf/vOvsdcSimlPEpu+eXmzvvPP7FNvqLsZ5gB0Q6s3O2UYjusPsWmUX6U2/43r9St4c9UxeAf8MKd16bt2eAxDbp5poYPHm/h2IPVyf986vv39jm+UkoppcA33379aAxHdh4+OKVEDdvO+fHj2yv36s5dKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSinli037HsAXzYsfvHKtXTZH27aZR5/Ng8eziV6pRWsdf/mrv7r7Q/2g3+c4SymllMvk5u3bwyuj7qiTj+R+/ul/C3njaE6a9dndH3/9b072NcYvqioG/4O++fbrR5Psn0prSMPAZqBwm30EgGw71CnY2loOG3/046e/fWff4y6llFK+yG755ebO+88/0W38l5bUWEMaD/reTUgB4CZ7pzqJrbO510+6D356/TuLfY/9i6KKwf+Av37r1aeC5nG3GoocixjbGpJurYxAMkqHe3pvgljjfpka/PNXnvv1b6pLWEoppfznvXDntWm7jWfYeuJgKnJsx4iGAek2kACMEmkreWNyhbX0oHvz1Se/e3ffMXwRVDH4R3zv7defcZ/XHEwbcdCLCb0nQiOJNqUmMuVQT6pD3hivMYsInzmaj55++q1fVUFYSiml/MfdvH17OJ1u/jvJIJp+5l4HyBMRY8MQuY10ACB1Np3RisYrzELpM4/6f6iC8I9r9z2Ai+z7b/3i8b7vrjmYYh9amqlnijSVNbJzCASSSCfyVsRasEo8wE2DUx/85qsb4K19x1NKKaV8Ucxm6+ez0wB8aDOXmAlNUE5sjZRuUTRg2+5FbCBX9FpKDGgivNF/f+mNH/285hH+YVUMfo6bt28Pt83metPnWNHMbM2x54ZZwDTlSVgD4zYBSSnYtadhGdAah1Km0Ze/+fbr//LzZ791vO+4SimllIvupfd+dr3beBJtznAzwzHHOU/pADSVNAYNkCNtB+qs3BgtJYbYDQkRoh+PbwA/23dMF1kVg59jPt1c75OBg6kzZwG7izE8t5kJpsijIFoAy32iNfZSxCBlIdlJH0E3pn+OuhhLKaWUP+iWX27eeUePN/Tj7DUNcgaeGQ6BmZID8IRgaLsJwim2grVgBG7TklDS0ydx9cUPXrlWt4s/XxWDn6OHI+l8sciuLT01eSDHHDyXNDOMsVuDlPTCK0Ij0o2QZfoUW3qv3XDlhTuvTWt1UymllPL53v3dV46iz6ZXMw4xAU8TzYCZ0IOmzIHskVCT2BJbm6VggCXJFuoMW9lrb4dPAVUMfo7Y9wAuopfe+NE8+mxsDROPJY8hJjYH2DPkOfYhcAS6hrhmcRW4ImsueYY4QEyFx4lGYY2GfXt137GVUkopF1lsh3O3Ggb9CDwGjYXHIabIM8yh4AroaorHENeAI+BQ0szSAYpJ4rHwWGgU6q/e8svNH/vZj6rqDH4Gt/NJxKYJxaBPBrtVSzkSGiFPsA4MhyQz5ImMgI2DAWARW+yV8cjWkMihrQF9fwj8bs/hlVJKKRdWpoYoW6IdkDmwcig0TjRWempxoAe3jM0QSMxSUtiZsjaWl0GM7BwYDZUM7vzq+hSohSSfoYrBz6Bh33bZNPTZSNEgtzha5CFigBkLJhZzYA4E+AyrR17ZjIABihZ2z81wS2q459BKKaWUC03u54psSBpEi6Ld7SmYQ4eGssbgA8GVhImgR25AndEqQkPb54dD0GI3imi6pq3t9D5HFYOfo+kkhyKVQUrIuy1kTBPQJLQBI8PMMBDqAgY2rUwgNyThQOFU1paOpZRSyn+IJYGELDID6TwHuwFaTGtpJHwELEEr5EYmnA5JDUIGgeS+ryT8B9Scwc/gTdP1rZ3GOAwgbNkW2NBLpKEDVkJngs67VnXvwEaZ2Bgnu+/hPrq9BlZKKaVccFZzssu3towVkTIp27ISSEQP3oBOgBWwxeoBK5Ta5WMLDLaaxvuN6mKrzuBnUHeyjGacNNHTu0fqUnSyOvBGsLFZAgOgtxzgFdYCsSHZILZIXVg94Z5Uv42u5iqUUkopf0CbXd8pesKpVAfZS+ow2/MtZFbAAtMgr8EJLNg9vsZsbTqUna1+98f5leffO3tlv6FdWNUZ/Aw//vrfnPQ0a2ffofOLL72RvQJWubsIT4Bj0Mey7uI4Bp0gzgiWEmvhNWJLsiXYbg8Gtay9lFJK+QO6SX9MqCN3TRWJTYqN0VpmIXMGuo/0Mege6J7RJ0inmIV3CzjXUmwEG4lt4/y4joX9fNUZ/BwNHPc0h1JulKyNVoIlZqigAQxssQcWCuiMV3Kcgc+A5e45Xllaq+vv//JL3z7bc1illFLKhfaVL797/M47N5Yhn5/qpRWwlBj6/HQvcC+0tmkIWc4teIF0anwmsYBcJrEOvI62+WDfcV1kVQx+jpPF8M58unwi0VKxWx2cphUKYdtsJa1SbkOSnR1obVgKTm2fCs5AC+NVw/DNfcdUSimlXHQ/1A/6l9772UfbLuYBK1tL4YHthghh9YYN5NBSI9tIW6MV5FKOU8gz2BWEDk6vP/WbD/cd10VWxeDnuH3z5ual9372fnYeAkOZ1qHA6UQ9eCMxlNXYgB+cTcyK0MK7QvDU4UVD/u4nz3zjo33HVEoppXwRXH/qrQ/fe+/5o9x6QOsWO0BSpiG2gVdGQ0kBYGcnac2uIXNm6TRTZ6I/c5u/rFvEf1gVg3/Aj5/+9p3vvf360Orb3dqktKQevHVoiTW03AAIp83WsDZaCp05fCrzj08+8/Yv9x1LKaWU8kXxQ/2gf+HOa+80XUyVfSOHUrJwn3gNHiEGyAIIq097E8QqxULoDHzapH71kzqT+I+qfXf+A1585xfPhjdfyYwZ8gRiEniEvdsME3Y7yOxWOW2MVjILlB8+9cxvX6t3JKWUUsp/3gt3XpvGsrnZ4CsOHTg9jfDIMCTd+rwzGHaP2JrYdQeDs9jmr39y4zu/2XMIXwhVDP4Hff+tXzzeN91zOOcixrtj5hg483xFdhhlJzWbINcm3njqmTffr0KwlFJK+b93yy837777tacb90+DJ0mM7H4oRePzEx1C7jFdwkb4uIO//+lXv/PJvsf+RVHF4H/CLb/c/PbXz10dtvxlNvwF6TYUDUDaKfFJOP7pSj//p7+9cWO97/GWUkopl8XN27eHVybrvzT9E33GTJGNFbHbjDqyc/9PQ4Yf/eT5mqP/n1XF4J/g5u3bw6Pm49HqcNz/9Pp3FvseTymllPKoeOmNH80Brn/tzqLuwpVSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop5VGifQ/gMrvll5t3f/eVo9gO55kaPng8wpscbE7OPpmd3L55c7PPMZZSSin7dPP27eGVUXeUTU4/K1d+5cvvHv9QP+j3OcbLrorBP4Obt28P59PNdfd5LRXRmkEXbhv1AdC7yTbVdWLbBP98shjeqaKwlFLKo+SzcmUf2TTSea50Euro2UboX5565s33qyj886hi8CF78YNXrnk7fKp1N0TNpMfjMMMM2uh3r3c2OJIuxaZBq+x96nH3zqtPfvfuvsdfSiml/Lm9+MEr17Rqn1HjFjxJYhRmmHKDJAA50tl3kjdJs24iT1dufvvzZ791vO/xXzZVDD5EDy5u5AliajEVMbYZyrSSGwBbvUUnsTG5kllgFh71/1AFYSmllMvse2+//oz7vIY8cegAMZU1+re50rbVI3XCa9DK9EtHc0q7/XXlyoerisGH5Jtvv3406vOrDqYRmmXmLKQD0hOHRjaDOG99p50SW6XXhJZpn0XEaaZPGXb/uy7yUkopl9GDpkmGDsL9TIqZzYHw+NO5MrFlJ2JrtMJaChYhn7rPk6Zb//LHX/+bk33Hc1nEvgdwGdzyy80AnhE5jtAM+zDgivEVwxGpq5Ies33N9jVJj5G6ajgyHAVcwT6M0Ezb9sYtv9zsO6ZSSinlYbp5+/bQ2+FTyJNwPyOaQ+AKwb/JlaQfi+Sa0FWlrip9dZcnOezteTYx68fjypUPUbvvAVwGd95//gmSgYOpM2cQM8xc8lzoIJUTWSN0/nrbneV1WEvjQVoKvOsY4u7dd7/2NPD2fqMqpZRSHp75dHMd+tH5FKoZ9hxrbnkeaPqvufL3U6o6pLXtJeSAUKOUsbJH3Z33n38CuLPnsC6F6gw+BJtej0s5Fs0EYhLKA8kzHIeGK0JXha6SPEby2IPPLY5wHEqeIaaI6e579F+qdzyllFIui1t+uXGf10SMfZ7vLA4yPMc+tDj6fa60HsN6zOIq5BERh7JmsmaSZohpI083W31533FdFtUZ/BO99MaP5l2fDZHjRCOkiZOp4UB4ptA87bnwFDHYPctbw0JyQ2JDh9kSWoPHypy9+c6NOVArpkoppXzhvfu7rxxZEbgfSTEmcwJMAk0tzTCHEjPwxGJgsNAGWGI3Fkb0ttcBY6ORnPMX7rw2/en17yz2Hd8XXRWDf6rpdE7vgdS0pEeyhhmMZE0gJzYz4NC7i3wMsJsMS4tl5K2IteVlWEPjoaJpR9uYUcVgKaWUS2CQg9G2ceteQ8HAwZCMcSonQlOJmeEQM5MYAhZe2bSCBLaS1+Cx0dBm0DQMtermQBWDf6IqBh8C9dkQ0Uq0mW6BgcVA1ggYCw4wh6CD86ecCQysQSOLAWaQdhtBS7olcrK/iEoppZSHZ7uNGepbRTRktsCAYKDUUNIIPMHMEIeGKcaWz1AYvEFe2hpCDJAHgrZPN3YM/+gPL39UFYMPgSUJyWlJblAEdgNukFrMEDwBHZ0/I0FLzAC5kWmQArJxSkREuB/vN6pSSinl4TESytjlOxTpJqUGubFptZtKNQWOEL1Qn3gQ0KbVhN0gmkxEZASK3nsO6pKoBSQPn2UbYxHnl6lTKIENsNl97CTOv8bnz9l1C5HtrvXZ3iIopZRSHqI2u//jGLnEFt7lPfQgB/ZAB3SGlLHPc2NGOM8/Lg9XdQb/RN40nVt6906kHrP7W+4QW5uN0MrmFLkHsLVEWtlsJLZAZ9T7/Lm2k623ew6tlFJKeSg0imVsM5XR206hHtGn1MnegjegFfgM6MFGLCythDbYW5ydHL0iezvS7vux29W+Y7sMqhj8E62n29NYNl0b7vpkK7GB3BrWwEpigWkdpNASwGIts5BYGK+M18JbSRubbRN0m1HUKSSllFIuhbNei1Goc/Ydii2wtbxWspG0sr0g3GJyN7VKWKxkTsFLiTWOjeQNyZZgC+pmzO/vO7bLoG4T/4l+ev07i5Z+lfJasNmdocgStNydOexT4BOhY8xdzF2hY+AT7FOZBbsicSl234M+7tdS+VJKKZfFz5/91nESK9FsjNeW10YrQgvjM8QJcIz5GOku0oNceSJ0inUKudw1UGJteZ1uPv7bGzfW+47tMqjO4EPQj/o7zWo479WvZC3BQ+GBI8K2A29tlvjB6+1OeJ2wQDpV5hnsikKTKzF4a68BlVJKKQ/ZsPFHW3seaOVP5cq0Q5KBrUIr+8EJJHSBV0Znwqc2Z4JFwjLQapB+Z78RXR5VDD4Erz753bvfffdnxzKjtAc4GnAo0xK9iQ0wQD5/vdUZbUUuyTyzdAo6tfLM2Xz0k+e/8dFeAyqllFIesutPvfXhe29/9S96a9jgAdASDpAFfdprwZDzu5ZCnXcLL5e2F0gnRqeSFr35x//vxrf+ea8BXSJVDD4kp6ejt2aj1USRrcMihXBv2Bovwwy9W06P7EyxEawFC6MzwieCT/pJf3vfsZRSSikP2w/1g/6FO6+9FcsYWdlABLArBGEbxMhmgPI8V9Kn2IRZAUujU4dPG3P89DNv/f3f7TecS0X7HsBl8sKd16axbG42+IpDB05PBRORIxStzw/fltXj7EysDUuFFqL7ZDEZ/t0vv/SN2lKmlFLKpfXCndemw5X/30RHDh1EzxR5YjNU0GaqAQip+/e5MvDxZpR/V/PqH64qBh+ym7dvDw+ny+eMv4SaSeJxmCFJ++nOIEGXYhNo1Vv/+Bfd7B9qImwppZRHwQt3XpsOl3w1G/7CPdNAo0QjyY05z5U4JbafzpXPPPPm3/9QP/g/9iwsf5oqBv9MXvzglWtejr7UtNv/ZjNQNG32u9Z3NJHOvrObj0fJu//jxrdr3kMppZRHzosfvHKNzeBJRT5GMsBuTQTYD3Jln/xj4/69V258r7aR+TOpYvDP7JZfbu786vo0D2aHudL56728f7qZr27fvLnZ7+hKKaWU/bt5+/bw6qw/2G58kFoLIJyfPP38e2fVCSyllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllD+kjqO7wG755ebNd27MDxpPvc5JF23TZtdrFMuzXoufP/ut432PsZRSyqOtctUXXxWDF9Atv9y8/86Np3o4ij4bNW7VN02qD4Bwk276vqdZDxt/dP2ptz6ssxtLKaX8V/qsXEXvNiNCtsNNEl3Xqd1UrrrYqhi8YL759utHA3hG6RZ5EtaIhgHpFnT++7IJdX3PJsh1wCebCb/56fXvLPY7+lJKKY+CB7mKZCDl+NO5yooAkDMf5KrG/UrS/cpVF1MVgxfIix+8ck2r9hm3GkbPAfIk8TisYYZbpQLA4STZSrERXvfWIsJnHnRvvvrkd+/uO45SSimX16dzlbKfiRg/yFUEA+eutvh0rrK9wizUsKhcdfFUMXhBfPPt149GfX5V5FhNzDN1gJgiT2SN0m4lNwC2esQ2YG20kn1m+TTw8Was/1Xvukoppfw5PMhVyJMIzdKaGaaSx384V7F0cKb0WeWqi6fd9wDKbt7FO++w6wg65r09F8yEZgkTlGPQkAetd7IHNolW4CXQQkSSDDf+GvD6XgMqpZRy6TzIVUGM3Hju9BwzC3EAmqY8BgafnasYhWntiFTvWDd/Bfx8n/GUfxX7HkCB99+58ZTSbfQcZOpA1ozwIXBF6IjUVcFV7GvY10CPSboacBRwReE59lzWrO/i6osfvHJt3zGVUkq5XN5/58ZTJIOM7sDJgc9zlckjw5GSq0iPfVauAg6x5grPHTEL9ZWrLpDqDO7Z+TutI8kTYAKaCs2w5thzYCbpwPYIeff7sjqbFWIk0yYyIoEtsGE9eBao+RillFIeilt+uXnvN3lNwVg0k4RpRM5s5qC5YSb5QGYEtGB/OldhNymQyUi2CRt17TNUrroQqjO4Z2++c2MefTZhjRKPkSeIqcVBhuaGKyaPEI8hnf/hKrt3WnOLWcABMBFMJI2xD1+489p0z6GVUkq5JN5858YcQOSY81zlZGpzIHsecAV0BFzF/D5XCa4Ac0mzgANzPheeGNNWrrooqjO4ZweNpx0MEAOlRrJGKY+VTCQfADOsQ6QD7NHuWVoTHiixoSdYy14lGuEcNo2G/QlToCbnllJK+ZMdNJ5upaF6BpZGQY5AY6SJySn2DHQofGAxwhi09i5X4aBLex3EyDAyDLGGnLhy1QVQxeCebbcxC28bIlqJlmQADBwanrfbJ0gHkEegiXa99wXGFlvkla0RxAB7gKLt0200Odl3bKWUUi6H7TZmomukprXdGgYSAzmHKY2FJuCZ8eG/z1UpNoGWwMhmQLgVal256sKoYvACyIhAbpQRlhtJDXYDtJgB8hg0AY4MFmC8QhrI0dpuJDfIgWkktCVq26BSSikPjSVZGRABxC73qJHOc9Wu23eAODL0gA3LgEHabezmDTakgsgIFL33HFQBas5gKaWUUh4W2cBnlngZUaXfBVWdwT0bDPK03+R/I6InnEr1iXukXnaH2IJWkEsQu9Y7C4gN9tbKDtQb9TaJ1Nv2NGO579hKKaVcDoNBnnZbPy4ibSdySuqx+0Sd8Ea7zaUXggQ4/3hts4lQh93b6olMHGn3/djtat+xlSoG9+6s12LURC+pc7qT2CK2Sm+Q18Byd6s4AC93b6u0Rj5VsrC1VrC2c4u0xdk1oW6W8/t7DayUUsqlcdZrMQp1zr5DsRWxSXkjYiNyBVrZnKKw8WjXt9BacOZgabwy3oS0dbI1dET0lasuhrpNvGc/f/Zbx0ms6Nkary2vA60ILa04MzpFvg8+RtxF3AV/THLf4gyxwCyNVgFrKTY47/3tjRvrfcdWSinlcvh9rtIuV6W8CbRCLHa5ipN/m6t0z/CxxSfYp5glaGlyJbEJvHZG5aoLojqDF8Cw8Udbex5oZe9WXAkGsiNDyOpsL+FfN50GVsBC5hSxAJaGpe2VPHxnf9GUUkq5jIaNP9p2MQ9Y5S5XDT8vV4kwu2lMK9AC6USZZ8DiQVE4cPvuvmMqO1UMXgDXn3rrw/fffe5L9DEChsYtQaPdHMG0vUYMQbvfl+gwG8ECsUA+UepMsAjlRz/56jc+2m9EpZRSLpsHucrpsWgWNi3hB7mq/32ushpjdvPZvQq0cuapFKepPLNYuG//+ZXnK1ddFHWb+AL4oX7QN6vVm9lwFuEzy6cknwCfGH9M+GPDx0h3ke6C7yHfSzhO+MSpE6STNMdn0+HtfcdTSinl8nmQqxzNacinVp58KlcdE/4YfE/irsRd0F3t8tQx0v1U3lfGqfBxTvrKVRdI7UV3gbz4wSvXYhVfVxPzTB2g82N7rFHareQGwFaP2FnVG7YAACAASURBVAasjVayz9Icr2btK7/80jfO9h1HKaWUy+uzcpXwGDQ+z1W7RpPUY7bCa6xlNiyEj5fjwauVqy6WKgYvmBfuvDYdbPg6fTyGPEk8DmuY4VapAHA4yd2q490EXn+0mAz+V/3nKqWU8l/hs3LV+c4XrXzeuPh9McjG5Mo0H+Wkv/3T69+p4+cumCoGL6Bbfrm58/7zT2TXP2k3hzQMSLdWBICcSaij6+87+rdeee57H+57zKWUUh4tD3LVZqsvgw+bhiHpFiSw07gJOvq4L+Ktn9QcwQurisEL7oU7r01jnYf0DFK7I+ZGHqzW0+1pvbsqpZRyEXxWrppmLBcHeVa5qpRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkr5L1f7DD7CXnrjR3OA4/7q+vbNm5t9j6eUUsp/nZu3bw+Pmo9Hq8NxX3sBPtqqGHyE3Lx9ezgdnT3RKo7SGgJYkmwDNPZxN+mPX33yu3f3O9JSSikP2y2/3PzuN1+71slHcj+HXQ4wUjiTgZa57U4W64MPq0HwaKli8BFwyy83779z4yn3eU2N27SGJANFNv96bFCTbdD1YtP0ebqM5v2fP/ut432PvZRSyp/u+2/94vFtk9f/f/buvkmu6srz/fe39snnzFKBGKBpAwKE7WjFhLEZY8b029C8SPULmBdwcXeDMbg9U9OYFpaQhNpmDBKoqvLp7PW7f2SpH+70vRck4XKJ/YkggsioUu5VkWfnOvvsvZbSXbiO3Gn4/2xz6oxKsC3kuk//84VXrt/+G/23etpjb759LRl8zO1aBJXvkwy68BQ8SWKEPUB0zpPPgLIn1Kvm2o4VnZbu+1u/vPjGzVMOoWmapnkIb1774IJrnhc5djAVMcYMCAaZ2iWDgTG9YJPy2tYyCn984YWrv20J4eOvJYOPsfuJYJBjpeYOzcAT4bFhqHSxdhOBpapkg7zBWqpwnOnDUNz8+5d+fP2UQ2mapmkewP1EMIrmmXVmaSZiLHKEGaRUAGQnoV6wMVrJPqrWsV3/8NIr1/6xJYSPt+60B9B8Oy77Srn1O17JyDHOBcTCZh7OWaKx8AhFhzIwVrpHbI1WgiF2hx1JPv/atQ/utkfGTdM0Z8tbN95/rt/keZVc2LEwZR54jnKS1ijEUHI5+XGT3iZaEyxBAxV3pRbduv5yD3x4mrE036447QE0347bNy8+U4lRpmaOmBPsBZwznBPaF3oC+Ukc57HOozgv9ESgfeNzmL0IzSM0H1N/cNlXyv//uzZN0zR/Di4dHAz7jf/CwTQz5mkvCO8ZnzPsS3oyuf8dEOclPSH0hNB+wDnwHqlFRs5T/MUbt945f9oxNd+etjL4GLrsK+X6dT0t5aTA1Kl54rmccyIWmJlhgj0CAmHkrc0KPCQomQBKmSrH9sa1F54C/nC6kTVN0zRfx2K6eU7OkmgiaQqa2V7gWJicy54JjZA7g7Ar0hpYnjwZkrBl1cRb6uAloFWaeEy1ZPAx9MmnL+4r3Uk5hphYngaaWVpg74EXwNRoJKlgW8mG0NJ2J0soU6g3bBKv8PB5WjLYNE1zJlTYFzGSYgI5NcyUmhNeyOwZZogpUqe0LPWBVrYHKQvJQBVsRazTnHv99nvTVo/w8dSSwcdQtyz7loaVGCGNRI5JJsBU0hyzsFgITbA7IC2tsYeSSKgiNmmvAsagESUXlw4Ohq32VNM0zZ+3tz58e9HXLJJGSR1aGik9AU1sZkYLwQKYYY+QJNgaHxEUIQt622uIsexRKRrG0eBJoCWDj6GWDD6G+uiKlZ2CgZMh1pDQkPQ48URiBtrDniMGQGIfWQhnL2tjeRnEyM4BoQHpbr/cGQEtGWyapvkz5m4xidgURxlE1RA0dHhgaww5Bk0Qc2APPAECeY1VbFJmY7E0GumkBA3JQIN+cdqxNd+Olgw+huS6UHEhoyAX0h3sLmglQ8QYPEEsQDNgi1JCW6yhQkPbA+xOikK6UErXl66VImqapvkzp2Ht+iyFmiFFIBccHbjDGkqMgInFHGtPqMgcGnqZJcEQM8DuUhSsQriQu85VzeOnnSZ+DGWJ6l7a3eDdryUpkQQiQIXdjcAIvAcegzqgIIpJCYWR0G73yCmG0zRN0zwQySAnMg5LsgggDCXMQDABzw0DnXwHKJFwBBJCQbbvgMdcSwYfQ0odq7PlyDAJGJwEiUlwBXrBCvgSWIJ7oGKqrQRV4d38YXyqATVN0zRfmzelP/k/C6zAuzt7W3IFMqA3rEFHwF1gbdwjeos0qg4lxkkYQIXtqQXVfKvaY+LHUIQ3NaOqOKmqFlVST3prsTlJAo8AgVegirVEWoLXEhs7eyl6nL0jKln7Fy7eOHrntINrmqZp/j+pv7e0Zn0XqjWzgnqRW6wNsAVWhiWmIPfsFobWlo6FVhJr2z3OHqsnso9Uv3Uenm5kzbelrQw+hnKwuadgS2WL2Ia8Nl4DS5ljxCHwleEO6HOLOwR3je8pdIxZBlolXiO2Sm/S3d3WjqhpmubP3y9++Nf3CLZ9aovYSmyk2Bivdzf+PgLuAV9a3LH4HLiL+UrmCOfSeCViLbEhYyOxZcIfTzm05lvSVgYfQy/+5Sd3b33y0irF2mgFWgFLiSHQYSnx/cfEJYwtNsDS9hFwDFoGrIzWxpuB45NTDappmqb52grcTXkRaJXWSsqT7wB1GEmy5TVmECCbXmJt+YjUoaQjk0sTq8DrPuPzXz3341ZW5jHVksHH0N/ov9W3brz/h5qeB6xsjgUD20UShhSsMUPkMCCzPUkaj5EPMznSbi/JcTjv/O3FH312ymE1TdM0X9O94+HtxWz5pNNj0BIzlKPLcMjYdi88EtGZFKFe6Q3S0vKRxSHEEckxRcuuLD8+7Ziab09LBh9Tv3jhJ7d/9sn7+7n1gI6OVEiAlCS98QgxkBUKbNMbNgFLo6OQD4FDiaPs6/847Xiapmmar+/g0qXNz6/+w61kM1EXnU0RFokl+twdHhmaLAAy6Ygt5Ao4jtwlhJKO6jZu/PLCz7845ZCab1FLBh9jh4ejq7PxeqqsxRGQcuJesZsEwgwsBw7jrEGsLa9JjpGOCN3L3HzwzqtvfnXasTRN0zTfzN9e/NFnb177YJqZgR0KWfdv/K2lyWFIBcB2GvogVuBV4qNAh9X65wsXP/rwl6cdTPOtarWDHnOXDg6Ge+PlD3ri6SJPEdPE47CGeNegXGCHKsnWeE3REnMsb3/9zstvtn7ETdM0Z9hPr777vKJcKGLm3H0HCI0kupOWpGQosXrBxuQKc+won1648E//ox0efPy1ZPA74LKvlNs3Lz6z7f2K8ERohBkgOkshbFvVyj4Ua1F/fzQefvSbZ390dNpjb5qmaR7eWx++vajj8auGcyLG3i0IDIQDdj1JCfVUbyJ8VEr56Bcv/OT2aY+7+dNoyeB3yGVfKTeuvfBUuHs6C0+pRrGqACK7o230n5da/7k9Fm6apnk8vXbtg/1pX8+7+HyGZlkjyq7LwIYan4/Jz569ePWLthrYNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3z+GkHSJpv1Vsfvr0AuFufWB9curQ57fE0TdOcBZcODob75c5otTeuv3ruv7Q2cM23qiWDzSN16eBgOB0dPdMp9tMaWpLR7sSyM4t9t5/Uu+9+72efn/ZYm6Zp/lxc9pXy6cc/ON/L+3JdAFi7uVO2GWiZ2/7e8Xr2h3Zj3TxqLRlsHonLvlJuXn/1edc8r+IuraGtYSjLv05omYR69d5I+moZ5eavX/rx3dMee9M0zWn6+dV/eHpb8jmSQVBHFAakO05upPmXGoBsk7LG299feOX67Vb+pXlUWjLYPLTXb783jXX5PsmgC0/BkyRGdh3i6CAF4QgnyTZhE2gl67hne/OXF9+4edoxNE3TnIY3r31wwTXPI0+QJ/cLQivcZSoAIpxO9ZI3JlcmVir6/IUXrv62JYTNo9CSweah3E8EgxwrNXdo5vRUeEzs7m6lKIkddkVsTayBJa7HqXJYpBt//9KPr592LE3TNH9Kb1774EKmn1LJhatmyBOISeARdpcnfYN3c6f6ROvAK2Dp8GFuu88uXPzow5YQNg+rO+0BNGfXZV8pt37HKxk5xrmAWNjMg5wlGis9RnQph7BBdbcqyApylJSB7JB48bVrH9xtj4ybpvmueOvG+8/1mzyvzgtlLEzOA82snCYaBRpILrufjkx5I3JttFQywCWkqmvXXuqB355qMM2ZF6c9gObsun3z4jOVGGVq5og5wV7AOcM5SU8I7WM9KetJHOcTPynpCZP7OPYUXoAWmXU2In942VfKacfUNE3zbbt0cDDsN/6LDM2UmmMvAs4l7BvtCz2R+Ekc53dzZz5B+kmlnrA5B97D3ovQfKDy7Bu33jl/2jE1Z1tbGWweyGVfKdev62kpJwWmTs0Tz+WcE7Gwc27FROTQULQ7GLdV5jrFCOiwFcKJejm3N6698BTwh9OOrWma5tu0mG6eMwyKmNmaWZ5jzYX3xP2tNhohdwBBVMtrm2Ogy5AAO+kj2EZfXgRahYbmgbVksHkgn3z64r7SnZTjRGOJCTAVmtveEywgp0JjTCFknFsHxzg6K5Go4C2OtfBK8CItGWya5jFXYb+Q4yTGyn+dO4GFxcJiLhgjdQC2e8NKQScrMAlZITZUr1049/rt96atHmHzoFoy2DyQbln2+wEDVw2lGIscG01sZpLmeDeppZgKddhptBYayBao2t4qYh14aTTKjPmlg4Nhq6HVNM3j6q0P315skoGlodBI5NjSBDw1moVZGC+AKfbo5Nc2gmO8239tYiu09i6hHGGGw1qeAFoy2DyQlgw2D6SPrpC1250YZmAYShqJHCVMJGagPaXnyENw7iYzhOiF1piRnUPQ0GZAYbBf7oyAlgw2TfNYcreYqNTOlYFg4GCo1MjKETCxNJO1AC/A45NagyuLIqICG+yV0YhgiHdz8Ha7nZ9yaM0Z1pLB5oHIdUFxR40iudh04A4xCDOwGIMniAVoBvSAQBvwCDEQdHZ0iixAkRR96Vq5o6ZpHlsa1i42NYgI5EJGQe5kBikG2EPMBDEH7bErAXcP0yOvsAaYjqDD7mQKEWWQHp52bM3Z1U4TNw8kS+zqWglZiN2EJUuyHEBgCmi4u8NlvEsWXQA5HYZAyChAcq0tEWya5rG368okOZGVJ/OmQjgQgSjAAJgCU8xAULDCu5/Zzbec/DtUpdTmz+aBtWSweSBKHcu27JSxIlImZRupGurucbDXhrvAEbDFqoZUKAWJsXCCrVJ82nE1TdN8m7wpvWyDrcByWLYtVaPEqoge2AKHwD3EGtMLV6HdvGnn/bkzHKlge8qhNWdYe0zcPJAIb9JRFVHJ7CF7SX0qNkpvEEtg6N2GlyWQWEvEsfDaycbyJqStk96okllfuHjj6J3TDq5pmuZbov7e0qNJJbNCqYrsSW21S/424n4JGRfQ/QRvhTi2tLa9CbG11RPuQX06q/s8PM24mrOtrQw2DyQHm3uEerLfIrYiNsarwCuCY+1WAr8C7lh8DvqC4K7xPSmOHFpKsU68lrQVbNLlTmur1DTN4+wXP/zre6FcI7aSNyRb47XsFXCccIx0z+hLi88tPjfcxdyzfSg4Nqwsr5Vsdv8O25xGqzPYPLC2Mtg8kBf/8pO716+/ugzKLMm1YGW0sjkWKsiyqcKrsEpin9z5Lm0f7ZJFL4NYGVbG64HLJ6cdV9M0zbfN7u6EvFfJtdDKsBIsJQa2ArKGtWa3bxCbHlgFPrJ1BDpmV5JrZXlNxhe/eu4nraxM88BaMtg8kL/Rf6tv3Xj/s1rrDDQChoE7Q7FASQo2hIa2SxBOsxVeA8fIh04dsltBPBa++7cXf/TZ6UbVNE3z7bt3PLw9G6+fIjRWMJLpjAsZQmkTW8IjvOtAQqg3WtteSjoyPkQcg5bFXjJc/e6UQ2rOuJYMNg/sFy/85PbPPnl/X85h2gM5YldOkOpgK7TCDCQinQ6rt7wxWgodh3wIHBI69rb/zWnH0zRN86dwcOnS5udX/+FG736SZgAKghBpQS97dVK7tQDY1MAbwwryGMVRpA+Rj/pabv7ypZ9/cdoxNWdbSwabh3J4OLq6mC3HmRFEIuSALXidZiS7gygBNq5ybCBXu8MkOiJ0z7l5/51X3/zqtGNpmqb5U/nbiz/67M1rH0xRX3AoU0iuEBuTI8wAogDgrCn1Qawgl06OEIfV8fsLFz/68JenHEtz9rW6RM1Du3RwMJwOt6/GoH9aqXnisYixYYjcRXp3UEnqbXqjFcUrzLG8/fU7L7/Z+hE3TfOd9NOr7z7fle5li6mTGXiMNXR4cH/uzFBi9dp1Z1riemyVT1986er/bIfumkehJYPNI3HZV8rtmxef2fZ+ReTYjhGFAekudu2UMEqkreSNqL8/Gg8/+s2zPzo67bE3TdOcprc+fHvRd5Pvp7QvckzRkHQX0i4ZtJNQT/UmwkellI9+8cJPbp/2uJvHR0sGm0fqsq+UG9deeKpm+U+DUs7X6vIvE1rhiBqfK1e/b4+Fm6Zp/r3Xrn2wP6n5lIvPZ9UspLCqkrKmxudj8rNnL179oq0GNo9aSwabx8plXym3f/vcFOC5H9w+bpNm0zQP69LBwXC/3BnBrk7gaY+naR61lgw2Z95bH769qKPZ+Qr7UbMApCKE7VBf4G5ZH33eJvGmab6uN269c75blv0q7cOun7CRwpkhbxzl3nZUP/vVc/+l1fdrzryWDDZn1uu335uWZfc9uS4oDNIaYgahGlaEbKejdkFfxYYan9dJf6tN3k3T/L9568O3FzkYX0hrGMTIpR+SpbMyLEnOdEYl2Ia8iZ4//uXF311vTyGas6wlg82Z9Matd857O3y+cz/M0EzEOL0rxyBFcZ58tpU9oV4113as6LSk23707vd+1lo3NU3z77x14/3n+o3/wp2GrkzvH+aIZJDe1fxTYDurVDZBrk2ukL7aDvmw3Wg2Z1VLBpsz541b75zXqrvgTkNlnVuakTERHjsYKl0shcCWqnLX/B1YKjjO9KFH9R9bQtg0zX3/kggG0wjNXZkiT4xG4RzmSQFo3T/Zm2yNVgod4/444MvNWP+zJYTNWdSSweZMuXRwMJxON38leYK9J2sheU56AjExOUJ0CGGM6RFb0BJzLLErdG3f6Uf+TZu4m6Z57doH+6OarziYYu8pYmEzC5gmHgMDyZ2RZCcn9VIDr1JxJHOE6lcR/PF7L177TXtk3Jw1rQNJc6bMxtsLTgZSnUNZYC+QF4YZyinopHL/7mEOYntSqHXkYIBdSAjhOOpeAg5OO6amaU7PZV8pt35Xn4cycnhuayF7YTO3PA80TjzG0Z0UTM3dvKKV7WVARzjIcF+V1z++8Bxw85TDappvJE57AE3zdb1++72pXBddeIq6qZUzSXMce4ZzQvvCTyI/aXwe8STiScO+4Rx4z9LcZuZkKtVn3vrw7cVpx9U0zen55NMX9ysxsjx1MrOZYS0CzkGcS+kJSU/A/XnFTxo9YXKfiL3EizRzS7MiTxXlwmVfKacdV9N8E21lsDkzBuvytKIvlRgLJpFMTc4Nc0kLwwJpJjPEFEQq2RBaOl1ACGqKXmYj5Sq7yTNAKznTNN9RqoNn5DoiYgKaBEytnEHMwXuBZk6mhIZKS1Jltwd5iF0kWVATb2XWIlc3rr3wFNDabDZnRksGmzNDWReJhoFGqRwZjYXGu8fDngN7oEWKsVAHroaV7e6k6mAFtsJrEyOXGNk+D1w95dCapjkFl32l3PjYE3caUjWUPE4YSzFR5szB3GbPYi57hBQp9zLHWEWSbXrsjcIrEyM7RiX0BC0ZbM6Qlgw2Z0ZaQzoPXBkEGhIakh6DxuCp0ByzAObgAdADxzJg9wQrWyPDkGAYyQBHe0zcNN9Rt3/73NQDSZkdwcDpQShG6RyBxthTw8mNpmdAKNkgdciZeCOzcmhoMwSGJz3Z9045tKb5RtqeweZMyRphZaRU0i4pdycHRoaGkc0MOAd6EthHzBBjx8nBErsTLrJLWsXKeP32e9PTjqtpmtNRVENROqWLFAW7AwYKDbGGQhPhGWgf9CTynvAUGMsM2R1MG8juJBdVRYZmpx1X03wTLRlszpQCCqTIVKAIScghCItA7oAheB8YWXSgQlqGQNKuBqECdi2mTjeipmn+HFgI5a7lHJJJIQo4QB0wAu+d3HgWUEEEINDJQWO025rcNGdLe0zcnCkVLGwijJ3YllRtUqYittgr0BfARmZjuRekcMVYOA0JQrZbrcGm+e7q3blzOu0UYYcTK21SUo/dA1vg2LAJWBm24CpTLQxOwGHSxlnL4SmH1TTfSFsZbM6OgZYlag2rhrNH9JgtZiu0Bq1wHCG+BH+BuQscCVaItWC7SxbpLXqUvdJHpx1W0zSn4xc//Ot74cx01ghVnH2Y3mQvsVF6jVkiDjF3BF8YvgSOgaV3P7M5mVt6W9WRNbo2rzRnS1sZbM6M3Pb3CnqCYJvERngDsQZWwLHszhJYG6AgpfDK5gg4NloZ1rtJno2DbR/88XSjaprmNFnlnsJ7VLap2IA3gVY2yxRDQQGMtLIsmZ7dDeZuXrFWyGs51hZbku2w53+fclhN8420ZLA5M47Xsz9Mx5tng7oOsU5YRjAyDGwXZAn1hiVQTkrL7B7vSIeRPrI4xiyN16FYrybl1mnH1TTNKRqtP4/V8KmquhasT+aPITDQrl6pMVvwIEwYV6O14Mj2IdIR1lJ4ZbyK8NGzL1/94rTDappvoj0mbs6Mg0uXNoOsXySxwlrKOk77iMx7SF9B3DW+g/kC/LnQHeAL47uRvod0L+RDhY4pWor6+988+6P2OKdpvsPe/d7PPkf13m5O4VjmyOIIfE/wpeCu0R3MF8ZfIH0hc4fky0D3ZB/KPmJXe3C5Tf2u9SZuzpq2MticKX958XfXb37y8jlqDIU7BSV3R/rSZms8QgxCUjodVo9ibXIp+cgZh1YeUfXlvvf/12nH0zTN6Yvt6nodT+dp7/qXO0KyvTs8sgkzTLkLSbaSYOvdFpRjwRGKe6k8cpY/vPzyP336q9MOqGm+oXYEvjlzXr/93jSW5VKo35djYWlmMRMeG4aYLlCAjdRnehN4lcGxHEchH27Sf/erV/7Ll49yTOM+9rfbmP/b1weDPOT4+N4vfvjXreVd03xDr137YH9QtwtpOLn/Wpd91SiWqy7vPspKAG/ceud8rOKHdGUvM+chzUhPEo0jNEy7BMh2Wuolb0BLzLHlw8B3tyO926oTNGdRSwabM+l+QljwOcQUeZJ4HNYwpRKZu8+21CO2mVoTuZT4sq+8/6gSwTduvXO+rMtzaQ0pDGwGRQpTJYozsxLqI31UR/X2u9/72eeP4n2b5nH21o33n9tUPR01y/3rykjdblOwS9aqYFs9uDvYHv7zo7rZup8QOjRzaEbVOMIjzOD+vJKhxOoFG5OrQKvq+H1O6kFLBJuzqiWDzZl12VfKJ5/84AVnfT7IsdDJpO0SUmBsq0psJW+2NW/9J+//039/9dX1I3nv333/FbkuRI6ryrgUhiSDDJeoKAuOVCXYZu91IVZV+uOLL3/0cdtT1DT/p9dvvzfttnGBrSfIExFjU4dS6TJc7v9cJL3ENuW1iVVY//z3L/34+qMaw2CjF42fDWtka2gzsDICKbEJ9VS2Uq6z8PGFF6590q7p5ixryWBz5l06OBiOx8tnh8XnE+1njQjVkIsr+pKu//ypzf6njyIJhJPm9jcu/iBqnWdo5qqZpLHskWEouew6EuweU5NsLa1xPaZomdvuswsXP/qwfXk0zb96/fZ701iX7xfqKKtm91f879/k3b+uEiXKnoxN4DVld/Ajg//9wgtXf/uorqu3Pnx74TJ+OgecM5zLGlFAaSehz2vkZ09vz33xqOaVpjlNLRlsmm/oZ5+8/1dR69wuexk5jzz54kJjzCDD3f0VhEj1qZM9i+ZYUY5c855d/tASwqbZuewr5fr1V/9zkGOcC0fMlcwEE9DY5NBSCbRLxkwvscFaGpYhHzp8aAbX373wo2unHU/TnDXtNHHTfANv3Xj/ue2WaXXM6bwgY2FybjQTOZY0jqSzrDBOeSu8Nizjfj3EYoV637558Q5w+7RjaprT9unVly8QDITmEAvbC9A8YSrlRNZISQcGbImtdgXnRw6GJKEUofrCa9c+uPPrl35897RjapqzpCWDTfM17VYv9LSUkxAzp+bgBbAHzCRNE42BgeQwVMHWsBIMiSjKRFYm9Nv0K5cODv54cOnS5pRDa5pT89aHby96ab8LTxPNbOaYBfYipLlT0wyNgEGQEqrA/eLyA+ySIUhSrnXkeAVo1V2a5htoyWDTfE2ffvyD8ygHkidIU+MpMAs0N14YzZWecLJSQZDgtdASq0tbSBnQgzfC6/3F+ina6mDzHVZHs/Oidpamrp4GOTPMiVjY3t1o2RPEYJcLkpLWOEdGnZBwpkRvyjZh/7VrH+y31cGm+fpaMtg0X1Mv70s5FjHO3enlCamZxVxmgdhDzLBGyEFSLa0FQ2QpSQdb8FqOle3RpuppWjLYfIdV2McxEjkSGicaS5raORcsCM0xc6yh5UD0u9X2GEhJ4irYQmzAqyBHkxpPAS0ZbJqvqSWDTfM1yXVBceeqQaAh0ohdoeuxpJntObAHnrI7+dgjjjCyqYKN0CrNKMiRiwbF/f5px9U0p+X12+9N4zhLSgNg4GCo9BgYQ0zAM8wesABPkMuuT7CObIugh9jIXpkcYg0cGqaZnnJoTXOmtN7ETfNNpDuFO+wOMzjZ9D4yHgFTwVywj3Ue2JdZABPhEcEQMwAGqehIdzVLuXRwMDzdoJrmdIy/WpVUxO6aik6mQ3SYocghIA+X0AAAG6VJREFUMLaYYhYn19WTwDnw3GKq1DicQ8NgV36GThmF8PnTjq1pzpK2Mtg0X5MlCSlTIREoA0cBF6QOe2AYgebgOfAVeA0agLpdz1N2BbEzRShMjf1yZwS0QyTNd1ZIAQ5QYErKEYou7RJmYDE2LAxToS+BlVBnuWAVywUpLBXIoFcrm9Y030BbGWyar0m2/90L3vU4YVfvYvcKNrgH1qAKSgvr5GcU+N//m8XP/eB2a2HVfKfJdrK7vvLfXCMyNjKQ7E7nb4CK719rQGAR3l2fu9cc6v/0UTTN2dVWBpvma8oStaRTck2pYqqkHrknvbFYC47Z3WQtwRvMsczawQbU2/Q4K6GKVW3noy48fdlXyu3fPjc9Gs3KtMZQ/b3lam9cW9/U5pt4/fZ70/FXq+JuMVF/bwnwqHoA33e3PrGed6tMZ1WUdGYVpKQes0W7A1f863VVTlbbV4gNZovpZVciUnZi1Rr66lGOs2kedy0ZbJqvadDXe9l5PxVbki2wFV4nWilyKWKIkWBrU9gliivgWGhle2XYSGxIto7s7e4Pj2p8b9x657zq4JkbH3tCBxP3JYtEGRPLkj+99sGWuv38eD37Q6tt2PxHLh0cDBfTzXMV9uM4y2Ywi04beTiid+efXf1VFvuu6uqzR5EYHly6tPmvH7+3yVBP0kvaIm0ycyOxBpaGoXbdsjaYQNEjjm0fCZaCtaW105sItqA+s37x8H+NpvnuaMlg03xN/aTeLavhM6huJG2EViZX2EsTA9m6X/YCSeAE1shHNofAcaDVSRHqjRTrAfnZw47r9dvvTbttXGDliTuGUXJkM3CUzrVKpViR6VSvKIvpePPsWzfe//QXL/yklbRpgJOC6h9feC5YPS1nETFKaajIzioBIGcqVbehWenGT73x8a/vHK0G1x/2xqJ33o0a5ySvE61FrggtBUNDd3KD1RuGiABX8CoUR04fAceWV4FXmbEu4Q1j/vhI/jBN8x3RNtk2zTfwXz9+7z+beMZi33AuvGtib+Vc1gydFMe1Ajnl2OBcWnFk+R7JV0JfCt+V4/d/d/HHf/sw43nj1jvnteouqLizmFI9cYlRmCFJ593GfNuqKPsg1iZXRktc/vDiyx993Pojf7dd9pVy48bFH7hnajGVPBExtusQRxc4LHT/M4TYFrQCLa28tx3y4cNsQbh0cDCcjjc/CvX7RvuB9hP2hRbYi13fbybsDpJEnDxCTnEs+wj5Hugrki9duFvI63934acfPMI/UdM89trKYNN8A8soNyeVBcUDVwYOF2xJVNtbWbsWWSAs294SscJ5HBlHyIfIR4JjuuWHDzOW1659sK9VXghilK5zS7NAU6fGOIcoOpSh3a76lLRJch3W0mao0ne3Pn4lgauP5I/TnDn3E8HsNZNzUcTsfp9t7+poDpBDgCGRtko2Fa1CDGtGV5b81eu33/tfD5oQHly6tHnrxvuf9luNQKPEAyKKbQISs7G0Qu6QZDslNkJr8LFThyEfpjjEOt6M9NtH/GdqmsdeWxlsmm/op1fffZ7oXpK9B1qEPLc83a2m5BDvkjAcibKXYgO5xBxbcejMe9D907uvvPbRg47h0sHBcDrd/JXkCfaerIXkuc0MPBEaYQa7J2yAcrchP7SSOUr7KBSHjrzXRfy2PTL+bvr5P733yjbKk3IuKN6TY2F5SjIVHu9q/sVu0SCykmyNdo9xzZHDh1F1L8X/fvGlq//zYVaZ3/j419+P2D6HY5H2QqE5MCU9cWgoq0Dq/nVlaR3WMuE45EOkr5yb9995+c1Htg+3ab4r2spg03xDv7z4xs03r31QJF7MrJmox7FGHhsNFVmcCkUmVo+9MbEyuQpxaLqPHyYRBFhMN8/VZBAw866u4QLt+iMHmiUeS9GBi8C2esGGZJliQETJTKjKbfqVSwcHf2yHSr5b3vrw7UUv7ZfoZ7jMbS1wLpDmQjPB2GYkuQA4VREb+f5+PhdSykhL1Ns3Lz7DQ7RWfPHljz6+ceNih1NUWVCBTYaWsWtFV5zS/esqzOZk/+0S6aglgk3z4Foy2DQP4O9f+vH1n1/9h2OKX5ZzK1inPdqtoqiTAAubHu1OHRMcbskPf/XKT/75Yd770sHB0HV1XsEYNDXMAs0xizB7FjNJE9sjyQFhyN5otevsoLCNQinTG2/G4+WzwI1H89dpzgKX8dPuNBRlksksyDkRC9l7FnPDBDxCJyuDuBqtJUa7DjxW4EzTgzfV+TwPkQyerCr+r59effeeolxI2IpY4TpMeyCioPvbL/7NdaW8p7L9zd9f+Hk7Qdw0D6glg03zgP724o8+u3RwcHc8Xj5bCn/pGtMuPMjMMJKwiahpLeXy+/Pb2Sf//dVX1w/7vudG/f5WEUE/hhgjJk7PiLjf+WQPmEoaY7pdZWxtgKWCjtztxbLYprwOx2qo+q0ng299+PYCdrXl2irkf+zSwcFwv9wZfdt1IS/7SrnxsfZFjhONhSYnbd9moDnyQtYcmNgeAAi2kCsRg8RCMrgP2NplndWz1659sP/rl35892HG9suLb9y8dHDwh+n8+Huu+l5xDCkMsmaABJlE1Khxb6O89fJL1z5th6Ca5uG0PYNN84i8fvu9KfeYdjEYp9Yau1tlPV496kK9P/+n916xyjNV+aSkJ1A+qdQTlp6A3AfOIS0wU8RAJg0rwxHwleCuzF3jO4S+sH3Hji+OV6P/61EmaZcODobT0dEznWI/rf+j/3Kx7/aTevfd7/3s80f1nmfNZV8pn378g/O9vC/Xxf3Xrd1JCQZa5ra/96hrQ7714duLzWD2w1B9wo7zQe4jPWn0hMh9wznQHmgmPARIsZU5RBwCd23fFdwFfWHrixK+Q1f+x989/9qnj2qc/zLW0XBGZQAwdrc6nuVRK6LeNI9OWxlsmkfk5MvpW/+CqsMYZXUnuSM1MBoSGpIeWRoLTWUvDAvsUUopc3RyInQLXhmNEAObIY5O4e5R9Ui+7Cvl5vVXn3ddnU8NIqkjOg9Uo1hVAM6o2xIz9fH0f/34vcNllJsPu6J01vz86j88ff16Phf0pThGLjkkS2dVCQnZWL2inJ+ON8/+9Oq7v7/wyvXbj2QVbDpdKN25MpDoLIakhpJHKCbA1Hge9l6KiYyElyDZZEgrYAwa2B6efJYG/Xr7BPBIk8GTm6lHekPVNM2/15LBpjlrtp6UkkFGIBfsAnQEAyVD5BG7umy7wwBma0GYNbvCvQPYnRJVZAGKpOhL99BPCl6//d70+vXyfaU7h6ZBHQuNXDVELqiEsB1Oydsg1lkYD/H8p1ffvfXLi2/cfNgxfC12XOZv9LtfvRwAL7/+u/wbLhsp/xRv/+a1Dy7U2p/vaox6aWLqGMUw5IFdCkCE01V9iK1VV6lucuPGxcVlX/nto0gIo69BnHyGMgpyh90ldAEjzNhiLmsPAFPAW0lLO4egDtEJF0xxRJRo/e6b5ixqyWDTnDFZooYsdvsS7798UkJm97pNIAowYfdCWAqMSAn92y0ikmt9JIlgrMv3C3VUiXnBU6Rp4nHA8P6hA8CEUskmyTVFy2IvU1HevPZB+fuXfnz9YcfyH7nsK+X2zYvP5DbP58fvD6/r1Ricr2Gkm9df9hv5QdUn7x+XbfnjX77y28+/rX1ob1774IJrns/QTOFZJDPQ2KlRioHYnd4lnRJ9yptAq2If116Dax+/FJd95R8fdnyWJCSnhXYfipO9rmFJQNn95/HuF1giBVbwr1uMtPsdyVSp7TxqmjOpJYNNc8YodRwR52pxKm2HMpLM3Td6JemRN8AS4g52j7TGbDHVooJrgHEkdlKKnQ+eW1z2lXLrd7ziqCPbeyqeOzU3ngpNUgwDDWB3ulmZuzIlaEVlZDEARzqff+3aB3cf9SPj+49k2ZXjGRmGihygCGoVpVjKilkk9Ylbv3v5mdeuffDIH12/deP95/rNSSJo79man5wGnxqPMQPuJ4MK707Msk5YCg1V3JVadPOTVyrwjw86jm1s18XDtNIOJ6m0TpJ0UzE9sAXWwFcADlbafbZ6Qw07gTxpu+hwZDpWD/1HaprmT64lg01zxtibZWbUUFREH6k+5a3wrl9ysMQa7r6nvZRIYGlxLLNCrG22iC3O3hGVrP07r7751YOO6fbNi8+kPXRlRqc59h4wDzR3MoXcrXpZQdig3rAJWCYMhYsiJMmT7L9/2Vd+9ahW5u4/ki01xw6mIsZIIycD7x5dy2nbUVXZpLwONBnK8zduvfPRozrgcungYNhvVn+BPAnn3JQFeBHW3MpZoLF3xcK73WKbK8kWtIpgZNz9S10/ePaNW+989qBjq1GWUWpF0Sup0slnyGzBa9AKOMYE/7qPdI04EqyAze5AiXrCPahPZ60l296+pjmDWjLYNGfMtgzujalbxDarN4hNoFWSK9lLo04SpDaIgSGBDfaRpSPMKtD/3d699mhWXmcev661n0OduungCUaYM0ySCdIYQ3xIPF+DfEjyMcYHgRvwEGHhMedDD2AxwabqOe91zYtdbTFRNJGq2vGA/z+p35RUXevZKqlXr3vf19pE2ca1q87O8idXreeFvDi8954fcOWkpNP0ZTzJZUN4GWJ8pGghZ2oFpb3k7TShy9BtOW5Jh1HD7uO3//pbkj677rP66pFsRWeRTyMfl7KUtbAzRLGlKDnY3kveJFqVNO/d7G9/8NFLv7oXDeEUFF5VPhxHPi3lLMmNyDcjncU+trKUNJ9CKj3G2UraXB6xl5U4Hls6aJw/IelKdb3y0N+t/v7t26v2eNOqXTs7d7aWpr3VlbnjSumgaCFJnjbYrJNcSFpVvI5649ZOlZ2k/QP7+8j6A76GaAaBr5lfPvG9L/7+7durMTm1axtpHfXSqXmUoRxJPqS0UTIoju19lHXsi+qct3VheV3JppXtsuvKzeD7Hz92y52ZfZlZ568EYUs3Ld2QfJLppurMSefyiDjJ7G6Oiqdp4d7J9uDxUV2zGXz23ddu/eHdvORmNNwo9ancJ1IdK71I10x37+1a+1a2NcXwzJXMqqxsh//y/J3br143ymSUbtl9ZNVR5OO4TySdRn1m+YbUZ2ofq6YYniQHy9skF+27uX46TI10dhXfev7O7ZOr1lXz+nw85JbljdQbldZRFolmjt1Se7p0NJ++QQdfRhRFOU95ZXmd1ibKVqpP70WOJoD/eDSDwNfQuoYPF86ZpWVGLVI1l1KO1croZBt5Yas07aM7SLVR91quc7sv1F71oNWg3PnvTz3326vWMlsPtw5zzTN6YdeR1VOzE51IOlPlhqJpz2wya6vd2sq58HSGPVred7IpZSnVUkPfeOaNNxZXzdabppV6vFRLV06TaWVfohuSTtN9YnlpZxap4oyR9nZtk56mq0kpSso92/txSb+66jP68Zs/uXEYe2h70e4jW0dWHfVUx6mkG3LdjHPqZCGpJO2jrFQaPN0MOiTZSnVkaRmNi9nF4n5dMc7ooUfe+vTD9598MN1HipeW5koNqVjRODWdWsjTvxOJRyk7TVPBiyjnli9kXURej0f9m6s+HwB/WjSDwNfQL5/43hf/8Jvbn2VWi3JmalWXJXVbOkRaVjLP1FRE9qjWztJa0oXa53HOdfDvLs4W19qTfKjZkO65By80at7y0vZSynGsE0+N4H2WTqMsLo+DV5GtzsGlbZJlqZZK5irN1dfLPXz/48du1dhD7JO0TiOdVnw2Hcn2tHvXPpI1V6eqqtPZxVpbnrviyFFrVGmv9Ld//OZPPrxqgHhmN47bXbPq+dg1i7KQemF5KedY8omSMys3JZ1MN8W1jTRTFEW7Lm9KOop6oXhuD7MsxptXqUea1r/9+M2f/GacLY/lzFPDYE3/m7B1iLJ1vIg8Rd0kY5ydVdtWLmxfdPtc6ouZ6s2XH3qeEGjga4pmEPia+s7T77z3wQdPL6fZlaVWx7WXsq140ZWZO4OkRBpd2UW1TbSyvZL15bDc/vL1B5+/uE4dznjDQwaNVf43cw91JOlE0k1NU7C9nNI0eVpneidtrmQm11TzMMyulXu4XX6rlOWoPrJ8XNJJ3KeRLo9kdSPKiaKlLHfSni6OLCINihPpYGWnUVsPtclw9ICuGH7sxTirMUN3lz3MLrP9ZnLmsuaKlpaOc3m0Lnkm5VxSS96oslA0VzRLeShl6NKg0fMrPyNNgc4/+OilN7Wb/a26bbvvTiAjL1Oau3u63VzVbu/jbC2vJa2knA+lt3/2xHPvX6cOAH9aNIPA19Q/+R/HF/Lirz9+68ltZn64SoeM2kVZT5NBzVK2o0RuxbtydpLXqf5yczR/+bqNoHSZe6hRcVfscmTJJcWySvIgZRbpSNJ9klaSV5IGWYOdUjztc3Zf5tZdjzPeyNCL6lpIvZzeZaxjScdSn8l1U8mZ5CM5g+NR8qqTkhRLeytbqzZSlokXPdd916lpyu6bPlvaZV/u2o1LciUZLgPBj6UsI+2mm8UptcqVimR3SrZrlMe69qPSyw//8PMffPTSr3SY/5WTsUt7jbWpylLRvMs1PdN0LhvFkjay1z3rX//8se+/c90aAPxp0QwCX2OX8StvP/vua58faXwy8a2a1VJ9OWnLdOtAQzrjdPFgVL//xGPvvnWvolvcXmnQXzjVVjpS7mbPKWo5o6SDpK3k30vaS32QPCoa7Uqr+zL3ME7y//6J/47EevtVqYfZtFVD87IWnV7aPlJ0EuX08kj2dMr2653imUut6RLLRvEi6oXtWZJ5fPVmMLvh4OGQaUgrTR+5Wk5sj0la9mF6J8+rKd5FW1l7ya1KJ+5K0uV2kh4c7b2/1rO69PLDP/z8mTfeeOW+xfoRz/WoBx+pPVcys1xRW/Fo++Dy3ho/6f349i+uEUcE4P8fNIPAN8BlOPKrz7772q2j6FbUN7uqZj5Ykg77+W5u//Y7T06bNW7fw59dld3YNXpIa/QYT7l16uynW8OaMuucUrSR1IovYm3s7NLaydrLPiQ9qmpU9/jo0x9cvHTFmmJb7krq7vRxcGqmZC7X3MlS09H1fZp27K5kjZE2iuZWzdo9K3lQMrNVGmu46jPy4ct1+3R0TaHglg9yHxTv9Ydw52winVsZp3BubyWtomzc2tnZtbWv9hT63B73dbhnuX6Xl3XefuaNNz48Obm4f6jhL8bU8g+/QxkyT/5lu+jfvvLQ93k/EPgGoRkEvkEum8J7ujXj39Pz3ZezzeIwJntZ+3K2LW0tbUpeK5nHtuKDlJmklr0t5Vyui54ubWw72Za9T2vfGv7lOpPLyP6/t/Xd/brsjmWXpLp8N+84U72lyy9G7Zpqtv71X3IFP/2b//bl9999ba9Re5f2lnZy7WJNN7xLC8WDozGltWNrahI3li5UWiXZWNrK3jvaqbTfH83vSSD2V102hZ9c/gHwZ4BmEMC1PPad97/46P0n1m5trdpm2l6xtrWIMptSUTJG3tgelMTJ7jLA+NzySup1qTbRlFk3z3D1Cwl26q1XWulWDVHfPbJO2xltj5H2inZyLiTvS9lG2jk6RBllj4lb6THlVpKhrnckO0hfZIoD2kbeWL1WtIhrrkxvd8bZVrSYcrmnSaWtC8XnVlaS1lKv49o6/b9ff/C5a7/zCQA0gwCu5Z/8j+OPP3j107FzZmmteCllkWRQlTXl0003dZNBSqd8ULKRtIpzPkXdaGVpbeWLnz393WsFTpeno2tVj67pyNrSrlU7qTeXx8IzSaOSIdZB0oWmDRzbaauG9pEPlYxdPhzi312npi9Xizs3Ttf3p/s48sbRyqlZV8pRkhxkHWWankr26Giv1irORbnO1X3R0krqdRbjW9epBwDuohkEcG0/ffS5Oz98/9Vb40ELD9PqtMhyd6TaW9qoMldfnsJOmzSmm82di7LO5ZzLvtiP+ufr1pMavlT6lj3srN61vJW88RTQvPDUAEbTJY2KNEpaW7qYJnFaR9mUs01qqzH7HsZPr1PTG888s/uHt/7HR63dsWc1S/SVXL8p0DnRwvaQlqO0Xbs4G0WrdF9MgeG+qB4/+Pk92pkMADSDAO6J8/PlW6dH2xN3l1OOPU0AO1uXp5w89xSFEh1i7SNtLK/kXKT7S3l89ZWnfnStCZwk7ZfjZ/Otvm31dmxvS72JspZrrniI1JH2Fc3jlC9DuVVaKT6Pc6FoFXsT9caDLp587J3PXrlmXT97+ruf/ejd1066u5SUy5e7hrO3sp72ANcwPSePSfZ2drLXkldxn5f0ycNPvnPlbSgA8K9dO6MKAO565o03FmfHm79x/ICsk1gnVo6mwOTMYpeSpKrd2nmKUFlr8Dq9e/WlJ390renbV/3o3dcet/JYy7eS3CflppMbts8SnVpZyppfrkZOu3albDpaOTmX9HvZv7f0u5Jf/9mT9y5Y+ftvvfyIa3i8ymcacyzpONJiCurOIEldlUofotrefU6u/ujhx959/V7FAgGARDMI4B57IS8OH330Vw/q0E+PylHFy0gLO0O3a2oHe1T54LG3HvzJ6mj+69cf/O49vQzxQl4cPnz/ye9qrPul3OzKDcU3ZJ1IOq5ooWgWqxy1phVsm8ibSs7jOo/7y/Tw8S+e+t4v7mVt0rSveDw6+s998C27j3I5Pa3pprM66YpHWftUzmuY/c+fP/Lsx/e6DgCgGQTwR/FCXhzee+/xv6wMD6jyLXVmki0lbq08+PM+HO689EcMLn7+zu2TWg/PlA+3UnXm9pmcYytH0/t5NaS7XNVJH6zaSdM7el25KOl/PfL4O7f/mJO4Z9997dbx2P9J1fePXWeuaf1bedjtx/HzhRaffeepKR/yj1UDgD9vNIMAvtGev3P7ZLHWU2P8l1U6beXIqiNFcztDrGllX3SQtY+yVbQahtzhSBbAnwOaQQDfeC/kxeHOh09/e996zD2eJV6oNK++3ImsJFWj+rCX/PvZvN756aPP3flT1w0A/xFoBgH8+Ujqv376+vH8d/vjo+NatMu9sesoGb3djDWsX3no71i1BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgK+F/wNU+g2P0I5JPgAAAABJRU5ErkJggg==","e":1},{"id":"image_5","w":643,"h":661,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoMAAAKVCAYAAAC04eEIAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAALhUlEQVR4nO3dwW5T2R3H8f+xTYkEKe6OqtNORuqiu0l3Bo2Ku+tusu0ufYOsaSrdiohtmSdoeIJmdrNroBL1ruYJSiQWLE0BCRjbp4siDWpL6wTnHjvn89kFoXt/2X11buwbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSTSg8AAM7HlZu3t9O804+I6EXvyWTUPCk8iRUkBgHgAugPmq15+nYnR2cYOQ8j4toH/utJpDSOHEfdje7R5LiZtDaSlSQGAWCNXR3sD1NEExG3zniJ+93oNU4N6yUGAWAN9QfN1iymh3H2CPx397sbvT0nhfURgwCwZjYHv9uNyPfiw4+Cz+r5vDMfvnp0d7zk67LCuqUHAACLexeCf4yIjXO4/EbK6deXP7n17O3Th4KwEk4GAWBNvBeC527emf/cCWEdxCAArIErN29vd+adv7V4y+fdjd6WvyG8+DqlBwAA/19n3rnX8i2vzV5P274nBTgZBIAVt3ljfydy/KnEvbvR+8zXzlxsTgYBYOWl3VJ3nqbpXql70w4xCACrLucvS9065dgpdW/a4TExABRy5ebt7ZQ7uynHdkRsRcSnhSed1uOImKSUjzr50pHHyetJDAJAy/rDpj97MzsseeJ3HlLE7/8xOmhK7+B0xCAAtKg/bPqz19PjiPi89JZzcv/F6GC39AgW5w0kANCiS9e/GMXFDcGIiO3v/fgXP3j79OE3pYewGCeDANCSNt8gUpqvpFkfPk0MAK3JTekFbZnFtCm9gcWIQQBoQX/QbMX6fVr4YwxLD2AxYhAAWjCN6VbpDS2rKXzXmhgEAKiYGAQAqJgYBIAWvBwdHJfe0LIHpQewGDEIAO25X3pAe9Jh6QUsRgwCQEu60WsKT2jLyYvRncPSI1iMGASAlvzrS5jTb0rvOGfP5535TukRLM7r6ACgRW+fPhxf/uTWSURcxGA6mXfmv3r16O649BAWJwYBoGVvnz4cX/rJF1+n6PwwIn5Wes8STFPEne5Gb/fFX+48KT2G0/FuYgAoaHOwn9//OUf8cikXzul6pzO//v4/zeedZ5Hys2VcPkX8+b0fH7wYHQyXcV3a1ys9AAD4zrp8Bc3mYL/0BJbEB0gAAComBgEAKiYGAQAqJgYBAComBgEAKiYGAQAqJgYBAComBgEAKiYGAQAqJgYBAComBgEAKiYGAQAqJgYBAComBgEAKiYGAQAqJgYBAComBgEAKiYGAQAq1is9AAD4zvdv/HYv57QTEbdKb/kvnkfEOKV8lHPpKSyLGASAFZJz+kPpDf/DtYi4lXNaxVDljDwmBgComBgEAD7WT0sP4OzEIAAUcnWwPyy9YUl+dIF+l+qIQQAoJEXcK71hWVJEU3oDZ5NKDwCAGvUHzdYspn8vvWOZutH7bDJqnpTewek4GQSAAmYxG5besGzTmG6V3sDpiUEAKCBF3iq9Ydk6EcPSGzg9MQgALEVOMS69gdMTgwDAUuQck9IbOD0xCABQMTEIAFAxMQgAUDExCABQMTEIAFAxMQgAUDExCABQMTEIAFAxMQgAUDExCABQMTEIAFAxMQgAUDExCABQMTEIACWkPCk9ASLEIAAUMUv5uPSGZett9MalN3B6YhAACnj16O44Ik5K71ialL6eHDdOO9eQGASAYlJTesGy5Jzvld7A2YhBACjkxejOYUQ8KL3jY+UUX70cHRyX3sHZiEEAKKi70duJiMeld3yExy//erBXegRnJwYBoKDJcTPpbvSGsZ5B+ODddtZYKj0AAIjoD5v+7M3sMHL+svSWReQUXzkRvBjEIACskM0b+zuR4zAirpXe8gEnOWLX3wheHGIQAFZMf9j056+nezliL1YnCk8iUvPuQy9cIGIQAFZUf9j052++3c057UXEp4VmPI5I90TgxSUGAWANXLl5ezvlzm7KMYyIz8/5do9TyoedfOloMmqenPO9KEwMAsCa6Q+arVnMhjnl7ZRjOyK24+yPk59HxDhFHOcU4+7l3rE3idRFDALABXF1sD+MiEgp+u8i8T/MI44jInJnPnn3SjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIr8E4f9T0XH3knyAAAAAElFTkSuQmCC","e":1},{"id":"image_6","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_7","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_8","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_9","w":643,"h":661,"u":"","p":"data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArLr/AMezR62bUAo/AAAAAElFTkSuQmCC","e":1},{"id":"image_10","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_11","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_12","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_13","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_14","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_15","w":643,"h":661,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoMAAAKVCAYAAAC04eEIAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAgAElEQVR4nOy9P5AbR5r2+bwFaNgxZJMYby+C8xGKGGPPYo+HZsyS0Fi3FlvW3WcRsi7OUsu6CAoMlUYtRayllrdnCbRuvG164y2aM6Fub9DeeYuOpbHeNthURFMCKs9ANtUkK7OqgMz6+/wiJnYWBSJrGoWqJ98/zwsQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQ0ACn6BAghJIlOL+zOMe9e/v8B0L96XIlsQalOzD/dAnBrzeVnACbvvSpyJkq99XoEjC//e3ujPTkbh2drrk0IId6hGCSEFMb1e4+3JAo6AukKVBcA1C9CrwvgTjFn5pwTAGcAIFowKsFEKZy10Z6eHYfTAs+NENJwKAYJId7o9MPO/GK+dSn2rkTwXETs6sZlBHIqwFRBpgpqyggjIcQ3FIOEkLW5fu/xVqCCrihsXRF8D4o+r5pxCC0UI2DMiCIhxBUUg4SQ1FxG+gKgr0VfF8Ddos+r4SxFoqhJpGTCSCIhJCsUg4SQWDr9sLN4Pe+Lwpau42NqtzqcQmQiSk0iYEyBSAixQTFICAEA3OgN+4GoLYWgD6W2UK3mjVMA05jXpxL/emo8dyrnySmAsYiaLESNf/zhm/c7pAkhjYRikJAGEhP1K1N93xthJ1esWt6ybSlhvdxV+xsRdERhCwCiK/8d5ROQhwKMI2D86nhvXPTJEEKKgWKQkAZwKf4U0BeFPoqt8zu86tF3KfKaJEYuay+BXzwTr1jqFCnMKQ4JaSAUg4TUlBu9YT8A+grYQf7i743gu/TTo7hIj8GSp4sCvkcRdcC0MiH1hmKQkJrQ6YXdBRZ9CHagVB/5pCNPAExod5IfMTY+XeQjEmcADgAZtzZaB2xIIaQ+UAwSUmGu33u8JSoY5JT6PVSCiSiZRMFiwkhRubhsAIogXV2j6DvdfCLAwSKIDngtEFJtKAYJqRib28MdKOxgmf71Ff07UYIxhV+1edMhrmQLy5pEXx3ip0pwIMD4/GjvwNMahBBPUAwSUnI6/bCzuFjs6PTvQw9LzLBM9bJxoObk1EW+TCcLDigMCakGFIOElBDPAnAGkbEgGrMxgFxpNOrDvTikMCSkAlAMElIiNreHO4AMPAhAdoWSVHjsQqcwJKSkUAwSUjA3esO+AAO4rQFkDRdZm8u0sq5R7cNdzeGpEhwoiUbcnBBSPBSDhBRApxd2I8wHaikC3TxgRZ4JonGgPjigvQvxwfV7j7daSvpKyQ7cpZRPRNQouPbBiHY1hBQDxSAhOfGmDhBqADcP0jdpt9a19pgPUpIn79S19uEiqi3yDFAjRrMJyReKQUI8c/3e460gCnbhJg18qgQHUDhg1y8pE44tj06V4KCt2vuMchPiH4pBQjyx2XsyANQu1i/CZ30VqRSOheEhBPuMFhLiD4pBQhzS6YXducx3RWGA9R6CMwAHURDtUwCSKuNQGJ4KMAo22vssiSDELRSDhDjgRm/YF5FdB5YwT2m9QerKZu/JwJF35lNulAhxB8UgIStypSEkxHodwYeAjFobrQNGPEgT6PTDTvT654FSMsB6ZRSHgIzOj78auTkzQpoJxSAhGen0w050Md9VwC5WT3stU15oj1ggT5qMowarUxG1T3saQlaDYpCQlHR6YXeBeQjg0cofQusMQozopqsBVrdemgmwz7pCQrJBMUhIAlciF6uKQEYBCcmAo0aspy20Q/7mCEmGYpAQA3pMXIjVoxS0xMiRG71h/93XRNARha11PlcJJkrhvSgTfR79c6Uudx2LJopCQhKgGCTkHdYUgTMAB3z4rMf1e4+3JAo6V8Vc9L6wczUOzRWHl/9FCSaBFpARMAaANtpTXhOrc2WG96oReopCQgxQDBKiWVME0gMtA5dRvADoA4DS/xflE3g+mAGYAIAAY4g6i5RMVBCd0SolmStzvVdt4KIoJOQdKAZJ41lTBJ4Ask9ri/fp9MLuHPNuAPSvRPW24GKGbb05BTBVgkkANY2UTNob7Qk3GW/jwNqJopAQDcUgaSy6MWQfq4nAQwWErBtbcqM37AeitiJIV4u+JkT48mYGYKIEE1EyUVBTXn9L1hz9SFFIGg/FIGkca1rEPFXAqMkP4Ru9YT8A+kpkC0ptYT3DbbI+JwAmImoSKZk0/dpcI8r/tLXR3mUEljQRikHSGJZppfk+VhSBTYweLKOnrS1A9bFM8a4zLYLkx+FlBLGF1rhp1+0aopA+haSRUAyS2rPmxJBGicDr9x5vtZT0FYI+lOqjfPV9J8CyS/dqx+7l/+/aAqbTDzvzi/l71jQC6QpU983aQBfL/wBAB+UTzacAxiJqshA1bkqjyjqiEJBd1gKTpkAxSGqNriUKkT2V2QgRWCLxdwpgCpEzUWoC1MOS5bKJBrjSOb1Mr3dQbDPNDCJjKBw0IXK4hig8VcCgyal30gwoBkkt0Tf/fWSP0NRaBF7pwOxjvVmwq3AKYEo7lbe59FR8p+u6i3xrMU8BjCE4aF1rj+uaIl1DFB620B7U9b5ACMUgqRWdXthdyGIfSj3M9A9FnrVUa7eON/vr9x5vtaJgRy3FXx7py1OITESpiRJMIommTRd8q7IUL8uUtPZi7CIfkXgoog7qmlJeVRQqwXfta+2wrmKZNBeKQVIbbvaG4Qp1gbW0iNncHu5AYQf+o3/sZM2ZyzrGAOjrWkXfjT2nSnAgwLhuoxW1KBwhm8BmPSGpHRSDpPKseEM/UcBuXcTLm/SvYCdzVDQ9y4gfojGFX7l4SyAuaxL78LMJmAE4gOCgTsJwxdriWt1DSLOhGCSVZcWU8CkgYR129TkIwBMlGAswbqn2pI4p9Dqz9NNc9HV9aB/u08u1E4arZBeYOiZ1gGKQVJIVbtq18Q/b3B7uADLwIAB/EX81biJoKp1+2Fm8nvcV0JdlCYFLcVgbYbiiHylTx6TSUAySSrFil3DlO4T1/+4B3NYANqKDlMTzTuTQ6XWlBAdKolGVm0/0pKIRsjWZsOuYVBKKQVIJOv2wM389D0Xh0wz/rNI1PZ1e2I0wH6ilCHQVxal1lyhZHU9d5yciahRc+2BU1c2GbsbaR4bfoABfvjzeC72dFCGOoRgkpWeFBpFKp2x0MfsAq81XfZc36TtG/0ha3qlH7cNF1FDkGaBGVU0jr1CachIF0YCbLlIFKAZJaVnWOC1GWWrjqlrM3emF3bnMd0VhgPUfvKdKcACFg6pGRUm5cGxVdCrAKEB7VLV06ipNawJ8WYdaZVJvKAZJKdEPnxEy7MKrmBJ2GAWsRZ0WKT9OhaHIM6XUftV+tytkKzjWjpQaikFSKlaIBs5EVPjy6Ot9ryfmkE4/7EQX810HtYAzJRhRAJKicCgMTwEJWxutg6pE0K78jr9I+29YS0jKCsUgKQ16t32AtA+Vio2Qu37v8VYQBbvIZlkRx9M6WHiQerHZezJw4Hk5U4JRW7X3K/a73kf66D5rCUnpoBgkhbNCp/AMgkFVxJCOnuxivVTwISCjKkVOSDPp9MNO9PrngVIywHpdyU8VMKpKavXm9ue7SkmIlJtZRglJmaAYJIWid9UHSJ8ufdraaO9WQRCtOOLqKqdKcFClKAkhV7kSDV8njXwIwX4VNn8reBPSl5CUAopBUhjaqiFtvU0lCrCvREV2saoIrLgFByHv8saqBmoXq0cLKzNKMmOUsNJWWKQeUAyS3Mm6e66CXcyVYvJMc02vULlaKUJWwUG0sBKiMHOUUORZ61prUOb7HKkvFIMkVzJaxpS+NtCBCDwBZL/sDzZCXOMgil4JUZgxSngaBdEOm0tI3lAMkty4sT3cT90kUvJdsgMRWKnieEJ8smaTVelFYdYooYj6rEp2WaT6UAwS7+gb4QHS1QqVOhq4pgicAThooR0yFUzI+6xpv1R6UZipTrrkG2JSLygGiVcypoVL3Vmnu4P3sYIIFGCfI6kIScea4xlLLQq14B0h3eaYaWOSCxSDxBtZ0sJl9txawyKmclMVCCkTa0biDxUQlrEUI6u3KtPGxDcUg8Q5SxuJ+RgV3/nqiSghstcxlToyQUjVWFcUljXjkClzwrQx8QjFIHGKToGMUeGbW6cXdhey2F9hrBZFICEeWVMUltKwPmNNNUfZES9QDBJnaAuFb9O8t4xpjxXG4l1CEUhIjqwhCmcC7JexJCVDWU2pm+xINaEYJE7Y7A1HSNcBWMq08IrNIRSBhBTIGqLwFILdsgmqLGnjMtdZk+pBMUjWIlN9YAnTwroucB/ZRmSVNrpASBNZQxSWrp4wU9q4hPdUUk0oBsnKZKkPLFtaWIvYfWTzM6NFDCElRgupEBl9CgX4smy/6wzZlpMW2jtlErSkelAMkpXIkFadKWCnTPYOGcdDXfKUZtGEVIPMc4GXlC51nOU+GwVRv2zlN6Q6UAySzGRw0S/VjlVHMveR7QFxGAXRLm+yhFSPlcpARJ61VGu3ZPetA6TyOZVPWMNMVoFikGQiQ+qiVDYOmcZALSldlIAQshorNIjNRFRYltIWXdZygBQbWSX47tXR3m4Op0VqBMUgSUWWRpEy1QfqyMAI6aeHsDmEkBqyonVUqTIDGexnSrUZJ+WHYpAkkmGWZmnqA1e68ZcsPUQIcc8q5SJlsnHRUc7vU7z1pLXR7lMQkjRQDBIrGTqGS+OMv0I08FQBgzKIWEJIPqyQOi7NPa6K92VSbigGiZEMN8vD1kZ7p+gd6CrRwDLt+Akh+VLle0YGP0J2GpNEKAZJLBlSEU/Pj/cGnk8nkRWigaUzmyWEFMMKXcelcErI0FhSmhIeUk4oBsl7pJ0xXJZGkYydwqXqEiSElIeq3kvSuzzQeobEQzFI3qJKN5UMjS1LOLqJEJJAZsPqktxX0m7iy3DvJuWDYpC8IaUQLEX9ScYpIjMIBvQMJISkJes9pgxp2LTlPWWpeyTlgWKQAKiOEOz0w87i9WIEpR6m+gcl2bUTQqpH1ihhGQyfM3Qal6Lem5QDisGGk8FMunDPqmxjmRgNJIS4IX0KFkAJmksoCElWgqJPgBRHlYTgze3Pd4Mo+DvSCcHD1ka7SyFICHHBy6Ov96Mg+j2AkxRvv7vAfLK5PdzxfV4mfvzhm0kL7S0kn+8jnRUiDYeRwYaSWggWnGbNmBYuTXcfIaSeZBgJV3jaOMOGnxHChkMx2ECqcoPImBam0z4hJBe0L+EB0jWXFJo2rsr9nhQLxWDDqMqNIYPpdeG7b0JI88iatSiy2zj1ubLhrrFQDDaI6gjBtF6HbBIhhBRLluaSoi1dUt5bC68RJ/lDMdgQ0grBIm9WGcQqUIKOPUIIATKWtBQcfUspCA/Pj/f6/s+GlAWKwQaQXmQV50yfwQqBaWFCSOnImDYudDObUhCyhrBBUAzWnCoIwQz1gUwLE0JKTYa0caF1hBSE5CoUgzWmCkIwg00D08KEkEqQJdNR7EacgpAsoRisKWUXghlTKk9bG+1dFjQTQqqCvgcfIN0ou8IEFwUhASgGa8vm9pODZKFVoBBM2Sgioj6jiTQhpKqkzn4U2FhCQUhaRZ8AcY/+Yf/v9ncVIwSv33u8hZ/VBMlddzMF/PP58dd/zuO8CCHEBz+9eP6Xa7cfnAJIGk/3j2oe/fOvf/fHP19Mxxd5nNslP714fnDt9v0PAWxZ3rb1q9/e/81PL57/Ja/zIvnByGDNSLfDK0YIbm4Pd6AwQnIdDesDCSG1IkMd4SwKon4R05TK/PwgfgmKPgHijhvbw32kCvUXIAR7TwZQ+Dck3QhFnrU22n0KQUJInfjxh28mrY12F8BJwltvBVEwvtEb9v2f1dvoNPBT+7vU90sHCFInGBmsCSntWQqp+bjZG4YK+CLpffQPJITUHV0znWbjjsKyOGkihIKPafNVHygGa0CZhWD60XJMPRBCmkN6W638740pm/wKS2cT91AMVhxdh/L3hLeVWQgWarxKCCFFkcFwP/d7OAVhs6AYrDApC5JPzo/3bB1izslgHcMbCSGk0dzoDfsCHCC5saSsgvCktdHu0we22rCBpKJ0+mFHD0a3CsHWRruf0ykByCQET1ob7S6FICGkybw63htHQdQHMEt46yOdbcmNs3F41kJ7B/Zzu7u4mI87/bCT13kR91AMVpArgsvm1Zf7bi2jEOROkhBCoDuN0d5Ccqfxo83tJwd5Cq+z43CaQqze1U0xpKJQDFaQxevFCMl1HLk62WcQgk8pBAkh5G3OjsOpzuTYBaFSD/OOxP34wzcTLQhtPNL2ZqSCsGawYqToQMu9Di+LEOQ4I0IIMZNhpnHuGZZ0DS90hqgiFIMVItUPMWfvpwyu+hSChBCSkpRuDKUUhAr4iA4R1YJisCLojrN/t78r3x1ZeiHInSIhhGSlvIIw8bzoFFExKAYrQKcXdheYT2AXXblG3igECSHEP6UVhNtPDqDUwzKdE1kdNpCUnE4/7Cwwt1vIiDzLUwh2emGXQpAQQvyTbl5w/vYurWutAezNLnd1syOpABSDJSdF5/CJ/lHmQipxCoBCkBBC3HB+vDcQ4MuEt+UqCFN5ECr1kB3G1YBp4hJzszcMFfCF5S2zFtpbZ8fhNI/zSd81TCFICCGuSTm+Ltf0bLqSIT4Tyg4jgyVlc3u4kyAEEQVRn0KQEEKawfLeKp8kvO2utqbJhWWTiOza36X2r997nOtYVJKNVtEnQN6n0wu7CtFfAGyY3yWfvDr6+i+5nA+FICGElIKfXjyfXLv94BTAjuVt3Wu373/404vnuYjCn148n/zqt/d/I0DP8JYNUfLPv/7dH0cX0/FFHudEssHIYMlIU5OnBN/lJbooBAkhpFycH381ElGfJbwt11nGr472diHyzPKWO2woKS8UgyVDz3e0Ca/DV0d7CSH5XM8HFIKEEJIvL4++3kdyl3GugjCxw1iphzd7wzCn0yEZYJq4RCyLg611gqetjXY/rzB7On8rCkFCCCmCn148P7h2+/6HAGz1eFsbv/2n2esXfz32fT4X0/HFB//jD8ei5H/CXObU/9Xt+4c/vXg+9X0+JD3sJi4JuiPr77b3REH0+7wc3VPMQAaFICGEFE/ZNu4pup5nrY12l4bU5YFp4hLQ6YedIAoSCn3lk7yE4GbvySBJCOZZt0gIIcRMOmNq9f3m9tDWdOLwfL4aKcF3lrfcyrPjmSRDMVgCdFHtHctbnpZoRwcAT/OsWySEEGJHC8JD65sURnlZvOhnhO18HrB+sDxQDBbMZu/JIMV8x1yE1/ImoZLc4nOdgUwIISQdrY32Duwj4m4FUTDu9MJujudjnFCigC9u9Ib9PM6F2GHNYIGkcG7PbcJIOhd5HJ4f7/V9nwshhJDVSGkHltuUkhu9YV+Af7e8hfWDJYBisCBS/WAFH58f7XmvqyjbzYOQVej0w878Yv4mBSaQrkB1Te9XQBfL/0AJJoGC8dpWgom6cvzV8d54/TMmxA/6nj5FSTb3iaNVRZ6dH32VSz0jiYdisCCSunWV4Lu86vI2e8MxgAeWt5y2NtpbFIKkKDq9sDvHvHsp8K4KOdivXd/MAEyAXwTlpXBsb7Qn/M2QokiZ7cmt7CfpOSOiPtPeiaQAKAYLYHN7uAOFf7O8JbcoXApLglkURP28OplJs7l+7/FWoIKuKGwpkS0o1UWi6XnpOYTImSg1UYJJJNGUvyeSBylStLmJsBTRSj5rCoRiMGfK9INI0zmcp7chaRY3esN+IGpLKdnC0jS36qIvK4dKMBElkyhYTPg7Iz5I5RCRU0lSCnF6cn68l0u3M3kbisGc2dx+cmDvHs7HGDTNjpGm0sQVnV7YXch8SwF9UdhCsandMnMowFgJJq1r7THTzMQFiTV7OQYhkkqkBPjy5fFe6Ps8yNtQDOZI4g4tpyLaTi/sLjCfwFJLwh8kWYdlBHyxA6g+gD7sPprEzIkSjAUYUxySdUhREpRnedIElkyAAj5ik1a+UAzmRAoBlkt7fcrOYXoJkszc6A37EOyIQh/5pnxPAUyB97uCI2Bs+kcqiM4uIyE2rzMRdHQ0c/nv3m5e2YK9QN81hwKMF0F0wLQyyUI6B4t8AhIpmlvYtJgzFIM5kdRJlddOqEy7Q1Jt3on+7cCfKDoFML0UepcCr0zdupe2NpfCMfpFQPoUi6cAxhAc5FHvRapPGsuZvLJCN7c/31VKvjUdz9NRg1AM5kJZLvqk8wDNP0kCbwSgYCdhcs4qnAKYXtbM1anrdlmj+8YWpw/3InEG4IDCkCSRynImp4aSsgRJCMWgd1Kkh3OJxKVpGGHnMInDkwCcQWQsSk0iYFymKF9eXDbViMKWFoiummooDImVFB3GuTSUpIhUMl2cExSDnkna+eQhwNK50bNzmLyN3kAM4CYFvExpQsYttMZ5jFisItfvPd5qKekrBH0o1cf6f/eZEoyURCNu9MhVkrp6kVOgIsl3l+nifKAY9EhSWjav2owUE0bYMEIALKNVEeYDtRSB63QAzyAyhsIBxd/qvCMO143KnoioUXDtgxEjLQQoz7MhyXKN6WL/UAx6Ik16OA9zzTS7P5p8khu9YV9EdtcUHCdKMGYUyh+b28Md7dW4g/XE+tMoiPb5PTUbnTWawHot+c8aMV1cPBSDnkja6eSRHk4x9o4NIw2m0w870eufB0rJLlYXFstok/rggNG/fHkTNVQywOpWPieA7LNEpLmkaCjJpX4w6XlF71u/UAx6oAwXdZo6QYbem0mnF3bnMt8VhQFWq0ljurFkdHphN5Kfd9YQhjMB9oON9j6/0+aRoqEkp/rB4oMoTYVi0DEpRFguadmkWhDuspqHLl0IYfeZNHEqovYZASw/V8T+KqnkGYCDFtohv+dmkcKD1nv9YFmen02EYtAxSTV6eUTjEudQ5uQyT8qB7goOkd26ZAbggLVl1UVnKXaw2gbgKUVhc0g3ocS//2BSlFJEffby6Ot9n+fQRCgGHZLk5ZdHi7yu//i75S0sxG0Ia4jAE0D2WxutA14n9WDN+lCKwoaQpn6whfaW72shIbOVyzk0DYpBhyQM3/YuwtJ0hrFOsP6sIQLZYdoA1ugcpyhsACnqBw/Pj/f6Ps8h0Y2D2S3ntIo+gbpwc/vzXUDMqRjBJy//9ievD9kP/uEP/4qEOsHz472Rz3MgxdHphd0Pbv9hX4BvAXRT/rOZAP/S2mh//PJvf/rzz//51//yeIqkBPz04vn0pxfP//zr2398GkkkAvyvADZS/NMthWj32u37H/76d38cX0zHF77PleTPTy+eT67dvv8hliMT4+hu3L4vr188H/s6h4sX47ON2/c3sJzME8c//ur2/cOfXjyf+jqHpsHIoAMSi15z2MWksJHxvpsjxaCvv31kqws7BSSkpQjp9MNOdDHfzWg0zu7jGpMmy5SLPVpCtu38eK/rc/0mERR9AnVAP4jNNRaq5bVOsNMPO1AYWd4ya6E98HkOpBhu9oah3oikFYKHSxPZvS6FIAGAs3F49vJ4L1w+WOUTLEcHJnFLAV8sLubTZVqR1ImzcXgWBZE1gBFEwcj3eSjA9uy8c7M3DH2fQ1NgmnhNdH2WbeTcv8yO/+S1++qD/+Wf/gx7B9j/fHn8p2Of50DyZXN7uHPt9v2/AHiIdCm+QwV88up4L/zpxXPWBJJYfnrxfPLTi+f7124/OAXwewCdhH+yAWDn2u37H//q9v3/j2m7+vDzf/71vzZu3xeYU7X/4Dtd/NOL59OElPXvf337j3++eDFmdHpNmCZek4SuJ+9h7BTpYc4drhG6sHqE9M0hJwrYrXPT0I3esA8AAukKVBcA1LJmsnvlbR1kN2M+AXD1ITMVYLr8fJkqqKkKorM6N9zoZoIQ6dPHT1sb7V2mjutDQqrWe1NiCu9BPuMcQDG4BkldVyX4kdBGpiZcqesy+0e+TW1qAjv9sDO/mG8ForagpKN+iVRk7Zb2zSFEzkSpyaVYrIsIv7n9+a5SEiLdxJqZiArpBVcPEjt7c3jO6OvPmIGjS8b6UAyuSDmaRuyje/gDqQe6FGGEdNGZSj+IO72wu5D5lihsadG3hdVG5pWJUyyjimMlmLRUe1JFe5YrG5JdpPtODqMg2q1z5LQpJImxPCZaJUQo2SC5JhSDK5Iw5cO7KWZSejgPg2vil6xdwgJ8WbXuzhu9YT8A+jUSfmmZQWQsiMaRkkmVNm1Zxxpy9GU9SBpx6ru7OGmow7IxrvqZkKKgGFyBpLC575sf08P1R4v9EdKII5FnLdXarUK06R3xV7Y0b9EcCjBeBNFBFaJpGc3NT6IgGlThfxeJJ0W62Pvc4IRsGJ97a0AxuAIJA729X5BMD9eXjNHAUwUMyvxdd3phN5KfdxSC/goTL9ZhBuAt4SHAOO0/jgQdUe91MOYpXmcQGUPhoOxjAXXttM1e6w2MElabotPFRQdi6gzFYEaSZ//6DVWXYf4x8UOW2sAy3/Su33u8JSoYiEIf2Tt403Ap9KYCTC+bNQAgL2F82cH8pqlFZAtKdeAv1X0iokaB+uCgjBHgTj/szF/PQ1H4NMXbGSWsMEnp4hbaH/q8RhNLtDba3TJvnsoKxWBGEn4IXotYU7jCM0xeUW5sD/dTPkgPW2gPyiYIrgjAHaS3IUliBmAiwLhK3blXu58jSFdHGF2KxNIKQ72h2UeKTYCI+sR+Y1MAACAASURBVKyqjU5NJkW6OI/n4NS0PgMiq0ExmIHEqJzn9GzCjojp4Qqib6wHSH54lq5L+E0KWMkAbiKAh1XvuLVx2SmtgL4WiC7SzieA7JctlZx0r3qDyLPWtdagTOdOkklKF/vOkCXZuvmOTtYRisEMWFvbPVvJaNHwH5a30HizYmSotSpVNHBze7gDyGDNGsA33bQLUeOmpgwdN9Q8VcCoLBtCXVIzQoqNjgJ2ynLeJB0JWTLv6drN3nAKcxaCz8OMUAympOidSNE/POKODE0ipYkGdnphN8J8oIABVk8DnwhwEAFjPvjjudEb9iHYWbPe8lRE7QfXPhiV4Z6QNkpY5jpY8j5J9fO+07VJmTrfVjd1g2IwJUXuQpKEKP2VqkOGtPBJC+2doqOB+oY7QEpPufcQeVaFjtgyciUNv4PVooYzAActtMOiryMtHA6QtJFg2rhSJAl934KsyBr+ukExmIIEMeY1KpeiaYQXfEXQwuoACWnhMkRI9DU/wCoihALQOcv7wGIHgp0V0/OHCgiLjMhmiIifRkG0w6hO+Sn6+VR0HX+doBhMgS0q6PvBnbTzYqFsNUguuAZQAt9ALQJDZE8FHwIyogD0T6cfdqLXPw9WbNw5AWS/yExCSkP1GSC7zHiUn6RpWN6bSey+uwyWpIRiMIFCo4IJTSNliCARO6mjIQWnx1YUgacCjAK0R9yQFMMVS58BslnXnAISFiW20pZL0CakGiQIskKfk4wOpoNiMIEio4IJ9RD0FCw5WgiOkfDAK9JvbSURKPIMUKPzo70DX+dFsrNiar9QUZgwzWkJ6whLT9GTQRKuI0YHU0AxaKHIqCCHclcbXTA/RkIqrChLjRVE4EwJRm3V3mcUsNzoa28X2Zp+ThSwW+C1mGSxdNLaaPcpCMtLkSVNjA6uT1D0CZQbFZqOCLDv88akXfxNHFIIlpcbvWE/hRA8aW20u3nfoG70hv2lX6b6HumE4Ckgn7Q22t1XR3u7FILl58cfvpmcH+8NWhvt3wjwJZZdxUncFeDfN3vD8fV7j9+dyeyV8+OvRlEQ9QGcWt52d3Exn+Z9biQ9wUZ7H5bvcCELb9kPfV96ajouQOhr7brAyKCBIqOCSVYy9E8qL8k2QACAp62N9m6eUQ69cx4hfQqx0PQhccebTuRskeD8r9FlWcUB7NfoLAqiPu9/5SSpmcRnhI7RwfWgGDRQVK1g0txF0Fm9tKTpGM67PrDTDzvRxXw31WiwJRSBNSZjeUAhpuep6ghZJlNaivT+Y+3g6jBNHMPyhmm8Wc50ONwL0cV8F2YhOGtttNlZV0I2e8NRghCcQfBxng/Wze3hzuJiPkkpBE+XD9i9Lh+y9eX8+KvR+fFeF5BPYE/LAsAtpeTbzd5wcqM37Ps/uyXLza58Yn+X+l7fp0nJUPaU7AOf31sLbevaeV7HVaNV9AmUkWu37x8A6MQdE+BfZn/70198rNvph51oHv0ZwEbea5PVSRHJmEVB1H919PU4j/Pp9MLuB7f/cADg/4bhOr7CKSCfnR/vDX568Zypt4bw04vnk59ePN/fuH1fAPwehnuO5h8EGPzqt/d/8+vf/fH4Yjq+yOP8rv32/gmAf7ac287Gb/9p9vrFX499nw9Jz08vnk+v3b7/IQBTfefvf3rx3Mum+OLF+My2tgDy04vndEGIgZHBd9jcHu6goKjg/PU8hDkqeOpzbbIaKYTgSQvtrbxqnG5uf76rLR6SagNnAnzJSGCzeXm8F7Y22l3daGJFFD5dXMyn+h7pnfOjvQPdWGJsgNGRy1Ee50PSoyN0pu/tToHRwUedXtj1tXaVYWTwHa7dvv+vALpxx7xGBXthVyH6f83vkM9e/u1P3AGXiFRCcKPdP/tb+F++z+WXaKD8n7BHeYBlc8D/xigzAYCL6fji9Yvn41/f/uNTJepDAP9oefsGgP/j2m8f/P7Xv/vjX3xHCX/+z7/+1wf/4w9/ESXbAP7B8Lata7fvf8iIT3m4eDE+27h9fwNA3/CWj379uz/+q4/rJyk6qBD9htfK+zAyeAVdT2CKqHiNCi4wDy2HTxm9KRcphODTvHzRMkQDD6Mg+v358R4NfMl7nB2H0/Ojr3YU8BGS6gmVephXlPDHH76ZtDbafQAnlrc9YoSwXOjnpSk6eEvXx3uB0cHsMDJ4hWu/fbAPw65YCf6fl3/7k5fdhI4KGu1IFPDxTy+eT32sTbKTRgieH+8NfEdNOv2w88E//OEvKaKBM0D+r/Pjvd2f//Ov3qOUpNr89OL59Eo9Yd/y1mWU8Pb9D3/9uz+OfV7vF9Pxxa9/98c/q3n0z2CEsBJcTMcXCdHB33uODn4EQ5YPiGavXzwfu163yjAyqOn0wq5ltiLaqrCo4CG9kcpDWiHo/TyWncJTJEUDRZ61NtqsCySZeXm8F7bQ/hDAYcJbHy0u5hPfhtBn4/CstdHuL8chms+FEcLyoC3YTFFmr9FBW1ezAnY7/TCpua5RUAxqEgTZU59jdGARFwlt+iRHyiIEb2wP97Wxq23CyakCPjo/+mqHKWGyKmfH4fT8eK8voj6DfZLJnSAK/n5z+3Ov1ldn4/Ds/OirHVimTYCCsGRIaDriU5TpIIppI3NracROLqEYxDLdBsB4YSTUH6wFo4LVoAxCsNMLu5u94UQUPk1469PWRnuL1w5xxcujr/dbaG8hIUqolHy7uf3kwHfURf/WrILQtzAl6dBZiUKig4CMzMfM42abCMUggOj1zwOYoyyHjAo2mzIIwc3t4Y5uErlredsMgo/ZIEJ8kDpKuGwu8Z42ThKES9sZGlOXg2KigwlC9E5eNklVgGIQgFJi3Jn4FGSMCpafm71hiIKF4M3eMExMC1/WBh7tsXieeOXl0df72v/P1t17J4iCsW8xlhwh5KSSMlBkdFBEmev9FRg91jR+NnHCYO3T5egm93CodvnRc1yNXd7wLAQ7/bCzeL0Y2RqbgPznHRNyyY3t4X5S2YISfPfqaM/rQ3dz+8mB7XfC+2nxJNxPZ62NdtdHRqPTDzu62S52M91C+0Nf2b8qwcigdWdgDm2vC6OC5WaZPihQCPbC7uJiPk4QgqdREP2eQpAUxaujvV0IPoYlbSwKn272hmOfdYSta60BLJFKAQ58p62JnaKig2fj8EwJRqbjCc/ixtBoMahr9owm062NljdfQbBWsLRcv/d4C8p884BnIXj93uOtxPrAZVo4tzF3hJg4P9o70M0ltrTxg8XFfOzL7PeN7Yz5HG4FUeBVkJI0WGsHB75WTbCG2+F10XAxOBfzTkQJRr6K8G3rglHBQun0wm4QBWOY6/NOfArBzd6TQcL6EOBLWsaQMqGbS7Zg7/C9u4C/xpI0gnBxMacgLJDEhg5P9Z1nx+HU4k9Jmxk0WAx2+mFHlHkn4stkOmldRgWLo9MPOwvMD2ARgvph44UrNTWm9WcQfKyNXAkpHcuNknxiecstn40lZ+PwrIX2Dsxp67uL14uRj7VJWmzlVz7tXtTIcqzxjSSNFYN6JxD/0BV55qugVNdFGG1sGBUsDv2QMKVmT33OGr6xPdxPqFE8iYKoz25hUnbOj78aRUH0e1jm0vrs8j07Dqe62zl+faUeLn9vpAh0dNB0bXize9H3TlNU8u6N3rDvY92q0FgxaN8J2HYQa65qq4sQ8AZVEMupHsZmjVkURN7Sspu94SihI/OwtdHusz6QVIUff/hmklxH6E8Q/vjDNxNlGSSwbGqh5UxRCCzPOo92LzabGfFYs1gFGikGdc2KMQLkK/qibz538l6X2NnsPRnYxJgCdnwJsZSG1t4ikoT44uw4nCbU8GEpCP2MjltmWWwpa/U9O4yLIdho78McHXzgK0oXXPtgZDnc6EaSRopBUcHAeAzWLtI1sUUj/dnYEDPLh4HFlBTyia/UfZIQFODLPGYdE+KLs3F4lqKxxNssYZ2SNK7NDuNiSLJ78RWl05tq0/XQ6EaShopB84UWoD3ysabe6ZiikTN90yI50umHnSAKRjDXcD719b0kRwTlEzaKkLqQZpawP0G4N4B5pvKtxcWcGZkCSGjSfOTLhkhZAz7NbSRpnBjUqdrcG0dsOx1r/QTxRkLDyKGvqFwaIcjNAakbKTqNvQnC1kZ7B+Z09QM9dpLkiH7WGjcIEeYDH+vqTI+xkaSppQONE4MQc1Gxr8aRJJNpXT9BcuTm9ue7loaRU/3wcE6CEJwp4CMKQVJXltd2/oLwbByeRUE0gKFOTQFf+OpiJWZsUTqFghpJLGVkdaZRYrDTC7u2jlFfDRwJO5ynbA7Il+v3Hm8pJd+ajvvqHE4SglEQ9WktROpOUYLwxx++mUAstWgKI9YP5ou+3xlT+L46vgP1gfFZbysjqzONEoOR/Gzc+dmKWdfFtsOJgohRwRzRdYIW0S+f+OgcTiMEaR1DmkIaQXhz+3PnkaHzo70DJfjOcJj1g4UgI/MxPzV8SRNJmhglbpQYVEoGxmMSjXysaa1RBA4pAPJlcTHfh9nex0vDCIUgIe+TJAiVkm99RIZeHe3tgvWDpSFhRJ2/Gj4Fs/BXtnKyetIYMZjgLXji72GsBuZjth0RcY3e7ZlE2Ulro+18F6qjGxSChMSQHCH0Y0xtG1mngC+a2kRQFDZLtyAKvEQHEyahPGpayUBjxKDVW1C8No48MBymnUyOLOtFjTecWRREA9d1gpu9J4OE2kQKQdJ4UgjCfdfibJkmtFiMRcFB08RAkSRYuvk0gzZGB5vmOdggMWgO+9qKSddhLnPjjsZnjSJ5nwXmIxjS9SIqdC3KtJm1Zdawn9pEQqpIgiC8FUTB2LUgTKgfvDN/PQ9drkfMJNXw+RJmVs9Bq/NI/WiEGNQ3kfg6MZ/egpaupATDTeIQnaqNj9CKPHt59LXT7+L6vcdbQRSMze+gjyAh75IwLeRWEAXOu31t9YOi8KmvsWgkDluGzk8jidVzUKmHTYoON0IMWn2DbEWka1CUuTV5m04v7CplHPU3a11rDZyulzDVRER9RiFISDwJk0ru+uj21f6DsQhoN5MX2trN2EjibSKJMFUMNEYMmsO9rY2WHysBW4jZkwAl72NLD0PgvE5QP6xMjUpPXUchCakbCePjHrj2IPzxh28mIuozw2Gmi3PE1khiK7taB7uTSHPG09VeDCamiD2YCyeaWzMylAs6OhubHlaC71ybjN/YHu6b1oPIM1/j7QipGwnj4x657jDWm7RYAcp0cX7YGkl8mUHr2u3cI5Jlo/ZisIgUcVHm1uQXlqkd48ih0/a1duhyvc3ek4EofGo4fOI6HU1InTkbh2c2+xdAfe+6oaSF9sC0HufH50NRZtC2iKTteV4nGiAG808RF2FuTd5Gm0vHpocV3KaHdeew6WExa6HtZbwdIXXm7DicRkHUNx0PomDssp7v7DiciqjQcPguzahzogAzaFtEUiHo+1izbNRaDBaRIi7O3JpcolM68UbPIs9czv9NahiJgqjPZiFCVmN5vzRbzrhuKNHp4tj0tAJ2m5IyLJIizKD1PbrRXcW1FoNFpIiLMLcmb2MJ+TvvHtYRSIP4p5cgIetyfvzVyOIH6Hx8nKW7+JZuSCP+yb3Dt+ldxTUXg/mniIswtya/oB8MhtnDsusyGqyL2E2j5rzMOSakidj8ABXwhcsGjx9/+GYiwJeGww/YTOKfKIjMNZqezKCtJVwNMKCurRjU4fwiUsS5m1uTJZ1+2FGAyQrg0KU4S6gT9DLnmJAm09po92Fu8HDqBxhstPdhSBvamg2IG6wdvp7Stklrul6vbNRWDFo7gApIEdNb0D+2ppEoiJyKM0udoJc5x4Q0nbNxeKZgjNDcWbxejFyuBTFuLO+wmcQ/trRt9PrnQd5r+upkLgu1FYNKiTlFjNbYx5qFmFsTAG+isrEpWyX4zmXtnn4QmOoEd1knSIgfXh3vjY0pXKUeuvQf1D6ksd6DCthtQlNBkdjStjbHjvUWzb+TuSzUUgzqH2m8+S9w4iNdW0TnMvmFIAqM1i4uPQVv9IZ9BXxhOMw6QUI88/J4L4RxQonad9nxq70H47jFySR+KcIMWjtNmDqZ+67XKxPtok/AB7bOH18dvUwRF4cu6DaIf3dNI51+2FlcGLsJT1knWB46/bAzv5hvAUBw5SauRLagVFJEZyrAFAAg6ixSMgHePChICWihPVhgPsH7pRqXHb99F+ucHYfTG9vD7+IM5UXh004v3GctuD9E1L5S8m3cMV0K5sMM/ADxWaY71+893qpr5qeWYhBQfdORhaixjxWZIi4Oy3SAE5eRuuhivgtD9DcKop1zRn9z51L0BaK2lJItAF0ADxYXc4h+j7r6D5R69yPiePDmXUrefM5mbwgsowYTJZgEUNNIyYQiMX/OjsPp5vZwAIV/izn84Ob257uu5oC3r7XDxcV8gJga4QXmIeBnTBpZOnAsMI8Vg9oM2oMYlDGgYkuOWlGwA6CWYlCS31I9NnvDM8QX95+eH+91Xa93/d7jrSAK/h57UOTZ+dFXta41KJJljZD6Pu6YAj5y9aC2fccCfKlTV8Qzy+jsYkeJ2hKFPswG73lzogRjAcata+0xy0LyYXP7yYGh03PW2mh3XX0PN7c/3zVFqFzeZ8j7bPaGExh+562N9m9c/9Z0Bui/DYcPz4/3+i7XKwu1qxnUtXuxHaUAxj7WZIq4SIzjow5d3qB193AcJxSCfrl+7/HWje3h/mZvOFnepNX3Om1XFiEIAHdF4VMo/NviYv7fm73h+Ob255xY4RltIh9X43XLZXexjjKarGZCV+uQ91Fifm77MIPW4tJQk4oHdW0cqp0Y1GHceCxt4+vAFHEx6M7B2LStcniDvrn9+S4MwsMyrYCswRUBOA2i4O8lFH9JPFBKvl1g/h+bveH0Zm8YUhi6R1vADGIPKvXQrR2IhIYDNKL2SBFm0GIJHC1ez/s+1iya2olBZSkcbl1rj12vV4S5NbnEGBV86ioq2OmFXaXiHwICfFnXYuIi6PTDzs3tz3ffEYCGaTKV4o4CvtDCcLLZezKoa3ShCM6P9g4g8iz2oMK+q7+1rj+OnYLC6KA/ijCDXgRR4yxmaicGYbaUOfQhzIowtyb2qGAL7dDVOgtZmIysT/WUArIm1+893trsDUeLi/l/67qsOghAE3cB9f3iYj7d7A1HjBa6oaVau4hPF9/RjV9OsEw4YnTQI3mbQWsB2iiLmVqJQdtFYQv7rkMR5tYEsEUFXVk93OgN+6adpwI4ZWRNbvSG/c3ecKwbc0wznuvKLQCPFpj/x+b2kwMKifU4Ow6nIvH3BAV84Up064xDbD0Zo4MesQRWbNnANTGteaeOm7haiUHbRRF5EINFmFuT/KKCRssakWfsHlydze3hzmZvOBXg32H+/TQHpR4K8O+bveGYonB1dJNHbBpXR/idYKlHfqAbGIljbGbQtpr99ZCx6cgCi76fNYujVmJQW03EMfPx8LYVkop5V0HWxn9UUAvOuIaFmU5JkYxcRgK1N1ydU8Gr8uBSFFJUrIYxjavUQ1dC2xYdDKKA9wZfiFGc3fHxe7Fn9sxexlWlNmJQR+niuw3NF9F6WHYk1gJUsjL6hu41Kri8llRsJEEAThzISKcXdjd7wzEjgal5EETB3zd7wxEbTbKhhdrTuGMWc/rsiPGzHtUxhVgKLKnilpK+6+X0fd40Ds/5ekVTGzFoj9JFY0/LmtacscvUD5a6HGdRQV1wHts0Qk/B9HT6YedmbxguMP8PUASuwqPFxXyqrY1ISvRYyLiU4l0d8V+b86O9AxiEgp5KQhxjs2nT00h8MDa8Xru6wdqIQVu9oI8RdFZLGaaIvaBTAbGiQgEjF2t0+mHHmGoSYycheYcbvWF/cTGfKOCLos+l4txSSr7d7A0nTB2n42wcnpmjgMYSkxUw+g7uMKLrHt2wF1sT6stipkl1g7URg6JgulF6idJZLWUsFxBZHUs9jrNpI/PX8xDxUcFDHQ0gFjr9sHNje7ivU8KsC3TH3SAK/n6zNwyLPpEqoG2f4iJ3d5xFB5e+g3Fr3HJpZ0N+wTaNxEfzVZPqBmsjBmFOQ3lJ19rC0rSUcY/eacfbj5jrd7Kt0Qu72uj4PVxONKkrl9FA09+QrI8CvmCUMJllFMkUuXMXHRRDRkLBMBWFrIelbjDwUMfXpLrBWohB247Al78glHFXQEsZD1h22qeuInbGWh9aySRyszcMGQ3MjbtBFIxdRbjqiiVy5yw6qCOQsWbXPsyQm47tPqzgbTKIac07dSoHqIUYtO0IfPgL6l15XCrRGsYmq2PaaYvEd/1mRdeAxkYeaSVjptMPO5u94Zi1gblzC1Dfs+M4Cb/RQV3HFr8ZVawx9kSsrQ+Au35+C5a6wRrNKa6FGFQixpSJj4iOrY3dWySywegddlzEaRZc+2DkYg1LB6CzLuW6cf3e463FxXwCdgoXyaPFxXxct85GV+joYJx4cBYdtFhaPeD34h4RZcwE+RBnUbAwlpp5nH6SO7UQg5aUrWkHsd5yCEzroXWtPfaxZrORgeHAgYuRcHo3GZticDnRpE5s9p4MgigYg2nhMnB3gTnrCA2Y630dRQeXm8XYZ81c2EjiGps7iA9xZptTbGlcrRyVF4N652VK2frx+rPVC3JerVM6/bBjsg2IgshJitjiK8ioYAxL3zv1PQy/O1IIt5ZG1awjfBedHfJaOwjIKPZVb6PSmktB4sykJWqTFam8GLR5/fhI2bJeMF+i1z8PDIdOXFgG2XwFGRV8n83ecKSUfFv0eRAT6nsKwjiMtYNOInc6Hc1GkvzIVZzZtERdIvKVF4NKlPGLaKm288gg6wXzRSkx3KzFSVRwcbHYgcFXkFHBt9nsDUcw2fuQEqG+v7E9dDd6rQZYOovvuvKnU2IyvjeWuZAVsT1rffgN2hpRfYzCK4LKi0Gb2bSPh7lS5mYV1gu6Re+4YhtHbKOJshFfN0RfwbehEKwWovCp/s7IG+KjgyKmDWc22qodL8CVesiOb7fYxJkPv8H2hjmwZNMEVaLyYhA5m03DfKGdsl7QLaKCgeGQk8YRvYOME5sn9BX8BQrByvKIgvAXjKlcpR666PrVwYfYcWk6A0EcYfUbtLiLrIp+3pjMpykGi8aWq/eRstW7O1P3pPP1mo6x+FrczH42RwTcpKDrAIVg5aEgvIJpZrGrrl8RNYo/4qY2kbxFvFuIucFzPURMAaa7XtbLmUqLwSBqGcWgj07i+cXcLD5F+YpENhKLt6CTiSOdXtg1dCmf6ghC46EQrA2P2FSyJEB7FPe6KDfj4yy+p3fpOegWyzP+lo+/tSjzM95HnWLeVFoMClTXdMxH84itFsHmfURWwBAVVI6ighHmg7jXTbNGm8bN3jAEhWCNYJcx8CaV+zTm0C0Xf5+zcXgGkWdxxyL5malih9iyfzaXkVWx1SkKpOt6vbyptBi0GEz6aR6xiEEXNifkLQxiMBq5+HDTeDtT5KBJbPaeDDhero6o7+tig7EOyrjhUwNHC8RuWJViV7FLbAEfm8vIqlibSDyslzeVFoMwF276Emam9bxMOmkqOuQeZ/dy6kJ0G1PQIs+abiezFAvq+6LPg/ghiIJx0wWhxYTayfg4i9MBU8UO0ffq3MynbU0kdZhEUlkxqJs5Ys2fvTSPFDHppKmI3xSxKQUNmIq/m0GnF3b1iDlSX24FUTBqutWJiIptJDGVj2TBlir2kb5sOHlPBpkaXqcYLApbM4eCTF2vtxBL84gydhmRFTB1EbtIEeuHYFwtnJPGlCqzwPwAHDHXBO4uXi9GRZ9EkZgaPUzlI5kxpIpNG12yGnlPBrGs56VpJU8qKwYDS45eQU1dr2cLA0fBgmLQERajaScpYpPfl7OoY0XREytqYZFAUqDUw+WM6WZiid7dcSEijKliGlA7xZaVC1TQzXO9OebO18uTyorBCNI1HfNhGGwzsmTziDsso33GThYwpqDdNKZUkc3t4Y4ofFr0eZB8UUq+bXb9YHxZiMXsPjW6viy2lnzxet5f9/PJElsTiY86vkiiqemYj8kneVJZMWj5ok0u4euhjJFINo84RCnxZjTd6Ycdg7fgSVMF/fJvQjudptLk+kFdFvJeA4Irz0ERZYgOMlXsClsTic39Y1VszwkFdF2vlyeVFYMwF2xOPa0XO3mEzSPu0A+l2MJfF/V8phSxeWpA/VlcsE6w4dydv56HRZ9EgcTdV265MBEO1Aeme9ban03ewvQM7npaL3bkoMf1cqGSYjDvTmLbjSHwUJ/YVIzpE0NnXmYMKWLLTbvW6JoxX113pCKIwqd1mKCwEqaMg4NGDx21istUOalLJEssAZk7nqLeZ4bXK/2dVlIM5t1JbHMXj9hJ7AxTWF8Qjdf9bFuKuInegp1+2FFKwqLPg5SDpk7esaSKnaRyTY1pltpokhFbQMamFVbF2lFc4ZKLSopBmzjz0klsGXtncyUn2RAVLwZdjPpjivhttLUI08Pkkjt6BGETiRNsTqJ3JuGgEPTX/WyyxBaQsbmOrIot4ORDfOZFRcVgvuLMOvZu2TVG1kR7NMVZmzixlAFUP+7VJqaIb/SGfUOUlDQYBXxRda+0lTBF76Jg7ehg61p7HHtAxd+PSHasz3wlziN1toBTlWcUV1IM2mxePImzruF1RgUdYTH1HjtaIu7GftrEFHFTU4IkmYUsYidz1BmTYFOG+ehZ0M+juIaDW6wbdIP+G+fWUWwTn7ZAVdmppBiEUia178vmhZ3EnjH/aGW87mfrm+57KdEmGk1v9p4MYLieCYFSD5vWTGIxoL7rogZMSfyGlnWDTsmto9gWcLIFqspONcWgqQNSxHlU0LZ7C5Sxq4hkxFQv2EJrvO5nm9I9PjrPy8zywRY/k5WQSwQIiz6HvDE1qbkwiGbdoH9sHcWelowPPJkDVaWnqmIwFlHKeaROblQ/WgAAIABJREFUosD45UYNExO+0LvvuHrBmYs0rinq2LRZxNHFfBdsGiHJPNjcHjbKGNlYO+ygq9hSN1jZKFLZsAVmvKTjzYGnyn6nlRODthSGD1sZ24iZNtrO12sixg4sWT9FrHk/kuzKu7AidPphRwGNnUVLMqLQqAiyxROwv/Znm+sG7zSyYccDtsCMLaCzKpbAU2U325UTgzZ82MpEAuOF1MTmAx+YBLcLf0HT5sHFZ1cJRgVJRu40LTqIeEHhSrDFigdL4xzJgAoiY2TQy8xgUflGInOgcmIw70hd7jOQG4ip6NaFobfpenHhXVglGBUkmVFNu2biMxELLPq+PtvyfCEZyHu2vO3Z5CMSmQeVE4M2PEXqTF+sj7WaiaF25tXx3njtj44Xg7O8bx5FojuIGRUkWXnQpM5iU7OacmBcHAWL2PuND+uTBhMboMn7b+zD6DoPKicGLa3bsT5DDohrbKCtjCN080hcx5dpGHhW4jrPG/bdqbDoMyDVRIBB0eeQF6a6QZPTQRYsm89KCoeSMs1rIWugwoPRdR5UTgxaWredP+BtHlO0lXGDZXzP2t+nqXajSZYyOrJDX0GyKo8a1uQwjnktNiCwAnF2JLca9vf1ydTwerwVnSeUB2/DPKieGMzxD22bM8jIoBuMzSOyvk2QydS1SZZATYrsED9EmA+KPoe8MN13XKTLTc+MOebddT+bAJJ/6ZYpe9XN8yRcUUUxGBvlyDvaoxgZdIJpF+WieUSp+JICH/Ory4iObD8q+jxItVEN2lCY7jsu6sACg9uFl27XJmLp8PVU+1orDVBFMZgb9BjMhW7ci44EW9xnn3iaX106FheLplmDED/caUojiakWzLSxzIJJaFY1rVg2XAQQMmE2ns41Le2KSolB6w3JsivwAT0GnRH3w5k5EmxxZtNTB59bEVTDrEGILxpWbhCX/ltbDFo2uN11P5vYEUjX+Wd6mHhWJJUSgzZ87Aq4Y/OLpUHHX/NIzX7AJnRRuqvCd0KaFGWOu0es/VvSG9w414tKRpLKhq3DV6C6+Z2Jvfm0rNRGDHqia3g9fkg1yYSpQcdFc06ggm7c601pHonk5yY9vIl/bjVlIonPJhIYNrpVFA9Nx/acsjWflpVKiUHW8NULU1G2C9sek7N/U5pHlJJGPLhJfjTFINmUZXKRajR2FFdQPJSU3Iyn69ZEWikxaMNTDV98+N5cOEqyYDDndBG9M5mTN6F5REcZmHoiThHVjFSxacPoItVo2uj6qGlrKNOiT6Cq1EYM5klT6s58YxJstqHj6T889sbdiPT+4vW8X/Q5kFpyx1SLWydMtX2W6VepMUUG865pI+tjy0ZW0S6oUmKwgFF0xCeGaTKO5gbHFXxPHXxu6WlKOo/kj8nIvYa8fw8yT79KjSm1yGZFZ0wNrzvPlNTNUaRSYjDPUXTWHXDONjY1Ju5vvLawNxVjF+BQXwguZqkSEodC0C/4FPJiGvPa2oLC0vHaXfezSXPu8T6olhjMEYkC4y4wd3PL+nIr5rW1/7Y+u5TLjhbCtJQhflCqX/Qp5EEBooLdxDWiipFeikFSCD6Hs4vE31jr1v0VB+sFiWdu+fztlgWFeHN6R/YycabW3MB5xtN1a6pD97GWV6omBk1h+mmeJ0HWxzSc3UX0rsm2Mqb/7YS4YoFFv+hz8I0yzBF2RO03pUVhc6IwPXPIkqqJwVh8hPStnoYNEBVF4cJj0EQTbGXYPEJ804TOV1OnqJMuUYM1WRM6tUl5qYUYzJsmiArfmAynXTTnGARRrBlpDekWfQKk3jRhw+GzU9RkTWarUyfENxSDpBhMhtP+mnOmnj63bNwp+gRI7WlsBCsy1COT8mOqJV+TqeH1yv1GKAZJHWnkDdtRcTshScS5ANSR9xo9nNTkGrIfxmwJSY2thMtHPbWlRK1yv5HKiEFrJxB9/yqH5x32e515TbCV4UgrkhcN2Xh4ea4Ysx+GbAlJD0u4VqcyYtDWCeQjtWipi4mzBSAZybvj12djSlloQmE/KQeeUm6EkIKojBgsEbUXFUXCnd3qsJ6J5EUTLIwM2QTnY80IKQMUg6RWNMEQ10QTHtCE5EXe2YQqTq0g9YFikNQKUzmBzYyUEJINJcKNx4pwPjEpIxSDhNSHbtEnQBqCUixJIKRGUAySooirvWmKMbQv6DFICGk6sc8RH9Fsm0tF1TruKQZJmZgWfQKEEALAaFnW5LrkijCNfdVDNFvVyKWCYpAQQkhWukWfgG9MlmU2mzNCqgrFICGEkKywJIGQGkExSAghhBDSYCgGCSGEEEIaDMUgIYQQQkiDoRgkhBBCCGkwFIOEEEKyclj0CfhGOOubNAiKQUIIIeQdTLO+LePkCKksFIOkKOJc4jnvlBBCyDrETbeyTgtZlUCU8ZnVRnvqej2fUAySopjGvHYr75OoGbVP3RFCyCoEPqaFKDGWEpwdh1Pn63mEYpA0AoF0Cz4FQmqDjyhLU+A4O1JGKAZJrTDV8whUN98zKQCR2szJJOXGS5SlIZjG2QkwzvdMCPkFikFCaoIoxWgNyQdRtReDSiSuHiyu1pmQylMLMejJAmBqeJ1NDi4wRLGu33vMv++qNOABTcpBpKT+Gw+l4p4r07xPg5A8qIwYtLXzmywA1kHMP3o2OTjAFMWSKHAh7GfvvmDY5deKRjygSSmoWqdkmaB/ISkjlRGDhGTgfVEUv8uvFXxAk7yoWqfkiry/gXRQl2sKXrApZ32smSVmTqxQDJJSwV3z6jTkAU2K56ToE8iJ97JAPutyFZty1saWWfKROVFA33Cocr8RikFSCKZdsKOU/zTmtVgj0hpCr0Him9pHsDr90NumNOKGtwlUTthTDBpQkKnp2I3esJ/fmdQTn7tgS71nE5gWfQKk3jTh9zW/mMenci3PhbSYNrztjXbtRTYpL1UTg7GhV0uodmUU1NT1Z5JknDR6GGpDmtCpLEJ7GeKXqMF+eD6fC2fjsHLRpLLB4QKrUzUxyB9LTTB2hzto9DDVhjjqVC41C1Hjos+B1Bubs0NdCAwBBkdNWnGb0vccEEh2bMMFPF23xvWqRtXEYClgk4NX1v7bqiCK3TTYhorXhR9/+GYCPliIPypXGO8SR01acfZkjOhXkztxL1ZxmkxdxKBzcWar3/Dha9hQ4h4sd9f9UC2I3scyVLxWiIyLPgVST5RU7yG3CobSo7Wnj3AuMSkrlRKDFh+mtQXEu7B+Ixdi/8aOOvneu3H7qC0tI4JoXPQ5kHpSxYjHinRjXpuu+6GcS+wXyz2eYwQTqJQYLMtwdFoDuMEk7k2dfBmZxrzWdfC5pYd1g8QXrWvtcdHnkBPvpf9cmEI3oVSlpExdf6DNVcRF13neVEoMFkBsfQzTxG4wiXsXHWGGG3dsfUfd0Gly7oSJW0SeNSFjYnIdCFx0EhtKVZrcoV1HquhGUikxWID3X+1vfEViugHaOsLSYrpxN8UjUgkOij4HUi+aUn4QqKAb97qLCRYm6yxT0xvJjGm4wDTPk6giFRODpVHb3aJPoA6YboAuvAaN9jKQ7rqfXQVYg0RcE6gPGrHB8GoKreI3usamN+IEH0bptpR/FcV9pcSgDR92L5YHaiPSjb4xd/2uHxk03bhVQ2p2zo/2DkCLGeKOk6bMvjY0Icwcpcjjmh1Z0uGA3Du1Le4UVRT3lRKDNsNP1vFVlrgb4drd4frG/d5nN+w6aUQkh/hHRI2KPoccibtHrP1wt0xAmq772cTcqQ34qcmsWyNppcRg3jtTzifOhWnci45Gx8V9tqmmpHZEQbRf9DmQehBc+2BU9DnkgY4uvWcK7aLswlSLyJION+Q9DMISWKhkpLdSYtCG8lDHV6IaxdpiuhGabpwuPrsJM4oBdhUTRzSkixgAFhJva+XCVsYkHqpoQ1JGbFkfJ/We6ZnmuJYzqigGDw2vd10vZCsCNc2uJNkw3QhdpHNNqYEgajVCDAKAiGJ0kKxJc1LEpvtOS60vJoydxAw6eMfTZqZWz5EqikETzkPEVSwCrRpRsIhv9HAgts27QbX2Z1eFpqT3iDdOdTNSIzA2j7goUVLxzWuvjvfGa382KWL6SNyM6cqm/SsnBvMcSaeJ7ch0YX9CrIJ77b+vqYnExWdXBf03eFr0eZBq0sDI8vs1xQ5mfesRm3EuFLGDDYhTpq4/sI4zpisnBgsYSWeyP6lVJ1HBxKX+bzn6wY1jXrvraP5xJWihHRZ8CqSazJoUWTY1BYpSa2eILCM2mX1yR26G07bOZRf1pUVQOTGYe4eviEl8NqYr1TemH4+pmDsb8bv6xet5f/3PrgZnx+EUIs+KPg9SLQTYb0rjCGCuA3dhS2L6bJH1hSZ5E3mNxYfhtK1zWeUfsHJCBcVgvsW2LnaFxI4YpoW4qBtsoTWOPaCws+5nVwmlGpfuI2sSbLQbdc2Y7jcuavpMn+1ixB2xRl69dGuXqHPZGZUTgzbjaR8dvvQa9I9JsIla//vUhd9xdYNrf3aV0A80Uyc+IW+hBN81KSqoicv2uPrNsHnEI7Yxoz4CSDYru6r+bionBm1dXT4cwW0XUlPm3PpGf6dxjTqumoLGMa/dqWMRsA0FhEWfA6kEs/a1dlj0SeTJ5vYwNlMgotbupNa+pnGdp9ycOUJgHmHqKVJnWq+yDUGVE4Oa2FZxH6PGbBeS7QIkGTF07LmJvsZ/diQ/NypVrKMQ7CwmVppWKwiY07gLUeN1P7ulJPazq9poUEZs7h6eruWuaTkPa+VCVcXg1PB61/VCtguJ9jLuEETjuNddpP5bG63Y3b1CsPZnVw12FpMEZk2rFQQAia8hnrnwmjXdZ6rqR1dKlDEw4yv6GmcTVGmBX0kxaPmDx35BDoi/oMwXIMmIaQfuoolEC/r3w/dKPWySxQywTMkL8GXR50HKiuw2LSqo07hxzw43Ztsq3uS+da09dvL5BDCXFE1dL2QbZ1qA9Z0zKikGbX9wT3Nnp4bXfRldNw69A4+rG3zgQrCJ4cbeJIuZS3TkJ9ZMnTSaw/Pjr0ZFn0TemNK4pvKSLFjqBU+aJrp9YXvme7GViQLj88iFDVFRVFIM2v7gti9qVWwXlCfx2UwMdYMuBNsiiOJ3+Q2zmAF0pFQwKPo8SLmIgmi36HMoAqVkEPe6qbwkC5Z6wfG6n02WBCromo75EGe20iUVRJUV+JUUg7Y/uA97GdsFZbsQSTZMdYMuUsU68hjXeNQ4MQgAet4suxkJgKWVTBNnsWtHgfczPCLPXETuWC/oH6vnn8WKblVstjJV/g1VUgza/uC2L2pVbBeUjw7mpmKqGzQUd2dGSWyq+JbJVqLutNAegOliApw2zUrmEqOjgHJWL/gw7mW9GSMOsHYSW6zo1qBreL2ytjJARcWgxvSH77peyHZBsaPYHZbonRNPQCXRKP5AM6ODy+taGpkaJL+ggEFT69d8pogtm0xG5F2Sfyex6Zlf6d9QdcWgGCeD+JoZbOoophh0yzjuRReegLZUcdO6ii85P/5qxLnFzUWAL5s6BcN3iti0yXRhZE3eIrdOYv2ciGsIqnzqv7Ji0DYz2MdkCZudTVOFhBfiU7lQSrymihcXi0ZGBwGgda01gMHIndSak5fHe2HRJ1EUc5nHR8VdpYg9GlmTJbahBCJmjbAqec9AzpPKikGbueMc867r9QLLWDrbBUKyYfHecmIxY0wVSzNTxcCyuzgKosb+728osxbajf7OTbXILlLEFu/C0yo3GZSNQMyZuUiJ87+ztZPYwwzkPKmsGIwkmpqOeekotlxYPtZrKkvbk/i0pYvonTFVrNTDps0qvsqPP3wzEVGfFX0eJB8UsOOpuL4S6IjS+2LNUYpYVDCIe92QmSAropS5Zt/HTGJbg2rVyy0qKwbz7ii2fdFsInGMKU3jKHonomLHbUWYD1x8flV5efT1Pji7uPaIqM+q/uBaF4HJZ1ONnHy+qSnNXQqaLDE9e09znklc6U5ioMJiUGP6AnyJs/j12ETilBZa49gDjsbHBeoDw6xiGjGfH+8NUIMbGzHyVIv+xqLvIY9iDs1cWL5YUsSzpotwD8Q3j4j7FLEmvkHV3NBaGaouBk1fuK8xcWwiyQGdvooVJC5SxWfH4dSQir7TVM/Bq7Q22n1QENaREy32G030+udB3OtKMHLx+aYUMVzNOiYAEppHDAMM1sE69s7S0FoVKi0GbWPibBfKGiuOTUeaOOPWJyKGdI2zRg/D5ys03ndPN5QMQEPqOnGiRX7jUSreW7Ot2k4ipsYUMesFnZJ780jUMq9XcVsZoOJi0DomznKhrLxesDBeYJxE4hZTKtdVo4dOB8XZqTxociPJJT/+8M0kCqI+KAjrwGlro91vqrH0VXTkPy6Fe+iiocbYmOIoBU1+wTTqD/DTzKEsmsLH2Lu8qbQYtHUL2bqMViWhaaXver0mY0nlOjGgBgBBfFpogXno4vOrDgVhLZhFQbRDIagxRv5l5OLjTY0prlLQ5ArmWn0vJS6WgM+sDp35lRaD+gZnMsv1FakzjbjxNfmkuRg670wjpLISbBjTQo2dSPIuFISVZhYFUZ++dkt0zVfcffr0/PirkaNlYjeqRn9TshI6exMXgYUSbylb0zO+Fr+vSotBALauIS9NJLaRM7YCU5Idi/nrXRd/a72ZiLNSuRVdGKYTNBAKwkpCIfgOQRTE/qZNGYKsbPaeDBA/qoxG045ZYNE3HRMP9YLW5pEa1AsCNRCDti4eH00ktjrFlhLn6zUZi1gz3tizEgVRbHRQAbuMDv4CBWGlOGlttLsUIL+gI0mxdjKWDEFG1CDuVVdik1xF9U1HjNZka2BrHrFNQ6sSlReDeTeRWOsUEfRdr9d0lPlG6iSVqx+Ycan/Rs8rjuOKIOQc4/JywmaR97HUAR+4+FtpsRmbRgzQHq37+eQ9zGbTXur3LOLTPEK1UlReDFongyDou15P3zhM5tPO12s6+vuNEx/OxJoCQsMRw+vN5ccfvpm0NtpboA9hGXlKIfg+lqggWmiHLtaYi6GsRORZHZoLyoQOAuRtNp33pJPcqbwY1OQ6GcRSoHqLdYPuMadZlJNUsRaccdfQHV0HRK5wNg7PtGcdR9eVBCX47vx4b1CXB5NLLFHBp66EmijD9CKOn3OOLQjgw2y6IPGZO7UQgxZxdseHZ5ytYJR1g+6xpFnuuqsLFUPdEKODcZyNw7Pz472BiPqs6HNpODNAPnl1tMeGpxjyiApaGkdmDruUyRvMGbiFqLHr1eYXc0vziHvxWRS1EIO27iFb19Gq2GoEWDfoHr17j41CmQfOZ0PftOPS0Xdubn/OB62Bl0df7yvgI7CxpAhOoiDqU3CYySMqaMpQCNDoGdAe6Rten/lomgosHsI+xGdR1EIM2ruH3NfxsW4wfyyNJI/cRX8ljF1bScjOYjOvjvfGrY12F2YPTuKep62NNq1jLOQRFdSZidgUIhtH3GPzF4Sn2c+2gRJ1+v3VQgzqHV6u5tO2ukE/c5GbjaWRBBHmAxdrWKKD9B1MQKeN+zptzCihP2YQfMz6wGRyqRWU+DnHLtcgv2DP9MnY07Ims+labX5rIQYBWM2nfUR1bHWDtrAyWQdD5M6hJ6AyjZOi72AqXh59vd9Cews1u1GWApFnrY12lzNuk9Ebcq9RwU4v7EKph3HHLJkMsg4SP+EF8OMvaAvs1MVs+pLaiEFbIefi9bzvej3bDVkZRhKR9dCRu7iok7PInY5AGnwH56wBSsHZcThllNAppxB8fH70FWcMp0SMdlHuInaWyOOJzfKMrIG5DMuLv6AtsGPzOK4itRGDtkJOW85/TUzRDy/RSGIuyjZF9FbB7DuIR7QOSs/Lo6/3dS0hLWhWRIAvWxvtLUYD07O5PdxBfGpv5jQqaIg8mp0JyDroKF1c1zaU5F8vWDfBXxsxqAs5Y6MQovxE6kSU8QLk9Ao/WEZHOfMEfHW8N4bIs9j1o4A3+gxcWtBEQfR7MHWchacttD98ebwXMhqYnk4/7EDFbxgF2HcVPTKaTAOn7O72hCVF7DFl24h6QaBGYhAAIMYCUi9+g/a2cnYV+8A2r9ilJ2BLtUw3+wc0os7Ojz98Mzk/3utrG5ra3UgdcqiAj86P9wZsQMiOLheJ6zZ1NoO40w87RpNpQ10zWR9R5iidj8h5k+oFgZqJQWvdoAe/QR2NNHUxMzLoCUuqx1l08Ow4nArwZfxRtc8ygNV4dbw3piiM5VIE9uuWfsqLTi/sKuCL+KOy6yrCqgVnrMl0a6PFdL4HdDDHNAUkNouzNpZIZN3qBYGaicFAfWD5IXqL1I0Nr9NixhM2E2qX0UEdSYhtWJm/NhaPkxS8JQp93cyrwdMW2h9SBK7PAvOR4dCJq9Rtpx92FGA0mWZK3w+R/JzrCDrAHoms42+1VmIwwW/QT6TOVrhq2VmQ9cglOjgOz4B4HzFR+JRif31eHe+Nz4++2mmh/aESfIdmdB+f6saQ3zAd7Ab9m4+t7zKJt1XQm8DYqKCrNDR5H9tkL3sQaDWs84hrmtGolRjUjA2v3/LRCWqrVfDVuEKSo4Ou0rg6ohD74+e4KXecHYfTV0d7u+fHex0IPq5htHAG4KlOBXfZGOKO5W9dxbsMCL5zFcXp9MKuKHwad4xRQX8sm4Li/RwBnPjYTNkaQG2No1WmfmLQEqlrKen7WdP44LpDKxJ/2KKDLieGtNAeGA7dvdkbms6BrMj50d7B+dFXO62N9m8A+aTCwnAG4KmeGNI5P94b1DG9VDSL14sRDNG69rV26Gwds68go4IesQkzyySwNTGXldVpHvFVaicGW9faY9MxpcRPpE6ZBaioYOBlTWKNDrqcGGJrJlHAFxT8flja0nw1Oj/6auf8eE8g+FinkuPngpeDEyX4TkcAO+fHewN6BPpjc3u4Y4waCZyN7LP5CjIq6BlLuZWSaORpVdOap3WaR3yV2olB/aM0PSwe+OgCtXWQMVXsF0t00GmTx8vjvRCG6yqIghG7i/1zfrR3oFPJW62N9m8g+FiL9EMUU2s4A3AowJcK+EjXAG69OtrbZQTQP9pTcGQ4fOhShFuaU04ZFfSMOUXsRZjpzX2suTVq2EV8SbvoE/CBAAfKUPypQ84jl+udjcOzze0nzwwX7Z3r9x5v1XU3UTRnx+H0Zm/4ZZylhCh82umFzoxmoyAaBFHw95hDd7XwdJaaJnb0pu9A/wfAMnozx7x7OULqyvQA2809iRmACaC9xUSdRUom7Y32hNGgYllczA9gsngxl3ZkRjeKGcyHhbWfHllGfuOP+Zo60oqCHcOS9obRilNLMbgIooMgCgx+U6oPH0PEl6ni2B2MThVTKHgi2GjvLwzeXwtZ7MNRJ/mPP3wzubE9/C6uiFx3Fx8wIlQcWvRPYdm9XwpG2+e00Z6yw7fc3Nz+fFepeIEmosKzI3ffn5ifF5w24h0ZwKAGfRk/K8vzwlaGVnWk6BPwxWZvOIXBif78eM95Sq/TDzuLi/l/Gw6fnh/vdV2vSX7hZm8YmgxnFfCRS5G22RtOEB95nrU22l1GCgjxx/V7j7cMEXpA5Nn50VfOSnOWolO+jTvm+r5C3ibhmernOd4LuwvM/8Nw+PD8eK/ves2yULuawSuMDa97MYM+G4dn7CouDl3TF+sxadnZr0QURAPDoVs6dUUI8UCnH3aCKBgZDs9a11oDl2spZRwvd0gh6BdbFzHgJ11rm1RWV0uZS+orBoswg2ZXcbGIMRV/x6UFzI8/fDMxj6rDA9rNEOKHxcV8H8axZO66h6+sFVtrGgURy358Y+si9lHqlbCmD3PrMlFbMViEGTS7iotFf+exBtEK2NX2EE7QkUjTWl9wOgkhbtFTRmLtXZTgO5fdw/r3a1yLDYF+STCaPvURlU1as+51xLUVgwByN4NOShVvbg8pCD1j6SK8pZtJ3K210d6BwdJEgAPazRDihuX9Wn1vOHzi0lwasE4XcmpkTeKJXv88MB3z1UWcYG5d66ggUHcxWETa1rImGB30js0gGko9dCnIz8bhmaXz7NbiYj52tRYhTUXXCY4Nh2dREDlND+syD8NcWtllg5h/lJKB8Zgvo+lizK1LQ63FYBFpW72myQB3h9Ei/2gT2NhmEig4NYh+dbw3ttQP3t3sDUeu1iKkiehNlcEnUnZdpmw7vbBrciUAcEgrGf/och6DGPdjNJ2UIm5CWUCtxWARHb5XzHDjuJXQIUUcsPzejc0kt3RhuDNs9YMAHt3c/pzF5oSsgN5MxQoDJfjOtTizTBph00hOzMU8V15EeZn20vQUMVBzMQigmFSx9eJRftYkb3F+tHdg2Qg8ct3goesHY6ORSsm3rBclJBt6ExXbxAHg5NXRnlNxpteLN7IGvmxCdKgM2LJ23jp6bQ4jttKvGlF7MVhEqlh3tcWnKYEHLrtaiZmWau0ipwaPs3F4FgWRsaEECiN6TRKSjs3ek4HJ7BlLc/e+y/Wu33u8ZfEU5PzhnNCb5rhhEQBw6KOjNyFFPGuKn2TtxWBRZtA2o2NbGJy44+w4nIqo0HD41uL1YuRyvWXkQIzp6SAKxtwIEGJHdw4bu3mjIOq7buLQRtaxdYkKbv0LiQ1z4wggIx8rJqSIvaxZRmovBv//9u4fuJHzzPP4721gRNYOKcGZtmpk0VVbdZsJysA57QjexHZkOFtHgqK7i0RFdzvClHssSneZqeicGZM5MyZzZnB0pWFmMNtsyfIEDglxVMUZgf1egAYHQxH9B0B3vw18P1Uua0RIbM2A6F+/7/M8r6RCtoo9Vbuzv6cy+Z74oW+ffnGgWfV8S+4ulqTzo8+7EQ0lb11qxMgZYIbwqLm+cmoYkaK7h63RV+uyMlS0WsPfiVqhy6x5Z827iCfWIgwWsVUcLmfPaip4KxygihyEswdnbt8ue7UubCh5NOPL711ejPoEQuB1UyNkbgwp29EDAAAgAElEQVSCRnq47EBw++79ekT38CkzBfMTaNSO+HImdXt0Eb+yFmGwuGHQUcvaNJLkZRzMZ2/fRnUQzuv8aL8t6XjGlwmEwJRa069Fj5DRo/Aha6nf0wu8mSGD7eF8Wc3eMQu8IJOazSKGW7tqLcKgpEKGQYdPsbNmDtJIkqPzo8+7EQ8EmZwnHBa5RwVCitKx9qaC4KzZcofhw9VShTXDNzYrGOkh28P5iWkcOc5qha6Q4daOWpswWNQw6KgCVBpJ8lXZqLQ14z2QxXnCZ33/LAyEs953HzGUGussQRA8Dsc2LdWbu5/tRWwPHi97FRIx7My5sJJMJg/NRQy3dtnahMGihkFX7eyRBMaqzVZhfmKOj8vkPOFw5ExTBELgNQmD4NI7h8MxMjPH1gRe0F7m90O0MJTdON9R0jCq5n8RRQy3dtnahEFJhQyDjmsk4USSfD0/2u9bo69mfDmT84S/++bLAYEQeCVBEBxmEQTj6gSz6FZGtJgdsl5WdZuFDLd22FqFwcKGQRtFPGXMnIOHjIQnF8ys5dva7Sz9qZBACIwlCYJZzBKUpMuLUU+za9MecfZwvmpNvxY1aq2iqp/F9y1iuLXr1ioMStEdQjGt7XOLCaHvLrtWDfEqqs48LcRYfZLF6J+EgXBA6QBWVdIgmMXqXNgkNms78riyWaWGO2dhN++sDvLsQllk02g2w61dt3ZhMKqGL6q1fVFRNQhG8rP6vrjZ2ZF/IhP1520PsjidJkEgZOwMVtLtu/frlxejgQoIgtuNB+2IeYLDwAsYI1MAa2eO/IrZUZtf+Nk668zrzGoUXbd2YTCmhi+zmYPexq2uGDPjlPOn+72o00K8wMsklCUOhLwnsCKmThaZtTWXWRCMOd5O1AkWI9x9mfV+OA131JYuaragMqxRdN3ahcGxqGXgqLMR5xfTzaxLjfwsvi+ihSMkIhp8slmlSxQINRpkdXY2kJft3U4r+oi57IJg3Kkm1ugr6gSLMrtpM8tu3qjVyKyGW5fBWobByJmD1v4yqxWZmGLYj1gJKkY4xyz34dAJAuFbXuD1szshB8jWduNBW1Z/0uwgeFxRtZ5VEIw51eQwbCZDzsI6+ZnjZMKdtKy+b+7DrctgLcNg3CpdVo0k4zq1madgMIS6IOEswLYK6PRNEghl9SfOskbZjH9m7B8iXjKeI5hRk0B4wsjMocJZDLNGMlF18kY6yGycTGRfQDbDrctiLcOgFL0cbBU1DX0x1kY0kjCEujDfffPlILqhRB9lFci+++bLQUXVumavTkqyf2D0DMqg1vRr241OX7OL9KWMBkpPbDc63YgTRoaBF7TWtTasaDFDpuWp2s3w+9I4MsPahsFwOXhmrVhWN/7wvMuZ3ze4YHWwKOdP93vG2E9nv8L+Iav3xdmRfxJzlrHE6Bk4LuwY7iviZi/p0fnRfj2rMPbm7md7igqiRu113g4sWkx9/KOsVopjdvzWtnFkYm3D4FhUI0k2J5KMv+3slnkr7XGzL863T784kPRo9ivsH7KaCzl1lnHE99d7lxejExpL4JqpRpFZW7Nhw8Z+O7NraDxoRxw1J8l8nFWXKuLFrM5lNmRaih4dt86NIxNrHQbDLrKZ416yuuHGDKFmdbBg50f77ajaTiP1snpvnPX9s/Oj/XbEkXnSuLHkr+EKCFC4rd3OQUyjiCTzcZYNG+NV+8gaRU4YKVjkqqAxj7NaFYwZY7PWjSMTax0GpXGx6qyveYGX4c3W+LO+wupg8SoblbZmb9m+5QVeP8vVufFN03wc9Rprze+2dx/0eK+gKLWGv7Pd6AyM1ScRLxta6adZBrFkQTC7FUnEi1sVjKqnX5yNuJevd+PIxNqHwZhi1Y+yutGGH4ysDjpqasu2sEB4fvR5N/CC9zV79Vqy9peXF6MBRxoib9u7ndalIk8UkcLRMWGtdCbih0pz1JwLYmoFD7N6j4SfjTNPvWG1eGztw2C4LD2zRivbUMbqoMsSjJzJPBB+982Xg8pmdUezm44k6V0j/SU8exXIVNgt3I3fFtajLEfHSK+dbDJ7jmGGXctIJnZVMMMjWaPGyUTtDK6btQ+DkmSlbsTXMgtlrA66L+lg6CwDYVhH2IypI5SVfrPd6HBqCTKz1eg0w/OFo8bGyBj76fnRfqbn/RIEy6OoVcG4EJrVGJsyIgzqatzLzO3Ay4vLDIeTsjroOhcCoRTWERr9KuI6JOk9L/D+yiohlqnW9Gtbu50DI/1FswvxJek08IL3w678zCQIgsOKqswSdECRq4IxBzlkNsamjAiDV6KKSK2f1XdldbAcXAmE50/3e/EDqlklxPJMVgNjmkQkYx5XNrM5Wu769SQ565gbvRsKWxVs+jVjGSeTFGEwFBPK3s32ODBWB8vAlUB4duSfnB/t1430MOalV6uEvIeQ1qQ2MMFq4NAY++n5088zX4nbbjxoh9cTGQQZFeKGsHmjkFXBcCFl5rnUvEdeRxicYkxUR1p2Q6jjVgdHLyKfrJAjVwKhJH17tO9b6aea/d6RNF4lpOMYaWw3HrQvL0YniqkNVNgtnPW28OSaYsbHEAQdE3UGsTJeFYw8Vjbi4Id1RRic4m3c6ipiCHW2N9PZq4PG6pOw7gIOSBgI/5rtavLY86P9fmWzWo9rLlHYcby9+6DHewmzbDU6zfG5wvYPiu4UlpEenh/t1/PYjiUIlk94v5x5LGGWq4Jhnf+s9+8pp9D8EGFwylnfP4tqNY95yllIzOpgXN0FcpYgECrLs4ynnfX9s+dP9/eSrBLK2l9eavSfbB1jWjg8erIlHHWusCQdB17w/rdH+372VyZtNzpdgmD5xIxteZTl7MnoOv/ZCy/rjDB4jbdZjXoDZ7o6GHV2oqSP2OZzS9JAuLXbyWVLIsUq4WTr+IQj7dZbrenX3mx0/HB4dNyW8HCyGphX8BoHwcjrOiYIuid8CJ45jDzLM4hjjp47Zcj0zSpFX4BrLk76Fxt37v1E0o01X0b6yctnT7pZfO+Xz56cbNy591NJO3l/b8zn+799/fdbP/7gz8aaX0vavOk1Rmps3Ln3k3/4p3/tX5z0L7K8nouT/sXLZ0/+fOvHHzw21uxKejvi5ZuS+fnGnXsfb9z58OzlsyfcUNfIm7uf7QUj25P0M8147045rKj68+HRb3PZXqs1/dqttz840vjaZjmubFab519/fpLHNSGZWtOv2VHwR0mzdh4efXv0225W33/jzr3erO9tjH344tnXR1l97zJjZfAGMU8tWa8ORn7v7d1OhjMPMY+pFcKocS8fXV6M+nltzX73zZeD86P9ujH2U0XPJZSkd8db2p2TPLa1UaztxoP2dqNzYq35nWLqAiWdyuhX50f7uY1quX33fj0cbB19zB0DpZ0UdvHOWpkbFrgqOAz7AnADwuAN4o6oy7J2MKyjmPm9ZemCclF4bFxT0YHwvcuLUa6z/759+sVBeJzd7PfUK4TCFTYJgWH9XdSoGEnjBpHKZrWeZ7H99m6nFc4QnH1943mGBEEH1Rr+TlQXr5EOsn2omF0raKQD3jOzmaIvwFW1hr9zqdF/zvq6lX6a5RE6Ud/bSA/zKt5GOrWmX7u8GPUUXYQ/lMxe3rUr4akNB4pvEJg4lYxPjU151Zp+LbgY7YU36LhVwDFjHldsZS/voc1v7n62F65WRnl0frTfzuN6kF5MjeewslndySqQxXScZ/q9VwFhMELMG/vw/Gi/mdX3frPR8a30mxlfHlZUzWWkA+aToPBd1uir50/3c2/g2Gp0mmZ8Hnfs6lBoaKQDb7PKk3VJ1Br+zsiM9sITGJKFQOnQSn62XZ4/FD5AHSjBecd5zDPEfMLPlb/MfoX5OMsHy/Gq982faSygxCMMRih0dXD8AXmi2R/kPCE7LuFKx2Fls5gzVMMnaV/JQ6EkPQq84IDuTTdtNTpNY8yerP1lin/s1ErtvEOgdLVa3VV0fWAhK+lIZ7vRiarzPD4/2s+sPIZVwcURBmMUuToYN2g1yzCK5Qj/DA8UvTpT6Jy0OUPhsWQOKpuVHh+yxao1/Vrw4vu2tSaqcP8mhZYBbO92WrLqyuGfDSQT9+Cb9b2KVcHFEQZjFLk6KBX7tIXlCFc/eoq5URf9oTVnKBxK6lmpy4NJvsaTBUw75Sqg5EAt6NZu58BYfRLzMjqGSyB2F8uYx+dPP89sCgargstBGEygyNXBuDqMogMEkknYWCIVuG08MWcolKRTa9SzJuiykpON8MFiT1LUcVuzFFITOC3htrAkPapsVve4ibsvtmkkw/r2uCDK/TE5wmACcauDORTGdlXQDxuWK+GKyFBG7aLPzwwfRHwl7z6eRjBckq1GpymjlrFqKX1Al6RHLqzchluJvuLOPKZRpDSKXqyIbbRkVTAxwmBCMYHs9Pxofyer7130MjyWK2GtlKzRV9WNql/0h1n4MORrvtUoaXxecl9GvaIDbhmMf94vW5Jtav7f83EHuKrdoh8Ua02/dvnisptgO5v6wJKJKWMq9L7IqmA6hMGEwhviQDM/mLNdHYztTDX6FTfa8kixXVZYp+d1UyFlT/HXHeXQGNu7NLbPjX9sq9FpelLTjsPfQr+3kum60nmb9MFHDpRHIJ2YVbnM6+ljdlkyDaKriDCYQtFL0jFPYSyJl1DCbWNnVgknbt+9XzfWa6ecY3eToYzpG2sHgdR3IfRmrdb0a6OLUT0Mf03Ntw0/7dQa9aq2mvHpDsmlWA1kBaeEYhdHMt6tKrp0axURBlMoelk6rj6jqCHGWEyK1RNnVgmnhdffUszQ4BSOJQ2MsYPAmoFr/71pXAt+OxqHv3nq/q5ztos74TglSToNvKDF6nD5bDc6fc1+iMm8jn1790Ev4kGDVcE5EAZTKvpkkLiVJGYPllOKbmPJ0U7Lq21ko9Yc407inEo6MVJfxp4F1gyqqp64shJ2++79ugm8mic1A6OasapLqmuxVdPrhpJ6rtZehqs1XZX4PYx4cSVLWTcAxS6KcA+cC2FwDlEDLpXxySBhaBhEfP/Tyma1zodsOSXtuJQ0NMb6LnddTq0YNrWc1bBZhpIGkmSk/uRvBlN/LUnVzeog6c9FreHvjDTamfzavAp4mgp70vID33Wn1qhnpL6LAXAirn5sihOd8phPfO189rNvY8qlMh31tsoIg3Mo+mSQ8Cb7p5nfn+3iUgs/cHtK1khQ+Oy4JG7fvV+vWNO01rS0eI3cKhvXUCroe/ZWz5WVz1lSnXNtzOPKRqXNg2p5xWwPK/CC97Pc9i/63rvKCINzivmhyPzpJKZmgh+KFZBilVAq2bbbVPdsU+sdDoeSBkbql6mBJuWWMKuBKyB2ezjjmvnYEWsZ78qtOsLgnOLqFrLuZkrwg8F28QpIe9M10oG3WT0o25/7VqPT9IytW2smtXaLjFdx2bGkgWT6gXc5KFvzRK3p10YvRn6SDnhJrAauCBe2h4uu1191hMEFxJ4MkvWoGbaL10aKDk3JgbNnl2H8wGV2rLH1sEZvR9nWHi7TVcOLlTkpY/CbVmv6teBitGelPSV8D7rY+Y75FL09HDdKhvFEiyMMLiDuaSmPMBa3Xcww6tURrgYfKPkIl5UIhddNd+5KUrjVLOUbFo8lncmYM2PtYNLhbL3grMyh7yZpz6o20sMyrk7jZkVvD0uxYZRdsCUgDC4orosu8yem+O1ihlGvmLBE4UDJt1KPrbS3Tqs017uBJcl7FRoTWaQbeRWkDYGSDiuqttmqWx3hSUl/jXhJ9t3DMTtgLHgsB2FwQQlGveTQTBL3w8LZxaso5dax5NhRZXDTHCGQLeEVFTPGJa/FjkLvr+uiUvQFlN3FSf9i4517J5L+bcZLdjbufHj68tmTzH5gXj578h8b73z4vqR/nvGSf95851+GL559fZTVNSB/L589GfzDP/3r7zUKXijZqteOpNbGnXsfb9z58CzL9yTKpdb0a2/843/972/c+fCPGpch1BL8Y0Nj7L+fH33xby+fPTnJ9gqRt63dzoGRZpYgGenh86df/DHLa3jj7Q/+lyKuIfCCX33/t6//nuU1rAtWBpck9niejLdqk2wXB17QXLV6JoyF9au+0h0Jd2qMPfA2bnXXafsTr8zRGCKJusBVF7vblMP2cNwWNQ2Sy0UYXJL4g7Ozn4EUP+5Gx5XNapMP8NWVchTNxNAadau2ekC913oIb7R7Sn+e9KOKqj7vk9WVqA49hzEuRS+wrBu2iZfk4ln/bPPOPaPZ23X1N+7cO8xyO+Xlsycnb7xz70dGasx4ydt2FPzjy2dPKLZdURfP+mcvnz3pvnHn3qGRfqLx1nCcTSM1rIK9jXc+fH/jnXsXL589+Y+MLxUF2G48aG/cuXdgrPnfktKs7DyqqPqrb49+27141ucGvMJuvf3BnyX9l1lfN8b++/Do8z9neQ1v7n62J5n/NvMFRr/+9v/9ll2uJWJlcMlizi3OpQU+rug364HYcEe4Wuwr/Skfp0bqeqp2WQUqt1rD3xmZ0Z6xaiv9OcqsBK6R2DOmc2hGTDDgmqaRDBAGlyxuqzaPOodwC6gv6gcRCt+XbaXfFpSMeSyrHg8Q5THe6rtsSXZP853mQghcMwnKjPJZzIiZnVtR9Se8L5ePMJiBuDdz1u34UvyB3qJ+cC3N2WgyMZTUk1GPuV5u2t7ttCTTjhxEP1tpjzPEYhLUCeZy3n1c4wonjWSHMJiBBD9YmXdiSbHH5Ukc7L22prpI25rv1A6CoSPCG2hLUkvpt4Gl8KSaymalRwhcT3GlRXmEMFfum+uKMJiRuJW5HH+4+qJ+EBHC92pb6esKJ66CYWWj2idQZOtqC9ioNecK4JgxjyXbJcyvt63dzoGx+iTiJbnU6MXtqOWxMrnOCIMZKvpwbylR/WAu1wH3TY0bmXeFaeLQGNu7NLbP+2o5bt+9X68EXsuO/2zmqQGcoDEIVxKUE+UywiVue5iZgtkjDGYoQVdUTtvFbvzAoxymmg/amn+1cOJUUl8y/YoqfQJIMrfv3q9XrGlaeU1Z29Ri4ZxVQPxAkoWCPFbjEmwP59K4su4Igxl7c/ezPWvN72Z9Pa+C2AT1g9Rj4AdqDX8nMN+3rDV7mq+28LpTGTMwCvqBNQO2fca2Gp2mJzWtMfWlhL+xY2NslxNmcF2CM39ljP3026dfHGR9LWwPu4EwmIO47eIcn776it5ioqEEM92+e79urNc242aFZQTDiUNrNPBkT1Y9INaafm10Map7xtatNXWNBz8vsu173TgA2ls9VmExS9w9KY95guPriN61Yns4P4TBHCTYLs5lGTzBdYiGEiQxFQybWm6YmTiVdGKkvpU5sbIn1c3qoCwrXLWGvzPSaMczti5ranZ8MtGOlhuiJwiASCzJLlEeY8dcuS9ijDCYk7jtYuW0KpdgsCjL8kjlaitZXnOh7tbkjiWdWaOBZ3UmY88CawaSVFX1JOtAdPvu/boJvJokTYW9HY3/V1M24XjaUMb0ZdWjDhNpJKkfz+tAAhd2zPAKYTBH8Uvz+lUeBd4JgiknlGBu27udlpWaGa4apnEsadGVhTwCXpxja9SXVY8bJOaRZCEgt3tQzLF3bA/njzCYowRdU8OKqvU8nvRd2SrAaqs1/drli1HToXBYFsfWqG+kPrMbsagkncN5NTOG1/LXiJdw7ykAYTBncfOUlNOAz4QNJXQYY6muGiikZlhHV9dyOmfLbNxhbe0gkPqs/GGZknQOK6cypSTXwtzbYhAGCxC3KpfXE1qS8yhFhzEydtVs8Wq0yo5WdwXxWNLASCeB1C9TUwzKJ+lDf14rca7c+/BDhMECJHk6yqt4NtHgUeo3UIBJo4YnNQOjmrGqK7uO3GV6rcElkPp5NLYA1yUoB8rtwIEEzSu57IrhZoTBgiSom3Dph1SMnIFLJtvN0quOXkkKt56vXqblrTAeXv2VMWfG2vE21nQnM6t8cEiSIJhXo2CCRYfc6uVxM8JggeI6qpTjk1KCDmMRCAHAfS59nifaqs6pixmzVYq+gHX24tmT/sadez/VeOvrJjubd+6ZF8+e9LO/lq+PNu7c+4nGBf2ztG79+IPH3//t679nfT0AgPTGOz36v1GvMcZ+en60//s8rufW2x/8XtLPIl7y6Pxo///kcS2YzSv6AtZdZbPakjSc9XUr/War0WnmcS1ho8hh1Gu8wOvfvnufDmMAcEyykh89yuPM4VfXEzvCjHp0BxAGC3bW98+sFHkGpJF6taZfy+N6wnB6HPGStwiEAOCW8WeyjQt5uU2HCK8n7rSTNnW2biAMOuD50X7fSA8jXvJWWHORubO+f1bZrDY1Pht25vV4gdfPK6ACAGZLMhVCOa7C1Zp+zQu8mBpAs8c8QXcQBh0RzlaK2qJ9b2u3k8vS/lnfPwu8IHL7WmFAJRACQHFSBMHcTvW4vBj1FDvkmmZElxAGHRJXP2isPglrMDL33TdfDgIvaEZdj6T3CIQAUIyEQXCYZxAMFy0+jHgJdYIOYrSMYxIcJp7bbCgp0TxEibMkASBXSYNgnveLBA0szBN0FCuDjnl+tN83xn4a8ZJc6/XGHyLm45iXsUIIADmZqslzJggmamAxahME3UQYdNC3T784kDGPI16SW0OJJI1rOwiEAFC0qSHOUTV5uQbBJOHUSA8ZLO0uwqCjKhuVtqJHvLwXHjeUCwIhABQr0WkekmTUzrNTN0E4PQybJOEowqCjwo7etqIbOD56c/ez3ApxCYQAUIzbd+/XEwVBmY/zXIELFyWiruk0bI6Ew2ggcdz2bqclqz9Fvijncx0TTrmnqQQAliBhs4jyPj8+wRnIuW5XY36cTey4l8+e/MfmO/8ylMzPI172i1s//uDPeZ0Z/PLZk8Eb79z7kZEaES97246CX/zDP/3rHy9O+hd5XBcArBpXg+B4ocJELwoY/fr50y/6+VwRFsHKYEmES/FRZzwOK5vVnTxX4hJck8QKIQDMxdUgmOS6jPSQOsHyIAyWyHajM1B0bUbuwWtrt3NgrD6Jedlp4AUttgoAIBlXg2Ct4e9cajRQ9HXldgYyloMGkhJJcGbwe+ExQLl5/nR/L0FTybte4PXHc6gAAFG2dzstJ4Ng069dahQ335ATRkqIMFgiCc8M/jDPkTNS4i7jtwiEABBtu/GgHTYNOhUEpasRMnGdw5QFlRANJCXz/d++/vsbd+4dGakd8bL6G+/c+9HLZ0/+nNd1vXz2ZLBx58NTSVEjBDaNNb/euPPh318+e8KWMQBMSTipYSiZ/5F3EAwXGX4W8ZJh4AU/P//685N8rgjLRBgsoZfPnpzEBS8jNTbufHiaZ+hKGggltfK+NgBwWRi2fhPzsmHgBc3nT7/I7UFfStYsaKVffPf0i6N8rgjLRhgsqYTjXXIPXQkDoSS18l69BAAXJZzMUMjMvvHBBuZ/Rr/KfPz8iKPmyoxu4pJL+MT20+dH+/1cLii01eg0jRRXaCzRdQZgTSU+Xq6gIJhk25oRMquBMLgCEoycKeSDJPloBGYRAlgv4YiWnuKD4HFF1dbZkX+Sw2VdSVi/yMP8iqCbeAWEI2eOI15SSCfvd998OQi8oKnocThSeJ4xncYA1sHtu/fr4ay++CC4WW3mHgR3Oy2C4HohDK6As75/5nIgrGxW64q+Nkl6j9EzAFbdduNB2wu8vyp+x+SwiB2T23fv12XVjXkZswRXDNvEKyThtmwhW8ZhbUxP0ofxr85/fhYAZC3hiU1SQatuCe8hlPWsIMLginH9hzlh15zEFgSAFVFr+rXLF5ddWfvLuNcW1ZDh+r0D2SIMriDXf6jfbHR8Gz9PSxpvk7T44AFQVuHncVfx9YEqalfE5V0l5IMwuKLC0S5/iXlZgSuEiTrVJOk08IIWH0AAymZ7t9MK6+/i6gMLC1oEQUg0kKys8VzB2POC37u8GPVrTb+WxzVNOz/6vBt4wfuKPmdZkt71Aq8/Do8AUA5vNjp+sjOGdUwQRNFYGVxxCVfgClshTDFrS6KOEIDj0tQHqsBSGIIgphEG14DzgTDdh2chA1gBIE4YsHqS3o17rTX66vnT/ULGsxAEcR1hcE0kDoQFBq0UjSVDGbXPn3IWJgA3vLn72Z615ncJXjqUzF5R47MIgrgJYXCNJAyEhX4IpCi4LvTJGgCk1DsbhTbEEQQxC2FwzZQhEKYbxcC2MYBipNkWVsGjssIJEz0RBHEDwuAaKkMgDE8sOVCyAdWFbrsAWD8pyloK38Uow2c+ikUYXFNl+XBIUYcjGfO4slFpM6QaQFbCCQhdJTpas/j65rJ81qNYhME1lnzwc7FnBafcijm1Uns8ZxEAlidNTbMcKGEhCCIpwuCaK0sgTFmkXfi2DIDVUcbPn4TnwBMEIYkwCCV/2i3qAPVpqbaNx5P923zQAZhXwsaLicK3hSWCINIjDEJS4pEDkgOngKTsNnYixAIol1rTr41ejHxj9UnCf+Swomq7yG3hsPGup/h6Rs58x2sIg7iSOBA60Kgxxwc1q4QAEglXA7tKVqfsxANnGAT7in9ILuy0KbiLMIjXpGjWcOIDJWVBt4z00NusHhR93QDck7Y2UI6ssJXtcxvu8Yq+ALjlu2++HFQ2q3VJxzEvfe/yYjS4ffd+PY/rmuX86X6vslndkTGPk7zeSr+5vBgNthqdZsaXBqBEtnc7rcuL0UmaJpHKZrVedBDcanSa4Y5OXBA8JAhiFlYGcaMUWw5OFExLV80lvhKuEkp6VNms7vHhCKyvlHMDJWlopZYL46uST4MovtYbbiMMIlLCrjQVPXpmYp4Pdk4vAdZTeIrInpI+QDpQLz2xtds5SFIz7cKYG7iPMIhYyQOhO0+fc6wSHgZesFf0lg+A7KVtEJFDOyDp6hrdeEiH+wiDSCTFdkShh7FPm2OVUNboq+pG1Xfh+gEsV63h71yay4MUDSKSQ+UkKY2x9/MAAA14SURBVMZqORNeUQ6EQSSWonPXiQ67iTDIHij5KiFbx8AKqTX9WnAx2ku1JezY0ZYphl8zTBqpEQaRSorh1E4FqjlGRkjSsZX2XLkZAEgvfBj0lXxL2LkdghQnLzE6BnMhDCK1FJ3GzhUvz1ErNC4at5W9Ik8WAJBO+LPuK0WZiByrHQ4/aw+UpGbboeYWlA9hEHNJ9SHlUB3hRNhF+Js0/4xrqwUAfiisFfaV7LNpYmiM9b99+sVBRpeVWppjN1176Eb5EAaxkBShyrk6lnkaTCQNjXTAKSaAW1I+oE5zpkFkIkV9tlPlOCgvwiAWluZIOGPspy49fUtX13+gNFvHDq4kAOtozuYQSTq0ku9aTXDS+YFy8AEb5UUYxFKk2dJwtbYl9QDasVPJ+DyZA/laIAQ6uZoW7lT0lOQzlEYRLBlhEEuTsmPXqfEzEwtsNREKgRwsEAJlpIculnik2V2RQ8P9sToIg1i6NM0ZLm4bS1crnQdKV08oEQqBTCwSAiU9qqjquzgRIM22sIsrmlgNhEFkIsWAVMnBbuOJuUbRjBEKgSVYMAQ6WRcopSytcXQnBauDMIjMpKyBGVqp5eKHtjTf4NrQqZG6Lm5NAS6rNfydQKP2nCHQqdNDrkt1KpKjNdZYLYRBZC7FNojzs/zCkwB8pb85jUfSqNp1casKcMWccwInnF6RT3sSkqtlNFg9hEHkImWB9HHgBW1Xt0QW3LaSpEeBFxy4+t8HFGGr0WkaY/ZSHhk54XQIlFKXzrAtjFwRBpGblNvGMtLDb4/2/UwvagFLCIWHMjo4f7rfW/a1AWURbpnuKeHnwjXOh8Ba06+NXoz8pLsjbAujCIRB5C7lUXBOrxJKSwmFp8bYA2/jVpcbANbBgvWAUglCoJS6AY1B9igMYRCFSLllUoramalQ2Fb6RpOJR1bqulr4Dixie7fTkkx7zq1gqSQhMPVqYAkeerHaCIMoTNpiapXoA3OB7uMJVguxEqZWAdua/+fhUDJd10OglH4cletNc1gPhEEULtWYBblfSzgt/G9rK/3w6mmPZNSjthBlst140JZRa4FVQMnhOYHXzbEa6PQ4LawXwiCcEDaXdJU8NB1baa8sH6ThakFb843LmDi1Rr2qrR4wngYuCgcp70lqab5awAlnTwy5STgt4UBJVz5pEoFjCINwSjjH73dJX1+2LZZaw98ZmdGesWprsZvlsTG269lbvbLcMLGalrQNLJVwQPscpS5DGbVZ5YdrCINwTspjmiTpVEZ7ZfqArTX92uXFZWvBusIxYx7LqlfZrPTKchNFudUa/k5gvm9Za9qabyTMtNLUA05LPYCe1UA4jDAIZ6UcQSNJhxVV22VbKVvSFvIYwRAZWXIAHErqlWkreGKOh1VWA+E8wiCcNkctoYz0sExbTRO1pl8LXnzfttbsadHVwjG2krGQ23fv1yuB17LjGsBFA6AkHUvmoIwPK3M0iLAaiNIgDKIU5jgTuHRbx9OmVgsXLcSfOLVGPVn1ytJ0g2KEzRAtSU0t56FkaI261gTdMoyFuskcnz+sBqJUCIMojVrD37k0lwcpR1WUcut4Yqq2sK3FxtNMG8qYvqx6FVX6Zf29wXLcvnu/XrGmaeU1FxwD8zpjHku2W+ZAFD6UHSjFqmjZmtoAiTCIEgpXLrpKsWK2Ch/QS67ZmnZqjXpG6lc2qv0y/x4h3rj04rIp2aaWt/o3Udpt4GlzPniWatwVMI0wiFKaq35HGhrpoCwDq6Pcvnu/bqzXNuPtvGXezCXp2Br1CYerIePwJ61QberUkZJpGtdW5nMF64swiFILO/sOlG4LtRTnmyaVcTCUpGNJA8n0A+9yUNa6r3Vxte1rTV3ZhD9phQLgxBx1geMGEVvZW5XfA6wvwiBWQtoj7UKlOeoqqakg0NZyt5KnDSUNjNS3RoOKrQ64GRZj/DBUqVtj68aqruXVld7k0BjbW6UAKM19jvipldqr9NmB9UYYxMqYc+tYkg4DL9hbtRWvq+3Bxc+HTeJVQJQ5sbIn3CiXa6vRaXrG1gOZnRyCnxTOApRMv+w1gDcJm0N8pft9ZEsYK4kwiJUzz2zCUKnOQ01re7fTslIzw+3kmxxLOpsOidXN6mDVgsWy1Jp+bXQxqnvG1mVNzY63eXeU45+XNeqv8giiOUOgtOKfD1hvhEGsrPBDv6v0N9KV/9C/tmrY1HJmGaZ1KGPOjLUDGXsWWDOwXnC2aiu01201Ok1Jugp8xtRlbU3Zr/Td5FRSf1VX/6YtEAJXrpwEuI4wiJU3V2H42MqHwolrs+aaKiYcXncY/v+JkU4kyRoNrNWZJFVVPXHlz+b23ft1E3g1STIyO0Z2R5Kmgl5N2dVwpvEq/K3JjMkFQuBKNZoBUQiDWAtTIyP2RCiMlVNH6rKdKgyN06zRwAsDZFp2vEW7c8OX6nIjMMe56gRfl/A3sUAIpC4Qa4cwiLUS1hP6kj6a4x9fu1A4UWv6tcsXo6axqod1bGUJQ+vkqoknkPrrWpu5aAgs47nmwKIIg1hLC4ZCaog0OaVhVCcgFuJU4+1zxvuEwpOJ9jRf7eXaPugBEmEQa26BVQRJOpRMl5qiV666YaXm1BYrIXF+Q0kDazTwZE8CawbruuI3y5xzAicIgYAIg4CkhUPhqWT8Ve/GXMQkJE6aKwruoHXNUNJg0lnNnMZ4C9YAS4RA4DWEQWDKgqFwXHOkapebTDo/GLfyeuNG2QPj613RazRGZ9kWLO+QCIHAjQiDwA0WDIWS9MhKXVZ3lmeyujj5tTeuU7xir/16yiJhcrxqd91kPuLVr8cBb/JL/tyXa8F6QIkQCEQiDAIRwlDY1vwrEWwhA3OY2gpua/7RRoRAIAHCIJDAEranhpJ6gRccsDUIzLaEBzDKNYCUCINACrWGvxNo1F6gcF2SjiVzwGohMFZr+DuB+b5lrdnT/KuAp0bqMicQSI8wCMyh1vRrwYvv2wvevCTpkYx650/3e8u6NqAstnc7Lcm0Ze0vF/jXcGwcsCDCILCgcM5ZW4s1Kpxao17VVg/Y2sIqu333ft0LvD1JLS0yf9KYx9baA5p1gMURBoElmbrJzVvrNHFsjO169laPYIhVMFVe0dZiK+lDa9TloQlYLsIgsGRL3EKWwlNOqC9E2UzVAbYlvbfgv446WyBDhEEgQ0uqiRoz5rGsetwQ4aolB0A68IGcEAaBHCypW3IaW8lwwu279+uVwGvZcQ3gogFQYhUQyB1hEMjZ1By1xQroXzm2Rn1rgi4rKMjD9m6nZaWmsWppOQ83Q2vU5T0MFIMwCBSk1vRrlxeXLRm1lrKNPDaU1JNMn5UVLMt46PplM3yvNrWch5hx6YNsl9FKQLEIg4ADllxrNe3YSL1A6jOCA2lMrf41teT3JNvAgFsIg4Bjag1/Z2RGe0vcgnvFmMdGQf/S2D7bcZi21eg0PalppaYWm5l5E2pcAYcRBgGH3b57v26s184kGEpDGdM31g5YOVw/GYc/iQAIlAZhECiJ23fv1yvWNDPYSp52aI0GRupXbHXATXw1TGr+rLH1DLZ9px0aY3sEQKBcCINACV3VGMprLrH55CanMmYwWT2sblYH1Hm5rdbwdy7NqG6s6uGqX13Lavj4oaGM6TP/Eig3wiBQcrWmX7t8MWpqvJXc1PK3k6+7CojWaBCY4IT6w2KMj0Cs1I3sTg7Bb+LUGvWM1KcLGFgNhEFgxUxtJ7eUTS3YLIeSTox0Ekh96wVnhMTl2Gp0msaoZqzq1pi6rN1Rdlu9141rSxX02f4FVhNhEFhxW41OU0atjGvFopxKOrFGA8/qLJD6kkTDyuumA18Q/r+kHWW/0nuTQyP1aSwC1gNhEFgjky3ljObHzetQkiZh0cqcWNkTSVqFGsVa06+NLkZ1SfKMrcua2lTYq8mRPwPCH7C+CIPAmrs2YiSPmrN5HUuaBMMTI51cfcXYs8CaG7ekFw03W41O86a/741/v66E27e18JeuhLybXG37BtYMCH8ACIMAXjNpSgjHkNSVb90hlo9xQQAiEQYBxCIglsJQ0sAaDYw1g8C7HNDAAyAJwiCAubw2zy7/Dtd191rndlXVE1b8AMyLMAhgqWoNf2ek0Y4nNR3oii2zY0ln1mjgyZ4E1gwIfQCyQBgEkJvbd+/XTeDVJl21dhwSJ/9bt7A4aYg5MdLJpIuawAcgb4RBAE6ZdO+aV6uKmlphnHCxZnEo6apGbzIqZ/LX1uqMQdwAXEQYBFB6kxXH63/fyOwY2Z1F/t2TIHf977OCBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AP/H2RrBRe/BicUAAAAAElFTkSuQmCC","e":1},{"id":"image_16","w":643,"h":661,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"MiniInnerBlue","refId":"image_0","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":141.59,"ix":10},"p":{"a":0,"k":[321.487,338.872,0],"ix":2},"a":{"a":0,"k":[320.941,318.661,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"OuterWhite","parent":15,"refId":"image_1","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":141.59,"ix":10},"p":{"a":0,"k":[314.333,309.488,0],"ix":2},"a":{"a":0,"k":[321.226,330.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"Yellow Light","parent":15,"refId":"image_2","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":141.59,"ix":10},"p":{"a":0,"k":[314.333,309.488,0],"ix":2},"a":{"a":0,"k":[321.226,330.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"SlightlyInnerWhite","refId":"image_3","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-218.41,"ix":10},"p":{"a":0,"k":[317.69,339.966,0],"ix":2},"a":{"a":0,"k":[324.467,321.456,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"TealRing","refId":"image_4","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":48.201,"ix":10},"p":{"a":0,"k":[316.456,340.074,0],"ix":2},"a":{"a":0,"k":[319.01,323.51,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Cart10","parent":15,"refId":"image_5","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":478,"s":[-360]}],"ix":10},"p":{"a":0,"k":[519.226,125.372,0],"ix":2},"a":{"a":0,"k":[508.226,107.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"Cart9","parent":15,"refId":"image_6","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":478,"s":[-360]}],"ix":10},"p":{"a":0,"k":[598.226,320.372,0],"ix":2},"a":{"a":0,"k":[597.226,289.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"Cart8","parent":15,"refId":"image_7","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[520.226,515.372,0],"ix":2},"a":{"a":0,"k":[506.226,473.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"Cart7","parent":15,"refId":"image_8","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[321.226,594.872,0],"ix":2},"a":{"a":0,"k":[321.226,557.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"Cart6","parent":15,"refId":"image_9","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[319.226,40.372,0],"ix":2},"a":{"a":0,"k":[318.226,33.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"Cart5","parent":15,"refId":"image_10","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[116.226,117.372,0],"ix":2},"a":{"a":0,"k":[135.226,107.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"Cart4","parent":15,"refId":"image_11","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[45.226,320.372,0],"ix":2},"a":{"a":0,"k":[45.226,286.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"Cart3","parent":15,"refId":"image_12","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[-360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[121.226,514.372,0],"ix":2},"a":{"a":0,"k":[134.226,474.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"Core","refId":"image_13","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[321.226,349.872,0],"ix":2},"a":{"a":0,"k":[321.226,330.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"Arms","refId":"image_14","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":478,"s":[360]},{"t":480,"s":[0]}],"ix":10},"p":{"a":0,"k":[322.101,338.122,0],"ix":2},"a":{"a":0,"k":[320.947,319.239,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"OnionRings","refId":"image_15","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[321.226,349.872,0],"ix":2},"a":{"a":0,"k":[321.226,330.372,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":2,"nm":"FerrisWheelLegs","refId":"image_16","sr":4,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[321.226,349.872,0],"ix":2},"a":{"a":0,"k":[321.226,330.372,0],"ix":1},"s":{"a":0,"k":[112.703,112.703,100],"ix":6}},"ao":0,"ip":0,"op":480,"st":0,"bm":0}],"markers":[]} diff --git a/HackIllinois/UI/HIAppearance.swift b/HackIllinois/UI/HIAppearance.swift index 50a7f3a9..b8db4c4c 100644 --- a/HackIllinois/UI/HIAppearance.swift +++ b/HackIllinois/UI/HIAppearance.swift @@ -13,6 +13,7 @@ import UIKit struct HIAppearance: Equatable { + let neonCountdownText: UIColor let titleText: UIColor let whiteText: UIColor let baseText: UIColor @@ -31,12 +32,18 @@ struct HIAppearance: Equatable { let loginDefault: UIColor let loginTitleBackground: UIColor let loginLogo: UIImage + let loginLogoPad: UIImage let loginSelectionText: UIColor let attendeeText: UIColor let attendeeBackground: UIColor let whiteTagFont: UIColor let interestBackground: UIColor let buttonGreen: UIColor + let buttonPink: UIColor + let buttonBlue: UIColor + let buttonDarkBlue: UIColor + let buttonMagenta: UIColor + let buttonDarkBlueGreen: UIColor let favoriteStarBackground: UIColor let segmentedBackground: UIColor // New fonts added. Replace old ones? @@ -58,11 +65,22 @@ struct HIAppearance: Equatable { let leaderboardBackgroundTwo: UIColor let pointsBackground: UIColor + let profileCardBackground: UIColor + let profileCardVegetarian: UIColor + let profileCardVegan: UIColor + let profileCardGlutenFree: UIColor + let profileCardLactoseIntolerant: UIColor + let profileCardOther: UIColor + let profileCardNone: UIColor + + + let profileBaseText: UIColor + let clear: UIColor = .clear let black: UIColor = .black let white: UIColor = .white - // Hack 2022 color palette + //Hack 2022 color palette private static let darkRed = #colorLiteral(red: 0.6039215686, green: 0.1411764706, blue: 0.168627451, alpha: 1) private static let tan = #colorLiteral(red: 0.9098039216, green: 0.8431372549, blue: 0.6470588235, alpha: 1) private static let orange = #colorLiteral(red: 0.9294117647, green: 0.6078431373, blue: 0.1294117647, alpha: 1) @@ -75,45 +93,72 @@ struct HIAppearance: Equatable { private static let lightBlack = #colorLiteral(red: 0.03137254902, green: 0.08235294118, blue: 0.1058823529, alpha: 1) private static let salmon = #colorLiteral(red: 0.9490196078, green: 0.6078431373, blue: 0.4705882353, alpha: 1) private static let yellowWhite = #colorLiteral(red: 0.9647058824, green: 0.9568627451, blue: 0.831372549, alpha: 1) + + // Hack 2023 color palette + private static let lightYellow = #colorLiteral(red: 0.9882352941, green: 0.862745098, blue: 0.5607843137, alpha: 1) + private static let blue = #colorLiteral(red: 0.03137254902, green: 0.5450980392, blue: 0.7568627451, alpha: 1) + private static let pink = #colorLiteral(red: 0.9960784314, green: 0.4392156863, blue: 0.5960784314, alpha: 1) + private static let mediumOrange = #colorLiteral(red: 0.9764705882, green: 0.5843137255, blue: 0.3411764706, alpha: 1) + private static let teal = #colorLiteral(red: 0.2156862745, green: 0.8705882353, blue: 0.8039215686, alpha: 1) + private static let lightBlue = #colorLiteral(red: 0.7921568627, green: 0.8235294118, blue: 0.8980392157, alpha: 1) private static let white = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) + private static let darkBlue = #colorLiteral(red: 0.05098039216, green: 0.2196078431, blue: 0.4862745098, alpha: 1) private static let transparent = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 0) - + private static let magenta = #colorLiteral(red: 0.9960784314, green: 0.4392156863, blue: 0.5960784314, alpha: 1) + private static let darkBlueGreeen = #colorLiteral(red: 0.03137254902, green: 0.5450980392, blue: 0.7568627451, alpha: 1) + private static let darknavy = #colorLiteral(red: 0.1137254902, green: 0.1490196078, blue: 0.2666666667, alpha: 1) + private static let vegetarian = #colorLiteral(red: 0.2156862745, green: 0.8705882353, blue: 0.8039215686, alpha: 1) + private static let vegan = #colorLiteral(red: 0.9882352941, green: 0.862745098, blue: 0.5607843137, alpha: 1) + private static let glutenfree = #colorLiteral(red: 0.9764705882, green: 0.5843137255, blue: 0.3411764706, alpha: 1) + private static let lactoseintolerant = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) + private static let other = #colorLiteral(red: 0.9960784314, green: 0.6392156863, blue: 0.6666666667, alpha: 1) + private static let none = #colorLiteral(red: 0.1137254902, green: 0.1490196078, blue: 0.2666666667, alpha: 1) + private static let profileBaseText = #colorLiteral(red: 0.1137254902, green: 0.1490196078, blue: 0.2666666667, alpha: 1) + + private static let transparent2 = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 0) private static var statusBarWhite: UIStatusBarStyle { return .lightContent } private static var statusBarBlack: UIStatusBarStyle { if #available(iOS 13.0, *) { - return .darkContent + return .lightContent } else { - return .default + return .lightContent } } fileprivate static let day = HIAppearance( + neonCountdownText: lightYellow, titleText: lightBlack, whiteText: white, baseText: lightBlack, accent: orange, action: tan, baseBackground: white, - contentBackground: yellowWhite, + contentBackground: lightBlue, overlay: #colorLiteral(red: 0.05882352941, green: 0.07058823529, blue: 0.1803921569, alpha: 0.33), frostedTint: #colorLiteral(red: 0, green: 0.3411764706, blue: 0.462745098, alpha: 0.6), - codePopupTab: orange, - navbarBackground: green, - navbarTabTint: yellowWhite, + codePopupTab: white, + navbarBackground: darkBlue, + navbarTabTint: white, profileContainerTint: yellowWhite, preferredStatusBarStyle: statusBarBlack, scrollViewIndicatorStyle: .black, - loginDefault: lightBlack, - loginTitleBackground: lightBlack, + loginDefault: white, + loginTitleBackground: white, loginLogo: #imageLiteral(resourceName: "HILogo"), - loginSelectionText: lightBlack, - attendeeText: lightBlack, - attendeeBackground: yellowGreen, + loginLogoPad: UIImage(named: "LoginLogoPad")!, + loginSelectionText: white, + attendeeText: white, + attendeeBackground: darknavy, whiteTagFont: white, interestBackground: orange, buttonGreen: yellowGreen, + buttonPink: pink, + buttonBlue: blue, + buttonDarkBlue: darkBlue, + buttonMagenta: magenta, + buttonDarkBlueGreen: darkBlueGreeen, favoriteStarBackground: yellowWhite, segmentedBackground: white, buttonViewBackground: green, @@ -129,36 +174,51 @@ struct HIAppearance: Equatable { profile9: #imageLiteral(resourceName: "Profile9"), profile10: #imageLiteral(resourceName: "Profile10"), leaderboardText: lightBlack, - leaderboardBackgroundOne: yellowWhite, - leaderboardBackgroundTwo: tan, - pointsBackground: yellowGreen + leaderboardBackgroundOne: lightBlue, + leaderboardBackgroundTwo: lightBlue, + pointsBackground: white, + profileCardBackground: lightBlue, + profileCardVegetarian: vegetarian, + profileCardVegan: vegan, + profileCardGlutenFree: glutenfree, + profileCardLactoseIntolerant: lactoseintolerant, + profileCardOther: other, + profileCardNone: none, + profileBaseText: profileBaseText ) fileprivate static let night = HIAppearance( + neonCountdownText: lightYellow, titleText: lightBlack, whiteText: white, baseText: lightBlack, accent: orange, action: tan, baseBackground: white, - contentBackground: yellowWhite, + contentBackground: lightBlue, overlay: #colorLiteral(red: 0.05882352941, green: 0.07058823529, blue: 0.1803921569, alpha: 0.33), frostedTint: #colorLiteral(red: 0, green: 0.3411764706, blue: 0.462745098, alpha: 0.6), - codePopupTab: orange, - navbarBackground: green, - navbarTabTint: yellowWhite, + codePopupTab: white, + navbarBackground: darkBlue, + navbarTabTint: white, profileContainerTint: yellowWhite, preferredStatusBarStyle: statusBarBlack, scrollViewIndicatorStyle: .black, - loginDefault: lightBlack, - loginTitleBackground: lightBlack, + loginDefault: white, + loginTitleBackground: white, loginLogo: #imageLiteral(resourceName: "HILogo"), - loginSelectionText: lightBlack, - attendeeText: lightBlack, - attendeeBackground: yellowGreen, + loginLogoPad: UIImage(named: "LoginLogoPad")!, + loginSelectionText: white, + attendeeText: white, + attendeeBackground: darknavy, whiteTagFont: white, interestBackground: orange, buttonGreen: yellowGreen, + buttonPink: pink, + buttonBlue: blue, + buttonDarkBlue: darkBlue, + buttonMagenta: magenta, + buttonDarkBlueGreen: darkBlueGreeen, favoriteStarBackground: yellowWhite, segmentedBackground: white, buttonViewBackground: green, @@ -174,9 +234,17 @@ struct HIAppearance: Equatable { profile9: #imageLiteral(resourceName: "Profile9"), profile10: #imageLiteral(resourceName: "Profile10"), leaderboardText: lightBlack, - leaderboardBackgroundOne: yellowWhite, - leaderboardBackgroundTwo: tan, - pointsBackground: yellowGreen + leaderboardBackgroundOne: lightBlue, + leaderboardBackgroundTwo: lightBlue, + pointsBackground: white, + profileCardBackground: lightBlue, + profileCardVegetarian: vegetarian, + profileCardVegan: vegan, + profileCardGlutenFree: glutenfree, + profileCardLactoseIntolerant: lactoseintolerant, + profileCardOther: other, + profileCardNone: none, + profileBaseText: profileBaseText ) fileprivate static var current = day @@ -184,54 +252,81 @@ struct HIAppearance: Equatable { static func change(to newAppearance: HIAppearance) { guard current != newAppearance else { return } current = newAppearance - NotificationCenter.default.post(name: .themeDidChange, object: nil) } enum Font { - static let contentSubtitle = UIFont.systemFont(ofSize: 13, weight: .light) - static let contentText = UIFont.systemFont(ofSize: 14, weight: .regular) - static let contentTitle = UIFont.systemFont(ofSize: 18, weight: .medium) - static let detailTitle = UIFont.systemFont(ofSize: 24, weight: .semibold) - static let detailSubtitle = UIFont.systemFont(ofSize: 16, weight: .medium) - static let detailText = UIFont.systemFont(ofSize: 16, weight: .regular) - static let viewTitle = UIFont.systemFont(ofSize: 28, weight: .semibold) - static let happeningEventTitle = UIFont.systemFont(ofSize: 25, weight: .bold) - static let eventTitle = UIFont.systemFont(ofSize: 18, weight: .semibold) - static let eventTime = UIFont.systemFont(ofSize: 15, weight: .regular) - static let eventDetails = UIFont.systemFont(ofSize: 16, weight: .regular) - static let eventButtonText = UIFont.systemFont(ofSize: 14, weight: .regular) - static let eventCategoryText = UIFont.systemFont(ofSize: 16, weight: .regular) - static let clockText = UIFont.systemFont(ofSize: 48, weight: .semibold) - static let navigationSubtitle = UIFont.systemFont(ofSize: 14, weight: .medium) - static let navigationTitle = UIFont.systemFont(ofSize: 22, weight: .semibold) - static let navigationInfoText = UIFont.systemFont(ofSize: 12, weight: .regular) - static let descriptionText = UIFont.systemFont(ofSize: 16, weight: .regular) - static let sponsorText = UIFont.systemFont(ofSize: 16, weight: .regular) - static let loginTitle = UIFont.systemFont(ofSize: 24, weight: .bold) - static let loginOrTitle = UIFont.systemFont(ofSize: 16, weight: .bold) - static let loginSelection = UIFont.systemFont(ofSize: 16, weight: .semibold) - - static let sectionHeader = UIFont.systemFont(ofSize: 13, weight: .bold) - static let button = UIFont.systemFont(ofSize: 15, weight: .regular) - static let glyph = UIFont.systemFont(ofSize: 15, weight: .light) - - static let profileName = UIFont.systemFont(ofSize: 24, weight: .semibold) - static let profileSubtitle = UIFont.systemFont(ofSize: 14, weight: .regular) - static let profileNumberFigure = UIFont.systemFont(ofSize: 24, weight: .semibold) - static let profileTier = UIFont.systemFont(ofSize: 18, weight: .regular) - static let profileUsername = UIFont.systemFont(ofSize: 16, weight: .bold) - static let profileInterests = UIFont.systemFont(ofSize: 14, weight: .semibold) - static let segmentedTitle = UIFont.systemFont(ofSize: 16, weight: .regular) - static let segmentedNumberText = UIFont.systemFont(ofSize: 20, weight: .semibold) - - static let countdownText = UIFont.systemFont(ofSize: 25, weight: .bold) - static let onboardingGetStartedText = UIFont.systemFont(ofSize: 25, weight: .semibold) - static let onboardingTitle = UIFont.systemFont(ofSize: 30, weight: .bold) - static let onboardingDescription = UIFont.systemFont(ofSize: 20, weight: .regular) - static let leaderboardPoints = UIFont.systemFont(ofSize: 16, weight: .regular) - static let leaderboardName = UIFont.systemFont(ofSize: 14, weight: .semibold) - static let leaderboardRank = UIFont.systemFont(ofSize: 24, weight: .bold) + static let glyphPad = UIFont(name: "MontserratRoman-Bold", size: 24) + static let timeIndicator = UIFont(name: "MontserratRoman-Bold", size: 32) + static let homeSegmentedTitlePad = UIFont(name: "MontserratRoman-Bold", size: 40) + static let viewTitlePad = UIFont(name: "MontserratRoman-Bold", size: 48) + static let scheduleSegmentedNumberPad = UIFont(name: "MontserratRoman-SemiBold", size: 36) + static let scheduleSegmentedPad = UIFont(name: "MontserratRoman-SemiBold", size: 32) + static let eventTitlePad = UIFont(name: "MontserratRoman-Bold", size: 36) + static let timeTextPad = UIFont(name: "MontserratRoman-SemiBold", size: 28) + static let locationTextPad = UIFont(name: "MontserratRoman-SemiBold", size: 24) + static let sponsorTextPad = UIFont(name: "MontserratRoman-SemiBold", size: 24) + static let detailTextPad = UIFont(name: "MontserratRoman-Regular", size: 24) + static let descriptionTextPad = UIFont(name: "MontserratRoman-SemiBold", size: 18) + static let contentSubtitle = UIFont(name: "MontserratRoman-Light", size: 13) + static let contentText = UIFont(name: "MontserratRoman-Regular", size: 14) + static let contentTextPad = UIFont(name: "MontserratRoman-SemiBold", size: 18) + static let contentTitle = UIFont(name: "MontserratRoman-Medium", size: 18) + static let detailTitle = UIFont(name: "MontserratRoman-SemiBold", size: 24) + static let detailSubtitle = UIFont(name: "MontserratRoman-Medium", size: 16) + static let detailText = UIFont(name: "MontserratRoman-Regular", size: UIDevice.current.userInterfaceIdiom == .pad ? 19 : 16) + static let viewTitle = UIFont(name: "MontserratRoman-Bold", size: 24) + static let happeningEventTitle = UIFont(name: "MontserratRoman-Bold", size: 25) + static let eventTitle = UIFont(name: "MontserratRoman-SemiBold", size: 18) + static let eventTime = UIFont(name: "MontserratRoman-Regular", size: 15) + static let eventDetails = UIFont(name: "MontserratRoman-Regular", size: 14) + static let eventButtonText = UIFont(name: "MontserratRoman-SemiBold", size: UIDevice.current.userInterfaceIdiom == .pad ? 18 : 14) + static let eventCategoryText = UIFont(name: "MontserratRoman-Regular", size: 16) + static let clockText = UIFont(name: "MontserratRoman-SemiBold", size: 48) + static let navigationSubtitle = UIFont(name: "MontserratRoman-Medium", size: 14) + static let navigationTitle = UIFont(name: "MontserratRoman-SemiBold", size: 22) + static let navigationInfoText = UIFont(name: "MontserratRoman-Regular", size: 12) + static let descriptionText = UIFont(name: "MontserratRoman-Regular", size: 16) + static let timeText = UIFont(name: "MontserratRoman-SemiBold", size: 14) + static let locationText = UIFont(name: "MontserratRoman-SemiBold", size: 12) + static let bubbleSponsorText = UIFont(name: "MontserratRoman-SemiBold", size: 12) + static let sponsorText = UIFont(name: "MontserratRoman-Regular", size: 16) + static let welcomeTitle = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 40: 24) + static let loginTitle = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 32: 24) + static let loginOrTitle = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 20 : 16) + static let loginSelection = UIFont(name: "MontserratRoman-SemiBold", size: UIDevice.current.userInterfaceIdiom == .pad ? 26: 16) + + static let sectionHeader = UIFont(name: "MontserratRoman-Bold", size: 13) + static let button = UIFont(name: "MontserratRoman-Regular", size: 15) + static let glyph = UIFont(name: "MontserratRoman-Bold", size: 16) + + static let profileName = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 40 : 20) + static let profileSubtitle = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 24 : 12) + static let profileDietaryRestrictions = UIFont(name: "MontserratRoman-SemiBold", size: UIDevice.current.userInterfaceIdiom == .pad ? 32 : 16) + static let profileDietaryRestrictionsLabel = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 24 : 12) + static let profileTier = UIFont(name: "MontserratRoman-Bold", size: UIDevice.current.userInterfaceIdiom == .pad ? 36 : 18) + + + static let profileNumberFigure = UIFont(name: "MontserratRoman-SemiBold", size: 24) + static let profileUsername = UIFont(name: "MontserratRoman-Bold", size: 16) + static let profileInterests = UIFont(name: "MontserratRoman-SemiBold", size: 14) + static let segmentedTitle = UIFont(name: "MontserratRoman-Bold", size: 16) + static let homeSegmentedTitle = UIFont(name: "MontserratRoman-Bold", size: 24) + static let segmentedNumberText = UIFont(name: "MontserratRoman-SemiBold", size: 18) + + static let QRCheckInFont = UIFont(name: "MontserratRoman-SemiBold", size: 14) + + static let countdownText = UIFont(name: "MontserratRoman-Bold", size: 25) + static let newCountdownText = UIFont(name: "MontserratRoman-Bold", size: 48) + static let onboardingGetStartedText = UIFont(name: "MontserratRoman-SemiBold", size: 25) + static let onboardingTitle = UIFont(name: "MontserratRoman-Bold", size: 30) + static let onboardingDescription = UIFont(name: "MontserratRoman-Regular", size: 20) + static let leaderboardPoints = UIFont(name: "MontserratRoman-Semibold", size: 12) + static let leaderboardName = UIFont(name: "MontserratRoman-SemiBold", size: 16) + static let leaderboardRank = UIFont(name: "MontserratRoman-Bold", size: 24) + static let leaderboardPointsPad = UIFont(name: "MontserratRoman-Bold", size: 24) + static let leaderboardNamePad = UIFont(name: "MontserratRoman-SemiBold", size: 32) + static let leaderboardRankPad = UIFont(name: "MontserratRoman-Bold", size: 48) } } @@ -329,7 +424,6 @@ class HIThemeEngine { private init() { startUpTimer() } - deinit { tearDownTimer() } @@ -345,7 +439,6 @@ class HIThemeEngine { ) timer?.fire() } - @objc func updateThemeIfNeeded() { let calendar = Calendar.current let now = Date() @@ -360,7 +453,6 @@ class HIThemeEngine { } HIAppearance.change(to: newAppearance) } - func tearDownTimer() { timer?.invalidate() timer = nil diff --git a/HackIllinois/UI/HIErrorView.swift b/HackIllinois/UI/HIErrorView.swift index bf92ceab..75f8472e 100644 --- a/HackIllinois/UI/HIErrorView.swift +++ b/HackIllinois/UI/HIErrorView.swift @@ -13,7 +13,7 @@ import Foundation import UIKit -protocol HIErrorViewDelegate: class { +protocol HIErrorViewDelegate: AnyObject { func didSelectErrorLogout(_ sender: UIButton) } class HIErrorView: HIView { @@ -33,7 +33,7 @@ class HIErrorView: HIView { $0.titleLabel?.font = HIAppearance.Font.detailSubtitle $0.titleLabel?.baselineAdjustment = .alignCenters $0.layer.cornerRadius = 20 - $0.addTarget(self, action: #selector(didSelectLogoutButton(_:)), for: .touchUpInside) + $0.addTarget(HIErrorView.self, action: #selector(didSelectLogoutButton(_:)), for: .touchUpInside) } // MARK: - Init @@ -60,11 +60,11 @@ class HIErrorView: HIView { errorLabel.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true errorLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true - self.addSubview(logoutButton) + /*self.addSubview(logoutButton) logoutButton.topAnchor.constraint(equalTo: errorLabel.bottomAnchor, constant: 10).isActive = true logoutButton.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true logoutButton.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.5).isActive = true - logoutButton.heightAnchor.constraint(equalToConstant: 40).isActive = true + logoutButton.heightAnchor.constraint(equalToConstant: 40).isActive = true*/ translatesAutoresizingMaskIntoConstraints = false NotificationCenter.default.addObserver(self, selector: #selector(refreshForThemeChange), name: .themeDidChange, object: nil) diff --git a/HackIllinois/UI/HIHomeSegmentedControl.swift b/HackIllinois/UI/HIHomeSegmentedControl.swift index e694486c..711b81d7 100644 --- a/HackIllinois/UI/HIHomeSegmentedControl.swift +++ b/HackIllinois/UI/HIHomeSegmentedControl.swift @@ -12,6 +12,7 @@ import Foundation import UIKit +import SwiftUI class HIHomeSegmentedControl: HISegmentedControl { @@ -20,10 +21,11 @@ class HIHomeSegmentedControl: HISegmentedControl { private var views = [UIView]() private var titleLabels = [UILabel]() - private let titleFont = HIAppearance.Font.segmentedTitle + private let titleFont = HIAppearance.Font.homeSegmentedTitle + private let titleFontPad = HIAppearance.Font.homeSegmentedTitlePad private let numberFont = HIAppearance.Font.segmentedNumberText - private let viewPadding: CGFloat = 10 + private var viewPadding: CGFloat = 35 private let indicatorCornerRadiusProp: CGFloat = 0.15 private var indicatorView = UIImageView(image: #imageLiteral(resourceName: "Indicator")) @@ -50,7 +52,7 @@ class HIHomeSegmentedControl: HISegmentedControl { @objc override func refreshForThemeChange() { backgroundColor <- \.clear titleLabels.forEach { - $0.textColor <- \.baseText + $0.textColor <- \.white $0.backgroundColor <- \.clear } } @@ -58,11 +60,15 @@ class HIHomeSegmentedControl: HISegmentedControl { // MARK: - UIView override func layoutSubviews() { super.layoutSubviews() - let indicatorViewWidth = ((frame.width - viewPadding) / CGFloat(items.count) - viewPadding) - indicatorView.frame = CGRect(x: viewPadding, y: 50, width: indicatorViewWidth, height: 7) + var indicatorViewConstant: CGFloat = 4 + if UIDevice.current.userInterfaceIdiom == .pad { + indicatorViewConstant = 6 + } + indicatorView.frame = CGRect(x: indicatorViewWidth, y: 40 + indicatorViewConstant, width: indicatorViewWidth, height: indicatorViewConstant) indicatorView.layer.cornerRadius = frame.height * indicatorCornerRadiusProp indicatorView.layer.masksToBounds = true + indicatorView.contentMode = .center indicatorView.contentMode = .scaleAspectFit displayNewSelectedIndex() } @@ -70,11 +76,9 @@ class HIHomeSegmentedControl: HISegmentedControl { override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { let location = touch.location(in: self) - for (index, view) in views.enumerated() { - if view.frame.contains(location) { + for (index, view) in views.enumerated() where view.frame.contains(location) { selectedIndex = index break - } } return false @@ -96,21 +100,24 @@ class HIHomeSegmentedControl: HISegmentedControl { private func setupViewForItem(at index: Int) { let view = UIView() let titleLabel = UILabel() - + if UIDevice.current.userInterfaceIdiom == .pad { + titleLabel.font = titleFontPad + } else { + titleLabel.font = titleFont + } titleLabel.textAlignment = .center - titleLabel.font = numberFont + titleLabel.text = items[index] titleLabel.textColor <- \.whiteText - titleLabel.adjustsFontSizeToFitWidth = true + titleLabel.adjustsFontSizeToFitWidth = false view.addSubview(titleLabel) titleLabel.translatesAutoresizingMaskIntoConstraints = false titleLabel.constrain(to: view, topInset: 5, trailingInset: 0, bottomInset: -5, leadingInset: 0) view.isUserInteractionEnabled = false titleLabel.isUserInteractionEnabled = false - - view.translatesAutoresizingMaskIntoConstraints = false addSubview(view) + view.translatesAutoresizingMaskIntoConstraints = false views.append(view) titleLabels.append(titleLabel) } diff --git a/HackIllinois/UI/HILabel.swift b/HackIllinois/UI/HILabel.swift index 02733265..90f7eb63 100644 --- a/HackIllinois/UI/HILabel.swift +++ b/HackIllinois/UI/HILabel.swift @@ -39,6 +39,7 @@ class HILabel: UILabel { case profileTier case profileUsername case profileInterests + case profileDietaryRestrictions case navigationInfo case countdown case pointsText @@ -50,6 +51,10 @@ class HILabel: UILabel { case leaderboardRank case leaderboardName case leaderboardPoints + case neonCountdown + case newSponsor + case newLocation + case newTime } // MARK: - Properties @@ -70,16 +75,28 @@ class HILabel: UILabel { translatesAutoresizingMaskIntoConstraints = false if let style = style { switch style { + case .neonCountdown: + textHIColor = \.neonCountdownText + backgroundHIColor = \.clear + font = HIAppearance.Font.newCountdownText case .location: textHIColor = \.baseText backgroundHIColor = \.clear - font = HIAppearance.Font.contentText + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.contentTextPad + } else { + font = HIAppearance.Font.contentText + } case .event: textHIColor = \.baseText backgroundHIColor = \.clear - font = HIAppearance.Font.eventTitle + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.eventTitlePad + } else { + font = HIAppearance.Font.eventTitle + } case .eventTime: textHIColor = \.baseText @@ -87,9 +104,9 @@ class HILabel: UILabel { font = HIAppearance.Font.eventTime case .eventType: - textHIColor = \.baseText + textHIColor = \.whiteText backgroundHIColor = \.clear - font = HIAppearance.Font.eventCategoryText + font = HIAppearance.Font.eventButtonText case .sponsor: textHIColor = \.baseText @@ -114,16 +131,20 @@ class HILabel: UILabel { font = HIAppearance.Font.detailText numberOfLines = 0 - case .project: - textHIColor = \.baseText + case .project: // "Schedule" + textHIColor = \.white backgroundHIColor = \.clear font = HIAppearance.Font.contentTitle - case .viewTitle: - textHIColor = \.baseText + case .viewTitle: // "What's cooking" + textHIColor = \.whiteText backgroundHIColor = \.clear textAlignment = .center - font = HIAppearance.Font.viewTitle + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.viewTitlePad + } else { + font = HIAppearance.Font.viewTitle + } case .subtitle: textHIColor = \.accent @@ -133,13 +154,21 @@ class HILabel: UILabel { case .description: textHIColor = \.baseText backgroundHIColor = \.clear - font = HIAppearance.Font.descriptionText + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.descriptionTextPad + } else { + font = HIAppearance.Font.descriptionText + } numberOfLines = 0 case .cellDescription: textHIColor = \.baseText backgroundHIColor = \.clear - font = HIAppearance.Font.eventDetails + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.detailTextPad + } else { + font = HIAppearance.Font.eventDetails + } numberOfLines = 0 case .loginHeader: @@ -150,7 +179,7 @@ class HILabel: UILabel { case .welcomeTitle: textHIColor = \.loginSelectionText backgroundHIColor = \.clear - font = HIAppearance.Font.loginTitle + font = HIAppearance.Font.welcomeTitle case .backgroundTitle: textHIColor = \.baseText @@ -203,8 +232,14 @@ class HILabel: UILabel { textAlignment = .center font = HIAppearance.Font.profileInterests - case .navigationInfo: - textHIColor = \.titleText + case .profileDietaryRestrictions: + textHIColor = \.baseText + backgroundHIColor = \.clear + textAlignment = .center + font = HIAppearance.Font.profileDietaryRestrictions + + case .navigationInfo: // "All times are in CDT" + textHIColor = \.white backgroundHIColor = \.clear font = HIAppearance.Font.navigationInfoText textAlignment = .left @@ -215,58 +250,105 @@ class HILabel: UILabel { font = HIAppearance.Font.countdownText case .pointsText: - textHIColor = \.baseText + textHIColor = \.white backgroundHIColor = \.clear - font = HIAppearance.Font.eventButtonText + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.glyphPad + } else { + font = HIAppearance.Font.eventButtonText + } textAlignment = .center case .error: - textHIColor = \.baseText + textHIColor = \.white backgroundHIColor = \.clear font = HIAppearance.Font.detailSubtitle textAlignment = .center numberOfLines = 0 case .codeError: - textHIColor = \.baseText + textHIColor = \.white backgroundHIColor = \.clear font = HIAppearance.Font.detailSubtitle textAlignment = .center numberOfLines = 0 + case .onboardingDescription: textHIColor = \.baseText backgroundHIColor = \.clear font = HIAppearance.Font.onboardingDescription textAlignment = .center numberOfLines = 0 + case .onboardingTitle: - textHIColor = \.baseText + textHIColor = \.whiteText backgroundHIColor = \.clear font = HIAppearance.Font.onboardingTitle textAlignment = .center numberOfLines = 0 + case .clock: - textHIColor = \.baseText + textHIColor = \.whiteText backgroundHIColor = \.clear font = HIAppearance.Font.clockText textAlignment = .center numberOfLines = 1 + // Leaderboard label fonts case .leaderboardRank: textHIColor = \.leaderboardText backgroundHIColor = \.clear - font = HIAppearance.Font.leaderboardRank - layer.shadowOffset = CGSize(width: 2, height: 2) - layer.shadowRadius = 2.0 - layer.shadowOpacity = 0.25 + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.leaderboardRankPad + } else { + font = HIAppearance.Font.leaderboardRank + } + case .leaderboardName: textHIColor = \.leaderboardText backgroundHIColor = \.clear - font = HIAppearance.Font.leaderboardPoints + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.leaderboardNamePad + } else { + font = HIAppearance.Font.leaderboardName + } + case .leaderboardPoints: textHIColor = \.leaderboardText backgroundHIColor = \.pointsBackground - font = HIAppearance.Font.leaderboardPoints + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.leaderboardPointsPad + } else { + font = HIAppearance.Font.leaderboardPoints + } + + case .newTime: + textHIColor = \.black + backgroundHIColor = \.clear + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.timeTextPad + } else { + font = HIAppearance.Font.timeText + } + + case .newSponsor: + textHIColor = \.black + backgroundHIColor = \.clear + font = HIAppearance.Font.bubbleSponsorText + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.sponsorTextPad + } else { + font = HIAppearance.Font.bubbleSponsorText + } + + case .newLocation: + textHIColor = \.black + backgroundHIColor = \.clear + if UIDevice.current.userInterfaceIdiom == .pad { + font = HIAppearance.Font.locationTextPad + } else { + font = HIAppearance.Font.locationText + } } } diff --git a/HackIllinois/UI/HIScheduleSegmentedControl.swift b/HackIllinois/UI/HIScheduleSegmentedControl.swift index 47fd461e..479993bf 100644 --- a/HackIllinois/UI/HIScheduleSegmentedControl.swift +++ b/HackIllinois/UI/HIScheduleSegmentedControl.swift @@ -23,9 +23,11 @@ class HIScheduleSegmentedControl: HISegmentedControl { private var numberLabels = [UILabel]() private let titleFont = HIAppearance.Font.segmentedTitle + private let titleFontPad = HIAppearance.Font.scheduleSegmentedPad private let numberFont = HIAppearance.Font.segmentedNumberText + private let numberFontPad = HIAppearance.Font.scheduleSegmentedNumberPad - private let viewPadding: CGFloat = 10 + private let viewPadding: CGFloat = 65 private let indicatorCornerRadiusProp: CGFloat = 0.15 private var indicatorView = UIImageView(image: #imageLiteral(resourceName: "Indicator")) @@ -53,12 +55,12 @@ class HIScheduleSegmentedControl: HISegmentedControl { @objc override func refreshForThemeChange() { backgroundColor <- \.clear titleLabels.forEach { - $0.textColor <- \.baseText + $0.textColor <- \.white $0.backgroundColor <- \.clear } numberLabels.forEach { - $0.textColor <- \.baseText + $0.textColor <- \.white $0.backgroundColor <- \.clear } } @@ -66,22 +68,24 @@ class HIScheduleSegmentedControl: HISegmentedControl { // MARK: - UIView override func layoutSubviews() { super.layoutSubviews() - + var indicatorConstant: CGFloat = 0.0 + if UIDevice.current.userInterfaceIdiom == .pad { + indicatorConstant = 50.0 + } let indicatorViewWidth = ((frame.width - viewPadding) / CGFloat(items.count) - viewPadding) - indicatorView.frame = CGRect(x: viewPadding, y: 60, width: indicatorViewWidth, height: 7) + indicatorView.frame = CGRect(x: viewPadding, y: 68 + indicatorConstant, width: indicatorViewWidth, height: 4 + (indicatorConstant / 6)) indicatorView.layer.masksToBounds = true indicatorView.contentMode = .scaleAspectFit + indicatorView.contentMode = .center displayNewSelectedIndex() } override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { let location = touch.location(in: self) - for (index, view) in views.enumerated() { - if view.frame.contains(location) { + for (index, view) in views.enumerated() where view.frame.contains(location) { selectedIndex = index break - } } return false @@ -106,12 +110,17 @@ class HIScheduleSegmentedControl: HISegmentedControl { let numberLabel = UILabel() titleLabel.textAlignment = .center - titleLabel.font = titleFont + if UIDevice.current.userInterfaceIdiom == .pad { + titleLabel.font = titleFontPad + numberLabel.font = numberFontPad + } else { + titleLabel.font = titleFont + numberLabel.font = numberFont + } titleLabel.text = items[index] titleLabel.textColor <- \.whiteText numberLabel.textAlignment = .center - numberLabel.font = numberFont numberLabel.text = index < nums.count ? (nums[index] % 10 == nums[index] ? "0" : "") + "\(nums[index])" : "00" numberLabel.textColor <- \.whiteText @@ -119,19 +128,22 @@ class HIScheduleSegmentedControl: HISegmentedControl { view.addSubview(numberLabel) titleLabel.translatesAutoresizingMaskIntoConstraints = false numberLabel.translatesAutoresizingMaskIntoConstraints = false - + var segmentedControlConstant = 0.0 + if UIDevice.current.userInterfaceIdiom == .pad { + segmentedControlConstant = 24.0 + } titleLabel.constrain(to: view, topInset: 5, trailingInset: 0, leadingInset: 0) - numberLabel.constrain(to: view, trailingInset: 0, bottomInset: -5, leadingInset: 0) - numberLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 0).isActive = true + numberLabel.constrain(to: view, trailingInset: 0, bottomInset: -4, leadingInset: 0) + numberLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: segmentedControlConstant).isActive = true titleLabel.heightAnchor.constraint(equalTo: numberLabel.heightAnchor).isActive = true view.isUserInteractionEnabled = false titleLabel.isUserInteractionEnabled = false numberLabel.isUserInteractionEnabled = false - view.translatesAutoresizingMaskIntoConstraints = false addSubview(view) views.append(view) + view.translatesAutoresizingMaskIntoConstraints = false titleLabels.append(titleLabel) numberLabels.append(numberLabel) } diff --git a/HackIllinois/UI/HISegmentedControl.swift b/HackIllinois/UI/HISegmentedControl.swift index d4a4347a..dc753cc8 100644 --- a/HackIllinois/UI/HISegmentedControl.swift +++ b/HackIllinois/UI/HISegmentedControl.swift @@ -59,7 +59,7 @@ class HISegmentedControl: UIControl { @objc func refreshForThemeChange() { backgroundColor <- \.clear labels.forEach { - $0.textColor <- \.baseText + $0.textColor <- \.white $0.backgroundColor <- \.clear } @@ -82,11 +82,9 @@ class HISegmentedControl: UIControl { override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { let location = touch.location(in: self) - for (index, view) in views.enumerated() { - if view.frame.contains(location) { + for (index, view) in views.enumerated() where view.frame.contains(location) { selectedIndex = index break - } } return false diff --git a/HackIllinois/UI/HITextField.swift b/HackIllinois/UI/HITextField.swift index c1416a4b..44b9ffba 100644 --- a/HackIllinois/UI/HITextField.swift +++ b/HackIllinois/UI/HITextField.swift @@ -37,7 +37,7 @@ class HITextField: UITextField { tintHIColor = \.accent backgroundHIColor = \.baseBackground case .editProfile: - font = HIAppearance.Font.profileTier.withSize(18) + font = HIAppearance.Font.profileTier!.withSize(18) textHIColor = \.whiteTagFont tintHIColor = \.whiteTagFont backgroundHIColor = \.clear diff --git a/HackIllinois/UI/HITextView.swift b/HackIllinois/UI/HITextView.swift index 8cc18ff1..ca44d321 100644 --- a/HackIllinois/UI/HITextView.swift +++ b/HackIllinois/UI/HITextView.swift @@ -24,7 +24,7 @@ class HITextView: UITextView { init() { super.init(frame: .zero, textContainer: nil) - font = HIAppearance.Font.profileTier.withSize(18) + font = HIAppearance.Font.profileTier!.withSize(18) textHIColor = \.whiteTagFont tintHIColor = \.whiteTagFont backgroundHIColor = \.clear diff --git a/HackIllinois/UI/Identifiable.swift b/HackIllinois/UI/Identifiable.swift index 7ec996fd..570b7227 100644 --- a/HackIllinois/UI/Identifiable.swift +++ b/HackIllinois/UI/Identifiable.swift @@ -13,14 +13,14 @@ import Foundation import UIKit -protocol Identifiable { - static var identifier: String { get } -} +//protocol Identifiable { +// static var identifier: String { get } +//} extension UITableViewCell: Identifiable { - static var identifier: String = String(describing: self) + static var identifier: String = String(describing: UITableViewCell.self) } extension UITableViewHeaderFooterView: Identifiable { - static var identifier: String = String(describing: self) + static var identifier: String = String(describing: UITableViewHeaderFooterView.self) } diff --git a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIBubbleCell.swift b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIBubbleCell.swift index 96a24027..31528080 100644 --- a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIBubbleCell.swift +++ b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIBubbleCell.swift @@ -20,7 +20,10 @@ class HIBubbleCell: UITableViewCell { var bubbleView = HIView { $0.backgroundHIColor = \.contentBackground $0.translatesAutoresizingMaskIntoConstraints = false - $0.layer.cornerRadius = 8 + $0.layer.cornerRadius = 20 + if UIDevice.current.userInterfaceIdiom == .pad { + $0.layer.cornerRadius = 40 + } $0.layer.masksToBounds = false $0.layer.shadowColor = #colorLiteral(red: 0.1333333333, green: 0.168627451, blue: 0.3607843137, alpha: 0.3984650088) $0.layer.shadowOffset = CGSize(width: 0, height: 3) diff --git a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIEventCell.swift b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIEventCell.swift index 91503851..4eb72289 100644 --- a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIEventCell.swift +++ b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIEventCell.swift @@ -25,44 +25,53 @@ class HIEventCell: HIBubbleCell { $0.backgroundHIColor = \.clear $0.activeImage = #imageLiteral(resourceName: "Favorited") $0.baseImage = #imageLiteral(resourceName: "Unfavorited") + if UIDevice.current.userInterfaceIdiom == .pad { + $0.activeImage = #imageLiteral(resourceName: "FavoritedPad") + $0.baseImage = #imageLiteral(resourceName: "UnFavoritedPad") + } } var headerView = UIStackView() var contentStackView = UIStackView() var contentStackViewHeight = NSLayoutConstraint() - + var indexPath: IndexPath? weak var delegate: HIEventCellDelegate? - + // MARK: - Init override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) - + var headerSpacingConstant: CGFloat = 1.0 + if UIDevice.current.userInterfaceIdiom == .pad { + headerSpacingConstant = 2.0 + } backgroundColor = UIColor.clear favoritedButton.addTarget(self, action: #selector(didSelectFavoriteButton(_:)), for: .touchUpInside) // add bubble view contentView.layer.backgroundColor = UIColor.clear.cgColor + bubbleView.addSubview(headerView) headerView.axis = .vertical + headerView.alignment = .leading headerView.translatesAutoresizingMaskIntoConstraints = false - bubbleView.addSubview(headerView) - headerView.leadingAnchor.constraint(equalTo: bubbleView.leadingAnchor, constant: 17).isActive = true - headerView.topAnchor.constraint(equalTo: bubbleView.topAnchor, constant: 16).isActive = true + headerView.leadingAnchor.constraint(equalTo: bubbleView.leadingAnchor, constant: 17 * headerSpacingConstant).isActive = true + headerView.topAnchor.constraint(equalTo: bubbleView.topAnchor, constant: 16 * headerSpacingConstant).isActive = true bubbleView.addSubview(favoritedButton) - favoritedButton.constrain(width: 58, height: 60) + favoritedButton.constrain(width: 58 * headerSpacingConstant, height: 50 * headerSpacingConstant) favoritedButton.constrain(to: bubbleView, topInset: 0, trailingInset: 0) - favoritedButton.leadingAnchor.constraint(equalTo: headerView.trailingAnchor).isActive = true + + bubbleView.addSubview(contentStackView) contentStackView.axis = .vertical + contentStackView.alignment = .leading contentStackView.translatesAutoresizingMaskIntoConstraints = false - bubbleView.addSubview(contentStackView) contentStackView.leadingAnchor.constraint(equalTo: headerView.leadingAnchor).isActive = true contentStackView.trailingAnchor.constraint(equalTo: bubbleView.trailingAnchor, constant: -16).isActive = true - contentStackView.topAnchor.constraint(equalTo: headerView.bottomAnchor, constant: 4).isActive = true - contentStackView.bottomAnchor.constraint(greaterThanOrEqualTo: bubbleView.bottomAnchor).isActive = true + contentStackView.topAnchor.constraint(equalTo: headerView.bottomAnchor, constant: 10 * headerSpacingConstant).isActive = true + contentStackView.bottomAnchor.constraint(greaterThanOrEqualTo: bubbleView.bottomAnchor, constant: -16 * headerSpacingConstant).isActive = true // Don't show favorite button for guests if HIApplicationStateController.shared.isGuest { favoritedButton.isHidden = true } } - + required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) should not be used.") } @@ -73,91 +82,126 @@ extension HIEventCell { @objc func didSelectFavoriteButton(_ sender: HIButton) { delegate?.eventCellDidSelectFavoriteButton(self) } - + } // MARK: - Population extension HIEventCell { static func heightForCell(with event: Event, width: CGFloat) -> CGFloat { - let heightFromEventName = HILabel.heightForView(text: event.name, font: HIAppearance.Font.eventTitle, width: width - 137) - let heightFromHeader = (heightFromEventName + 4 + 17 < 60) ? 60 : heightFromEventName + 4 + 17 - let height = heightFromEventName + 40 + 90 + 15 + let heightFromEventName = HILabel.heightForView(text: event.name, font: HIAppearance.Font.eventTitle!, width: width - 137) + var heightConstant: CGFloat = 1.6 + if UIDevice.current.userInterfaceIdiom == .pad { + heightConstant = 11.0 + } + let height = heightFromEventName + 160 if !event.sponsor.isEmpty { - return height + 20 + return height + (20 * heightConstant) + } + if UIDevice.current.userInterfaceIdiom == .pad { + return height + (22 * (heightConstant / 1.45)) } - return height + return height + 5 } - static func <- (lhs: HIEventCell, rhs: Event) { lhs.favoritedButton.isActive = rhs.favorite - var contentStackViewHeight: CGFloat = 0 - + var contentStackViewHeight: CGFloat = 0.0 + var eventCellSpacing: CGFloat = 8.0 + var stackViewSpacing: CGFloat = 4.7 + var bubbleConstant: CGFloat = 1.0 + var locationImageView = UIImageView(image: #imageLiteral(resourceName: "LocationSign")) + var timeImageView = UIImageView(image: #imageLiteral(resourceName: "Clock")) + var sponsorImageView = UIImageView(image: #imageLiteral(resourceName: "Vector")) let titleLabel = HILabel(style: .event) - titleLabel.numberOfLines = 0 - titleLabel.text = rhs.name - titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.numberOfLines = 2 lhs.headerView.addArrangedSubview(titleLabel) - lhs.headerView.setCustomSpacing(4, after: titleLabel) - let eventTypeLabel = HILabel(style: .cellDescription) - let eventType = HIEventType(type: rhs.eventType) - eventTypeLabel.text = eventType.description.lowercased().capitalized - eventTypeLabel.textHIColor = \.baseText - eventTypeLabel.refreshForThemeChange() - eventTypeLabel.translatesAutoresizingMaskIntoConstraints = false - lhs.headerView.addArrangedSubview(eventTypeLabel) - let titleHeight = HILabel.heightForView(text: rhs.name, font: HIAppearance.Font.eventTitle, width: lhs.contentView.frame.width - 137) // Can test for a more accurate constant - titleLabel.constrain(height: titleHeight) - eventTypeLabel.constrain(height: 20) - if !rhs.sponsor.isEmpty { - let sponsorLabel = HILabel(style: .cellDescription) - sponsorLabel.text = "Sponsored by \(rhs.sponsor)" - contentStackViewHeight += sponsorLabel.intrinsicContentSize.height - sponsorLabel.constrain(height: 25) - lhs.contentStackView.addArrangedSubview(sponsorLabel) - lhs.contentStackView.setCustomSpacing(10, after: sponsorLabel) + titleLabel.text = rhs.name + lhs.headerView.setCustomSpacing(9, after: titleLabel) + if UIDevice.current.userInterfaceIdiom == .pad { + eventCellSpacing = 12.0 + stackViewSpacing = 15.0 + bubbleConstant = 2.0 + locationImageView = UIImageView(image: #imageLiteral(resourceName: "VectorPad")) + timeImageView = UIImageView(image: #imageLiteral(resourceName: "TimePad")) + sponsorImageView = UIImageView(image: #imageLiteral(resourceName: "SponsorPad")) + lhs.headerView.setCustomSpacing(18, after: titleLabel) } + titleLabel.constrain(width: lhs.contentView.frame.width - 120, height: (HILabel.heightForView(text: rhs.name, font: HIAppearance.Font.eventTitle!, width: lhs.contentView.frame.width - 137)) * bubbleConstant) let upperContainerView = HIView { + lhs.contentStackView.addArrangedSubview($0) $0.translatesAutoresizingMaskIntoConstraints = false } - lhs.contentStackView.addArrangedSubview(upperContainerView) - let timeImageView = UIImageView(image: #imageLiteral(resourceName: "Clock")) - upperContainerView.addSubview(timeImageView) - timeImageView.leadingAnchor.constraint(equalTo: upperContainerView.leadingAnchor).isActive = true - timeImageView.centerYAnchor.constraint(equalTo: upperContainerView.centerYAnchor).isActive = true - let timeLabel = HILabel(style: .eventTime) + let middleContainerView = HIView { + lhs.contentStackView.addArrangedSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + let timeLabel = HILabel(style: .newTime) // We can check for async events by checking if the event start and end time is 1970-01-01 00:00:00 +0000 if rhs.startTime.timeIntervalSince1970 == 0 || rhs.endTime.timeIntervalSince1970 == 0 { - // Default text for async events timeLabel.text = HIConstants.ASYNC_EVENT_TIME_TEXT } else { timeLabel.text = Formatter.simpleTime.string(from: rhs.startTime) + " - " + Formatter.simpleTime.string(from: rhs.endTime) } - upperContainerView.addSubview(timeLabel) - timeLabel.leadingAnchor.constraint(equalTo: timeImageView.trailingAnchor, constant: 5).isActive = true - timeLabel.centerYAnchor.constraint(equalTo: timeImageView.centerYAnchor).isActive = true - timeLabel.heightAnchor.constraint(equalTo: upperContainerView.heightAnchor, constant: 7).isActive = true let pointsView = HIView { (view) in - view.layer.cornerRadius = 12 - view.backgroundHIColor = \.buttonGreen + view.layer.cornerRadius = 10.5 * bubbleConstant + view.backgroundHIColor = \.buttonPink + view.translatesAutoresizingMaskIntoConstraints = false + } + let eventTypeView = HIView { (view) in + view.layer.cornerRadius = 10.5 * bubbleConstant + view.backgroundHIColor = \.buttonBlue view.translatesAutoresizingMaskIntoConstraints = false } - let pointsLabel = HILabel(style: .pointsText) + upperContainerView.addSubview(pointsView) pointsView.addSubview(pointsLabel) - pointsLabel.constrain(to: pointsView, topInset: 4, trailingInset: -8, bottomInset: -4, leadingInset: 8) + pointsLabel.constrain(to: pointsView, topInset: 4, trailingInset: -8 * bubbleConstant, bottomInset: -4, leadingInset: 8 * bubbleConstant) pointsLabel.text = "+ \(rhs.points) pts" - upperContainerView.addSubview(pointsView) - pointsView.leadingAnchor.constraint(equalTo: timeLabel.trailingAnchor, constant: 5).isActive = true - pointsView.centerYAnchor.constraint(equalTo: timeImageView.centerYAnchor).isActive = true + let typeLabel = HILabel(style: .pointsText) + lhs.headerView.addArrangedSubview(eventTypeView) + eventTypeView.addSubview(typeLabel) + typeLabel.constrain(to: eventTypeView, topInset: 4, trailingInset: -8, bottomInset: -4, leadingInset: 8) + typeLabel.text = rhs.eventType.description.lowercased().capitalized + eventTypeView.constrain(height: 20 * bubbleConstant) + pointsView.constrain(height: 20 * bubbleConstant) + pointsView.leadingAnchor.constraint(equalTo: eventTypeView.trailingAnchor, constant: 8 * bubbleConstant).isActive = true + pointsView.centerYAnchor.constraint(equalTo: eventTypeView.centerYAnchor).isActive = true + upperContainerView.addSubview(timeImageView) + upperContainerView.addSubview(timeLabel) + timeLabel.leadingAnchor.constraint(equalTo: timeImageView.trailingAnchor, constant: eventCellSpacing + 1).isActive = true + timeLabel.centerYAnchor.constraint(equalTo: timeImageView.centerYAnchor).isActive = true + if !rhs.sponsor.isEmpty { + let sponsorLabel = HILabel(style: .newSponsor) + middleContainerView.addSubview(sponsorImageView) + middleContainerView.addSubview(sponsorLabel) + sponsorImageView.translatesAutoresizingMaskIntoConstraints = false + sponsorLabel.text = "\(rhs.sponsor)" + contentStackViewHeight += sponsorLabel.intrinsicContentSize.height + sponsorImageView.bottomAnchor.constraint(equalTo: timeImageView.bottomAnchor, constant: (stackViewSpacing * 2.5) + 14).isActive = true + sponsorLabel.leadingAnchor.constraint(equalTo: sponsorImageView.trailingAnchor, constant: eventCellSpacing + 1).isActive = true + sponsorLabel.centerYAnchor.constraint(equalTo: sponsorImageView.centerYAnchor).isActive = true + } + let locationLabel = HILabel(style: .newLocation) + locationLabel.text = "Online" + if rhs.locations.count > 0 { + locationLabel.text = rhs.locations.map({ ($0 as AnyObject).name }).joined(separator: ", ") + } + middleContainerView.addSubview(locationImageView) + locationImageView.translatesAutoresizingMaskIntoConstraints = false + middleContainerView.addSubview(locationLabel) + if !rhs.sponsor.isEmpty { + locationImageView.centerYAnchor.constraint(equalTo: sponsorImageView.centerYAnchor, constant: (stackViewSpacing * 2.5) + 14).isActive = true + } else { + locationImageView.centerYAnchor.constraint(equalTo: timeImageView.centerYAnchor, constant: (stackViewSpacing * 2.5) + 14).isActive = true + } + locationImageView.centerXAnchor.constraint(equalTo: timeImageView.centerXAnchor).isActive = true + locationLabel.leadingAnchor.constraint(equalTo: timeLabel.leadingAnchor).isActive = true + locationLabel.centerYAnchor.constraint(equalTo: locationImageView.centerYAnchor).isActive = true let descriptionLabel = HILabel(style: .cellDescription) descriptionLabel.numberOfLines = 2 - let descriptionText = rhs.info - descriptionLabel.text = descriptionText + descriptionLabel.text = "\(rhs.info)" lhs.contentStackView.addArrangedSubview(descriptionLabel) - lhs.contentStackView.setCustomSpacing(10, after: descriptionLabel) - let textHeight = HILabel.heightForView(text: rhs.name, font: HIAppearance.Font.eventTitle, width: lhs.contentView.frame.width - 98) - contentStackViewHeight += textHeight - contentStackViewHeight += timeLabel.intrinsicContentSize.height + 13 + 40 + 3 + 40 + contentStackViewHeight += HILabel.heightForView(text: rhs.name, font: HIAppearance.Font.eventTitle!, width: lhs.contentView.frame.width - 98) + contentStackViewHeight += timeLabel.intrinsicContentSize.height + locationLabel.intrinsicContentSize.height + 13 + 40 + 3 + 40 } } diff --git a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIProjectCell.swift b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIProjectCell.swift index 87324ea2..bed478ca 100644 --- a/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIProjectCell.swift +++ b/HackIllinois/UI/TableView/Cells/HIBubbleCell/HIProjectCell.swift @@ -14,7 +14,7 @@ import Foundation import UIKit import HIAPI -protocol HIProjectCellDelegate: class { +protocol HIProjectCellDelegate: AnyObject { func projectCellDidSelectFavoriteButton(_ projectCell: HIProjectCell) } diff --git a/HackIllinois/UI/TableView/Cells/HILeaderboardCell.swift b/HackIllinois/UI/TableView/Cells/HILeaderboardCell.swift index 185d57a1..daf8c0e1 100644 --- a/HackIllinois/UI/TableView/Cells/HILeaderboardCell.swift +++ b/HackIllinois/UI/TableView/Cells/HILeaderboardCell.swift @@ -51,6 +51,10 @@ extension HILeaderboardCell { } static func <- (lhs: HILeaderboardCell, rhs: LeaderboardProfile) { + var padConstant = 1.0 + if UIDevice.current.userInterfaceIdiom == .pad { + padConstant = 2.0 + } lhs.rankLabel.textAlignment = .center lhs.pointsLabel.textAlignment = .center lhs.pointsLabel.backgroundHIColor = \.pointsBackground @@ -63,17 +67,23 @@ extension HILeaderboardCell { lhs.nameLabel.textAlignment = .left lhs.rankLabel.centerYAnchor.constraint(equalTo: lhs.cellView.centerYAnchor).isActive = true - lhs.rankLabel.leadingAnchor.constraint(equalTo: lhs.cellView.leadingAnchor, constant: 15).isActive = true + lhs.rankLabel.leadingAnchor.constraint(equalTo: lhs.cellView.leadingAnchor, constant: 25 * padConstant).isActive = true lhs.rankLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) lhs.pointsLabel.centerYAnchor.constraint(equalTo: lhs.cellView.centerYAnchor).isActive = true - lhs.pointsLabel.widthAnchor.constraint(equalTo: lhs.cellView.widthAnchor, multiplier: 0.30).isActive = true - lhs.pointsLabel.trailingAnchor.constraint(equalTo: lhs.cellView.trailingAnchor, constant: -15).isActive = true - lhs.pointsLabel.heightAnchor.constraint(equalTo: lhs.cellView.heightAnchor, multiplier: 0.45).isActive = true + lhs.pointsLabel.widthAnchor.constraint(equalTo: lhs.cellView.widthAnchor, multiplier: 0.24).isActive = true + lhs.pointsLabel.trailingAnchor.constraint(equalTo: lhs.cellView.trailingAnchor, constant: -25).isActive = true + lhs.pointsLabel.heightAnchor.constraint(equalTo: lhs.cellView.heightAnchor, multiplier: 0.38).isActive = true lhs.nameLabel.centerYAnchor.constraint(equalTo: lhs.cellView.centerYAnchor).isActive = true - lhs.nameLabel.leadingAnchor.constraint(equalTo: lhs.rankLabel.trailingAnchor, constant: 15).isActive = true - lhs.nameLabel.trailingAnchor.constraint(equalTo: lhs.pointsLabel.leadingAnchor, constant: -15).isActive = true + lhs.nameLabel.leadingAnchor.constraint(equalTo: lhs.rankLabel.leadingAnchor, constant: 50 * padConstant).isActive = true + + if UIDevice.current.userInterfaceIdiom == .pad { + lhs.nameLabel.constrain(width: lhs.contentView.frame.width, height: 40.0) + } else { + lhs.nameLabel.constrain(width: lhs.contentView.frame.width - 185, height: 20.0) + lhs.nameLabel.numberOfLines = 1 + } } } diff --git a/HackIllinois/UI/TableView/Cells/HILoginSelectionCell.swift b/HackIllinois/UI/TableView/Cells/HILoginSelectionCell.swift index 4f66ae7c..130cc0f2 100644 --- a/HackIllinois/UI/TableView/Cells/HILoginSelectionCell.swift +++ b/HackIllinois/UI/TableView/Cells/HILoginSelectionCell.swift @@ -13,7 +13,7 @@ import Foundation import UIKit -protocol HILoginSelectionCellDelegate: class { +protocol HILoginSelectionCellDelegate: AnyObject { } @@ -39,8 +39,8 @@ class HILoginSelectionCell: UITableViewCell { contentView.addSubview(titleLabel) titleLabel.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true titleLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true - titleLabel.heightAnchor.constraint(equalToConstant: 36).isActive = true - titleLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true + titleLabel.heightAnchor.constraint(equalToConstant: UIDevice.current.userInterfaceIdiom == .pad ? 60 : 36).isActive = true + titleLabel.widthAnchor.constraint(equalToConstant: UIDevice.current.userInterfaceIdiom == .pad ? 355 : 200).isActive = true NotificationCenter.default.addObserver(self, selector: #selector(refreshForThemeChange), name: .themeDidChange, object: nil) refreshForThemeChange() diff --git a/HackIllinois/UI/TableView/Headers/HIDateHeader.swift b/HackIllinois/UI/TableView/Headers/HIDateHeader.swift index 841f79a5..31a8520c 100644 --- a/HackIllinois/UI/TableView/Headers/HIDateHeader.swift +++ b/HackIllinois/UI/TableView/Headers/HIDateHeader.swift @@ -19,18 +19,24 @@ class HIDateHeader: UITableViewHeaderFooterView { $0.backgroundHIColor = \.clear $0.font = HIAppearance.Font.sectionHeader } + let dateView = HIView { (view) in + view.layer.cornerRadius = 10 + view.backgroundHIColor = \.buttonDarkBlue + } override init(reuseIdentifier: String?) { super.init(reuseIdentifier: reuseIdentifier) let backgroundView = HIView { $0.backgroundHIColor = \.clear } self.backgroundView = backgroundView - - backgroundView.addSubview(titleLabel) - titleLabel.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor).isActive = true - titleLabel.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 14).isActive = true - titleLabel.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor).isActive = true - titleLabel.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true + backgroundView.addSubview(dateView) + dateView.translatesAutoresizingMaskIntoConstraints = false + var spaceConstant: CGFloat = 1.0 + dateView.addSubview(titleLabel) + dateView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: -8).isActive = true + dateView.centerXAnchor.constraint(equalTo: safeAreaLayoutGuide.centerXAnchor).isActive = true + dateView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -8).isActive = true + titleLabel.constrain(to: dateView, topInset: 4 * spaceConstant, trailingInset: -16 * spaceConstant, bottomInset: -4 * spaceConstant, leadingInset: 16 * spaceConstant) } required init?(coder aDecoder: NSCoder) { diff --git a/HackIllinois/ViewControllers/HIBannerViewController.swift b/HackIllinois/ViewControllers/HIBannerViewController.swift new file mode 100644 index 00000000..cf1b55b2 --- /dev/null +++ b/HackIllinois/ViewControllers/HIBannerViewController.swift @@ -0,0 +1,59 @@ +// +// HIBannerViewController.swift +// HackIllinois +// +// Created by HackIllinois Team on 12/30/22. +// Copyright © 2022 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import Foundation +import UIKit + +class HIBannerViewController: UIViewController { + private let backgroundHIColor: HIColor = \.clear + private let label = HILabel { + $0.textHIColor = \.whiteText + $0.backgroundHIColor = \.clear + $0.textAlignment = .center + $0.font = HIAppearance.Font.glyph + if UIDevice.current.userInterfaceIdiom == .pad { + $0.font = HIAppearance.Font.glyphPad + } + } +} + +extension HIBannerViewController { + override func loadView() { + view = HIView { $0.backgroundHIColor = \.clear } + + let bannerStackView = UIStackView() + view.addSubview(bannerStackView) + bannerStackView.distribution = .fillEqually + bannerStackView.translatesAutoresizingMaskIntoConstraints = false + bannerStackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true + bannerStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true + bannerStackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true + bannerStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true + let daysContent = bannerView(with: label) + bannerStackView.addArrangedSubview(daysContent) + } + func bannerView(with label: HILabel) -> UIView { + let bannerView = UIView() + bannerView.addSubview(label) + label.constrain(to: bannerView, topInset: 0, trailingInset: 0, leadingInset: 0) + bannerView.constrain(to: bannerView, trailingInset: 0, bottomInset: 0, leadingInset: 0) + bannerView.bottomAnchor.constraint(equalTo: label.topAnchor).isActive = true + return bannerView + } + public func updateLabel(with text: String) { + label.text = text + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + } +} diff --git a/HackIllinois/ViewControllers/HIBaseScannerViewController.swift b/HackIllinois/ViewControllers/HIBaseScannerViewController.swift index 830e2211..9ba6891e 100644 --- a/HackIllinois/ViewControllers/HIBaseScannerViewController.swift +++ b/HackIllinois/ViewControllers/HIBaseScannerViewController.swift @@ -128,8 +128,9 @@ extension HIBaseScannerViewController: AVCaptureMetadataOutputObjectsDelegate { previewLayer.frame = previewView.layer.bounds guard previewLayer.connection?.isVideoOrientationSupported == true else { return } - - switch UIApplication.shared.statusBarOrientation { + #warning ("Not tested") + let interfaceOrientation = UIApplication.shared.windows.first?.windowScene?.interfaceOrientation + switch interfaceOrientation { case .portrait, .unknown: previewLayer.connection?.videoOrientation = .portrait case .portraitUpsideDown: @@ -138,6 +139,8 @@ extension HIBaseScannerViewController: AVCaptureMetadataOutputObjectsDelegate { previewLayer.connection?.videoOrientation = .landscapeLeft case .landscapeRight: previewLayer.connection?.videoOrientation = .landscapeRight + case .none: + break @unknown default: previewLayer.connection?.videoOrientation = .portrait } diff --git a/HackIllinois/ViewControllers/HIBaseViewController.swift b/HackIllinois/ViewControllers/HIBaseViewController.swift index b716b40f..4826ca0a 100644 --- a/HackIllinois/ViewControllers/HIBaseViewController.swift +++ b/HackIllinois/ViewControllers/HIBaseViewController.swift @@ -19,7 +19,7 @@ class HIBaseViewController: UIViewController { // MARK: - Properties var _fetchedResultsController: NSFetchedResultsController? var refreshControl = UIRefreshControl() - var refreshAnimation = AnimationView(name: "refresh") + var refreshAnimation = LottieAnimationView(name: "refresh") var tableView: UITableView? var backgroundView = UIImageView() let tableBackgroundView = HIView() @@ -109,7 +109,12 @@ extension HIBaseViewController { @objc func setCustomTitle(customTitle: String) { let label = HILabel(style: .viewTitle) label.text = customTitle - self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(customView: label) + + let view = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 30)) + view.bounds = view.bounds.offsetBy(dx: -24, dy: 0) + view.addSubview(label) + + self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(customView: view) self.navigationItem.leftItemsSupplementBackButton = true } } @@ -353,12 +358,17 @@ extension HIBaseViewController { let keyboardFrame = keyboardFrameValue.cgRectValue layout?(keyboardFrame) - - UIView.beginAnimations(nil, context: nil) - UIView.setAnimationDuration(duration) - UIView.setAnimationCurve(curve) - view.layoutIfNeeded() - UIView.commitAnimations() +// UIView.beginAnimations(nil, context: nil) +// UIView.setAnimationDuration(duration) +// UIView.setAnimationCurve(curve) +// view.layoutIfNeeded() +// UIView.commitAnimations() + #warning("Not tested") + let animator = UIViewPropertyAnimator(duration: duration, curve: curve) + animator.addAnimations { + self.view.layoutIfNeeded() + } + animator.startAnimation() } } diff --git a/HackIllinois/ViewControllers/HICountdownViewController.swift b/HackIllinois/ViewControllers/HICountdownViewController.swift index 72a99d08..b8864179 100644 --- a/HackIllinois/ViewControllers/HICountdownViewController.swift +++ b/HackIllinois/ViewControllers/HICountdownViewController.swift @@ -12,9 +12,10 @@ import Foundation import UIKit +import SwiftUI import Lottie -protocol HICountdownViewControllerDelegate: class { +protocol HICountdownViewControllerDelegate: AnyObject { func countdownToDateFor(countdownViewController: HICountdownViewController) -> Date? } @@ -24,10 +25,10 @@ class HICountdownViewController: UIViewController { private let FRAMES_PER_TICK = 8 // MARK: - Properties - private let days = HILabel(style: .clock) - private let hours = HILabel(style: .clock) - private let minutes = HILabel(style: .clock) - private let seconds = HILabel(style: .clock) + private let days = HILabel(style: .neonCountdown) + private let hours = HILabel(style: .neonCountdown) + private let minutes = HILabel(style: .neonCountdown) + private let seconds = HILabel(style: .neonCountdown) private let backgroundHIColor: HIColor = \.clear private var countdownDate: Date? @@ -97,35 +98,66 @@ extension HICountdownViewController { countdownStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true countdownStackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true countdownStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - - let daysContent = containerView(with: days, and: "Days") + let daysContent = containerView(with: "DAYS", and: days) countdownStackView.addArrangedSubview(daysContent) - let hoursContent = containerView(with: hours, and: "Hours") + let hoursContent = containerView(with: "HOURS", and: hours) countdownStackView.addArrangedSubview(hoursContent) - countdownStackView.setCustomSpacing(10, after: daysContent) - let minutesContent = containerView(with: minutes, and: "Minutes") + let minutesContent = containerView(with: "MINUTES", and: minutes) countdownStackView.addArrangedSubview(minutesContent) - countdownStackView.setCustomSpacing(10, after: hoursContent) + var countdownSpacingConstant: CGFloat = 30 + if UIDevice.current.userInterfaceIdiom == .pad { + countdownSpacingConstant = 60 + } + countdownStackView.setCustomSpacing(countdownSpacingConstant, after: daysContent) + countdownStackView.setCustomSpacing(countdownSpacingConstant, after: hoursContent) + countdownStackView.setCustomSpacing(countdownSpacingConstant, after: minutesContent) } - - func containerView(with countDownView: HILabel, and labelString: String) -> UIView { + func containerView(with labelString: String, and countDownView: HILabel) -> UIView { countDownView.backgroundColor <- backgroundHIColor countDownView.translatesAutoresizingMaskIntoConstraints = false let label = HILabel { - $0.textHIColor = \.titleText + $0.textHIColor = \.whiteText $0.backgroundHIColor = \.clear $0.textAlignment = .center - $0.font = HIAppearance.Font.glyph + if UIDevice.current.userInterfaceIdiom == .pad { + $0.font = HIAppearance.Font.timeIndicator + } else { + $0.font = HIAppearance.Font.glyph + } $0.text = labelString } + let yellowish = #colorLiteral(red: 0.9882352941, green: 0.862745098, blue: 0.5607843137, alpha: 1) + let strokeTextAttributes = [ + NSAttributedString.Key.strokeColor: yellowish, + NSAttributedString.Key.foregroundColor: UIColor.clear, + NSAttributedString.Key.strokeWidth: 5.0, + NSAttributedString.Key.font: UIFont.systemFont(ofSize: 48, weight: UIFont.Weight(rawValue: 900) )] + as [NSAttributedString.Key: Any] + let iPadStrokeTextAttributes = [ + NSAttributedString.Key.strokeColor: yellowish, + NSAttributedString.Key.foregroundColor: UIColor.clear, + NSAttributedString.Key.strokeWidth: 5.0, + NSAttributedString.Key.font: UIFont.systemFont(ofSize: 90, weight: UIFont.Weight(rawValue: 900) )] + as [NSAttributedString.Key: Any] + if UIDevice.current.userInterfaceIdiom == .pad { + countDownView.attributedText = NSMutableAttributedString(string: "Test", attributes: iPadStrokeTextAttributes) + } else { + countDownView.attributedText = NSMutableAttributedString(string: "Test", attributes: strokeTextAttributes) + } + countDownView.layer.shadowColor = yellowish.cgColor + countDownView.layer.shadowRadius = 3.0 + countDownView.layer.shadowOpacity = 100.0 + countDownView.layer.masksToBounds = false + countDownView.layer.shouldRasterize = true + countDownView.layer.shadowOffset = .zero let containerView = UIView() containerView.addSubview(label) containerView.addSubview(countDownView) label.constrain(to: containerView, topInset: 0, trailingInset: 0, leadingInset: 0) - countDownView.constrain(to: containerView, trailingInset: 0, bottomInset: 0, leadingInset: 0) - label.bottomAnchor.constraint(equalTo: countDownView.topAnchor).isActive = true + countDownView.centerXAnchor.constraint(equalTo: containerView.centerXAnchor).isActive = true + countDownView.bottomAnchor.constraint(equalTo: label.topAnchor, constant: -4).isActive = true return containerView } @@ -161,6 +193,10 @@ extension HICountdownViewController { hours.text = String(format: "%02d", (hoursRemaining)) minutes.text = String(format: "%02d", (minutesRemaining)) seconds.text = String(format: "%02d", (secondsRemaining)) + days.textAlignment = .center + hours.textAlignment = .center + minutes.textAlignment = .center + seconds.textAlignment = .center } @objc func updateCountdown() { diff --git a/HackIllinois/ViewControllers/HIEventDetailViewController.swift b/HackIllinois/ViewControllers/HIEventDetailViewController.swift index f9961ae9..1903f239 100644 --- a/HackIllinois/ViewControllers/HIEventDetailViewController.swift +++ b/HackIllinois/ViewControllers/HIEventDetailViewController.swift @@ -15,6 +15,7 @@ import UIKit import MapKit import HIAPI import APIManager +import GoogleMaps class HIEventDetailViewController: HIBaseViewController { // MARK: - Properties @@ -32,17 +33,33 @@ class HIEventDetailViewController: HIBaseViewController { $0.backgroundHIColor = \.clear } private let titleLabel = HILabel(style: .detailTitle) - private let sponsorLabel = HILabel(style: .sponsor) + + private let eventTypeView = HIView { (view) in + if UIDevice.current.userInterfaceIdiom == .pad { + view.layer.cornerRadius = 12 + } else { + view.layer.cornerRadius = 8 + } + view.backgroundHIColor = \.buttonDarkBlueGreen + view.translatesAutoresizingMaskIntoConstraints = false + } private let eventTypeLabel = HILabel(style: .eventType) + private let sponsorLabel = HILabel(style: .sponsor) + private let timeImageView = UIImageView(image: UIImage(named: "Clock")) private let timeLabel = HILabel(style: .description) + private let locationLabel = HILabel(style: .location) + private let locationImageView = UIImageView(image: UIImage(named: "LocationSign")) private let descriptionLabel = HILabel(style: .detailText) let pointsView = HIView { (view) in - view.layer.cornerRadius = 8 - view.backgroundHIColor = \.buttonGreen + if UIDevice.current.userInterfaceIdiom == .pad { + view.layer.cornerRadius = 12 + } else { + view.layer.cornerRadius = 8 + } + view.backgroundHIColor = \.buttonMagenta view.translatesAutoresizingMaskIntoConstraints = false } - private let pointsLabel = HILabel(style: .pointsText) - private let timeImageView = UIImageView(image: #imageLiteral(resourceName: "Clock")) + private let pointsLabel = HILabel(style: .eventType) private let favoritedButton = HIButton { $0.tintHIColor = \.accent $0.backgroundHIColor = \.clear @@ -55,9 +72,15 @@ class HIEventDetailViewController: HIBaseViewController { $0.activeImage = #imageLiteral(resourceName: "MenuClose") $0.baseImage = #imageLiteral(resourceName: "MenuClose") } + private var mapView: GMSMapView! + // private let mapContainerView = HIView { + // $0.translatesAutoresizingMaskIntoConstraints = false + // $0.backgroundHIColor = \.clear + // } // MARK: Constraints private var descriptionLabelHeight = NSLayoutConstraint() + } // MARK: - Actions @@ -66,27 +89,29 @@ extension HIEventDetailViewController { guard let event = event else { return } let changeFavoriteStatusRequest: APIRequest = - sender.isActive ? - HIAPI.EventService.unfavoriteBy(id: event.id) : - HIAPI.EventService.favoriteBy(id: event.id) + sender.isActive ? + HIAPI.EventService.unfavoriteBy(id: event.id) : + HIAPI.EventService.favoriteBy(id: event.id) changeFavoriteStatusRequest - .onCompletion { result in - switch result { - case .success: - DispatchQueue.main.async { - sender.isActive.toggle() - event.favorite.toggle() - event.favorite ? - HILocalNotificationController.shared.scheduleNotification(for: event) : - HILocalNotificationController.shared.unscheduleNotification(for: event) + .onCompletion { result in + switch result { + case .success: + DispatchQueue.main.async { + sender.isActive.toggle() + event.favorite.toggle() + if event.favorite { + HILocalNotificationController.shared.scheduleNotification(for: event) + } else { + HILocalNotificationController.shared.unscheduleNotification(for: event) + } + } + case .failure(let error): + print(error, error.localizedDescription) } - case .failure(let error): - print(error, error.localizedDescription) } - } - .authorize(with: HIApplicationStateController.shared.user) - .launch() + .authorize(with: HIApplicationStateController.shared.user) + .launch() } @objc func didSelectCloseButton(_ sender: HIButton) { @@ -111,6 +136,8 @@ extension HIEventDetailViewController { } setupTime() setupPoints() + setupLocation() + setupMap() setupDescription() } @@ -131,12 +158,30 @@ extension HIEventDetailViewController { timeLabel.text = Formatter.simpleTime.string(from: event.startTime) + " - " + Formatter.simpleTime.string(from: event.endTime) } favoritedButton.isActive = event.favorite - pointsLabel.text = "+ \(event.points) pts " - eventTypeLabel.text = event.eventType.lowercased().capitalized + pointsLabel.text = " + \(event.points) pts " + eventTypeLabel.text = " \(event.eventType.lowercased().capitalized) " view.layoutIfNeeded() let targetSize = CGSize(width: descriptionLabel.frame.width, height: .greatestFiniteMagnitude) let neededSize = descriptionLabel.sizeThatFits(targetSize) descriptionLabelHeight.constant = neededSize.height + // Default text for online events + locationLabel.text = HIConstants.ONLINE_EVENT_LOCATION_TEXT + // check if this event has a location + if event.locations.count > 0 { + // concatenate all location names + locationLabel.text = event.locations.map { ($0 as AnyObject).name }.joined(separator: ", ") + } + // MARK: GoogleMap Setup + for case let loc as Location in event.locations { + DispatchQueue.main.async { [self] in + let newcamera = GMSCameraPosition.camera(withLatitude: loc.latitude, longitude: loc.longitude, zoom: 18.0) + mapView.camera = newcamera + let marker = GMSMarker() + marker.title = loc.name + marker.position = CLLocationCoordinate2D(latitude: loc.latitude, longitude: loc.longitude) + marker.map = mapView + } + } } override func viewDidAppear(_ animated: Bool) { @@ -152,12 +197,14 @@ extension HIEventDetailViewController { eventDetailContainer.addSubview(upperContainerView) upperContainerView.constrain(to: eventDetailContainer, topInset: 25, trailingInset: 0, leadingInset: 0) - upperContainerView.constrain(height: 75) + upperContainerView.constrain(height: 95) } func setupEventType() { - upperContainerView.addSubview(eventTypeLabel) - eventTypeLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true - eventTypeLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 5).isActive = true + upperContainerView.addSubview(eventTypeView) + eventTypeView.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true + eventTypeView.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 10).isActive = true + eventTypeView.addSubview(eventTypeLabel) + eventTypeLabel.constrain(to: eventTypeView, topInset: 0, trailingInset: 0, bottomInset: 0, leadingInset: 0) } func setupSponsor() { upperContainerView.addSubview(sponsorLabel) @@ -182,20 +229,42 @@ extension HIEventDetailViewController { } func setupPoints() { upperContainerView.addSubview(pointsView) - pointsView.centerYAnchor.constraint(equalTo: timeImageView.centerYAnchor).isActive = true - pointsView.leadingAnchor.constraint(equalTo: timeLabel.trailingAnchor, constant: 10).isActive = true + pointsView.centerYAnchor.constraint(equalTo: eventTypeView.centerYAnchor).isActive = true + pointsView.leadingAnchor.constraint(equalTo: eventTypeView.trailingAnchor, constant: 10).isActive = true pointsView.addSubview(pointsLabel) pointsLabel.constrain(to: pointsView, topInset: 0, trailingInset: 0, bottomInset: 0, leadingInset: 0) } func setupDescription() { eventDetailContainer.addSubview(descriptionLabel) - descriptionLabel.topAnchor.constraint(equalTo: timeLabel.bottomAnchor, constant: 15).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: mapView.bottomAnchor, constant: 15).isActive = true descriptionLabel.constrain(to: eventDetailContainer, trailingInset: 0) descriptionLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true descriptionLabelHeight = descriptionLabel.heightAnchor.constraint(equalToConstant: 100) descriptionLabelHeight.isActive = true } - + func setupLocation() { + upperContainerView.addSubview(locationImageView) + locationImageView.translatesAutoresizingMaskIntoConstraints = false + locationImageView.topAnchor.constraint(equalTo: timeImageView.bottomAnchor, constant: 10).isActive = true + locationImageView.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true + upperContainerView.addSubview(locationLabel) + locationLabel.centerYAnchor.constraint(equalTo: locationImageView.centerYAnchor).isActive = true + locationLabel.leadingAnchor.constraint(equalTo: locationImageView.leadingAnchor, constant: 20).isActive = true + } + func setupMap() { + let camera = GMSCameraPosition.camera(withLatitude: 40.113882445333154, longitude: -88.22491715718857, zoom: 18.0) +// let mapID = GMSMapID(identifier: "66c463c9a421326e") +// mapView = GMSMapView(frame: .zero, mapID: mapID, camera: camera) + // Map without nightmode + mapView = GMSMapView(frame: .zero, camera: camera) + eventDetailContainer.addSubview(mapView) + mapView.translatesAutoresizingMaskIntoConstraints = false + mapView.leadingAnchor.constraint(equalTo: eventDetailContainer.leadingAnchor).isActive = true + mapView.trailingAnchor.constraint(equalTo: eventDetailContainer.trailingAnchor).isActive = true + mapView.topAnchor.constraint(equalTo: locationImageView.bottomAnchor, constant: 15).isActive = true + mapView.constrain(height: 300) + mapView.layer.cornerRadius = 20 + } func setupCloseButton() { view.addSubview(closeButton) closeButton.addTarget(self, action: #selector(didSelectCloseButton(_:)), for: .touchUpInside) @@ -203,7 +272,6 @@ extension HIEventDetailViewController { closeButton.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 12).isActive = true closeButton.constrain(height: 20) } - func setupFavoritedButton() { view.addSubview(favoritedButton) favoritedButton.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true diff --git a/HackIllinois/ViewControllers/HIEventListViewController.swift b/HackIllinois/ViewControllers/HIEventListViewController.swift index 0beb9279..dfeeacff 100644 --- a/HackIllinois/ViewControllers/HIEventListViewController.swift +++ b/HackIllinois/ViewControllers/HIEventListViewController.swift @@ -25,7 +25,8 @@ extension HIEventListViewController { if let tableView = tableView { tableView.register(HIDateHeader.self, forHeaderFooterViewReuseIdentifier: HIDateHeader.identifier) tableView.register(HIEventCell.self, forCellReuseIdentifier: HIEventCell.identifier) - registerForPreviewing(with: self, sourceView: tableView) + #warning("I don't think this is being used. Related to 3D touch and previewing") +// registerForPreviewing(with: self, sourceView: tableView) } super.setupTableView() } @@ -85,9 +86,11 @@ extension HIEventListViewController: HIEventCellDelegate { case .success: DispatchQueue.main.async { event.favorite.toggle() - event.favorite ? - HILocalNotificationController.shared.scheduleNotification(for: event) : + if event.favorite { + HILocalNotificationController.shared.scheduleNotification(for: event) + } else { HILocalNotificationController.shared.unscheduleNotification(for: event) + } } case .failure(let error): print(error, error.localizedDescription) @@ -98,20 +101,21 @@ extension HIEventListViewController: HIEventCellDelegate { } } +#warning("I don't think this is being used. Related to 3D touch and previewing") // MARK: - UIViewControllerPreviewingDelegate -extension HIEventListViewController: UIViewControllerPreviewingDelegate { - func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { - guard let tableView = tableView, - let indexPath = tableView.indexPathForRow(at: location), - let event = _fetchedResultsController?.object(at: indexPath) as? Event else { - return nil - } - previewingContext.sourceRect = tableView.rectForRow(at: indexPath) - eventDetailViewController.event = event - return eventDetailViewController - } - - func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { - self.present(viewControllerToCommit, animated: true, completion: nil) - } -} +//extension HIEventListViewController: UIViewControllerPreviewingDelegate { +// func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { +// guard let tableView = tableView, +// let indexPath = tableView.indexPathForRow(at: location), +// let event = _fetchedResultsController?.object(at: indexPath) as? Event else { +// return nil +// } +// previewingContext.sourceRect = tableView.rectForRow(at: indexPath) +// eventDetailViewController.event = event +// return eventDetailViewController +// } +// +// func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { +// self.present(viewControllerToCommit, animated: true, completion: nil) +// } +//} diff --git a/HackIllinois/ViewControllers/HIHomeViewController.swift b/HackIllinois/ViewControllers/HIHomeViewController.swift index 3af615f1..efe62f32 100644 --- a/HackIllinois/ViewControllers/HIHomeViewController.swift +++ b/HackIllinois/ViewControllers/HIHomeViewController.swift @@ -43,21 +43,31 @@ class HIHomeViewController: HIEventListViewController { private var currentTab = 0 - private var dataStore: [String] = ["Ongoing", "Upcoming", "Async"] + private var dataStore: [String] = ["CURRENT", "UPCOMING"] private lazy var countdownViewController = HICountdownViewController(delegate: self) + private lazy var bannerViewController = HIBannerViewController() private let countdownFrameView = HIView { $0.translatesAutoresizingMaskIntoConstraints = false - let viewImage = #imageLiteral(resourceName: "Chicken") - $0.layer.contents = viewImage.cgImage + } + private let bannerFrameView = HIView { + $0.translatesAutoresizingMaskIntoConstraints = false + if UIDevice.current.userInterfaceIdiom == .pad { + let bannerImage = #imageLiteral(resourceName: "BannerPad") + $0.layer.contents = bannerImage.cgImage + } else { + let bannerImage = #imageLiteral(resourceName: "Banner") + $0.layer.contents = bannerImage.cgImage + } } private var countdownDataStoreIndex = 0 + // changed to upper case for 2023 designs private var staticDataStore: [(date: Date, displayText: String)] = [ - (HITimeDataSource.shared.eventTimes.eventStart, "HackIllinois Begins In"), - (HITimeDataSource.shared.eventTimes.hackStart, "Hacking Begins In"), - (HITimeDataSource.shared.eventTimes.hackEnd, "Hacking Ends In"), - (HITimeDataSource.shared.eventTimes.eventEnd, "HackIllinois Ends In") + (HITimeDataSource.shared.eventTimes.eventStart, "HACKILLINOIS BEGINS IN"), + (HITimeDataSource.shared.eventTimes.hackStart, "HACKING BEGINS IN"), + (HITimeDataSource.shared.eventTimes.hackEnd, "HACKING ENDS IN"), + (HITimeDataSource.shared.eventTimes.eventEnd, "HACKILLINOIS ENDS IN") ] private var timer: Timer? @@ -102,21 +112,29 @@ extension HIHomeViewController { extension HIHomeViewController { override func loadView() { super.loadView() + setUpBanner() setUpCountdown() let items = dataStore.map { $0 } let segmentedControl = HIHomeSegmentedControl(status: items) + view.addSubview(segmentedControl) segmentedControl.addTarget(self, action: #selector(didSelectTab(_:)), for: .valueChanged) segmentedControl.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(segmentedControl) - segmentedControl.topAnchor.constraint(equalTo: countdownFrameView.bottomAnchor, constant: 20).isActive = true - segmentedControl.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 10).isActive = true - segmentedControl.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true + var segmentedControlConstant = 1.0 + if UIDevice.current.userInterfaceIdiom == .pad { + segmentedControlConstant = 2.0 + } else if UIScreen.main.bounds.width < 375.0 { + segmentedControlConstant = 0.9 + } + segmentedControl.topAnchor.constraint(equalTo: bannerFrameView.bottomAnchor, constant: 124 * segmentedControlConstant).isActive = true + segmentedControl.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: -30).isActive = true + segmentedControl.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 20).isActive = true + //segmentedControl.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true segmentedControl.heightAnchor.constraint(equalToConstant: 44).isActive = true let separator = UIView() + self.view.addSubview(separator) separator.translatesAutoresizingMaskIntoConstraints = false separator.backgroundColor <- \.clear - self.view.addSubview(separator) separator.constrain(height: 1 / (UIScreen.main.scale)) separator.constrain(to: view, trailingInset: 0, leadingInset: 0) separator.topAnchor.constraint(equalTo: segmentedControl.bottomAnchor, constant: 10).isActive = true @@ -144,26 +162,56 @@ extension HIHomeViewController { func setUpCountdown() { view.addSubview(countdownFrameView) countdownFrameView.translatesAutoresizingMaskIntoConstraints = false - countdownFrameView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8).isActive = true - countdownFrameView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true var countdownFrameConstant: CGFloat = 1.0 if UIDevice.current.userInterfaceIdiom == .pad { - countdownFrameConstant = 1.2 + countdownFrameConstant = 1.7 } else if UIScreen.main.bounds.width < 375.0 { countdownFrameConstant = 0.9 } + countdownFrameView.topAnchor.constraint(equalTo: bannerFrameView.bottomAnchor, constant: 77 * countdownFrameConstant).isActive = true + countdownFrameView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true let widthConstant: CGFloat = 329 * countdownFrameConstant let heightConstant: CGFloat = 283 * countdownFrameConstant countdownFrameView.widthAnchor.constraint(equalToConstant: widthConstant).isActive = true countdownFrameView.heightAnchor.constraint(equalToConstant: heightConstant).isActive = true - - countdownViewController.view.translatesAutoresizingMaskIntoConstraints = false countdownFrameView.addSubview(countdownViewController.view) - countdownViewController.view.topAnchor.constraint(equalTo: countdownFrameView.centerYAnchor, constant: 10).isActive = true + countdownViewController.view.translatesAutoresizingMaskIntoConstraints = false + countdownViewController.view.topAnchor.constraint(equalTo: countdownFrameView.topAnchor).isActive = true countdownViewController.view.heightAnchor.constraint(equalTo: countdownFrameView.heightAnchor, multiplier: 0.3).isActive = true countdownViewController.view.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true countdownViewController.didMove(toParent: self) } + func setUpBanner() { + view.addSubview(bannerFrameView) + bannerFrameView.translatesAutoresizingMaskIntoConstraints = false + bannerFrameView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true + bannerFrameView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true + bannerFrameView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true + var bannerFrameConstant: CGFloat = 1.0 + var bannerFrameTopAnchorConstant: CGFloat = 1.0 + var bannerFrameHeightConstant: CGFloat = 1.0 + if UIDevice.current.userInterfaceIdiom == .pad { + bannerFrameConstant = -0.5 + bannerFrameTopAnchorConstant = 1.9 + bannerFrameHeightConstant = 1.2 + } else if UIScreen.main.bounds.width < 375.0 { + bannerFrameConstant = 0.9 + bannerFrameTopAnchorConstant = 0.9 + bannerFrameHeightConstant = 0.9 + } + bannerFrameView.topAnchor.constraint(equalTo: view.topAnchor, constant: 31.5 * bannerFrameTopAnchorConstant).isActive = true + //let widthConstant: CGFloat = 290 + let heightConstant: CGFloat = 84 * bannerFrameHeightConstant + //bannerFrameView.widthAnchor.constraint(equalToConstant: widthConstant).isActive = true + bannerFrameView.heightAnchor.constraint(equalToConstant: heightConstant).isActive = true + bannerFrameView.addSubview(bannerViewController.view) + bannerViewController.view.translatesAutoresizingMaskIntoConstraints = false + bannerViewController.view.topAnchor.constraint(equalTo: bannerFrameView.centerYAnchor, constant: 10.0 * bannerFrameConstant).isActive = true + //bannerViewController.view.heightAnchor.constraint(equalTo: bannerFrameView.heightAnchor).isActive = true + //bannerViewController.view.heightAnchor.constraint(equalTo: bannerFrameView.heightAnchor, multiplier: 0.3).isActive = true + bannerViewController.view.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true + bannerViewController.didMove(toParent: self) + } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) @@ -175,7 +223,10 @@ extension HIHomeViewController { extension HIHomeViewController { @objc dynamic override func setUpBackgroundView() { super.setUpBackgroundView() - backgroundView.image = #imageLiteral(resourceName: "ScheduleBackground") + backgroundView.image = #imageLiteral(resourceName: "HomeBackground") + if UIDevice.current.userInterfaceIdiom == .pad { + backgroundView.image = #imageLiteral(resourceName: "BackgroundPad") + } } } @@ -195,11 +246,13 @@ extension HIHomeViewController: HICountdownViewControllerDelegate { let displayText = staticDataStore[countdownDataStoreIndex].displayText if currDate > now { // Displays before and during the event - super.setCustomTitle(customTitle: displayText) +// super.setCustomTitle(customTitle: displayText) + bannerViewController.updateLabel(with: displayText) return currDate } else { // Displays after the event ends - super.setCustomTitle(customTitle: "What's Cooking?") +// super.setCustomTitle(customTitle: "MEMORIES MADE") + bannerViewController.updateLabel(with: "MEMORIES MADE") } countdownDataStoreIndex += 1 } diff --git a/HackIllinois/ViewControllers/HILeaderboardListViewController.swift b/HackIllinois/ViewControllers/HILeaderboardListViewController.swift index b39b476b..20c06fa5 100644 --- a/HackIllinois/ViewControllers/HILeaderboardListViewController.swift +++ b/HackIllinois/ViewControllers/HILeaderboardListViewController.swift @@ -36,18 +36,19 @@ extension HILeaderboardListViewController { cell <- leaderboardProfile cell.indexPath = indexPath cell.rankLabel.text = "\((indexPath.row) + 1)" - if indexPath.row % 2 == 0 { - cell.backgroundColor = #colorLiteral(red: 0.968627451, green: 0.9568627451, blue: 0.8274509804, alpha: 1) - } else { - cell.backgroundColor = #colorLiteral(red: 0.9098039216, green: 0.8431372549, blue: 0.6470588235, alpha: 1) - } + cell.backgroundColor = #colorLiteral(red: 0.7882352941, green: 0.8235294118, blue: 0.8980392157, alpha: 1) + tableView.separatorStyle = .singleLine + tableView.separatorInset = UIEdgeInsets() + tableView.separatorColor = #colorLiteral(red: 0.04009541315, green: 0.1307413591, blue: 0.3802352191, alpha: 1) // Round certain corners based on row if indexPath.row == 0 { - cell.layer.cornerRadius = 8 + cell.layer.cornerRadius = 20 cell.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] } else if indexPath.row == 9 { - cell.layer.cornerRadius = 8 + cell.layer.cornerRadius = 20 cell.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner] + } else { + cell.layer.cornerRadius = 0 } } diff --git a/HackIllinois/ViewControllers/HILeaderboardViewController.swift b/HackIllinois/ViewControllers/HILeaderboardViewController.swift index 7b93a6c3..e9550e03 100644 --- a/HackIllinois/ViewControllers/HILeaderboardViewController.swift +++ b/HackIllinois/ViewControllers/HILeaderboardViewController.swift @@ -69,10 +69,14 @@ extension HILeaderboardViewController { func layoutProfiles() { // Add tableView to handle leaderboard + var padConstant = 1.0 + if UIDevice.current.userInterfaceIdiom == .pad { + padConstant = 2.0 + } let tableView = HITableView() view.addSubview(tableView) tableView.layer.cornerRadius = 8 - tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 15).isActive = true + tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 15 * padConstant).isActive = true tableView.heightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.heightAnchor, multiplier: 0.90).isActive = true tableView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor, multiplier: 0.85).isActive = true tableView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true @@ -86,7 +90,7 @@ extension HILeaderboardViewController { override func viewDidLoad() { _fetchedResultsController = fetchedResultsController as? NSFetchedResultsController setupRefreshControl() - setCustomTitle(customTitle: "Leaderboard") + setCustomTitle(customTitle: "LEADERBOARD") super.viewDidLoad() } } diff --git a/HackIllinois/ViewControllers/HILoginSelectionViewController.swift b/HackIllinois/ViewControllers/HILoginSelectionViewController.swift index 596536f5..51a39981 100644 --- a/HackIllinois/ViewControllers/HILoginSelectionViewController.swift +++ b/HackIllinois/ViewControllers/HILoginSelectionViewController.swift @@ -14,7 +14,7 @@ import Foundation import UIKit import HIAPI -protocol HILoginSelectionViewControllerDelegate: class { +protocol HILoginSelectionViewControllerDelegate: AnyObject { func loginSelectionViewController(_ loginSelectionViewController: HILoginSelectionViewController, didMakeLoginSelection selection: HIAPI.AuthService.OAuthProvider) } @@ -23,7 +23,11 @@ class HILoginSelectionViewController: HIBaseViewController { weak var delegate: HILoginSelectionViewControllerDelegate? private let logoImage = HIImageView { $0.translatesAutoresizingMaskIntoConstraints = false - $0.hiImage = \.loginLogo + if UIDevice.current.userInterfaceIdiom == .pad { + $0.hiImage = \.loginLogoPad + } else { + $0.hiImage = \.loginLogo + } $0.contentMode = .scaleAspectFit } private let welcomeHeader = HILabel(style: .welcomeTitle) @@ -49,7 +53,11 @@ class HILoginSelectionViewController: HIBaseViewController { @objc dynamic override func setUpBackgroundView() { super.setUpBackgroundView() - backgroundView.image = #imageLiteral(resourceName: "Login") + if UIDevice.current.userInterfaceIdiom == .pad { + backgroundView.image = UIImage(named: "LoginBackgroundPad") + } else { + backgroundView.image = UIImage(named: "LoginBackgroundPhone") + } } } @@ -64,24 +72,26 @@ extension HILoginSelectionViewController { view.addSubview(tableView) if UIDevice.current.userInterfaceIdiom == .pad { tableView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true - tableView.widthAnchor.constraint(equalToConstant: 220).isActive = true - tableView.heightAnchor.constraint(equalToConstant: 240).isActive = true - tableView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 100).isActive = true - logoImage.bottomAnchor.constraint(equalTo: tableView.topAnchor, constant: -50).isActive = true + tableView.widthAnchor.constraint(equalToConstant: 700).isActive = true + tableView.heightAnchor.constraint(equalToConstant: 370).isActive = true + tableView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 150).isActive = true + logoImage.bottomAnchor.constraint(equalTo: tableView.topAnchor, constant: -20).isActive = true logoImage.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true + logoImage.heightAnchor.constraint(equalToConstant: 250).isActive = true welcomeHeader.text = "WELCOME TO" welcomeHeader.bottomAnchor.constraint(equalTo: logoImage.topAnchor, constant: -25).isActive = true welcomeHeader.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true - welcomeHeader.heightAnchor.constraint(equalToConstant: 22).isActive = true + welcomeHeader.heightAnchor.constraint(equalToConstant: 30).isActive = true } else { tableView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true tableView.widthAnchor.constraint(equalToConstant: 220).isActive = true tableView.heightAnchor.constraint(equalToConstant: 240).isActive = true tableView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 175).isActive = true - logoImage.bottomAnchor.constraint(equalTo: tableView.topAnchor, constant: -50).isActive = true + logoImage.bottomAnchor.constraint(equalTo: tableView.topAnchor, constant: -20).isActive = true logoImage.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true + logoImage.heightAnchor.constraint(equalToConstant: 250).isActive = true welcomeHeader.text = "WELCOME TO" - welcomeHeader.bottomAnchor.constraint(equalTo: logoImage.topAnchor, constant: -25).isActive = true + welcomeHeader.bottomAnchor.constraint(equalTo: logoImage.topAnchor, constant: -15).isActive = true welcomeHeader.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true welcomeHeader.heightAnchor.constraint(equalToConstant: 22).isActive = true } @@ -164,11 +174,11 @@ extension HILoginSelectionViewController { // MARK: - UITableViewDelegate extension HILoginSelectionViewController { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 45 + return UIDevice.current.userInterfaceIdiom == .pad ? 70 : 45 } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { - return 30 + return 40 } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { diff --git a/HackIllinois/ViewControllers/HINavigationController.swift b/HackIllinois/ViewControllers/HINavigationController.swift index 60734763..f570e56b 100644 --- a/HackIllinois/ViewControllers/HINavigationController.swift +++ b/HackIllinois/ViewControllers/HINavigationController.swift @@ -61,7 +61,6 @@ class HINavigationController: UINavigationController { infoTitle.constrain(height: 10) infoTitle.translatesAutoresizingMaskIntoConstraints = false infoTitle.isHidden = infoTitleIsHidden - infoTitle.text = "All times are in CDT" additionalSafeAreaInsets.top = 15 navigationBar.titleTextAttributes = [ diff --git a/HackIllinois/ViewControllers/HIOnboardingViewController.swift b/HackIllinois/ViewControllers/HIOnboardingViewController.swift index f401758c..dfc190d6 100644 --- a/HackIllinois/ViewControllers/HIOnboardingViewController.swift +++ b/HackIllinois/ViewControllers/HIOnboardingViewController.swift @@ -18,7 +18,7 @@ class HIOnboardingViewController: HIBaseViewController { //source: https://medium.com/swlh/swift-carousel-759800aa2952 // MARK: - Subviews private var carouselView: HICarouselView? - let animationView = AnimationView(name: "DarkVespaText") + let animationView = LottieAnimationView(name: "DarkVespaText") var shouldDisplayAnimationOnNextAppearance = true // MARK: - Properties @@ -48,7 +48,8 @@ extension HIOnboardingViewController { carouselData.append(.init(image: UIImage(named: "iPadOnboarding1"), titleText: "Schedule", descriptionText: "See the times and details of all of our events.")) carouselData.append(.init(image: UIImage(named: "iPadOnboarding2"), titleText: "Scan for Points", descriptionText: "Scan QR codes at events to obtain points!")) carouselData.append(.init(image: UIImage(named: "iPadOnboarding3"), titleText: "Profile", descriptionText: "View your points, tier, and other personal information.")) - carouselData.append(.init(image: UIImage(named: "iPadOnboarding4"), titleText: "Leaderboard", descriptionText: "See who is leading HackIllinois 2022 in points earned!")) + carouselData.append(.init(image: UIImage(named: "iPadOnboarding4"), titleText: "Leaderboard", + descriptionText: "See who is leading HackIllinois 2022 in points earned!")) } else { carouselData.append(.init(image: #imageLiteral(resourceName: "Onboarding0"), titleText: "Welcome!", descriptionText: "Swipe to see what our app has to offer!")) carouselData.append(.init(image: UIImage(named: "Onboarding1"), titleText: "Countdown", descriptionText: "See how much time you have left to hack!")) diff --git a/HackIllinois/ViewControllers/HIProfileCardView.swift b/HackIllinois/ViewControllers/HIProfileCardView.swift new file mode 100644 index 00000000..0743b73a --- /dev/null +++ b/HackIllinois/ViewControllers/HIProfileCardView.swift @@ -0,0 +1,280 @@ +// +// HIProfileViewController.swift +// HackIllinois +// +// Created by HackIllinois Team on 11/30/22. +// Copyright © 2022 HackIllinois. All rights reserved. +// This file is part of the Hackillinois iOS App. +// The Hackillinois iOS App is open source software, released under the University of +// Illinois/NCSA Open Source License. You should have received a copy of +// this license in a file with the distribution. +// + +import SwiftUI +import HIAPI + +struct HIProfileCardView: View { + let firstName: String + let lastName: String + let dietaryRestrictions: [String] + let points: Int + let tier: String + let foodWave: Int + let background = (\HIAppearance.profileCardBackground).value + let baseText = (\HIAppearance.profileBaseText).value + let id: String + let isIpad = UIDevice.current.userInterfaceIdiom == .pad + @State var flipped: Bool = false + @State var ticketRotation = 0.0 + @State var contentRotation = 0.0 + @State var flipping = false + @State var startFetchingQR = false + @State var qrInfo = "" + + var body: some View { + ScrollView { + ZStack { + Rectangle() + .frame(width: isIpad ? UIScreen.main.bounds.width - 56 * 2 : UIScreen.main.bounds.width - 32 * 2, + height: isIpad ? 978 + 80 : 569 + 40) + .cornerRadius(UIDevice.current.userInterfaceIdiom == .pad ? 40 : 20) + .foregroundColor(Color(background)) + VStack(spacing: 0) { + Text(formatName()) + .font(Font(HIAppearance.Font.profileName ?? .systemFont(ofSize: 20))) + .foregroundColor(Color(baseText)) + .padding(isIpad ? 32 : 16) + HStack(spacing: isIpad ? 16 : 8) { + Rectangle() + .frame(width: isIpad ? 146 : 73, height: isIpad ? 48 : 24) + .cornerRadius(isIpad ? 40 : 20) + .foregroundColor(.white) + .overlay( + Text("\(points) pts") + .font(Font(HIAppearance.Font.profileSubtitle ?? .systemFont(ofSize: 12))) + .foregroundColor(Color(baseText)) + ) + Rectangle() + .frame(width: isIpad ? 204 : 102, height: isIpad ? 48 : 24) + .cornerRadius(isIpad ? 40 : 20) + .foregroundColor(.white) + .overlay( + Text(tier) + .font(Font(HIAppearance.Font.profileSubtitle ?? .systemFont(ofSize: 12))) + .foregroundColor(Color(baseText)) + ) + + Rectangle() + .frame(width: isIpad ? 136 : 68, height: isIpad ? 48 : 24) + .cornerRadius(isIpad ? 40 : 20) + .foregroundColor(.white) + .overlay( + Text("Wave \(foodWave)") + .font(Font(HIAppearance.Font.profileSubtitle ?? .systemFont(ofSize: 12))) + .foregroundColor(Color(baseText)) + ) + } + ZStack { + if flipped { + ZStack { + Image("TicketFront") + .resizable() + .frame(width: isIpad ? 298 : 190.6, height: isIpad ? 544 : 347.67) + .padding(isIpad ? 48 : 24) + } + } else { + Image("TicketBack") + .resizable() + .frame(width: isIpad ? 298 : 190.6, height: isIpad ? 544 : 347.67) + .padding(isIpad ? 48 : 24) + Image(uiImage: UIImage(data: getQRCodeDate(text: qrInfo)!)!) + .resizable() + .frame(width: isIpad ? 200 : 132, height: isIpad ? 200 : 132) + } + } + .rotation3DEffect(.degrees(contentRotation), axis: (x: 0, y: 1, z: 0)) + .onTapGesture { + if !flipping { + flipFlashcard() + } + } + .rotation3DEffect(.degrees(ticketRotation), axis: (x: 0, y: 1, z: 0)) + + VStack(spacing: isIpad ? 32 : 16) { + Text("Dietary Restrictions") + .font(Font(HIAppearance.Font.profileDietaryRestrictions ?? .systemFont(ofSize: 16))) + .foregroundColor(Color(baseText)) + + + VStack { + HStack(spacing: 4) { + ForEach(dietaryRestrictions, id: \.self) { diet in + let index = dietaryRestrictions.firstIndex(of: diet) ?? 0 + if index < 3 { + Rectangle() + .frame(width: isIpad ? 204 : 92, height: isIpad ? 48 : 24) + .cornerRadius(isIpad ? 40 : 20) + .foregroundColor(Color(dietBackgroundColor(diet: diet))) + .overlay( + Text(dietString(diet: diet)) + .font(Font(HIAppearance.Font.profileDietaryRestrictionsLabel ?? .systemFont(ofSize: 12))) + .foregroundColor(dietTextColor(diet: diet)) + ) + } + } + } + HStack(spacing: 4) { + ForEach(dietaryRestrictions, id: \.self) { diet in + let index = dietaryRestrictions.firstIndex(of: diet) ?? 0 + if index > 2 { + Rectangle() + .frame(width: isIpad ? 204 : 92, height: isIpad ? 48 : 24) + .cornerRadius(isIpad ? 40 : 20) + .foregroundColor(Color(dietBackgroundColor(diet: diet))) + .overlay( + Text(dietString(diet: diet)) + .font(Font(HIAppearance.Font.profileDietaryRestrictionsLabel ?? .systemFont(ofSize: 12))) + .foregroundColor(dietTextColor(diet: diet)) + ) + } + } + } + } + .frame(width: isIpad ? UIScreen.main.bounds.width - 56 * 3.5 : UIScreen.main.bounds.width - 32 * 3.5) + } + } + } + .padding(.top, 24) + } + .preferredColorScheme(.dark) + .onAppear { + startFetchingQR = true + QRFetchLoop() + } + .onDisappear { + startFetchingQR = false + } + } + + func formatName() -> String { + if lastName.count + firstName.count > 20 { + return firstName + " " + lastName.prefix(1) + "." + } else { + return firstName + " " + lastName + } + } + + func getQRCodeDate(text: String) -> Data? { + guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil } + let data = text.data(using: .ascii, allowLossyConversion: false) + filter.setValue(data, forKey: "inputMessage") + guard let ciimage = filter.outputImage else { return nil } + let transform = CGAffineTransform(scaleX: 10, y: 10) + let scaledCIImage = ciimage.transformed(by: transform) + let uiimage = UIImage(ciImage: scaledCIImage) + return uiimage.pngData()! + } + + func dietString(diet: String) -> String { + switch diet { + case "Vegetarian": + return "Vegetarian" + case "Vegan": + return "Vegan" + case "Gluten-Free": + return "Gluten-Free" + case "Lactose-Intolerant": + return "Dairy Free" + case "Other": + return "Other" + case "None": + return "None" + case "": + return "None" + default: + return "Custom" + } + } + + func dietTextColor(diet: String) -> Color { + switch diet { + case "Vegetarian", "Vegan", "Gluten-Free", "Lactose-Intolerant", "Other": + return Color(baseText) + case "None", "": + return .white + default: + return .white + } + } + + func dietBackgroundColor(diet: String) -> UIColor { + switch diet { + case "Vegetarian": + return (\HIAppearance.profileCardVegetarian).value + case "Vegan": + return (\HIAppearance.profileCardVegan).value + case "Gluten-Free": + return (\HIAppearance.profileCardGlutenFree).value + case "Lactose-Intolerant": + return (\HIAppearance.profileCardLactoseIntolerant).value + case "Other": + return (\HIAppearance.profileCardOther).value + case "None" , "": + return (\HIAppearance.profileCardNone).value + default: + return (\HIAppearance.profileCardNone).value + } + } + + func flipFlashcard() { + let animationTime = 0.5 + flipping = true + withAnimation(Animation.linear(duration: animationTime)) { + ticketRotation += 180 + flipping = false + } + withAnimation(Animation.linear(duration: 0.001).delay(animationTime / 2)) { + contentRotation += 180 + flipped.toggle() + } + } + + func QRFetchLoop() { + if startFetchingQR { + getQRInfo() + DispatchQueue.main.asyncAfter(deadline: .now() + 15) { + QRFetchLoop() + } + } + } + + func getQRInfo() { + guard let user = HIApplicationStateController.shared.user else { return } + HIAPI.UserService.getQR() + .onCompletion { result in + do { + let (qr, _) = try result.get() + DispatchQueue.main.async { + self.qrInfo = qr.qrInfo + } + } catch { + print("An error has occurred \(error)") + } + } + .authorize(with: user) + .launch() + } +} + +struct HIProfileCardView_Previews: PreviewProvider { + static var previews: some View { + HIProfileCardView(firstName: "first", + lastName: "last", + dietaryRestrictions: ["Vegetarian", "Lactose-Intolerant", "None", "no beef"], + points: 100, + tier: "no tier", + foodWave: 1, + id: "https://www.hackillinois.org" + ) + } +} diff --git a/HackIllinois/ViewControllers/HIProfileViewController.swift b/HackIllinois/ViewControllers/HIProfileViewController.swift index 135a98ea..8307da49 100644 --- a/HackIllinois/ViewControllers/HIProfileViewController.swift +++ b/HackIllinois/ViewControllers/HIProfileViewController.swift @@ -15,44 +15,25 @@ import UIKit import CoreData import HIAPI import CoreImage.CIFilterBuiltins +import SwiftUI class HIProfileViewController: HIBaseViewController { + deinit { + NotificationCenter.default.removeObserver(self) + } // MARK: - Properties + private var profile = HIProfile() + private var profileTier = "" + private var addedProfileCard = false + private var dietaryRestrictions = [String]() + private var profileCardController: UIHostingController? private let errorView = HIErrorView(style: .profile) private let logoutButton = HIButton { $0.tintHIColor = \.baseText $0.backgroundHIColor = \.clear $0.baseImage = #imageLiteral(resourceName: "LogoutButton") } - private let contentView = HIView { - $0.translatesAutoresizingMaskIntoConstraints = false - $0.backgroundHIColor = \.clear - $0.layer.cornerRadius = 15 - } - private let scrollView = UIScrollView(frame: .zero) - private let profilePictureView = HIImageView { - $0.layer.cornerRadius = 8 - $0.layer.masksToBounds = true - $0.translatesAutoresizingMaskIntoConstraints = false - } - private let profileNameView = HILabel(style: .profileName) { - $0.text = "" - } - private let discordImageView = HIImageView() - private let profileDiscordView = HILabel(style: .profileSubtitle) { - $0.text = "" - } - private let profilePointsView = HIView { - $0.translatesAutoresizingMaskIntoConstraints = false - $0.backgroundHIColor = \.profileContainerTint - $0.layer.cornerRadius = 25 - } - private let profilePointsLabel = HILabel(style: .profileNumberFigure) { - $0.text = "" - } - private let profileTierLabel = HILabel(style: .profileTier) { - $0.text = "" - } + @objc dynamic override func setUpBackgroundView() { super.setUpBackgroundView() backgroundView.image = #imageLiteral(resourceName: "ProfileBackground") @@ -69,29 +50,45 @@ extension HIProfileViewController { // MARK: - UIViewController extension HIProfileViewController { + override func loadView() { super.loadView() - if HIApplicationStateController.shared.isGuest { + guard let user = HIApplicationStateController.shared.user else { return } + if HIApplicationStateController.shared.isGuest || user.roles.contains(.staff) { layoutErrorView() } else { - layoutProfile() + updateProfile() + reloadProfile() + NotificationCenter.default.addObserver(self, selector: #selector(updateOnCheckin), name: .qrCodeSuccessfulScan, object: nil) } } override func viewDidLoad() { super.viewDidLoad() - super.setCustomTitle(customTitle: "Profile") + super.setCustomTitle(customTitle: "PROFILE") } - func layoutProfile() { - layoutButtons() - layoutScrollView() - layoutContentView() - layoutProfileNameView() - layoutProfileDiscordView() - layoutProfilePicture() - layoutPoints() - contentView.bottomAnchor.constraint(equalTo: profilePointsView.bottomAnchor, constant: 75).isActive = true - NotificationCenter.default.addObserver(self, selector: #selector(reloadProfile), name: .qrCodeSuccessfulScan, object: nil) + + func updateProfileCard() { + if addedProfileCard == true { + profileCardController?.view.removeFromSuperview() + view.willRemoveSubview(profileCardController!.view) + profileCardController?.removeFromParent() + } + profileCardController = UIHostingController(rootView: HIProfileCardView(firstName: profile.firstName, + lastName: profile.lastName, + dietaryRestrictions: dietaryRestrictions, + points: profile.points, + tier: profileTier, + foodWave: profile.foodWave, + id: profile.id + )) + + addChild(profileCardController!) + profileCardController!.view.backgroundColor = .clear + profileCardController!.view.frame = view.bounds + view.addSubview(profileCardController!.view) + addedProfileCard = true } + func layoutErrorView() { errorView.delegate = self view.addSubview(errorView) @@ -100,99 +97,40 @@ extension HIProfileViewController { errorView.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true errorView.heightAnchor.constraint(equalToConstant: 100).isActive = true } - func layoutScrollView() { - scrollView.translatesAutoresizingMaskIntoConstraints = false - scrollView.alwaysBounceVertical = true - contentView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(scrollView) - scrollView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true - scrollView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true - scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true - scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true - scrollView.addSubview(contentView) - } - func layoutButtons() { + + func layoutLogOutButton() { self.navigationItem.rightBarButtonItem = logoutButton.toBarButtonItem() logoutButton.constrain(width: 25, height: 25) logoutButton.addTarget(self, action: #selector(didSelectLogoutButton(_:)), for: .touchUpInside) } - func layoutContentView() { - scrollView.addSubview(contentView) - if UIDevice.current.userInterfaceIdiom == .pad { - contentView.centerYAnchor.constraint(equalTo: scrollView.centerYAnchor).isActive = true - } else { - contentView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 25).isActive = true - } - contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true - contentView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true - contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor, multiplier: 0.75).isActive = true - contentView.layer.contents = #imageLiteral(resourceName: "ProfileContainer").cgImage - } - func layoutPoints() { - contentView.addSubview(profilePointsView) - profilePointsView.topAnchor.constraint(equalTo: profilePictureView.bottomAnchor, constant: 35).isActive = true - profilePointsView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true - profilePointsView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.72).isActive = true - profilePointsView.heightAnchor.constraint(equalToConstant: 100).isActive = true - profilePointsView.addSubview(profileTierLabel) - profileTierLabel.centerYAnchor.constraint(equalTo: profilePointsView.centerYAnchor, constant: -15).isActive = true - profileTierLabel.centerXAnchor.constraint(equalTo: profilePointsView.centerXAnchor).isActive = true - profilePointsView.addSubview(profilePointsLabel) - profilePointsLabel.centerYAnchor.constraint(equalTo: profilePointsView.centerYAnchor, constant: 15).isActive = true - profilePointsLabel.centerXAnchor.constraint(equalTo: profilePointsView.centerXAnchor).isActive = true - } - func layoutProfileDiscordView() { - contentView.addSubview(profileDiscordView) - profileDiscordView.topAnchor.constraint(equalTo: profileNameView.bottomAnchor, constant: 5).isActive = true - profileDiscordView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor, constant: 10).isActive = true - contentView.addSubview(discordImageView) - discordImageView.translatesAutoresizingMaskIntoConstraints = false - discordImageView.topAnchor.constraint(equalTo: profileNameView.bottomAnchor, constant: 5).isActive = true - discordImageView.trailingAnchor.constraint(equalTo: profileDiscordView.leadingAnchor, constant: -3).isActive = true - } - func layoutProfileNameView() { - contentView.addSubview(profileNameView) - profileNameView.constrain(to: contentView, topInset: 50) - profileNameView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true - profileNameView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.9).isActive = true - } - func layoutProfilePicture() { - contentView.addSubview(profilePictureView) - profilePictureView.topAnchor.constraint(equalTo: profileDiscordView.bottomAnchor, constant: 35).isActive = true - profilePictureView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true - profilePictureView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.75).isActive = true - profilePictureView.heightAnchor.constraint(equalTo: profilePictureView.widthAnchor).isActive = true - } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - scrollView.setContentOffset(.zero, animated: true) - updateProfile() - reloadProfile() + @objc func updateOnCheckin(_ notification: Notification) { + guard let user = HIApplicationStateController.shared.user else { return } + if !HIApplicationStateController.shared.isGuest && !user.roles.contains(.staff) { + reloadProfile() + } } func updateProfile() { - guard let profile = HIApplicationStateController.shared.profile else { return } - view.layoutIfNeeded() - - if let url = URL(string: profile.avatarUrl), let imgValue = HIConstants.PROFILE_IMAGES[url.absoluteString] { - profilePictureView.changeImage(newImage: imgValue) - } - profileNameView.text = profile.firstName + " " + profile.lastName - profilePointsLabel.text = "\(profile.points) Points" + updateProfileCard() if tiers.count > 0 { var max_threshold = 0 for tier in tiers where (profile.points >= tier.threshold && tier.threshold >= max_threshold) { - profileTierLabel.text = "Tier: \(tier.name.capitalized)" + profileTier = "\(tier.name.capitalized) Tier" max_threshold = tier.threshold } } else { - profileTierLabel.text = "Tier: None" + profileTier = "Tier: None" + } + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + guard let user = HIApplicationStateController.shared.user else { return } + layoutLogOutButton() + if !HIApplicationStateController.shared.isGuest && !user.roles.contains(.staff) { + reloadProfile() } - profileDiscordView.text = profile.discord - discordImageView.image = #imageLiteral(resourceName: "Discord") } - } // MARK: - Actions @@ -211,7 +149,6 @@ extension HIProfileViewController { alert.popoverPresentationController?.sourceView = sender present(alert, animated: true, completion: nil) } - } // MARK: - API @@ -222,22 +159,18 @@ extension HIProfileViewController { .onCompletion { [weak self] result in do { let (apiProfile, _) = try result.get() - var profile = HIProfile() - profile.id = apiProfile.id - profile.firstName = apiProfile.firstName - profile.lastName = apiProfile.lastName - profile.points = apiProfile.points - profile.timezone = apiProfile.timezone - profile.discord = apiProfile.discord - profile.avatarUrl = apiProfile.avatarUrl + self?.profile.id = apiProfile.id + self?.profile.firstName = apiProfile.firstName + self?.profile.lastName = apiProfile.lastName + self?.profile.points = apiProfile.points + self?.profile.foodWave = apiProfile.foodWave DispatchQueue.main.async { - NotificationCenter.default.post(name: .loginProfile, object: nil, userInfo: ["profile": profile]) + NotificationCenter.default.post(name: .loginProfile, object: nil, userInfo: ["profile": self?.profile]) self?.updateProfile() } } catch { print("Failed to reload profile with error: \(error)") } - } .authorize(with: user) .launch() @@ -254,8 +187,22 @@ extension HIProfileViewController { } } .launch() - } + HIAPI.RegistrationService.getAttendee() + .onCompletion { [weak self] result in + do { + let (apiAttendeeContainer, _) = try result.get() + self?.dietaryRestrictions = apiAttendeeContainer.attendee.dietary ?? [] + DispatchQueue.main.async { + self?.updateProfile() + } + } catch { + print("An error has occurred \(error)") + } + } + .authorize(with: user) + .launch() + } } // MARK: - HIErrorViewDelegate diff --git a/HackIllinois/ViewControllers/HIScanQRCodeViewController.swift b/HackIllinois/ViewControllers/HIScanQRCodeViewController.swift index 3e7af265..0b45d515 100644 --- a/HackIllinois/ViewControllers/HIScanQRCodeViewController.swift +++ b/HackIllinois/ViewControllers/HIScanQRCodeViewController.swift @@ -12,10 +12,12 @@ import Foundation import UIKit +import Combine import AVKit import CoreData import APIManager import HIAPI +import SwiftUI class HIScanQRCodeViewController: HIBaseViewController { private var captureSession: AVCaptureSession? @@ -29,24 +31,28 @@ class HIScanQRCodeViewController: HIBaseViewController { private var previewLayer: AVCaptureVideoPreviewLayer? let hapticGenerator = UINotificationFeedbackGenerator() private let pickerView = UIPickerView() - private var loadFailed = false var respondingToQRCodeFound = true - private let closeButton = HIButton { $0.tintHIColor = \.action $0.backgroundHIColor = \.clear - $0.activeImage = #imageLiteral(resourceName: "DarkCloseButton") - $0.baseImage = #imageLiteral(resourceName: "DarkCloseButton") + $0.activeImage = #imageLiteral(resourceName: "CloseButton") + $0.baseImage = #imageLiteral(resourceName: "CloseButton") } private let errorView = HIErrorView(style: .codePopup) + private var selectedEventID = "" + private var cancellables = Set() + var currentUserID = "" + var currentUserName = "" + var dietaryString = "" } // MARK: - UIViewController extension HIScanQRCodeViewController { override func loadView() { super.loadView() - if HIApplicationStateController.shared.isGuest { + guard let user = HIApplicationStateController.shared.user else { return } + if HIApplicationStateController.shared.isGuest && !user.roles.contains(.staff) { let background = #imageLiteral(resourceName: "ProfileBackground") let imageView: UIImageView = UIImageView(frame: view.bounds) view.addSubview(imageView) @@ -59,6 +65,17 @@ extension HIScanQRCodeViewController { containerView.constrain(to: view, trailingInset: 0, leadingInset: 0) containerView.addSubview(previewView) setupCaptureSession() + if user.roles.contains(.staff) { + let observable = HIStaffButtonViewObservable() + observable.$selectedEventId.sink { eventID in + self.selectedEventID = eventID + }.store(in: &cancellables) + let staffButtonController = UIHostingController(rootView: HIStaffButtonView(observable: observable)) + addChild(staffButtonController) + staffButtonController.view.backgroundColor = .clear + staffButtonController.view.frame = CGRect(x: 0, y: 100, width: Int(view.frame.maxX), height: 600) + view.addSubview(staffButtonController.view) + } } view.addSubview(closeButton) closeButton.addTarget(self, action: #selector(didSelectCloseButton(_:)), for: .touchUpInside) @@ -142,22 +159,19 @@ extension HIScanQRCodeViewController: AVCaptureMetadataOutputObjectsDelegate { func setupCaptureSession() { captureSession = AVCaptureSession() let metadataOutput = AVCaptureMetadataOutput() - guard let captureSession = captureSession, let videoCaptureDevice = AVCaptureDevice.default(for: .video), let videoInput = try? AVCaptureDeviceInput(device: videoCaptureDevice), captureSession.canAddInput(videoInput), captureSession.canAddOutput(metadataOutput) else { - loadFailed = true - return + loadFailed = true + return } - captureSession.addInput(videoInput) captureSession.addOutput(metadataOutput) metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) metadataOutput.metadataObjectTypes = [.qr] - let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) previewLayer.videoGravity = .resizeAspectFill self.previewLayer = previewLayer @@ -167,12 +181,11 @@ extension HIScanQRCodeViewController: AVCaptureMetadataOutputObjectsDelegate { func setFrameForPreviewLayer() { guard let previewLayer = previewLayer else { return } - previewLayer.frame = previewView.layer.bounds - guard previewLayer.connection?.isVideoOrientationSupported == true else { return } - - switch UIApplication.shared.statusBarOrientation { +#warning("Not Tested") + let interfaceOrientation = UIApplication.shared.windows.first?.windowScene?.interfaceOrientation + switch interfaceOrientation { case .portrait, .unknown: previewLayer.connection?.videoOrientation = .portrait case .portraitUpsideDown: @@ -181,69 +194,192 @@ extension HIScanQRCodeViewController: AVCaptureMetadataOutputObjectsDelegate { previewLayer.connection?.videoOrientation = .landscapeLeft case .landscapeRight: previewLayer.connection?.videoOrientation = .landscapeRight + case .none: + break @unknown default: previewLayer.connection?.videoOrientation = .portrait } } - func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { - guard respondingToQRCodeFound else { return } - let meta = metadataObjects.first as? AVMetadataMachineReadableCodeObject - let code = meta?.stringValue ?? "" - respondingToQRCodeFound = false - HIAPI.EventService.checkIn(code: code) + func handleCheckInAlert(status: String, newPoints: Int) { + var alertTitle = "" + var alertMessage = "" + switch status { + case "Success": + alertTitle = "Success!" + alertMessage = "You received \(newPoints) points!" + case "InvalidCode": + alertTitle = "Error!" + alertMessage = "This code doesn't seem to be correct." + self.respondingToQRCodeFound = true + case "InvalidTime": + alertTitle = "Error!" + alertMessage = "Make sure you have the right time." + self.respondingToQRCodeFound = true + case "AlreadyCheckedIn": + alertTitle = "Error!" + alertMessage = "Looks like you're already checked in." + self.respondingToQRCodeFound = true + default: + alertTitle = "Error!" + alertMessage = "Something isn't quite right." + self.respondingToQRCodeFound = true + } + let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert) + if alertTitle == "Success!" { + alert.addAction( + UIAlertAction(title: "OK", style: .default, handler: { _ in + self.dismiss(animated: true, completion: nil) + //Dismisses view controller + self.didSelectCloseButton(self.closeButton) + NotificationCenter.default.post(name: .qrCodeSuccessfulScan, object: nil) + })) + } else { + alert.addAction( + UIAlertAction(title: "OK", style: .default, handler: { _ in + self.registerForKeyboardNotifications() + })) + } + self.present(alert, animated: true, completion: nil) + + } + + func handleStaffCheckInAlert(status: String) { + var alertTitle = "" + var alertMessage = "" + switch status { + case "Success": + alertTitle = "Success!" + alertMessage = "Name: \(currentUserName)\n Diet: \(dietaryString)" + case "InvalidEventId": + alertTitle = "Error!" + alertMessage = "Invalid Event ID" + self.respondingToQRCodeFound = true + case "BadUserToken": + alertTitle = "Error!" + alertMessage = "BadUserToken" + self.respondingToQRCodeFound = true + case "AlreadyCheckedIn": + alertTitle = "Error!" + alertMessage = "Looks like you're already checked in." + self.respondingToQRCodeFound = true + default: + alertTitle = "Error!" + alertMessage = "Something isn't quite right." + self.respondingToQRCodeFound = true + } + let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert) + if alertTitle == "Success!" { + alert.addAction( + UIAlertAction(title: "OK", style: .default, handler: { _ in + self.dismiss(animated: true, completion: nil) + //Dismisses view controller + self.didSelectCloseButton(self.closeButton) + NotificationCenter.default.post(name: .qrCodeSuccessfulScan, object: nil) + })) + } else { + alert.addAction( + UIAlertAction(title: "OK", style: .default, handler: { _ in + self.registerForKeyboardNotifications() + })) + } + self.present(alert, animated: true, completion: nil) + } + + func staffCheckIn(userID: String, status: String) { + guard let user = HIApplicationStateController.shared.user else { return } + HIAPI.RegistrationService.getAttendeeRegistrationUserID(userID: userID) .onCompletion { result in do { - let (codeResult, _) = try result.get() - let newPoints = codeResult.newPoints - let status = codeResult.status - DispatchQueue.main.async { - var alertTitle = "" - var alertMessage = "" - switch status { - case "Success": - alertTitle = "Success!" - alertMessage = "You received \(newPoints) points!" - case "InvalidCode": - alertTitle = "Error!" - alertMessage = "This code doesn't seem to be correct." - self.respondingToQRCodeFound = true - case "InvalidTime": - alertTitle = "Error!" - alertMessage = "Make sure you have the right time." - self.respondingToQRCodeFound = true - case "AlreadyCheckedIn": - alertTitle = "Error!" - alertMessage = "Looks like you're already checked in." - self.respondingToQRCodeFound = true - default: - alertTitle = "Error!" - alertMessage = "Something isn't quite right." - self.respondingToQRCodeFound = true - } - let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert) - if alertTitle == "Success!" { - alert.addAction( - UIAlertAction(title: "OK", style: .default, handler: { _ in - self.dismiss(animated: true, completion: nil) - //Dismisses view controller - self.didSelectCloseButton(self.closeButton) - NotificationCenter.default.post(name: .qrCodeSuccessfulScan, object: nil) - })) - } else { - alert.addAction( - UIAlertAction(title: "OK", style: .default, handler: { _ in - self.registerForKeyboardNotifications() - })) + let (apiAttendeeContainer, _) = try result.get() + DispatchQueue.main.async { [self] in + dietaryString = "" + for diet in apiAttendeeContainer.dietary ?? [] { + dietaryString += diet + ", " } - self.present(alert, animated: true, completion: nil) + guard let first = apiAttendeeContainer.firstName else { return } + guard let last = apiAttendeeContainer.lastName else { return } + currentUserName = first + " " + last + self.handleStaffCheckInAlert(status: status) } } catch { - print(error, error.localizedDescription) + print("An error has occurred \(error)") } - sleep(2) } - .authorize(with: HIApplicationStateController.shared.user) + .authorize(with: user) .launch() } + + func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { + guard respondingToQRCodeFound else { return } + let meta = metadataObjects.first as? AVMetadataMachineReadableCodeObject + let code = meta?.stringValue ?? "" + guard let user = HIApplicationStateController.shared.user else { return } + if user.roles.contains(.staff) { + if selectedEventID != "" { + if let range = code.range(of: "userToken=") { + let userToken = code[range.upperBound...] + respondingToQRCodeFound = false + HIAPI.EventService.staffCheckIn(userToken: String(userToken), eventId: selectedEventID) + .onCompletion { result in + do { + let (codeResult, _) = try result.get() + DispatchQueue.main.async { [self] in + if let qrInfo = self.decode(code) { + if let userId = qrInfo["userId"] { + currentUserID = userId as? String ?? "" + staffCheckIn(userID: currentUserID, status: codeResult.status) + } + } + } + } catch { + print(error, error.localizedDescription) + } + sleep(2) + } + .authorize(with: HIApplicationStateController.shared.user) + .launch() + } + } + } else { + respondingToQRCodeFound = false + HIAPI.EventService.checkIn(code: code) + .onCompletion { result in + do { + let (codeResult, _) = try result.get() + let status = codeResult.status + DispatchQueue.main.async { + self.handleCheckInAlert(status: codeResult.status, newPoints: codeResult.newPoints) + } + } catch { + print(error, error.localizedDescription) + } + sleep(2) + } + .authorize(with: HIApplicationStateController.shared.user) + .launch() + } + } + func decode(_ token: String) -> [String: AnyObject]? { + let string = token.components(separatedBy: ".") + if string.count == 1 { return nil } + let toDecode = string[1] as String + var stringtoDecode: String = toDecode.replacingOccurrences(of: "-", with: "+") // 62nd char of encoding + stringtoDecode = stringtoDecode.replacingOccurrences(of: "_", with: "/") // 63rd char of encoding + switch stringtoDecode.utf16.count % 4 { + case 2: stringtoDecode = "\(stringtoDecode)==" + case 3: stringtoDecode = "\(stringtoDecode)=" + default: // nothing to do stringtoDecode can stay the same + print("") + } + let dataToDecode = Data(base64Encoded: stringtoDecode, options: []) + let base64DecodedString = NSString(data: dataToDecode!, encoding: String.Encoding.utf8.rawValue) + var values: [String: AnyObject]? + if let string = base64DecodedString { + if let data = string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: true) { + values = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String: AnyObject] + } + } + return values + } } diff --git a/HackIllinois/ViewControllers/HIScheduleViewController.swift b/HackIllinois/ViewControllers/HIScheduleViewController.swift index e97a9790..080dd2d6 100644 --- a/HackIllinois/ViewControllers/HIScheduleViewController.swift +++ b/HackIllinois/ViewControllers/HIScheduleViewController.swift @@ -70,6 +70,9 @@ class HIScheduleViewController: HIEventListViewController { @objc dynamic override func setUpBackgroundView() { super.setUpBackgroundView() backgroundView.image = #imageLiteral(resourceName: "ScheduleBackground") + if UIDevice.current.userInterfaceIdiom == .pad { + backgroundView.image = #imageLiteral(resourceName: "BackgroundPad") + } } } @@ -84,6 +87,9 @@ extension HIScheduleViewController { @objc func didSelectFavoritesIcon(_ sender: UIBarButtonItem) { onlyFavorites = !onlyFavorites sender.image = onlyFavorites ? #imageLiteral(resourceName: "MenuFavorited") : #imageLiteral(resourceName: "MenuUnfavorited") + if UIDevice.current.userInterfaceIdiom == .pad { + sender.image = onlyFavorites ? #imageLiteral(resourceName: "FavoritedPad") : #imageLiteral(resourceName: "UnFavoritedPad") + } updatePredicate() animateReload() } @@ -117,19 +123,22 @@ extension HIScheduleViewController { super.loadView() let items = dataStore.map { $0.displayText } - let segmentedControl = HIScheduleSegmentedControl(titles: items, nums: [25, 26, 27]) + let segmentedControl = HIScheduleSegmentedControl(titles: items, nums: [24, 25, 26]) segmentedControl.addTarget(self, action: #selector(didSelectTab(_:)), for: .valueChanged) segmentedControl.translatesAutoresizingMaskIntoConstraints = false view.addSubview(segmentedControl) + var segmentedControlConstant: CGFloat = 0.0 + if UIDevice.current.userInterfaceIdiom == .pad { + segmentedControlConstant = 40.0 + } - segmentedControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 30).isActive = true - segmentedControl.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 12).isActive = true - segmentedControl.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -12).isActive = true - segmentedControl.heightAnchor.constraint(equalToConstant: 66).isActive = true - + segmentedControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8 + segmentedControlConstant).isActive = true + segmentedControl.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: -34).isActive = true + segmentedControl.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 34).isActive = true + segmentedControl.heightAnchor.constraint(equalToConstant: 66 + segmentedControlConstant).isActive = true let tableView = HITableView() view.addSubview(tableView) - tableView.topAnchor.constraint(equalTo: segmentedControl.bottomAnchor, constant: 10).isActive = true + tableView.topAnchor.constraint(equalTo: segmentedControl.bottomAnchor, constant: 20).isActive = true tableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true tableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true @@ -142,7 +151,7 @@ extension HIScheduleViewController { _fetchedResultsController = fetchedResultsController as? NSFetchedResultsController setupRefreshControl() super.viewDidLoad() - super.setCustomTitle(customTitle: "Schedule") + super.setCustomTitle(customTitle: "SCHEDULE") } } @@ -152,6 +161,9 @@ extension HIScheduleViewController { super.setupNavigationItem() if !HIApplicationStateController.shared.isGuest { navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "MenuUnfavorited"), style: .plain, target: self, action: #selector(didSelectFavoritesIcon(_:))) + if UIDevice.current.userInterfaceIdiom == .pad { + navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "UnFavoritedPad"), style: .plain, target: self, action: #selector(didSelectFavoritesIcon(_:))) + } } } @@ -172,7 +184,11 @@ extension HIScheduleViewController { // MARK: - UITableViewDelegate extension HIScheduleViewController { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - return 25 + if UIDevice.current.userInterfaceIdiom == .pad { + return 60 + } else { + return 30 + } } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { @@ -192,9 +208,15 @@ extension HIScheduleViewController { let sections = fetchedResultsController.sections, section < sections.count, let date = Formatter.coreData.date(from: sections[section].name) { - header.titleLabel.text = Formatter.simpleTime.string(from: date) + header.titleLabel.textColor = .white header.titleLabel.textAlignment = .center + if UIDevice.current.userInterfaceIdiom == .pad { + header.titleLabel.font = HIAppearance.Font.timeIndicator + } else { + header.titleLabel.font = HIAppearance.Font.glyph + } + } return header } diff --git a/HackIllinois/ViewControllers/HIStaffButtonView.swift b/HackIllinois/ViewControllers/HIStaffButtonView.swift new file mode 100644 index 00000000..276132b0 --- /dev/null +++ b/HackIllinois/ViewControllers/HIStaffButtonView.swift @@ -0,0 +1,62 @@ +// +// HIStaffButtonView.swift +// HackIllinois +// +// Created by Vincent Nguyen on 2/1/23. +// Copyright © 2023 HackIllinois. All rights reserved. +// + +import SwiftUI +import HIAPI + +struct HIStaffButtonView: View { + @State var events = [HIAPI.StaffEvent]() + @State var highlightedID = "" + @ObservedObject var observable: HIStaffButtonViewObservable + let columns = [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())] + var body: some View { + ScrollView { + LazyVGrid(columns: columns, spacing: 10) { + ForEach(events, id: \.id) { event in + Button(action: { + highlightedID = event.id + observable.selectedEventId = event.id + }) { + Text(event.name) + .foregroundColor(event.id == highlightedID ? .white : Color((\HIAppearance.profileBaseText).value)) + .font(Font(HIAppearance.Font.QRCheckInFont ?? .systemFont(ofSize: 14))) + .padding(4) + .cornerRadius(10) + .background( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.white, lineWidth: 2) + .background(event.id == highlightedID ? Color((\HIAppearance.profileBaseText).value) : Color.white) + .cornerRadius(10) + ) + } + } + } + } + .onAppear { + getStaffEvents() + } + } + func getStaffEvents() { + HIAPI.EventService.getStaffCheckInEvents(authToken: HIApplicationStateController.shared.user?.token ?? "") + .onCompletion { result in + do { + let (containedEvents, _) = try result.get() + DispatchQueue.main.async { + self.events = containedEvents.events + } + } catch { + print("An error has occurred \(error)") + } + } + .launch() + } +} + +class HIStaffButtonViewObservable: ObservableObject { + @Published var selectedEventId: String = "" +} diff --git a/README.md b/README.md index 1c2e6a04..ec68f155 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The repo hosts the official iOS app for HackIllinois. If you would like to get i ## Requirements 1. XCode 13.0+ 2. Swift 5.0+ -3. iOS 11.0+ +3. iOS 13.0+ ## Installation # @@ -20,7 +20,7 @@ open Hackillinois.xcodeproj Please contribute using [Github Flow](https://guides.github.com/introduction/flow/). Create a branch, add commits, and [open a pull request](https://github.com/HackIllinois/ios/compare/). ### master -Master only hosts versions of the Hackillinois application released to TestFlight or the App Store. Currently 2022.1.2. +Master only hosts versions of the Hackillinois application released to TestFlight or the App Store. Currently 2023.2.0. ### dev Dev hosts a semi-stable version of the next release and all work should be done on branches off dev and commited via PR's. diff --git a/Stickers/Info.plist b/Stickers/Info.plist index e80e6a6d..d714484d 100644 --- a/Stickers/Info.plist +++ b/Stickers/Info.plist @@ -2,10 +2,6 @@ - UIRequiredDeviceCapabilities - - arm64 - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -31,5 +27,9 @@ NSExtensionPrincipalClass StickerBrowserViewController + UIRequiredDeviceCapabilities + + arm64 + diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/Contents.json index 0c0e701b..333dacfc 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/Contents.json @@ -30,15 +30,6 @@ }, { "filename" : "sticker-8.sticker" - }, - { - "filename" : "sticker-9.sticker" - }, - { - "filename" : "sticker-10.sticker" - }, - { - "filename" : "sticker-11.sticker" } ] } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Contents.json index cb4d9655..acd90cc2 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-1.png" + "filename" : "Crab.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Crab.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Crab.png new file mode 100644 index 00000000..2fcbbce8 Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/Crab.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/sticker-1.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/sticker-1.png deleted file mode 100644 index 511d1166..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-1.sticker/sticker-1.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/Contents.json deleted file mode 100644 index 190c1879..00000000 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/Contents.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "filename" : "sticker-10.png" - } -} diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/sticker-10.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/sticker-10.png deleted file mode 100644 index be925400..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-10.sticker/sticker-10.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/Contents.json deleted file mode 100644 index f6a7a60d..00000000 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/Contents.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "filename" : "sticker-11.png" - } -} diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/sticker-11.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/sticker-11.png deleted file mode 100644 index bff2a7ad..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-11.sticker/sticker-11.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Contents.json index a30e8c1b..aff56d8a 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-2.png" + "filename" : "Ticket.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Ticket.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Ticket.png new file mode 100644 index 00000000..bc048583 Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/Ticket.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/sticker-2.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/sticker-2.png deleted file mode 100644 index 64ca4015..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-2.sticker/sticker-2.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Contents.json index 2749d6fb..89f63fc1 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-3.png" + "filename" : "Cotton Candy.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Cotton Candy.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Cotton Candy.png new file mode 100644 index 00000000..19c9229c Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/Cotton Candy.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/sticker-3.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/sticker-3.png deleted file mode 100644 index 6b2c8088..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-3.sticker/sticker-3.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Contents.json index 4fd1e311..d783423b 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-4.png" + "filename" : "Pizza.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Pizza.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Pizza.png new file mode 100644 index 00000000..b9727099 Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/Pizza.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/sticker-4.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/sticker-4.png deleted file mode 100644 index 0cec8539..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-4.sticker/sticker-4.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Contents.json index 8b6af48f..6b575ecb 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-5.png" + "filename" : "Popcorn.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Popcorn.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Popcorn.png new file mode 100644 index 00000000..7fae9a24 Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/Popcorn.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/sticker-5.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/sticker-5.png deleted file mode 100644 index 71233445..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-5.sticker/sticker-5.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Contents.json index a74f5912..6c100ada 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-6.png" + "filename" : "Mole.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Mole.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Mole.png new file mode 100644 index 00000000..e5aba3fc Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/Mole.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/sticker-6.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/sticker-6.png deleted file mode 100644 index 9aae21db..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-6.sticker/sticker-6.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Contents.json index 2d6694ba..da4e068b 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-7.png" + "filename" : "Ducky.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Ducky.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Ducky.png new file mode 100644 index 00000000..f9c6029b Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/Ducky.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/sticker-7.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/sticker-7.png deleted file mode 100644 index c574cda4..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-7.sticker/sticker-7.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/Contents.json b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/Contents.json index 29c12c53..994d2613 100644 --- a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/Contents.json +++ b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/Contents.json @@ -4,6 +4,6 @@ "version" : 1 }, "properties" : { - "filename" : "sticker-8.png" + "filename" : "sticker1.png" } } diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker-8.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker-8.png deleted file mode 100644 index 561f8ae1..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker-8.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker1.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker1.png new file mode 100644 index 00000000..aa72ed96 Binary files /dev/null and b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-8.sticker/sticker1.png differ diff --git a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/sticker-9.png b/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/sticker-9.png deleted file mode 100644 index 589fa39b..00000000 Binary files a/Stickers/Stickers.xcassets/Sticker Pack.stickerpack/sticker-9.sticker/sticker-9.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/App Store iOS.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/App Store iOS.png new file mode 100644 index 00000000..4934e06b Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/App Store iOS.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Contents.json b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Contents.json index 95e8debf..5168b31d 100644 --- a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Contents.json +++ b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Contents.json @@ -1,83 +1,83 @@ { "images" : [ { - "filename" : "Logo_29@2x.png", + "filename" : "iPhone Settings 29x29pt @1x.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { - "filename" : "Logo_29@3x.png", + "filename" : "iPhone Settings 29x29pt @ 3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { - "filename" : "Logo_60_45@2x.png", + "filename" : "Messages iPhone 60x45pt @ 2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "60x45" }, { - "filename" : "Logo_60_45@3x.png", + "filename" : "Messages iPhone 60x45pt @ 3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "60x45" }, { - "filename" : "Logo_29_29.png", + "filename" : "iPad Settings.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, { - "filename" : "Logo_67_50@2x.png", + "filename" : "Messages iPad.png", "idiom" : "ipad", "scale" : "2x", "size" : "67x50" }, { - "filename" : "Logo_74_55@2x.png", + "filename" : "Messages iPad Pro.png", "idiom" : "ipad", "scale" : "2x", "size" : "74x55" }, { - "filename" : "Logo_1024.png", + "filename" : "App Store iOS.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" }, { - "filename" : "Logo_27_20@2x.png", + "filename" : "Messages 27x20pt @2x (3).png", "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "27x20" }, { - "filename" : "Logo_27_20@3x.png", + "filename" : "Messages 27x20pt @ 3x.png", "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "27x20" }, { - "filename" : "Logo_32_24@2x.png", + "filename" : "Messages 32x24pt @ 2x.png", "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "32x24" }, { - "filename" : "Logo_32_24@3x.png", + "filename" : "Messages 32x24pt @ 3x.png", "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "32x24" }, { - "filename" : "Logo_1024_768.png", + "filename" : "Messages App Store.png", "idiom" : "ios-marketing", "platform" : "ios", "scale" : "1x", diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024.png deleted file mode 100644 index 5e1eb182..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024_768.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024_768.png deleted file mode 100644 index 879825af..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_1024_768.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@2x.png deleted file mode 100644 index c85c0d37..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@3x.png deleted file mode 100644 index beba05d1..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_27_20@3x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@2x.png deleted file mode 100644 index 45f43dcc..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@3x.png deleted file mode 100644 index da1508e7..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29@3x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29_29.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29_29.png deleted file mode 100644 index 45f43dcc..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_29_29.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@2x.png deleted file mode 100644 index ec2a90ee..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@3x.png deleted file mode 100644 index 7ecffb8f..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_32_24@3x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@2x.png deleted file mode 100644 index de615975..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@3x.png deleted file mode 100644 index f1b878fc..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_60_45@3x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_67_50@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_67_50@2x.png deleted file mode 100644 index 3bbb38c6..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_67_50@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_74_55@2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_74_55@2x.png deleted file mode 100644 index f5e9a23a..00000000 Binary files a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Logo_74_55@2x.png and /dev/null differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @ 3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @ 3x.png new file mode 100644 index 00000000..4f525b5f Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @ 3x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @2x (3).png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @2x (3).png new file mode 100644 index 00000000..218764b0 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 27x20pt @2x (3).png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 2x.png new file mode 100644 index 00000000..7a58109c Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 2x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 3x.png new file mode 100644 index 00000000..0bf4565a Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages 32x24pt @ 3x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages App Store.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages App Store.png new file mode 100644 index 00000000..49f642d9 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages App Store.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad Pro.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad Pro.png new file mode 100644 index 00000000..49022d11 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad Pro.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad.png new file mode 100644 index 00000000..67e66b6d Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPad.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 2x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 2x.png new file mode 100644 index 00000000..3ec18b75 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 2x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 3x.png new file mode 100644 index 00000000..c74cfe27 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/Messages iPhone 60x45pt @ 3x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPad Settings.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPad Settings.png new file mode 100644 index 00000000..9ed92345 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPad Settings.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @ 3x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @ 3x.png new file mode 100644 index 00000000..f316c48e Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @ 3x.png differ diff --git a/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @1x.png b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @1x.png new file mode 100644 index 00000000..5d501448 Binary files /dev/null and b/Stickers/Stickers.xcassets/iMessage App Icon.stickersiconset/iPhone Settings 29x29pt @1x.png differ