From 2657fffc410b2cb9da9f96b293bfb373f225b043 Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Thu, 25 Dec 2025 19:52:42 +0530 Subject: [PATCH] Fix LottieAnimations --- DynamicIsland.xcodeproj/project.pbxproj | 8 +- DynamicIsland/Localizable.xcstrings | 53 +- .../Settings/AnimationEditorView.swift | 865 ++++++++++-------- .../managers/IdleAnimationManager.swift | 2 +- LottieAnimations/Reindeer.json | 1 + 5 files changed, 520 insertions(+), 409 deletions(-) create mode 100644 LottieAnimations/Reindeer.json diff --git a/DynamicIsland.xcodeproj/project.pbxproj b/DynamicIsland.xcodeproj/project.pbxproj index 3225cba..b8ca35b 100644 --- a/DynamicIsland.xcodeproj/project.pbxproj +++ b/DynamicIsland.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 7E8840D72E9A346700C5CB8C /* Dog waiting.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E8840D62E9A346700C5CB8C /* Dog waiting.json */; }; 7E8840D92E9A347000C5CB8C /* Moody Dog.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E8840D82E9A347000C5CB8C /* Moody Dog.json */; }; 7E8840DB2E9A347800C5CB8C /* Orange Cat Peeping.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E8840DA2E9A347800C5CB8C /* Orange Cat Peeping.json */; }; + 7E9911B02EFD7D1B002EDFD5 /* Reindeer.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E9911AF2EFD7D1B002EDFD5 /* Reindeer.json */; }; 7EE1D73D2E6B1E0B00997219 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EE1D73C2E6B1E0B00997219 /* ApplicationServices.framework */; }; 7EE1D73F2E6B1E1200997219 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EE1D73E2E6B1E1200997219 /* IOKit.framework */; }; BA90505C953246D0AB206451 /* MediaRemoteAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4C1DD09EC134302938E84F6 /* MediaRemoteAdapter.framework */; }; @@ -55,6 +56,7 @@ 7E8840D62E9A346700C5CB8C /* Dog waiting.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "Dog waiting.json"; sourceTree = ""; }; 7E8840D82E9A347000C5CB8C /* Moody Dog.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "Moody Dog.json"; sourceTree = ""; }; 7E8840DA2E9A347800C5CB8C /* Orange Cat Peeping.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "Orange Cat Peeping.json"; sourceTree = ""; }; + 7E9911AF2EFD7D1B002EDFD5 /* Reindeer.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Reindeer.json; sourceTree = ""; }; 7EE1D73C2E6B1E0B00997219 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; }; 7EE1D73E2E6B1E1200997219 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; F4C1DD09EC134302938E84F6 /* MediaRemoteAdapter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaRemoteAdapter.framework; path = Frameworks/MediaRemoteAdapter.framework; sourceTree = SOURCE_ROOT; }; @@ -122,6 +124,7 @@ children = ( 7E6856472EA963FD00D261F5 /* Lock.json */, 7E8840D62E9A346700C5CB8C /* Dog waiting.json */, + 7E9911AF2EFD7D1B002EDFD5 /* Reindeer.json */, 7E8840D82E9A347000C5CB8C /* Moody Dog.json */, 7E8840DA2E9A347800C5CB8C /* Orange Cat Peeping.json */, ); @@ -241,6 +244,7 @@ 7E8130412E3FB40500E08F3F /* NowPlayingTestClient in Resources */, 7E6856482EA963FD00D261F5 /* Lock.json in Resources */, 7E8840D92E9A347000C5CB8C /* Moody Dog.json in Resources */, + 7E9911B02EFD7D1B002EDFD5 /* Reindeer.json in Resources */, 7E8840D72E9A346700C5CB8C /* Dog waiting.json in Resources */, 7E8840DB2E9A347800C5CB8C /* Orange Cat Peeping.json in Resources */, ); @@ -429,7 +433,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 14.6; - MARKETING_VERSION = "1.2.1-beta"; + MARKETING_VERSION = "1.2.2-beta"; PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll.dev; PRODUCT_NAME = Atoll; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -500,7 +504,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 14.6; - MARKETING_VERSION = "1.2.1-beta"; + MARKETING_VERSION = "1.2.2-beta"; PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll; PRODUCT_NAME = Atoll; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/DynamicIsland/Localizable.xcstrings b/DynamicIsland/Localizable.xcstrings index 4d1b2d4..e00b4db 100644 --- a/DynamicIsland/Localizable.xcstrings +++ b/DynamicIsland/Localizable.xcstrings @@ -1391,6 +1391,7 @@ "isCommentAutoGenerated" : true }, "1x" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -1471,6 +1472,7 @@ } }, "20" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -1491,6 +1493,7 @@ } }, "30" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -3050,6 +3053,7 @@ } }, "Animation" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -3992,6 +3996,7 @@ "isCommentAutoGenerated" : true }, "Blue dashed box shows actual size in Atoll" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -4001,6 +4006,10 @@ } } }, + "Blue outline matches the notch canvas" : { + "comment" : "A tooltip explaining that the blue outline in the animation preview matches the notch on a device.", + "isCommentAutoGenerated" : true + }, "Bluetooth Audio Devices" : { "comment" : "A section header that lists Bluetooth audio devices.", "isCommentAutoGenerated" : true, @@ -4140,9 +4149,6 @@ } } } - }, - "Bottom Pad:" : { - }, "Breakdown" : { "comment" : "A label displayed above the breakdown of memory usage.", @@ -4616,6 +4622,7 @@ } }, "Center" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -6004,6 +6011,10 @@ } } }, + "Current Transform" : { + "comment" : "A label displayed above the current transform values in the preview stats view.", + "isCommentAutoGenerated" : true + }, "Currently active" : { "comment" : "A text indicating whether the camera is \"Currently active\" or \"Not active\".", "isCommentAutoGenerated" : true, @@ -6601,6 +6612,10 @@ } } }, + "Dash outline equals the exact notch bounds." : { + "comment" : "A description under the live preview section of the animation editor.", + "isCommentAutoGenerated" : true + }, "Default" : { "localizations" : { "ar" : { @@ -7110,6 +7125,7 @@ } }, "Display Options" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -8234,6 +8250,9 @@ }, "Enable timer live activity" : { + }, + "Enable when scaling beyond 30x20px so the Atoll opens gracefully." : { + }, "Engine Utilization" : { "comment" : "A label describing the utilization of the GPU's engine components.", @@ -8678,7 +8697,7 @@ } } }, - "Expand Notch with Animation" : { + "Expand notch to follow animation width" : { }, "Expanded drag detection area" : { @@ -9686,6 +9705,7 @@ } }, "Height:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -10041,6 +10061,7 @@ } }, "Horizontal:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -11057,9 +11078,6 @@ }, "Loop Mode" : { - }, - "Loop Mode:" : { - }, "Lottie JSON URL" : { "localizations" : { @@ -14952,9 +14970,6 @@ } } } - }, - "Opacity:" : { - }, "Open Google AI Studio" : { @@ -15202,8 +15217,9 @@ } } }, - "Preview Zoom:" : { - + "Preview Zoom" : { + "comment" : "A label describing the zoom control for the animation preview.", + "isCommentAutoGenerated" : true }, "Privacy Indicators" : { "comment" : "A heading for the section that lists privacy indicators.", @@ -15336,9 +15352,6 @@ } } } - }, - "Quick Presets" : { - }, "Quick Share" : { "comment" : "A section header that says \"Quick Share\".", @@ -16041,6 +16054,7 @@ }, "Rotation:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -16205,6 +16219,7 @@ } }, "Scale:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -17614,6 +17629,7 @@ }, "Size & Scale" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -18149,6 +18165,7 @@ } }, "Speed:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -19237,6 +19254,7 @@ } }, "Transform" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -20194,6 +20212,7 @@ } }, "Vertical:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -20563,14 +20582,12 @@ }, "When enabled, stats monitoring stops a few seconds after the notch closes." : { - }, - "When enabled, the Atoll will expand horizontally to match the animation size" : { - }, "When enabled, the Stats tab will display real-time system performance graphs. This feature requires system permissions and may use additional battery." : { }, "Width:" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { diff --git a/DynamicIsland/components/Settings/AnimationEditorView.swift b/DynamicIsland/components/Settings/AnimationEditorView.swift index 98edde8..87a3404 100644 --- a/DynamicIsland/components/Settings/AnimationEditorView.swift +++ b/DynamicIsland/components/Settings/AnimationEditorView.swift @@ -36,7 +36,7 @@ struct AnimationEditorView: View { @State private var isImporting = false // Preview state - @State private var previewScale: CGFloat = 1.0 + @State private var previewScale: CGFloat = 10.0 init(sourceURL: URL, isRemoteURL: Bool, animation: Binding, existingAnimation: CustomIdleAnimation? = nil) { self.sourceURL = sourceURL @@ -69,398 +69,19 @@ struct AnimationEditorView: View { var body: some View { VStack(spacing: 0) { - // Header - HStack { - Text(existingAnimation != nil ? "Edit Animation" : "Customize Animation") - .font(.title2) - .fontWeight(.semibold) - - Spacer() - - Button("Cancel") { - dismiss() - } - .keyboardShortcut(.cancelAction) - } - .padding() - + header Divider() - - HSplitView { - // Preview Panel - VStack { - Text("Preview") - .font(.headline) - .padding(.top) - - ZStack { - // Background to show bounds - RoundedRectangle(cornerRadius: 8) - .fill(Color(nsColor: .controlBackgroundColor)) - .overlay( - RoundedRectangle(cornerRadius: 8) - .strokeBorder(Color.gray.opacity(0.3), lineWidth: 1) - ) - - // Target size indicator (30x20 - actual size in notch) - Rectangle() - .strokeBorder(Color.blue.opacity(0.5), style: StrokeStyle(lineWidth: 2, dash: [5, 3])) - .frame(width: 30 * previewScale, height: 20 * previewScale) - - // Animation preview with transformations - if let existing = existingAnimation, case .builtInFace = existing.source { - // Show built-in face - MinimalFaceFeatures(height: 20, width: 30) - .scaleEffect(previewScale) - .frame(width: cropWidth * scale * previewScale, height: cropHeight * scale * previewScale) - .offset(x: offsetX * previewScale, y: offsetY * previewScale) - .rotationEffect(.degrees(rotation)) - .opacity(opacity) - .padding(.bottom, paddingBottom * previewScale) - .clipped() - } else { - // Show Lottie animation - LottieView(state: LUStateData( - type: .loadedFrom(sourceURL), - speed: speed, - loopMode: loopMode.lottieLoopMode - )) - .frame(width: cropWidth * scale * previewScale, height: cropHeight * scale * previewScale) - .offset(x: offsetX * previewScale, y: offsetY * previewScale) - .rotationEffect(.degrees(rotation)) - .opacity(opacity) - .padding(.bottom, paddingBottom * previewScale) - .clipped() - } - } - .frame(maxWidth: .infinity, maxHeight: .infinity) - .padding() - - // Preview Scale Control - HStack { - Text("Preview Zoom:") - .font(.caption) - .foregroundStyle(.secondary) - Slider(value: $previewScale, in: 1...10) - .frame(width: 150) - Text("\(Int(previewScale))x") - .font(.caption) - .foregroundStyle(.secondary) - .frame(width: 30) - } - .padding(.horizontal) - .padding(.bottom) - } - .frame(minWidth: 300) - + HStack(spacing: 0) { + previewPanel + .frame(minWidth: 320, maxWidth: 360) Divider() - - // Controls Panel - ScrollView { - VStack(alignment: .leading, spacing: 20) { - // Name - VStack(alignment: .leading, spacing: 8) { - Text("Animation Name") - .font(.headline) - TextField("Name", text: $name) - .textFieldStyle(.roundedBorder) - } - - Divider() - - // Size Controls - VStack(alignment: .leading, spacing: 12) { - Text("Size & Scale") - .font(.headline) - - // Scale - HStack { - Text("Scale:") - .frame(width: 80, alignment: .leading) - Slider(value: $scale, in: 0.1...5.0) - Text(String(format: "%.2f", scale)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("Reset") { - withAnimation { scale = 1.0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Crop Width - HStack { - Text("Width:") - .frame(width: 80, alignment: .leading) - Slider(value: $cropWidth, in: 5...100) - Text(String(format: "%.0f", cropWidth)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("30") { - withAnimation { cropWidth = 30 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Crop Height - HStack { - Text("Height:") - .frame(width: 80, alignment: .leading) - Slider(value: $cropHeight, in: 5...100) - Text(String(format: "%.0f", cropHeight)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("20") { - withAnimation { cropHeight = 20 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - } - - Divider() - - // Position Controls - VStack(alignment: .leading, spacing: 12) { - Text("Position") - .font(.headline) - - // Offset X - HStack { - Text("Horizontal:") - .frame(width: 80, alignment: .leading) - Slider(value: $offsetX, in: -50...50) - Text(String(format: "%.1f", offsetX)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("Center") { - withAnimation { offsetX = 0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Offset Y - HStack { - Text("Vertical:") - .frame(width: 80, alignment: .leading) - Slider(value: $offsetY, in: -50...50) - Text(String(format: "%.1f", offsetY)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("Center") { - withAnimation { offsetY = 0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Padding Bottom - HStack { - Text("Bottom Pad:") - .frame(width: 80, alignment: .leading) - Slider(value: $paddingBottom, in: -20...20) - Text(String(format: "%.1f", paddingBottom)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("Reset") { - withAnimation { paddingBottom = 0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - } - - Divider() - - // Rotation & Opacity - VStack(alignment: .leading, spacing: 12) { - Text("Transform") - .font(.headline) - - // Rotation - HStack { - Text("Rotation:") - .frame(width: 80, alignment: .leading) - Slider(value: $rotation, in: -180...180) - Text(String(format: "%.0f°", rotation)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("Reset") { - withAnimation { rotation = 0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Opacity - HStack { - Text("Opacity:") - .frame(width: 80, alignment: .leading) - Slider(value: $opacity, in: 0...1) - Text(String(format: "%.0f%%", opacity * 100)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("100%") { - withAnimation { opacity = 1.0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - } - - Divider() - - // Animation Speed - VStack(alignment: .leading, spacing: 12) { - Text("Animation") - .font(.headline) - - HStack { - Text("Speed:") - .frame(width: 80, alignment: .leading) - Slider(value: $speed, in: 0.1...3.0) - Text(String(format: "%.2fx", speed)) - .frame(width: 50, alignment: .trailing) - .foregroundStyle(.secondary) - Button("1x") { - withAnimation { speed = 1.0 } - } - .buttonStyle(.bordered) - .controlSize(.small) - } - - // Loop Mode - VStack(alignment: .leading, spacing: 8) { - Text("Loop Mode:") - .font(.subheadline) - Picker("Loop Mode", selection: $loopMode) { - ForEach(AnimationLoopMode.allCases, id: \.self) { mode in - Text(mode.rawValue).tag(mode) - } - } - .pickerStyle(.segmented) - } - } - - Divider() - - // Display Options - VStack(alignment: .leading, spacing: 12) { - Text("Display Options") - .font(.headline) - - Toggle(isOn: $expandWithAnimation) { - VStack(alignment: .leading, spacing: 4) { - Text("Expand Notch with Animation") - .font(.body) - Text("When enabled, the Atoll will expand horizontally to match the animation size") - .font(.caption) - .foregroundStyle(.secondary) - } - } - } - - Divider() - - // Presets - VStack(alignment: .leading, spacing: 12) { - Text("Quick Presets") - .font(.headline) - - LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 8) { - Button("Fit to Notch") { - withAnimation { - scale = 1.0 - cropWidth = 30 - cropHeight = 20 - offsetX = 0 - offsetY = 0 - rotation = 0 - paddingBottom = 0 - expandWithAnimation = false - } - } - .buttonStyle(.bordered) - - Button("Fill Notch") { - withAnimation { - scale = 1.5 - cropWidth = 30 - cropHeight = 20 - offsetX = 0 - offsetY = 0 - paddingBottom = 0 - expandWithAnimation = false - } - } - .buttonStyle(.bordered) - - Button("Scale Up 2x") { - withAnimation { - scale = 2.0 - expandWithAnimation = true - } - } - .buttonStyle(.bordered) - - Button("Scale Down") { - withAnimation { - scale = 0.75 - } - } - .buttonStyle(.bordered) - - Button("Reset All") { - withAnimation { - scale = 1.0 - cropWidth = 30 - cropHeight = 20 - offsetX = 0 - offsetY = 0 - rotation = 0 - opacity = 1.0 - speed = 1.0 - paddingBottom = 0 - expandWithAnimation = false - } - } - .buttonStyle(.bordered) - .tint(.red) - } - } - } - .padding() - } - .frame(minWidth: 350, maxWidth: 450) + controlsPanel } - Divider() - - // Footer with actions - HStack { - HStack(spacing: 4) { - Image(systemName: "info.circle") - .foregroundStyle(.secondary) - Text("Blue dashed box shows actual size in Atoll") - .font(.caption) - .foregroundStyle(.secondary) - } - - Spacer() - - Button(existingAnimation != nil ? "Save Changes" : "Import") { - importAnimation() - } - .buttonStyle(.borderedProminent) - .keyboardShortcut(.defaultAction) - .disabled(name.isEmpty || isImporting) - } - .padding() + footer } - .frame(idealWidth: 900, idealHeight: 650) - .frame(minWidth: 800, minHeight: 600) + .frame(idealWidth: 980, idealHeight: 640) + .frame(minWidth: 860, minHeight: 620) .fixedSize() .alert("Import Error", isPresented: $showingError) { Button("OK") { } @@ -469,6 +90,363 @@ struct AnimationEditorView: View { } } + // MARK: - Layout Sections + + private var header: some View { + HStack(alignment: .center) { + VStack(alignment: .leading, spacing: 4) { + Text(existingAnimation != nil ? "Edit Animation" : "Customize Animation") + .font(.title2) + .fontWeight(.semibold) + Text(sourceDescription) + .font(.caption) + .foregroundStyle(.secondary) + } + Spacer() + Button("Cancel") { + dismiss() + } + .keyboardShortcut(.cancelAction) + } + .padding() + } + + private var footer: some View { + HStack { + Label("Blue outline matches the notch canvas", systemImage: "info.circle") + .font(.caption) + .foregroundStyle(.secondary) + Spacer() + Button(existingAnimation != nil ? "Save Changes" : "Import") { + importAnimation() + } + .buttonStyle(.borderedProminent) + .keyboardShortcut(.defaultAction) + .disabled(name.isEmpty || isImporting) + } + .padding() + } + + private var previewPanel: some View { + VStack(alignment: .leading, spacing: 16) { + VStack(alignment: .leading, spacing: 4) { + Text("Live Preview") + .font(.headline) + Text("Dash outline equals the exact notch bounds.") + .font(.caption) + .foregroundStyle(.secondary) + } + previewCanvas + previewZoomControls + previewStats + Spacer(minLength: 0) + } + .padding(20) + } + + @ViewBuilder + private var previewCanvas: some View { + ZStack { + RoundedRectangle(cornerRadius: 18, style: .continuous) + .fill(Color(nsColor: .controlBackgroundColor)) + .overlay( + RoundedRectangle(cornerRadius: 18, style: .continuous) + .stroke(Color.white.opacity(0.08), lineWidth: 1) + ) + .shadow(color: .black.opacity(0.15), radius: 16, x: 0, y: 8) + + Rectangle() + .strokeBorder(Color.blue.opacity(0.55), style: StrokeStyle(lineWidth: 2, dash: [6, 3])) + .frame(width: 30 * previewScale, height: 20 * previewScale) + + Group { + if let existing = existingAnimation, case .builtInFace = existing.source { + MinimalFaceFeatures(height: 20, width: 30) + .scaleEffect(previewScale) + } else { + LottieView(state: LUStateData( + type: .loadedFrom(sourceURL), + speed: speed, + loopMode: loopMode.lottieLoopMode + )) + } + } + .frame(width: cropWidth * scale * previewScale, height: cropHeight * scale * previewScale) + .offset(x: offsetX * previewScale, y: offsetY * previewScale) + .rotationEffect(.degrees(rotation)) + .opacity(opacity) + .padding(.bottom, paddingBottom * previewScale) + .clipped() + } + .frame(maxWidth: .infinity) + .frame(height: 280) + } + + private var previewZoomControls: some View { + VStack(alignment: .leading, spacing: 8) { + HStack { + Label("Preview Zoom", systemImage: "magnifyingglass") + .font(.caption) + .foregroundStyle(.secondary) + Spacer() + Text("\(Int(previewScale))x") + .font(.caption) + .foregroundStyle(.secondary) + .monospacedDigit() + } + HStack(spacing: 10) { + Button { + withAnimation(.spring(response: 0.35, dampingFraction: 0.8)) { + previewScale = max(1, previewScale - 1) + } + } label: { + Image(systemName: "minus") + .frame(width: 28, height: 28) + } + .buttonStyle(.bordered) + .controlSize(.mini) + + Slider(value: $previewScale, in: 1...10) + + Button { + withAnimation(.spring(response: 0.35, dampingFraction: 0.8)) { + previewScale = min(10, previewScale + 1) + } + } label: { + Image(systemName: "plus") + .frame(width: 28, height: 28) + } + .buttonStyle(.bordered) + .controlSize(.mini) + + Button("Reset") { + withAnimation(.spring(response: 0.35, dampingFraction: 0.8)) { + previewScale = 10 + } + } + .buttonStyle(.bordered) + .controlSize(.mini) + } + } + } + + private var previewStats: some View { + VStack(alignment: .leading, spacing: 8) { + Text("Current Transform") + .font(.caption) + .foregroundStyle(.secondary) + HStack(spacing: 10) { + PreviewStatChip(title: "Scale", value: String(format: "%.2fx", scale)) + PreviewStatChip(title: "Output", value: "\(Int(cropWidth * scale))x\(Int(cropHeight * scale)) px") + PreviewStatChip(title: "Offset", value: String(format: "%.1f / %.1f", offsetX, offsetY)) + } + } + } + + private var controlsPanel: some View { + ScrollView { + VStack(spacing: 16) { + EditorSectionCard(title: "Animation Details", subtitle: "Give it a friendly name and control playback speed.") { + VStack(alignment: .leading, spacing: 12) { + VStack(alignment: .leading, spacing: 6) { + Text("Animation Name") + .font(.subheadline) + .fontWeight(.medium) + TextField("Name", text: $name) + .textFieldStyle(.roundedBorder) + } + ParameterSliderRow( + title: "Playback Speed", + value: $speed, + range: 0.1...3.0, + formatter: { String(format: "%.2fx", $0) }, + resetLabel: "1x", + resetValue: 1.0, + step: 0.05 + ) + VStack(alignment: .leading, spacing: 6) { + Text("Loop Mode") + .font(.subheadline) + .fontWeight(.medium) + Picker("Loop Mode", selection: $loopMode) { + ForEach(AnimationLoopMode.allCases, id: \.self) { mode in + Text(mode.rawValue).tag(mode) + } + } + .pickerStyle(.segmented) + } + } + } + + EditorSectionCard(title: "Size & Crop", subtitle: "Match the notch footprint or intentionally exceed it.") { + VStack(spacing: 12) { + ParameterSliderRow( + title: "Scale", + value: $scale, + range: 0.1...5.0, + formatter: { String(format: "%.2fx", $0) }, + resetLabel: "Reset", + resetValue: 1.0 + ) + ParameterSliderRow( + title: "Visible Width", + value: $cropWidth, + range: 5...100, + formatter: { "\(Int($0)) px" }, + resetLabel: "30", + resetValue: 30 + ) + ParameterSliderRow( + title: "Visible Height", + value: $cropHeight, + range: 5...100, + formatter: { "\(Int($0)) px" }, + resetLabel: "20", + resetValue: 20 + ) + } + } + + EditorSectionCard(title: "Position & Padding", subtitle: "Nudge the animation inside the notch.") { + VStack(spacing: 12) { + ParameterSliderRow( + title: "Horizontal Offset", + value: $offsetX, + range: -50...50, + formatter: { String(format: "%.1f px", $0) }, + resetLabel: "Center", + resetValue: 0 + ) + ParameterSliderRow( + title: "Vertical Offset", + value: $offsetY, + range: -50...50, + formatter: { String(format: "%.1f px", $0) }, + resetLabel: "Center", + resetValue: 0 + ) + ParameterSliderRow( + title: "Bottom Padding", + value: $paddingBottom, + range: -20...20, + formatter: { String(format: "%.1f px", $0) }, + resetLabel: "Reset", + resetValue: 0 + ) + } + } + + EditorSectionCard(title: "Transform & Display", subtitle: "Dial in the final polish.") { + VStack(spacing: 12) { + ParameterSliderRow( + title: "Rotation", + value: $rotation, + range: -180...180, + formatter: { String(format: "%.0f°", $0) }, + resetLabel: "Reset", + resetValue: 0, + step: 1 + ) + ParameterSliderRow( + title: "Opacity", + value: $opacity, + range: 0...1, + formatter: { "\(Int($0 * 100))%" }, + resetLabel: "100%", + resetValue: 1, + step: 0.01 + ) + Toggle(isOn: $expandWithAnimation) { + VStack(alignment: .leading, spacing: 4) { + Text("Expand notch to follow animation width") + .fontWeight(.medium) + Text("Enable when scaling beyond 30x20px so the Atoll opens gracefully.") + .font(.caption) + .foregroundStyle(.secondary) + } + } + } + } + + EditorSectionCard(title: "Quick Presets", subtitle: "Start from a popular layout and tweak from there.") { + let columns = [GridItem(.adaptive(minimum: 160), spacing: 12)] + LazyVGrid(columns: columns, spacing: 12) { + Button("Fit to Notch") { + withAnimation { + scale = 1.0 + cropWidth = 30 + cropHeight = 20 + offsetX = 0 + offsetY = 0 + rotation = 0 + paddingBottom = 0 + expandWithAnimation = false + } + } + .buttonStyle(.bordered) + + Button("Fill Notch") { + withAnimation { + scale = 1.5 + cropWidth = 30 + cropHeight = 20 + offsetX = 0 + offsetY = 0 + paddingBottom = 0 + expandWithAnimation = false + } + } + .buttonStyle(.bordered) + + Button("Scale Up 2x") { + withAnimation { + scale = 2.0 + expandWithAnimation = true + } + } + .buttonStyle(.bordered) + + Button("Scale Down") { + withAnimation { + scale = 0.75 + } + } + .buttonStyle(.bordered) + + Button("Reset All") { + withAnimation { + scale = 1.0 + cropWidth = 30 + cropHeight = 20 + offsetX = 0 + offsetY = 0 + rotation = 0 + opacity = 1.0 + speed = 1.0 + paddingBottom = 0 + expandWithAnimation = false + } + } + .buttonStyle(.bordered) + .tint(.red) + } + } + } + .padding(20) + } + .frame(minWidth: 500, maxWidth: .infinity, maxHeight: .infinity) + } + + private var sourceDescription: String { + if let existing = existingAnimation { + return existing.name + } + if isRemoteURL { + return sourceURL.absoluteString + } + return sourceURL.deletingPathExtension().lastPathComponent + } + // MARK: - Import Logic private func importAnimation() { @@ -534,6 +512,117 @@ struct AnimationEditorView: View { } } +// MARK: - Supporting Views + +private struct EditorSectionCard: View { + let title: String + let subtitle: String? + let content: Content + + init(title: String, subtitle: String? = nil, @ViewBuilder content: () -> Content) { + self.title = title + self.subtitle = subtitle + self.content = content() + } + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.headline) + if let subtitle, !subtitle.isEmpty { + Text(subtitle) + .font(.caption) + .foregroundStyle(.secondary) + } + } + content + } + .padding(16) + .background( + RoundedRectangle(cornerRadius: 18, style: .continuous) + .fill(Color(nsColor: .controlBackgroundColor)) + ) + .overlay( + RoundedRectangle(cornerRadius: 18, style: .continuous) + .stroke(Color.white.opacity(0.05), lineWidth: 1) + ) + } +} + +private struct ParameterSliderRow: View { + let title: String + @Binding var value: CGFloat + let range: ClosedRange + let formatter: (CGFloat) -> String + var resetLabel: String? = nil + var resetValue: CGFloat? = nil + var step: CGFloat? = nil + + var body: some View { + VStack(alignment: .leading, spacing: 6) { + HStack { + Text(title) + .fontWeight(.medium) + Spacer() + Text(formatter(value)) + .font(.caption) + .foregroundStyle(.secondary) + .monospacedDigit() + } + HStack(spacing: 10) { + slider + if let resetLabel, let resetValue { + Button(resetLabel) { + withAnimation(.spring(response: 0.3, dampingFraction: 0.85)) { + value = resetValue + } + } + .buttonStyle(.bordered) + .controlSize(.mini) + } + } + } + } + + @ViewBuilder + private var slider: some View { + let binding = Binding( + get: { Double(value) }, + set: { value = CGFloat($0) } + ) + let bounds = Double(range.lowerBound)...Double(range.upperBound) + if let step { + Slider(value: binding, in: bounds, step: Double(step)) + } else { + Slider(value: binding, in: bounds) + } + } +} + +private struct PreviewStatChip: View { + let title: String + let value: String + + var body: some View { + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.caption2) + .foregroundStyle(.secondary) + Text(value) + .font(.caption) + .fontWeight(.semibold) + .monospacedDigit() + } + .padding(.vertical, 8) + .padding(.horizontal, 10) + .background( + RoundedRectangle(cornerRadius: 10, style: .continuous) + .fill(Color.white.opacity(0.06)) + ) + } +} + // MARK: - Preview #Preview { AnimationEditorView( diff --git a/DynamicIsland/managers/IdleAnimationManager.swift b/DynamicIsland/managers/IdleAnimationManager.swift index 349cdcc..3a3583e 100644 --- a/DynamicIsland/managers/IdleAnimationManager.swift +++ b/DynamicIsland/managers/IdleAnimationManager.swift @@ -80,7 +80,7 @@ class IdleAnimationManager { print("📦 [IdleAnimationManager] Loading bundled animations...") // The JSON files are added as individual resources, not in a folder - let bundledFiles = ["Dog waiting", "Moody Dog", "Orange Cat Peeping"] + let bundledFiles = ["Dog waiting", "Moody Dog", "Orange Cat Peeping", "Reindeer"] var animations: [CustomIdleAnimation] = [] for filename in bundledFiles { diff --git a/LottieAnimations/Reindeer.json b/LottieAnimations/Reindeer.json new file mode 100644 index 0000000..84576b6 --- /dev/null +++ b/LottieAnimations/Reindeer.json @@ -0,0 +1 @@ +{"v":"5.9.6","fr":29.9700012207031,"ip":0,"op":143.000005824509,"w":1080,"h":1080,"nm":"polar bear","ddd":0,"assets":[{"id":"comp_0","nm":"reindeer","fr":29.9700012207031,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","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":[503.869,761.835,0],"to":[-46.583,-55.333,0],"ti":[46.583,55.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[224.369,429.835,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[224.369,429.835,0],"to":[99.667,-9.333,0],"ti":[-99.667,9.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[822.369,373.835,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[822.369,373.835,0],"to":[-43.667,-8.667,0],"ti":[43.667,8.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[560.369,321.835,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[560.369,321.835,0],"to":[-57.333,103.333,0],"ti":[57.333,-103.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[216.369,941.835,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[216.369,941.835,0],"to":[114,1.333,0],"ti":[-114,-1.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[900.369,949.835,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[900.369,949.835,0],"to":[-66.083,-31.333,0],"ti":[66.083,31.333,0]},{"t":137.000005580124,"s":[503.869,761.835,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-31.375,227.375,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[15,15,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":22,"s":[15,15,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[128,128,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[128,128,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":57,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":69,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[128,128,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":96,"s":[128,128,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":108,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":119,"s":[100,100,100]},{"t":137.000005580124,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[38.25,38.25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.662745098039,0.149019607843,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":0,"k":[-31.375,227.375],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 17 Outlines","parent":9,"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":22,"s":[50.537,30.308,0],"to":[-1.775,0,0],"ti":[1.775,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[39.887,30.308,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[39.887,30.308,0],"to":[1.775,0,0],"ti":[-1.775,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[50.537,30.308,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[50.537,30.308,0],"to":[-1.775,0,0],"ti":[1.775,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[39.887,30.308,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[39.887,30.308,0],"to":[1.775,0,0],"ti":[-1.775,0,0]},{"t":137.000005580124,"s":[50.537,30.308,0]}],"ix":2,"l":2},"a":{"a":0,"k":[21.599,21.599,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":22,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[9.422,9.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[9.422,9.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":57,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":96,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":108,"s":[9.422,9.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":119,"s":[9.422,9.422,100]},{"t":137.000005580124,"s":[22.422,22.422,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.146,-11.71],[11.71,0.147],[-0.149,11.709],[-11.709,-0.143]],"o":[[-0.145,11.71],[-11.713,-0.146],[0.144,-11.711],[11.71,0.147]],"v":[[21.204,0.262],[-0.262,21.202],[-21.201,-0.264],[0.264,-21.206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.913725550034,0.84313731474,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":0,"k":[21.599,21.599],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 2 Outlines","parent":9,"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":[-17.979,29.455,0],"to":[1.084,0,0],"ti":[-1.084,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[-11.477,29.455,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[-11.477,29.455,0],"to":[-1.084,0,0],"ti":[1.084,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[-17.979,29.455,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[-17.979,29.455,0],"to":[1.084,0,0],"ti":[-1.084,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[-11.477,29.455,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[-11.477,29.455,0],"to":[-1.084,0,0],"ti":[1.084,0,0]},{"t":108.00000439893,"s":[-17.979,29.455,0]}],"ix":2,"l":2},"a":{"a":0,"k":[21.599,21.6,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[13.422,13.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":22,"s":[13.422,13.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":69,"s":[22.422,22.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[13.422,13.422,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":96,"s":[13.422,13.422,100]},{"t":108.00000439893,"s":[22.422,22.422,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.145,-11.709],[11.71,0.147],[-0.146,11.71],[-11.708,-0.146]],"o":[[-0.147,11.712],[-11.711,-0.145],[0.145,-11.71],[11.712,0.143]],"v":[[21.204,0.261],[-0.263,21.202],[-21.203,-0.264],[0.263,-21.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.913725550034,0.84313731474,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":0,"k":[21.599,21.6],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"nose 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[504.32,765.987,0],"to":[-14.167,-9.667,0],"ti":[14.167,9.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[419.32,707.987,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[419.32,707.987,0],"to":[33.5,-0.167,0],"ti":[-0.298,1.039,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[620.32,706.987,0],"to":[0.282,-0.984,0],"ti":[-0.298,1.039,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[620.32,706.987,0],"to":[0.282,-0.984,0],"ti":[-0.014,0.221,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[505.32,611.987,0],"to":[0.745,-11.429,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":61,"s":[505.32,594.987,0],"to":[0,0,0],"ti":[-0.014,0.221,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":65,"s":[505.32,611.987,0],"to":[0.745,-11.429,0],"ti":[0.007,0.222,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[505.32,611.987,0],"to":[-0.005,-0.179,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[410.32,770.487,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[410.32,770.487,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[602.32,769.487,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[602.32,769.487,0],"to":[0,0,0],"ti":[16.333,0.583,0]},{"t":137.000005580124,"s":[504.32,765.987,0]}],"ix":2,"l":2},"a":{"a":0,"k":[12.25,12.25,0],"ix":1,"l":2},"s":{"a":0,"k":[446,446,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.104],[1.104,0],[0,1.104],[-1.104,0]],"o":[[0,1.104],[-1.104,0],[0,-1.104],[1.104,0]],"v":[[2,0],[0,2],[-2,0],[0,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,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":0,"k":[6.75,6.75],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"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":[[0,-6.627],[6.627,0],[0,6.627],[-6.627,0]],"o":[[0,6.627],[-6.627,0],[0,-6.627],[6.627,0]],"v":[[12,0],[0,12],[-12,0],[0,-12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486274509804,0.113725490196,0.098039215686,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":0,"k":[12.25,12.25],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Layer 10 Outlines","parent":6,"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":45,"s":[2.325,-9.361,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[2.325,-3.361,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[2.325,-3.361,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87.0000035435826,"s":[2.325,-9.361,0]}],"ix":2,"l":2},"a":{"a":0,"k":[20.468,15.255,0],"ix":1,"l":2},"s":{"a":0,"k":[22.422,22.422,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.448,-2.43],[-10.37,-6.165],[-1.444,2.431],[10.371,6.165]],"o":[[-1.444,2.434],[10.367,6.164],[1.447,-2.431],[-10.368,-6.164]],"v":[[-18.774,-9.753],[1.855,-1.709],[18.771,12.574],[6.094,-8.84]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.117647066303,0.192156877705,0.258823529412,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":0,"k":[20.468,15.255],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"left eye 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[557.84,650.027,0],"to":[-9.917,-5.167,0],"ti":[9.917,5.167,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[498.34,619.027,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[498.34,619.027,0],"to":[25.958,0.083,0],"ti":[-1.885,1.517,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[654.09,619.527,0],"to":[1.136,-0.914,0],"ti":[-1.885,1.517,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[654.09,619.527,0],"to":[1.136,-0.914,0],"ti":[16.333,13.833,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[556.09,536.527,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[556.09,536.527,0],"to":[-12.208,23.292,0],"ti":[0.005,-1.626,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":87,"s":[482.84,676.277,0],"to":[-0.01,3.092,0],"ti":[0.005,-1.626,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[482.84,676.277,0],"to":[-0.01,3.092,0],"ti":[-0.224,0.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[633.34,680.277,0],"to":[0.11,-0.082,0],"ti":[-0.224,0.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[633.34,680.277,0],"to":[0.11,-0.082,0],"ti":[12.583,5.042,0]},{"t":137.000005580124,"s":[557.84,650.027,0]}],"ix":2,"l":2},"a":{"a":0,"k":[4.25,4.25,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":0,"s":[446,446,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[446,446,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":22,"s":[446,446,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[315,315,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[315,315,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":57,"s":[339,339,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":69,"s":[339,339,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[391,391,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":96,"s":[391,391,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":108,"s":[302,302,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":119,"s":[302,302,100]},{"t":137.000005580124,"s":[446,446,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.209],[2.209,0],[0,2.209],[-2.209,0]],"o":[[0,2.209],[-2.209,0],[0,-2.209],[2.209,0]],"v":[[4,0],[0,4],[-4,0],[0,-4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":0,"k":[4.25,4.25],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Layer 9 Outlines","parent":8,"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":45,"s":[6.48,-9.4,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[6.48,-3.4,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[6.48,-3.4,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87.0000035435826,"s":[6.48,-9.657,0]}],"ix":2,"l":2},"a":{"a":0,"k":[20.679,14.982,0],"ix":1,"l":2},"s":{"a":0,"k":[22.422,22.422,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.384,-2.468],[10.52,-5.906],[1.387,2.468],[-10.519,5.904]],"o":[[1.387,2.464],[-10.517,5.907],[-1.382,-2.465],[10.519,-5.904]],"v":[[19.043,-9.119],[-1.781,-1.594],[-19.048,12.263],[-5.841,-8.828]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.117647066303,0.192156877705,0.258823529412,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":0,"k":[20.679,14.982],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"right eye 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[446.34,650.027,0],"to":[-10.5,-4.917,0],"ti":[10.5,4.917,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[383.34,620.527,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[383.34,620.527,0],"to":[26.125,-0.125,0],"ti":[-0.598,4.399,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[540.09,619.777,0],"to":[0.342,-2.518,0],"ti":[-0.598,4.399,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[540.09,619.777,0],"to":[0.342,-2.518,0],"ti":[16.167,13.875,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[443.09,536.527,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[443.09,536.527,0],"to":[-12.667,23.5,0],"ti":[-0.104,-1.853,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":87,"s":[367.09,677.527,0],"to":[0.083,1.474,0],"ti":[-0.104,-1.853,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[367.09,677.527,0],"to":[0.083,1.474,0],"ti":[0.922,-0.115,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[517.59,680.027,0],"to":[-1.491,0.186,0],"ti":[0.922,-0.115,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[517.59,680.027,0],"to":[-1.491,0.186,0],"ti":[11.875,5,0]},{"t":137.000005580124,"s":[446.34,650.027,0]}],"ix":2,"l":2},"a":{"a":0,"k":[4.25,4.25,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[446,446,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[303,303,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":22,"s":[303,303,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[363,363,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[363,363,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":69,"s":[363,363,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[302,302,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":96,"s":[302,302,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":108,"s":[404,404,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":119,"s":[404,404,100]},{"t":137.000005580124,"s":[446,446,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.209],[2.209,0],[0,2.209],[-2.209,0]],"o":[[0,2.209],[-2.209,0],[0,-2.209],[2.209,0]],"v":[[4,0],[0,4],[-4,0],[0,-4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":0,"k":[4.25,4.25],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Layer 1 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[502.09,790.517,0],"to":[-10.167,-4.167,0],"ti":[10.167,4.167,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[441.09,765.517,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[441.09,765.517,0],"to":[25.333,0.167,0],"ti":[-25.333,-0.167,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[593.09,766.517,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[593.09,766.517,0],"to":[-15.167,-14,0],"ti":[2.068,-0.5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[502.09,682.517,0],"to":[-2.43,0.588,0],"ti":[2.068,-0.5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[502.09,682.517,0],"to":[-2.43,0.588,0],"ti":[0.474,-0.772,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":87,"s":[425.09,823.517,0],"to":[-1.297,2.111,0],"ti":[0.474,-0.772,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[425.09,823.517,0],"to":[-1.297,2.111,0],"ti":[-1.677,0.601,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":108,"s":[576.09,825.517,0],"to":[1.123,-0.402,0],"ti":[-1.677,0.601,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":119,"s":[576.09,825.517,0],"to":[1.123,-0.402,0],"ti":[12.333,5.833,0]},{"t":137.000005580124,"s":[502.09,790.517,0]}],"ix":2,"l":2},"a":{"a":0,"k":[16.75,24.75,0],"ix":1,"l":2},"s":{"a":0,"k":[446,446,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[13.25,39.25],[20.25,39.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":0,"k":[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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"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":[[9.112,0],[0,0],[0,9.112],[0,0],[-9.112,0],[0,-9.113],[0,0]],"o":[[0,0],[-9.112,0],[0,0],[0,-9.113],[9.112,0],[0,0],[0,9.112]],"v":[[0,24.5],[0,24.5],[-16.5,8],[-16.5,-8],[0,-24.5],[16.5,-8],[16.5,8]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.913725490196,0.843137254902,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":0,"k":[16.75,24.75],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Layer 8 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[499.86,788.287,0],"ix":2,"l":2},"a":{"a":0,"k":[58.75,66.75,0],"ix":1,"l":2},"s":{"a":0,"k":[371,446,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-30.869,0],[0,0],[0,-30.217]],"o":[[0,0],[0,0],[0,-30.869],[0,0],[30.218,0],[0,0]],"v":[[58.5,66.5],[-58.5,66.5],[-58.5,-10.607],[-2.607,-66.5],[3.786,-66.5],[58.5,-11.786]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411764706,0.549019607843,0.270588235294,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":0,"k":[58.75,66.75],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Layer 7 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[381.653,545.928,0],"to":[6.667,3,0],"ti":[-6.667,-3,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[421.653,563.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[421.653,563.928,0],"to":[-6.667,-3,0],"ti":[6.667,3,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[381.653,545.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[381.653,545.928,0],"to":[6.667,3,0],"ti":[-6.667,-3,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[421.653,563.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[421.653,563.928,0],"to":[-3.667,2,0],"ti":[3.667,-2,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[399.653,575.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[399.653,575.928,0],"to":[0,-3,0],"ti":[0,3,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[399.653,557.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[399.653,557.928,0],"to":[-3,-2,0],"ti":[3,2,0]},{"t":137.000005580124,"s":[381.653,545.928,0]}],"ix":2,"l":2},"a":{"a":0,"k":[191.345,10.754,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[57.84,20.268],[-50.639,-22.545]],"o":[[-10.441,-10.032],[-45.944,-16.097],[50.633,22.543]],"v":[[95.548,-39.74],[-10.458,-36.045],[-44.908,29.598]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.549019607843,0.270588235294,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":0,"k":[95.798,52.392],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Layer 8 Outlines 2","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":[630.903,553.108,0],"to":[1,0,0],"ti":[-1,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[636.903,553.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[636.903,553.108,0],"to":[-4.333,2,0],"ti":[4.333,-2,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[610.903,565.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[610.903,565.108,0],"to":[-4.667,3.333,0],"ti":[4.667,-3.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[582.903,585.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[582.903,585.108,0],"to":[8,-5.333,0],"ti":[-8,5.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[630.903,553.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[630.903,553.108,0],"to":[-5.333,4.667,0],"ti":[5.333,-4.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[598.903,581.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[598.903,581.108,0],"to":[5.333,-4.667,0],"ti":[-5.333,4.667,0]},{"t":137.000005580124,"s":[630.903,553.108,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.25,8.257,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-58.326,18.822],[51.182,-21.277]],"o":[[10.687,-9.768],[46.326,-14.951],[-51.178,21.278]],"v":[[-94.935,-42.16],[10.945,-35.828],[43.753,30.649]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.549019607843,0.270588235294,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":0,"k":[95.185,52.178],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Layer 14 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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[598.789,544.988,0],"to":[1.667,-1.333,0],"ti":[-1.667,1.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[608.789,536.988,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[608.789,536.988,0],"to":[-6.333,7.333,0],"ti":[6.333,-7.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[570.789,580.988,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[570.789,580.988,0],"to":[0.333,3.333,0],"ti":[-0.333,-3.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[572.789,600.988,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[572.789,600.988,0],"to":[4.333,-9.333,0],"ti":[-4.333,9.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[598.789,544.988,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[598.789,544.988,0],"to":[-3.333,9,0],"ti":[3.333,-9,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[578.789,598.988,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[578.789,598.988,0],"to":[3.333,-9,0],"ti":[-3.333,9,0]},{"t":137.000005580124,"s":[598.789,544.988,0]}],"ix":2,"l":2},"a":{"a":0,"k":[26.863,243.454,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.897,-6.836],[-9.818,8.474],[5.895,6.834],[9.821,-8.472]],"o":[[5.896,6.833],[9.818,-8.47],[-5.896,-6.837],[-9.818,8.471]],"v":[[-17.778,15.341],[10.679,12.377],[17.78,-15.337],[-10.679,-12.374]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.650980392157,0.363017302868,0.171041900036,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":0,"k":[390.293,95.516],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"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":[[0,0],[-34.878,-4.176],[-14.78,-15.153],[-26.61,33.351],[-43.44,-18.002],[-28.704,0.888],[-46.786,-49.231],[98.752,-16.238],[39.453,-62.836]],"o":[[0,0],[34.876,4.175],[14.779,15.154],[26.613,-33.352],[43.436,18.006],[28.701,-0.891],[46.792,49.233],[-98.746,16.236],[0,0]],"v":[[-233.613,118.369],[-179.925,14.253],[-148.023,57.062],[-70.384,33.079],[22.033,-75.549],[51.114,-6.575],[186.821,-85.973],[62.513,79.64],[-207.626,135.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.419607843137,0.207843137255,0.066666666667,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":0,"k":[233.863,135.454],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Layer 1 Outlines 2","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":[406.775,537.706,0],"to":[8.333,5.667,0],"ti":[-8.333,-5.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":15,"s":[456.775,571.706,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":22,"s":[456.775,571.706,0],"to":[-8.333,-5.667,0],"ti":[8.333,5.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":37,"s":[406.775,537.706,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[406.775,537.706,0],"to":[8.333,5.667,0],"ti":[-8.333,-5.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":57,"s":[456.775,571.706,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[456.775,571.706,0],"to":[-5,1.667,0],"ti":[5,-1.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":87,"s":[426.775,581.706,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[426.775,581.706,0],"to":[-0.333,-4.5,0],"ti":[0.333,4.5,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":108,"s":[424.775,554.706,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[424.775,554.706,0],"to":[-3,-2.833,0],"ti":[3,2.833,0]},{"t":137.000005580124,"s":[406.775,537.706,0]}],"ix":2,"l":2},"a":{"a":0,"k":[434.864,244.736,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.064,-6.687],[9.604,8.713],[-6.063,6.689],[-9.605,-8.713]],"o":[[-6.066,6.685],[-9.606,-8.714],[6.068,-6.685],[9.608,8.712]],"v":[[17.393,15.778],[-10.982,12.108],[-17.394,-15.778],[10.982,-12.107]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.650980392157,0.364705882353,0.172549019608,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":0,"k":[77.494,95.08],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"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":[[0,0],[34.971,-3.307],[15.155,-14.781],[25.774,34.002],[43.872,-16.919],[28.671,1.604],[48,-48.054],[-98.317,-18.685],[-37.879,-63.798]],"o":[[0,0],[-34.969,3.308],[-15.151,14.78],[-25.775,-34.002],[-43.871,16.918],[-28.672,-1.604],[-48.002,48.054],[98.315,18.69],[0,0]],"v":[[231.614,123.305],[180.531,17.882],[147.574,59.887],[70.556,33.979],[-19.13,-76.912],[-49.917,-8.686],[-183.612,-91.433],[-63.459,77.219],[205.216,139.486]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.419607843137,0.207843137255,0.066666666667,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":0,"k":[231.864,139.737],"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":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"ct":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"reindeer","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[572,540,0],"ix":2,"l":2},"a":{"a":0,"k":[540,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1080,"h":1080,"ip":0,"op":300.00001221925,"st":0,"bm":0}],"markers":[]} \ No newline at end of file