diff --git a/DEPS b/DEPS index eab63d5c..ca8973b8 100644 --- a/DEPS +++ b/DEPS
@@ -245,15 +245,15 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '5941929042eec257445b7c43f3d492a5b85c07ac', + 'skia_revision': '3e1354a592bcd52f18ca6422f1d653a47d65c03f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '34f3e7ae4019f355bf15da7ca12e37ad7d907632', + 'v8_revision': '58ade8cbfb17a14f7936ddc8b4b731f15db3d32b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'b90bcb9c820844608e6d57668b4712c476425e28', + 'angle_revision': '9d11a341c6151289eb1225ec1a70cbe6e82d51ac', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -261,7 +261,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '07819c470bb1e243e894297516c22147515cda8c', + 'pdfium_revision': 'd8851a7fd3c12685297ff4690e3dae842be85777', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -312,7 +312,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'aa0e8d05643953c9f7f84bdd7ee3ca4ee3772d41', + 'catapult_revision': 'dc1213869e713601ec7f9fde1acf22f45dec72d1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -320,7 +320,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '0caec293a33fed43f2eeb8821a6991bb2ab251a0', + 'devtools_frontend_revision': 'c1e414725a7a21233fd27848ba2603e8328ec9d6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -360,7 +360,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '500411b77e88d80a4d38c7d816400d8f078b9ee8', + 'dawn_revision': '5bab76a64d25dbc32c6beb372ae9724321f9c2b0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -427,7 +427,7 @@ 'libcxx_revision': '79a2e924d96e2fc1e4b937c42efd08898fa472d7', # GN CIPD package version. - 'gn_version': 'git_revision:f1b1412521b41e47118b29863224171e434a27a2', + 'gn_version': 'git_revision:80a40b07305373617eba2d5878d353532af77da3', } # Only these hosts are allowed for dependencies in this DEPS file. @@ -617,7 +617,7 @@ Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248', 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '052453fa5e07abc471ba2abe48cae3bffcf47eaa', + 'url': Var('chromium_git') + '/website.git' + '@' + '8ce1a6e7c619a9da864007ee111488edf7f296c1', }, 'src/ios/third_party/earl_grey2/src': { @@ -1648,7 +1648,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'fca7b339442bd70c5dc49bb33ee7f9466b560a97', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '47ff35db61dd5688901fa4b00db25dd0151866ef', + Var('webrtc_git') + '/src.git' + '@' + '400d8bdd60566ebadc7941de2b32e267b89020bb', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'),
diff --git a/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java b/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java index 4a5b2f3..c5a2116 100644 --- a/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java +++ b/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java
@@ -35,21 +35,7 @@ public class DarkModeHistogramRecorderTest { @Before public void setUp() { - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.ForceDarkBehavior"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.ForceDarkMode"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.InDarkMode"); - RecordHistogram.forgetHistogramForTesting( - "Android.WebView.DarkMode.InDarkModeVsLightTheme"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.InDarkModeVsNightMode"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.LightTheme"); - RecordHistogram.forgetHistogramForTesting( - "Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme"); - RecordHistogram.forgetHistogramForTesting( - "Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.NightMode"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.NightModeVsLightTheme"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.ForceDarkMode"); - RecordHistogram.forgetHistogramForTesting("Android.WebView.ForceDarkBehavior"); + ShadowRecordHistogram.reset(); } @Test
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index abdf045..5686b5669 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1070,6 +1070,8 @@ "system/holding_space/holding_space_item_views_section.h", "system/holding_space/holding_space_progress_indicator.cc", "system/holding_space/holding_space_progress_indicator.h", + "system/holding_space/holding_space_progress_indicator_animation.cc", + "system/holding_space/holding_space_progress_indicator_animation.h", "system/holding_space/holding_space_progress_ring_animation.cc", "system/holding_space/holding_space_progress_ring_animation.h", "system/holding_space/holding_space_progress_ring_indeterminate_animation.cc",
diff --git a/ash/accelerators/key_hold_detector.cc b/ash/accelerators/key_hold_detector.cc index 5d9ae6a..204e7ff 100644 --- a/ash/accelerators/key_hold_detector.cc +++ b/ash/accelerators/key_hold_detector.cc
@@ -4,11 +4,11 @@ #include "ash/accelerators/key_hold_detector.h" +#include <tuple> #include <utility> #include "ash/shell.h" #include "base/bind.h" -#include "base/ignore_result.h" #include "base/threading/thread_task_runner_handle.h" #include "ui/aura/window_tracker.h" #include "ui/aura/window_tree_host.h" @@ -25,7 +25,7 @@ return; ui::KeyEvent event(key_event); aura::Window* target = *(tracker->windows().begin()); - ignore_result(target->GetHost()->GetEventSink()->OnEventFromSource(&event)); + std::ignore = target->GetHost()->GetEventSink()->OnEventFromSource(&event); } void PostPressedEvent(ui::KeyEvent* event) {
diff --git a/ash/accessibility/autoclick/autoclick_controller.cc b/ash/accessibility/autoclick/autoclick_controller.cc index b5d9b34..5d83d09 100644 --- a/ash/accessibility/autoclick/autoclick_controller.cc +++ b/ash/accessibility/autoclick/autoclick_controller.cc
@@ -4,6 +4,8 @@ #include "ash/accessibility/autoclick/autoclick_controller.h" +#include <tuple> + #include "ash/accessibility/accessibility_controller_impl.h" #include "ash/accessibility/autoclick/autoclick_drag_event_rewriter.h" #include "ash/accessibility/autoclick/autoclick_ring_handler.h" @@ -18,7 +20,6 @@ #include "ash/wm/fullscreen_window_finder.h" #include "ash/wm/window_util.h" #include "base/bind.h" -#include "base/ignore_result.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/timer/timer.h" @@ -252,7 +253,7 @@ 0 /* x_offset_ordinal */, 0 /* y_offset_ordinal */, 2 /* finger_count */); ui::MouseWheelEvent wheel(scroll); - ignore_result(host->GetEventSink()->OnEventFromSource(&wheel)); + std::ignore = host->GetEventSink()->OnEventFromSource(&wheel); } void AutoclickController::OnEnteredScrollButton() {
diff --git a/ash/ambient/model/ambient_animation_photo_provider.cc b/ash/ambient/model/ambient_animation_photo_provider.cc index 7cd71271..de114f3 100644 --- a/ash/ambient/model/ambient_animation_photo_provider.cc +++ b/ash/ambient/model/ambient_animation_photo_provider.cc
@@ -50,7 +50,7 @@ public: StaticImageAssetImpl(base::StringPiece asset_id, const AmbientAnimationStaticResources* static_resources) - : asset_id_(std::string(asset_id)), static_resources_(static_resources) { + : asset_id_(asset_id), static_resources_(static_resources) { DCHECK(!ambient::util::IsDynamicLottieAsset(asset_id_)); DCHECK(static_resources_); } @@ -67,6 +67,7 @@ gfx::ImageSkia image = static_resources_->GetStaticImageAsset(asset_id_); DCHECK(!image.isNull()) << "Static image asset " << asset_id_ << " is unknown."; + DVLOG(1) << "Returning static asset " << asset_id_; return BuildSkottieFrameData(image, scale_factor); } @@ -85,12 +86,18 @@ class AmbientAnimationPhotoProvider::DynamicImageAssetImpl : public cc::SkottieFrameDataProvider::ImageAsset { public: - using AnimationTimestampCallback = - base::RepeatingCallback<void(float new_timestamp)>; - - explicit DynamicImageAssetImpl(AnimationTimestampCallback timestamp_cb) - : timestamp_cb_(std::move(timestamp_cb)) { - DCHECK(timestamp_cb_); + // |refresh_image_cb| is invoked whenever an asset detects a new animation + // cycle has started and it doesn't have a new image assigned to it yet. In + // practice, there may be multiple dynamic assets in an animation. So the + // first asset that detects a new animation cycle (which is arbitrary), will + // trigger a refresh and all of the dynamic assets will be assigned a new + // image when the callback is run. That is to say, for each animation cycle, + // the refresh callback will be run exactly once regardless of the number of + // frames in a cycle or dynamic assets in the animation. + DynamicImageAssetImpl(base::StringPiece asset_id, + base::RepeatingClosure refresh_image_cb) + : asset_id_(asset_id), refresh_image_cb_(std::move(refresh_image_cb)) { + DCHECK(refresh_image_cb_); } void AssignNewImage(gfx::ImageSkia image) { @@ -100,26 +107,42 @@ absl::optional<cc::SkottieFrameData> GetFrameData(float t, float scale_factor) override { - // Run the callback first with the new animation timestamp to see if the - // provider will assign this asset a new image. - timestamp_cb_.Run(t); - // In practice, |new_image_| will only be non-null at the start of each - // animation cycle. For all other frames, return nullopt (no update). - if (new_image_.isNull()) + DVLOG(4) << "GetFrameData for asset " << asset_id_ << " time " << t; + bool is_first_rendered_frame = + last_observed_animation_timestamp_ == kAnimationTimestampInvalid; + // The animation frame timestamp units are dictated by Skottie and are + // irrelevant here. The timestamp for each individual asset is monotonically + // increasing until the animation loops back to the beginning, indicating + // the start of a new cycle. + bool is_starting_new_cycle = t < last_observed_animation_timestamp_; + last_observed_animation_timestamp_ = t; + if (!is_first_rendered_frame && !is_starting_new_cycle) { + DVLOG(4) << "No update required to dynamic asset at this time"; return absl::nullopt; + } + if (new_image_.isNull()) + refresh_image_cb_.Run(); + + DCHECK(!new_image_.isNull()); cc::SkottieFrameData frame_data = BuildSkottieFrameData(new_image_, scale_factor); new_image_ = gfx::ImageSkia(); + DVLOG(4) << "Returning new image for dynamic asset " << asset_id_; return frame_data; } private: + static constexpr float kAnimationTimestampInvalid = -1.f; + // Private destructor since cc::SkottieFrameDataProvider::ImageAsset is a // ref-counted API. ~DynamicImageAssetImpl() override = default; - const AnimationTimestampCallback timestamp_cb_; + const std::string asset_id_; + const base::RepeatingClosure refresh_image_cb_; + // Last animation frame timestamp that was observed. + float last_observed_animation_timestamp_ = kAnimationTimestampInvalid; gfx::ImageSkia new_image_; }; @@ -143,9 +166,10 @@ // when the animation is initially loaded. So the set of assets does not // change once the animation starts rendering. if (ambient::util::IsDynamicLottieAsset(asset_id)) { - dynamic_assets_.push_back( - base::MakeRefCounted<DynamicImageAssetImpl>(base::BindRepeating( - &AmbientAnimationPhotoProvider::OnAnimationTimestampUpdated, + dynamic_assets_.push_back(base::MakeRefCounted<DynamicImageAssetImpl>( + asset_id, + base::BindRepeating( + &AmbientAnimationPhotoProvider::RefreshDynamicImageAssets, // In practice, this could be Unretained since the provider will // outlive the assets in the lottie::Animation class. But use a // WeakPtr here just to put the reader's mind at ease. If the @@ -162,30 +186,8 @@ } } -// If there are N dynamic assets in the animation, then for each rendered frame -// with timestamp T, OnAnimationTimestampUpdate(T) will be called N times. If a -// new animation cycle is detected on the first call to -// OnAnimationTimestampUpdate(T), the provider will pull a new set of images -// from the model and assign them to all of the dynamic assets. The subsequent -// N - 1 calls to OnAnimationTimestampUpdate(T) will be no-ops. That is to -// say, for each animation cycle, this method will only trigger a refresh one -// time regardless of the number of frames in a cycle or dynamic assets in the -// animation. -void AmbientAnimationPhotoProvider::OnAnimationTimestampUpdated( - float new_timestamp) { - bool is_first_rendered_frame = - last_observed_animation_timestamp_ == kAnimationTimestampInvalid; - // The animation frame timestamp units are dictated by Skottie and are - // irrelevant here. The timestamp is monotonically increasing until the - // animation loops back to the beginning, indicating the start of a new cycle. - bool is_starting_new_cycle = - new_timestamp < last_observed_animation_timestamp_; - last_observed_animation_timestamp_ = new_timestamp; - if (!is_first_rendered_frame && !is_starting_new_cycle) { - DVLOG(4) << "No update required to dynamic assets at this time"; - return; - } - +void AmbientAnimationPhotoProvider::RefreshDynamicImageAssets() { + DVLOG(4) << __func__; const base::circular_deque<PhotoWithDetails>& all_available_topics = backend_model_->all_decoded_topics(); DCHECK(!all_available_topics.empty())
diff --git a/ash/ambient/model/ambient_animation_photo_provider.h b/ash/ambient/model/ambient_animation_photo_provider.h index dbba294..b1928020 100644 --- a/ash/ambient/model/ambient_animation_photo_provider.h +++ b/ash/ambient/model/ambient_animation_photo_provider.h
@@ -39,18 +39,14 @@ const base::FilePath& resource_path) override; private: - static constexpr float kAnimationTimestampInvalid = -1.f; - class DynamicImageAssetImpl; - void OnAnimationTimestampUpdated(float new_timestamp); + void RefreshDynamicImageAssets(); // Unowned pointers. Must outlive the |AmbientAnimationPhotoProvider|. const AmbientAnimationStaticResources* const static_resources_; const AmbientBackendModel* const backend_model_; - // Last animation frame timestamp that was observed. - float last_observed_animation_timestamp_ = kAnimationTimestampInvalid; std::vector<scoped_refptr<DynamicImageAssetImpl>> dynamic_assets_; base::WeakPtrFactory<AmbientAnimationPhotoProvider> weak_factory_; };
diff --git a/ash/ambient/model/ambient_animation_photo_provider_unittest.cc b/ash/ambient/model/ambient_animation_photo_provider_unittest.cc index 6f913b9e..78e0315b 100644 --- a/ash/ambient/model/ambient_animation_photo_provider_unittest.cc +++ b/ash/ambient/model/ambient_animation_photo_provider_unittest.cc
@@ -93,10 +93,17 @@ std::vector<absl::optional<cc::SkottieFrameData>> GetFrameDataForAssets( const std::vector<scoped_refptr<ImageAsset>>& assets, float timestamp) { + // The timestamp for a given frame is not guaranteed to be the same for each + // asset per Skottie's API. Apply jitter to ensure the provider handles this + // correctly. + static constexpr float kTimestampJitter = 0.01f; + bool add_jitter = false; std::vector<absl::optional<cc::SkottieFrameData>> all_frame_data; for (const scoped_refptr<ImageAsset>& asset : assets) { + float jitter = add_jitter ? kTimestampJitter : 0.f; all_frame_data.push_back( - asset->GetFrameData(timestamp, kTestScaleFactor)); + asset->GetFrameData(timestamp + jitter, kTestScaleFactor)); + add_jitter = !add_jitter; } return all_frame_data; }
diff --git a/ash/app_list/app_list_bubble_presenter.cc b/ash/app_list/app_list_bubble_presenter.cc index 0006a1a7..159c936 100644 --- a/ash/app_list/app_list_bubble_presenter.cc +++ b/ash/app_list/app_list_bubble_presenter.cc
@@ -283,6 +283,9 @@ if (bubble_view_) bubble_view_->AbortAllAnimations(); + // Must call before setting `is_target_visibility_show_` to false. + const int64_t display_id = GetDisplayId(); + is_target_visibility_show_ = false; // Reset keyboard traversal in case the user switches to tablet launcher. @@ -290,8 +293,6 @@ controller_->SetKeyboardTraversalMode(false); controller_->ViewClosing(); - - const int64_t display_id = GetDisplayId(); controller_->OnVisibilityWillChange(/*visible=*/false, display_id); if (features::IsProductivityLauncherAnimationEnabled()) { if (bubble_view_) { @@ -397,7 +398,7 @@ } int64_t AppListBubblePresenter::GetDisplayId() const { - if (!is_target_visibility_show_) + if (!is_target_visibility_show_ || !bubble_widget_) return display::kInvalidDisplayId; return display::Screen::GetScreen() ->GetDisplayNearestView(bubble_widget_->GetNativeView())
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc index 1d2c17c..5dbc7f55 100644 --- a/ash/app_list/app_list_controller_impl.cc +++ b/ash/app_list/app_list_controller_impl.cc
@@ -1640,6 +1640,8 @@ void AppListControllerImpl::OnVisibilityChanged(bool visible, int64_t display_id) { + DVLOG(1) << __PRETTY_FUNCTION__ << " visible " << visible << " display_id " + << display_id; // Focus and app visibility changes while finishing home launcher state // animation may cause OnVisibilityChanged() to be called before the home // launcher state transition finished - delay the visibility change until
diff --git a/ash/app_list/app_list_unittest.cc b/ash/app_list/app_list_unittest.cc index 6ce0ab2..a5c34ef 100644 --- a/ash/app_list/app_list_unittest.cc +++ b/ash/app_list/app_list_unittest.cc
@@ -4,8 +4,10 @@ #include <memory> +#include "ash/app_list/app_list_bubble_presenter.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_presenter_impl.h" +#include "ash/constants/ash_features.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/shelf/home_button.h" #include "ash/shelf/shelf.h" @@ -15,14 +17,37 @@ #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "base/test/scoped_feature_list.h" +#include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/window.h" namespace ash { +namespace { -using AppListTest = AshTestBase; +// Returns visibility from the presenter's perspective. +bool GetPresenterVisibility() { + auto* controller = Shell::Get()->app_list_controller(); + if (features::IsProductivityLauncherEnabled()) + return controller->bubble_presenter_for_test()->IsShowing(); + return controller->presenter()->GetTargetVisibility(); +} + +} // namespace + +class AppListTest : public AshTestBase, + public testing::WithParamInterface<bool> { + public: + AppListTest() { + feature_list_.InitWithFeatureState(features::kProductivityLauncher, + GetParam()); + } + base::test::ScopedFeatureList feature_list_; +}; + +INSTANTIATE_TEST_SUITE_P(ProductivityLauncher, AppListTest, testing::Bool()); // An integration test to toggle the app list by pressing the shelf button. -TEST_F(AppListTest, PressHomeButtonToShowAndDismiss) { +TEST_P(AppListTest, PressHomeButtonToShowAndDismiss) { aura::Window* root_window = Shell::GetPrimaryRootWindow(); Shelf* shelf = Shelf::ForWindow(root_window); ShelfWidget* shelf_widget = shelf->shelf_widget(); @@ -37,14 +62,13 @@ // Click the home button to show the app list. auto* controller = Shell::Get()->app_list_controller(); - auto* presenter = controller->presenter(); EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id())); - EXPECT_FALSE(presenter->GetTargetVisibility()); + EXPECT_FALSE(GetPresenterVisibility()); EXPECT_EQ(0u, app_list_container->children().size()); EXPECT_FALSE(home_button->IsShowingAppList()); LeftClickOn(home_button); - EXPECT_TRUE(presenter->GetTargetVisibility()); + EXPECT_TRUE(GetPresenterVisibility()); EXPECT_EQ(1u, app_list_container->children().size()); EXPECT_TRUE(home_button->IsShowingAppList()); @@ -57,7 +81,7 @@ // Tests that the app list gets toggled by pressing the shelf button on // secondary display. -TEST_F(AppListTest, PressHomeButtonToShowAndDismissOnSecondDisplay) { +TEST_P(AppListTest, PressHomeButtonToShowAndDismissOnSecondDisplay) { UpdateDisplay("1024x768,1024x768"); aura::Window* root_window = Shell::GetRootWindowForDisplayId(GetSecondaryDisplay().id()); @@ -74,17 +98,16 @@ // Click the home button to show the app list. auto* controller = Shell::Get()->app_list_controller(); - auto* presenter = controller->presenter(); EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id())); EXPECT_FALSE(controller->GetTargetVisibility(GetSecondaryDisplay().id())); - EXPECT_FALSE(presenter->GetTargetVisibility()); + EXPECT_FALSE(GetPresenterVisibility()); EXPECT_EQ(0u, app_list_container->children().size()); EXPECT_FALSE(home_button->IsShowingAppList()); LeftClickOn(home_button); EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id())); EXPECT_TRUE(controller->GetTargetVisibility(GetSecondaryDisplay().id())); - EXPECT_TRUE(presenter->GetTargetVisibility()); + EXPECT_TRUE(GetPresenterVisibility()); EXPECT_EQ(1u, app_list_container->children().size()); EXPECT_TRUE(home_button->IsShowingAppList());
diff --git a/ash/app_list/views/app_list_bubble_view_unittest.cc b/ash/app_list/views/app_list_bubble_view_unittest.cc index 6fb0a26e..f64706d 100644 --- a/ash/app_list/views/app_list_bubble_view_unittest.cc +++ b/ash/app_list/views/app_list_bubble_view_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> #include <string> +#include <tuple> #include <utility> #include <vector> @@ -36,7 +37,6 @@ #include "ash/style/ash_color_provider.h" #include "ash/system/tray/tray_constants.h" #include "ash/test/ash_test_base.h" -#include "base/ignore_result.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/test/metrics/histogram_tester.h" @@ -96,8 +96,8 @@ // Ensure there is one more frame presented after animation finishes // to allow animation throughput data is passed from cc to ui. - ignore_result( - ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200))); + std::ignore = + ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200)); } class AppListBubbleViewTest : public AshTestBase { @@ -393,8 +393,8 @@ // Ensure there is one more frame presented after animation finishes to allow // animation throughput data to be passed from cc to ui. - ignore_result( - ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200))); + std::ignore = + ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200)); // Smoothness was recorded. histograms.ExpectTotalCount(
diff --git a/ash/app_list/views/productivity_launcher_search_view_unittest.cc b/ash/app_list/views/productivity_launcher_search_view_unittest.cc index 159c0eb..517006d 100644 --- a/ash/app_list/views/productivity_launcher_search_view_unittest.cc +++ b/ash/app_list/views/productivity_launcher_search_view_unittest.cc
@@ -4,6 +4,7 @@ #include "ash/app_list/views/productivity_launcher_search_view.h" +#include <tuple> #include <utility> #include "ash/app_list/app_list_controller_impl.h" @@ -45,8 +46,8 @@ // Ensure there is one more frame presented after animation finishes // to allow animation throughput data is passed from cc to ui. - ignore_result( - ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200))); + std::ignore = + ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200)); } } // namespace
diff --git a/ash/app_list/views/search_result_view.cc b/ash/app_list/views/search_result_view.cc index 30bd19b..f759b7b 100644 --- a/ash/app_list/views/search_result_view.cc +++ b/ash/app_list/views/search_result_view.cc
@@ -328,7 +328,6 @@ break; case SearchResultViewType::kClassic: case SearchResultViewType::kAnswerCard: - separator_label_->SetVisible(false); } } @@ -350,6 +349,8 @@ void SearchResultView::StyleLabel(views::Label* label, bool is_title_label, const SearchResult::Tags& tags) { + // Reset font weight styling for label. + label->ApplyBaselineTextStyle(); // Apply font weight styles. bool is_url = false; for (const auto& tag : tags) {
diff --git a/ash/assistant/ui/main_stage/assistant_card_element_view.cc b/ash/assistant/ui/main_stage/assistant_card_element_view.cc index 703e1e5..87c0d2d 100644 --- a/ash/assistant/ui/main_stage/assistant_card_element_view.cc +++ b/ash/assistant/ui/main_stage/assistant_card_element_view.cc
@@ -5,6 +5,7 @@ #include "ash/assistant/ui/main_stage/assistant_card_element_view.h" #include <memory> +#include <tuple> #include "ash/assistant/model/ui/assistant_card_element.h" #include "ash/assistant/ui/assistant_ui_constants.h" @@ -12,7 +13,6 @@ #include "ash/assistant/ui/main_stage/assistant_ui_element_view_animator.h" #include "ash/assistant/util/deep_link_util.h" #include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "base/ignore_result.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" #include "ui/events/event.h" @@ -55,7 +55,7 @@ ui::EF_LEFT_MOUSE_BUTTON); // Send an ET_MOUSE_RELEASED event. - ignore_result(host->GetEventSink()->OnEventFromSource(&release_event)); + std::ignore = host->GetEventSink()->OnEventFromSource(&release_event); } } // namespace
diff --git a/ash/components/arc/compat_mode/touch_mode_mouse_rewriter.cc b/ash/components/arc/compat_mode/touch_mode_mouse_rewriter.cc index 12c413a7..0b53150 100644 --- a/ash/components/arc/compat_mode/touch_mode_mouse_rewriter.cc +++ b/ash/components/arc/compat_mode/touch_mode_mouse_rewriter.cc
@@ -4,11 +4,12 @@ #include "ash/components/arc/compat_mode/touch_mode_mouse_rewriter.h" +#include <tuple> + #include "ash/components/arc/arc_features.h" #include "ash/components/arc/compat_mode/metrics.h" #include "ash/shell.h" #include "base/bind.h" -#include "base/ignore_result.h" #include "base/threading/sequenced_task_runner_handle.h" #include "ui/aura/window_tree_host.h" #include "ui/events/base_event_utils.h" @@ -139,7 +140,7 @@ original_event.root_location(), ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); - ignore_result(SendEvent(continuation, &release_event)); + std::ignore = SendEvent(continuation, &release_event); } void TouchModeMouseRewriter::SendScrollEvent( @@ -152,7 +153,7 @@ ui::ScrollEvent scroll_event(ui::ET_SCROLL, original_event.location_f(), original_event.root_location_f(), ui::EventTimeForNow(), 0, 0, step, 0, step, 1); - ignore_result(SendEvent(continuation, &scroll_event)); + std::ignore = SendEvent(continuation, &scroll_event); scroll_y_offset_ -= step; scroll_timeout_ -= kSmoothScrollEventInterval; if (scroll_timeout_.is_zero()) { @@ -160,7 +161,7 @@ original_event.location_f(), original_event.root_location_f(), ui::EventTimeForNow(), 0, 0, 0, 0, 0, 0); - ignore_result(SendEvent(continuation, &fling_start_event)); + std::ignore = SendEvent(continuation, &fling_start_event); } else { base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE,
diff --git a/ash/components/arc/enterprise/snapshot_hours_policy_service.cc b/ash/components/arc/enterprise/snapshot_hours_policy_service.cc index c74b199..e561cf5 100644 --- a/ash/components/arc/enterprise/snapshot_hours_policy_service.cc +++ b/ash/components/arc/enterprise/snapshot_hours_policy_service.cc
@@ -5,13 +5,13 @@ #include "ash/components/arc/enterprise/snapshot_hours_policy_service.h" #include <memory> +#include <tuple> #include <utility> #include "ash/components/arc/arc_prefs.h" #include "ash/components/policy/weekly_time/time_utils.h" #include "base/bind.h" #include "base/callback_helpers.h" -#include "base/ignore_result.h" #include "base/logging.h" #include "base/time/default_clock.h" #include "base/time/tick_clock.h" @@ -127,7 +127,7 @@ if (intervals_.empty()) return; - ignore_result(snapshot_disabler.Release()); + std::ignore = snapshot_disabler.Release(); EnableSnapshots(); }
diff --git a/ash/components/arc/enterprise/snapshot_session_controller.cc b/ash/components/arc/enterprise/snapshot_session_controller.cc index 53d9276..9f994bd 100644 --- a/ash/components/arc/enterprise/snapshot_session_controller.cc +++ b/ash/components/arc/enterprise/snapshot_session_controller.cc
@@ -4,7 +4,8 @@ #include "ash/components/arc/enterprise/snapshot_session_controller.h" -#include "base/ignore_result.h" +#include <tuple> + #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/time/time.h" @@ -95,7 +96,7 @@ : apps_tracker_(std::move(apps_tracker)) { session_manager::SessionManager::Get()->AddObserver(this); // Start tracking apps for active MGS. - ignore_result(MaybeStartSession()); + std::ignore = MaybeStartSession(); } SnapshotSessionControllerImpl::~SnapshotSessionControllerImpl() {
diff --git a/ash/components/arc/ime/arc_ime_service.cc b/ash/components/arc/ime/arc_ime_service.cc index 6c72ada..6745099 100644 --- a/ash/components/arc/ime/arc_ime_service.cc +++ b/ash/components/arc/ime/arc_ime_service.cc
@@ -4,6 +4,7 @@ #include "ash/components/arc/ime/arc_ime_service.h" +#include <tuple> #include <utility> #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" @@ -13,7 +14,6 @@ #include "ash/components/arc/ime/key_event_result_receiver.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/public/cpp/app_types_util.h" -#include "base/ignore_result.h" #include "base/logging.h" #include "base/memory/singleton.h" #include "base/metrics/histogram_functions.h" @@ -392,7 +392,7 @@ ui::InputMethod* const input_method = GetInputMethod(); receiver_->SetCallback(std::move(callback), key_event.get()); if (input_method) - ignore_result(input_method->DispatchKeyEvent(key_event.get())); + std::ignore = input_method->DispatchKeyEvent(key_event.get()); } ////////////////////////////////////////////////////////////////////////////////
diff --git a/ash/components/arc/mojom/protected_buffer_manager.mojom b/ash/components/arc/mojom/protected_buffer_manager.mojom index 241c23f..017e9ab 100644 --- a/ash/components/arc/mojom/protected_buffer_manager.mojom +++ b/ash/components/arc/mojom/protected_buffer_manager.mojom
@@ -4,6 +4,7 @@ // The original version of this file lives in the Chromium repository at: // src/components/arc/mojom/protected_buffer_manager.mojom +// Next Version: 3 module arc.mojom; import "media/mojo/mojom/stable/native_pixmap_handle.mojom"; @@ -11,7 +12,7 @@ // This interface is exposed by the GPU process for translating dummy handles // for secure buffers into usable shared memory buffer or native pixmap handles. -// Next Method ID: 3 +// Next Method ID: 4 [Stable, Uuid="560fada2-b6b8-4b06-a337-188381028495", ServiceSandbox=sandbox.mojom.Sandbox.kGpu] interface ProtectedBufferManager { @@ -50,4 +51,10 @@ [MinVersion=1] GetProtectedNativePixmapHandleFromHandle@2(handle dummy_handle) => (media.stable.mojom.NativePixmapHandle? native_pixmap_handle); + + // This is used by exo in the browser process to determine if a GMB refers to + // a protected native pixmap so it can set the HW protection properly in the + // quad if the platform supports HWDRM. + [MinVersion=2] + IsProtectedNativePixmapHandle@3(handle dummy_handle) => (bool is_protected); };
diff --git a/ash/components/arc/video_accelerator/BUILD.gn b/ash/components/arc/video_accelerator/BUILD.gn index a679f03f..7c55bfb 100644 --- a/ash/components/arc/video_accelerator/BUILD.gn +++ b/ash/components/arc/video_accelerator/BUILD.gn
@@ -58,3 +58,16 @@ deps += [ "//media/gpu/chromeos:chromeos" ] } } + +source_set("protected_native_pixmap_query_client") { + sources = [ + "protected_native_pixmap_query_client.cc", + "protected_native_pixmap_query_client.h", + ] + + deps = [ + "//ash/components/arc/mojom:media", + "//components/exo", + "//content/public/browser:browser", + ] +}
diff --git a/ash/components/arc/video_accelerator/protected_buffer_manager.cc b/ash/components/arc/video_accelerator/protected_buffer_manager.cc index b9271793..524227ce 100644 --- a/ash/components/arc/video_accelerator/protected_buffer_manager.cc +++ b/ash/components/arc/video_accelerator/protected_buffer_manager.cc
@@ -460,6 +460,18 @@ return iter->second->GetNativePixmap(); } +bool ProtectedBufferManager::IsProtectedNativePixmapHandle( + base::ScopedFD dummy_fd) { + uint32_t id = 0; + auto pixmap = ImportDummyFd(std::move(dummy_fd), &id); + if (!pixmap) + return false; + + base::AutoLock lock(buffer_map_lock_); + const auto& iter = buffer_map_.find(id); + return iter != buffer_map_.end(); +} + scoped_refptr<gfx::NativePixmap> ProtectedBufferManager::ImportDummyFd( base::ScopedFD dummy_fd, uint32_t* id) const {
diff --git a/ash/components/arc/video_accelerator/protected_buffer_manager.h b/ash/components/arc/video_accelerator/protected_buffer_manager.h index f064a0c4..298e061 100644 --- a/ash/components/arc/video_accelerator/protected_buffer_manager.h +++ b/ash/components/arc/video_accelerator/protected_buffer_manager.h
@@ -97,6 +97,10 @@ scoped_refptr<gfx::NativePixmap> GetProtectedNativePixmapFor( const gfx::NativePixmapHandle& handle); + // Returns true if dummy |handle| corresponds to a protected native pixmap, + // false otherwise. + bool IsProtectedNativePixmapHandle(base::ScopedFD dummy_fd); + private: // Used internally to maintain the association between the dummy handle and // the underlying buffer.
diff --git a/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.cc b/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.cc index fa38dd3..8f213c5 100644 --- a/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.cc +++ b/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.cc
@@ -64,4 +64,13 @@ std::move(callback).Run(std::move(native_pixmap_handle)); } +void GpuArcProtectedBufferManagerProxy::IsProtectedNativePixmapHandle( + mojo::ScopedHandle dummy_handle, + IsProtectedNativePixmapHandleCallback callback) { + base::ScopedFD unwrapped_fd = UnwrapFdFromMojoHandle(std::move(dummy_handle)); + std::move(callback).Run( + protected_buffer_manager_->IsProtectedNativePixmapHandle( + std::move(unwrapped_fd))); +} + } // namespace arc
diff --git a/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.h b/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.h index e5bb1293..c88773e 100644 --- a/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.h +++ b/ash/components/arc/video_accelerator/protected_buffer_manager_proxy.h
@@ -35,6 +35,9 @@ void GetProtectedNativePixmapHandleFromHandle( mojo::ScopedHandle dummy_handle, GetProtectedNativePixmapHandleFromHandleCallback callback) override; + void IsProtectedNativePixmapHandle( + mojo::ScopedHandle dummy_handle, + IsProtectedNativePixmapHandleCallback callback) override; private: scoped_refptr<arc::ProtectedBufferManager> protected_buffer_manager_;
diff --git a/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.cc b/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.cc new file mode 100644 index 0000000..e53fef1 --- /dev/null +++ b/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.cc
@@ -0,0 +1,33 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/components/arc/video_accelerator/protected_native_pixmap_query_client.h" +#include "content/public/browser/gpu_service_registry.h" + +namespace arc { + +ProtectedNativePixmapQueryClient::ProtectedNativePixmapQueryClient() {} + +ProtectedNativePixmapQueryClient::~ProtectedNativePixmapQueryClient() {} + +void ProtectedNativePixmapQueryClient::IsProtectedNativePixmapHandle( + base::ScopedFD handle, + IsProtectedNativePixmapHandleCallback callback) { + if (!gpu_buffer_manager_) { + content::BindInterfaceInGpuProcess( + gpu_buffer_manager_.BindNewPipeAndPassReceiver()); + gpu_buffer_manager_.set_disconnect_handler( + base::BindOnce(&ProtectedNativePixmapQueryClient::OnMojoDisconnect, + weak_factory_.GetWeakPtr())); + } + gpu_buffer_manager_->IsProtectedNativePixmapHandle( + mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(handle))), + std::move(callback)); +} + +void ProtectedNativePixmapQueryClient::OnMojoDisconnect() { + gpu_buffer_manager_.reset(); +} + +} // namespace arc
diff --git a/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.h b/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.h new file mode 100644 index 0000000..bba3d6416 --- /dev/null +++ b/ash/components/arc/video_accelerator/protected_native_pixmap_query_client.h
@@ -0,0 +1,40 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_COMPONENTS_ARC_VIDEO_ACCELERATOR_PROTECTED_NATIVE_PIXMAP_QUERY_CLIENT_H_ +#define ASH_COMPONENTS_ARC_VIDEO_ACCELERATOR_PROTECTED_NATIVE_PIXMAP_QUERY_CLIENT_H_ + +#include "ash/components/arc/mojom/protected_buffer_manager.mojom.h" +#include "base/memory/weak_ptr.h" +#include "components/exo/protected_native_pixmap_query_delegate.h" +#include "mojo/public/cpp/bindings/remote.h" + +namespace arc { + +// Implementation class for querying the GPU process for whether a handle maps +// to a Chrome allocated protected buffer. +class ProtectedNativePixmapQueryClient + : public exo::ProtectedNativePixmapQueryDelegate { + public: + ProtectedNativePixmapQueryClient(); + ProtectedNativePixmapQueryClient(const ProtectedNativePixmapQueryClient&) = + delete; + ProtectedNativePixmapQueryClient& operator=( + const ProtectedNativePixmapQueryClient&) = delete; + ~ProtectedNativePixmapQueryClient() override; + + // exo::ProtectedNativePixmapQueryDelegate implementation. + void IsProtectedNativePixmapHandle( + base::ScopedFD handle, + IsProtectedNativePixmapHandleCallback callback) override; + + private: + void OnMojoDisconnect(); + mojo::Remote<mojom::ProtectedBufferManager> gpu_buffer_manager_; + + // WeakPtrFactory to use for callbacks. + base::WeakPtrFactory<ProtectedNativePixmapQueryClient> weak_factory_{this}; +}; +} // namespace arc +#endif // ASH_COMPONENTS_ARC_VIDEO_ACCELERATOR_PROTECTED_NATIVE_PIXMAP_QUERY_CLIENT_H_
diff --git a/ash/components/device_activity/device_activity_controller.cc b/ash/components/device_activity/device_activity_controller.cc index 4785d69..0b875b2 100644 --- a/ash/components/device_activity/device_activity_controller.cc +++ b/ash/components/device_activity/device_activity_controller.cc
@@ -26,8 +26,7 @@ // Production edge server for reporting device actives. // TODO(https://crbug.com/1267432): Enable passing base url as a runtime flag. -const char kFresnelBaseUrl[] = - "https://autopush-crosfresnel-pa.sandbox.googleapis.com"; +const char kFresnelBaseUrl[] = "https://crosfresnel-pa.googleapis.com"; class PsmDelegateImpl : public PsmDelegate { public:
diff --git a/ash/components/smbfs/smbfs_mounter_unittest.cc b/ash/components/smbfs/smbfs_mounter_unittest.cc index d0dab99..da7b3115 100644 --- a/ash/components/smbfs/smbfs_mounter_unittest.cc +++ b/ash/components/smbfs/smbfs_mounter_unittest.cc
@@ -7,13 +7,13 @@ #include <string.h> #include <memory> +#include <tuple> #include <utility> #include "ash/components/disks/disk_mount_manager.h" #include "ash/components/disks/mock_disk_mount_manager.h" #include "base/bind.h" #include "base/files/file_util.h" -#include "base/ignore_result.h" #include "base/run_loop.h" #include "base/test/bind.h" #include "base/test/gmock_callback_support.h" @@ -650,7 +650,7 @@ launch_options); ASSERT_TRUE(child_process.IsValid()); // The child FD has been passed to the child process at this point. - ignore_result(child_fd.release()); + std::ignore = child_fd.release(); EXPECT_CALL(mock_disk_mount_manager_, MountPath(StartsWith(kMountUrlPrefix), _, kMountDir, _, _, _, _))
diff --git a/ash/drag_drop/tab_drag_drop_delegate.cc b/ash/drag_drop/tab_drag_drop_delegate.cc index 72a4399a..a8ea436 100644 --- a/ash/drag_drop/tab_drag_drop_delegate.cc +++ b/ash/drag_drop/tab_drag_drop_delegate.cc
@@ -4,6 +4,7 @@ #include "ash/drag_drop/tab_drag_drop_delegate.h" +#include "ash/constants/app_types.h" #include "ash/constants/ash_features.h" #include "ash/public/cpp/new_window_delegate.h" #include "ash/public/cpp/presentation_time_recorder.h" @@ -18,6 +19,8 @@ #include "ash/wm/tablet_mode/tablet_mode_browser_window_drag_session_windows_hider.h" #include "base/pickle.h" #include "base/strings/utf_string_conversions.h" +#include "chromeos/crosapi/cpp/lacros_startup_state.h" +#include "ui/aura/client/aura_constants.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/dragdrop/os_exchange_data.h" @@ -57,6 +60,12 @@ DEFINE_UI_CLASS_PROPERTY_KEY(bool, kIsSourceWindowForDrag, false) +bool IsLacrosWindow(const aura::Window* window) { + auto app_type = + static_cast<AppType>(window->GetProperty(aura::client::kAppType)); + return app_type == AppType::LACROS; +} + } // namespace // static @@ -143,8 +152,17 @@ void TabDragDropDelegate::OnNewBrowserWindowCreated( const gfx::Point& location_in_screen, aura::Window* new_window) { - DCHECK(new_window) << "New browser window creation for tab detaching failed."; + auto is_lacros = IsLacrosWindow(source_window_); + if (!new_window && is_lacros && + !crosapi::lacros_startup_state::IsLacrosPrimaryEnabled()) { + LOG(ERROR) + << "New browser window creation for tab detaching failed.\n" + << "Check whether about:flags#lacros-primary is enabled or " + << "--enable-features=LacrosPrimary is passed in when launching Ash"; + return; + } + DCHECK(new_window) << "New browser window creation for tab detaching failed."; const gfx::Rect area = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( root_window_);
diff --git a/ash/host/ash_window_tree_host_unified.cc b/ash/host/ash_window_tree_host_unified.cc index f4872cf..bf35a0a5 100644 --- a/ash/host/ash_window_tree_host_unified.cc +++ b/ash/host/ash_window_tree_host_unified.cc
@@ -5,13 +5,13 @@ #include "ash/host/ash_window_tree_host_unified.h" #include <memory> +#include <tuple> #include <utility> #include "ash/host/ash_window_tree_host_mirroring_delegate.h" #include "ash/host/root_window_transformer.h" #include "base/check.h" #include "base/containers/contains.h" -#include "base/ignore_result.h" #include "base/notreached.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" @@ -44,8 +44,8 @@ located_event->ConvertLocationToTarget( static_cast<aura::Window*>(nullptr), dst_root_); } - ignore_result( - dst_root_->GetHost()->GetEventSink()->OnEventFromSource(event)); + std::ignore = + dst_root_->GetHost()->GetEventSink()->OnEventFromSource(event); // Reset the source host. delegate_->SetCurrentEventTargeterSourceHost(nullptr);
diff --git a/ash/public/cpp/desks_templates_delegate.h b/ash/public/cpp/desks_templates_delegate.h index 8617a6194..cb42f8bf 100644 --- a/ash/public/cpp/desks_templates_delegate.h +++ b/ash/public/cpp/desks_templates_delegate.h
@@ -9,6 +9,7 @@ #include "ash/public/cpp/ash_public_export.h" #include "base/callback.h" +#include "base/time/time.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace app_restore { @@ -83,9 +84,11 @@ base::OnceCallback<void(const gfx::ImageSkia&)> callback) const = 0; // Launches apps into the active desk. Ran immediately after a desk is created - // for a template. + // for a template. `delay` is the time between each app launch, used for + // debugging. virtual void LaunchAppsFromTemplate( - std::unique_ptr<DeskTemplate> desk_template) = 0; + std::unique_ptr<DeskTemplate> desk_template, + base::TimeDelta delay) = 0; // Checks whether `window` is supported in the desks templates feature. virtual bool IsWindowSupportedForDeskTemplate(aura::Window* window) const = 0;
diff --git a/ash/public/cpp/test/test_desks_templates_delegate.cc b/ash/public/cpp/test/test_desks_templates_delegate.cc index e624ada..82a8767 100644 --- a/ash/public/cpp/test/test_desks_templates_delegate.cc +++ b/ash/public/cpp/test/test_desks_templates_delegate.cc
@@ -49,7 +49,8 @@ base::OnceCallback<void(const gfx::ImageSkia&)> callback) const {} void TestDesksTemplatesDelegate::LaunchAppsFromTemplate( - std::unique_ptr<DeskTemplate> desk_template) {} + std::unique_ptr<DeskTemplate> desk_template, + base::TimeDelta delay) {} bool TestDesksTemplatesDelegate::IsWindowSupportedForDeskTemplate( aura::Window* window) const {
diff --git a/ash/public/cpp/test/test_desks_templates_delegate.h b/ash/public/cpp/test/test_desks_templates_delegate.h index d1efed29..fd243d4 100644 --- a/ash/public/cpp/test/test_desks_templates_delegate.h +++ b/ash/public/cpp/test/test_desks_templates_delegate.h
@@ -56,8 +56,8 @@ const std::string& app_id, int desired_icon_size, base::OnceCallback<void(const gfx::ImageSkia&)> callback) const override; - void LaunchAppsFromTemplate( - std::unique_ptr<DeskTemplate> desk_template) override; + void LaunchAppsFromTemplate(std::unique_ptr<DeskTemplate> desk_template, + base::TimeDelta delay) override; bool IsWindowSupportedForDeskTemplate(aura::Window* window) const override; private:
diff --git a/ash/quick_pair/common/fast_pair/fast_pair_metrics.cc b/ash/quick_pair/common/fast_pair/fast_pair_metrics.cc index c2b70c687..62ac3d8 100644 --- a/ash/quick_pair/common/fast_pair/fast_pair_metrics.cc +++ b/ash/quick_pair/common/fast_pair/fast_pair_metrics.cc
@@ -151,6 +151,8 @@ const char kHandshakeResult[] = "Bluetooth.ChromeOS.FastPair.Handshake.Result"; const char kHandshakeFailureReason[] = "Bluetooth.ChromeOS.FastPair.Handshake.FailureReason"; +const char kBleScanSessionResult[] = + "Bluetooth.ChromeOS.FastPair.Scanner.StartSession.Result"; } // namespace @@ -419,5 +421,9 @@ base::UmaHistogramEnumeration(kHandshakeFailureReason, failure_reason); } +void RecordBluetoothLowEnergyScannerStartSessionResult(bool success) { + base::UmaHistogramBoolean(kBleScanSessionResult, success); +} + } // namespace quick_pair } // namespace ash
diff --git a/ash/quick_pair/common/fast_pair/fast_pair_metrics.h b/ash/quick_pair/common/fast_pair/fast_pair_metrics.h index 9a70582..94b60c99 100644 --- a/ash/quick_pair/common/fast_pair/fast_pair_metrics.h +++ b/ash/quick_pair/common/fast_pair/fast_pair_metrics.h
@@ -210,6 +210,9 @@ COMPONENT_EXPORT(QUICK_PAIR_COMMON) void RecordHandshakeFailureReason(HandshakeFailureReason failure_reason); +COMPONENT_EXPORT(QUICK_PAIR_COMMON) +void RecordBluetoothLowEnergyScannerStartSessionResult(bool success); + } // namespace quick_pair } // namespace ash
diff --git a/ash/quick_pair/scanning/fast_pair/fast_pair_scanner_impl.cc b/ash/quick_pair/scanning/fast_pair/fast_pair_scanner_impl.cc index b57ede9d..841d3ef 100644 --- a/ash/quick_pair/scanning/fast_pair/fast_pair_scanner_impl.cc +++ b/ash/quick_pair/scanning/fast_pair/fast_pair_scanner_impl.cc
@@ -5,6 +5,7 @@ #include "ash/quick_pair/scanning/fast_pair/fast_pair_scanner_impl.h" #include "ash/quick_pair/common/constants.h" +#include "ash/quick_pair/common/fast_pair/fast_pair_metrics.h" #include "ash/quick_pair/common/logging.h" #include "base/containers/contains.h" #include "base/time/time.h" @@ -18,6 +19,11 @@ constexpr uint8_t kFilterPatternStartPosition = 0; const std::vector<uint8_t> kFastPairFilterPatternValue = {0x2c, 0xfe}; +} // namespace + +namespace ash { +namespace quick_pair { + std::ostream& operator<<( std::ostream& out, const device::BluetoothLowEnergyScanSession::ErrorCode& error_code) { @@ -28,10 +34,6 @@ } return out; } -} // namespace - -namespace ash { -namespace quick_pair { FastPairScannerImpl::FastPairScannerImpl() { device::BluetoothAdapterFactory::Get()->GetAdapter(base::BindOnce( @@ -74,6 +76,9 @@ device::BluetoothLowEnergyScanSession* scan_session, absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode> error_code) { + RecordBluetoothLowEnergyScannerStartSessionResult( + /*success=*/!error_code.has_value()); + if (error_code) { QP_LOG(ERROR) << "Bluetooth Low Energy Scan Session failed to start with " "the following error: "
diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.cc b/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.cc index 7e329beb..df843a318d 100644 --- a/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.cc +++ b/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.cc
@@ -195,7 +195,6 @@ void FastPairNotificationController::ShowPairingNotification( const std::u16string& device_name, gfx::Image device_image, - base::RepeatingClosure on_cancel_clicked, base::OnceCallback<void(bool)> on_close) { // If we get to this point in the pairing flow where we are showing the // Pairing notification, then the user has elected to begin pairing and we @@ -212,16 +211,13 @@ pairing_notification->set_title(l10n_util::GetStringFUTF16( IDS_FAST_PAIR_PAIRING_NOTIFICATION_TITLE, device_name)); - message_center::ButtonInfo cancel_button( - l10n_util::GetStringUTF16(IDS_FAST_PAIR_CANCEL_BUTTON)); - pairing_notification->set_buttons({cancel_button}); - pairing_notification->set_delegate(base::MakeRefCounted<NotificationDelegate>( - /*on_primary_click=*/on_cancel_clicked, + /*on_primary_click=*/base::DoNothing(), /*on_close=*/std::move(on_close))); pairing_notification->set_type(message_center::NOTIFICATION_TYPE_PROGRESS); pairing_notification->set_progress(kInfiniteLoadingProgressValue); pairing_notification->set_image(device_image); + pairing_notification->set_pinned(true); MessageCenter::Get()->AddNotification(std::move(pairing_notification)); }
diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.h b/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.h index e856c9a..315c7796 100644 --- a/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.h +++ b/ash/quick_pair/ui/fast_pair/fast_pair_notification_controller.h
@@ -36,7 +36,6 @@ base::OnceCallback<void(bool)> on_close); void ShowPairingNotification(const std::u16string& device_name, gfx::Image device_image, - base::RepeatingClosure on_cancel_clicked, base::OnceCallback<void(bool)> on_close); void ShowAssociateAccount(const std::u16string& device_name, const std::u16string& email_address,
diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc b/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc index a71924f..1c941c1 100644 --- a/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc +++ b/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc
@@ -98,7 +98,7 @@ notification_controller_->ShowPairingNotification( base::ASCIIToUTF16(device_metadata->GetDetails().name()), - device_metadata->image(), base::DoNothing(), base::DoNothing()); + device_metadata->image(), base::DoNothing()); } void FastPairPresenter::ShowPairingFailed(scoped_refptr<Device> device,
diff --git a/ash/shelf/drag_window_from_shelf_controller_unittest.cc b/ash/shelf/drag_window_from_shelf_controller_unittest.cc index fe64b2d..27a26d15 100644 --- a/ash/shelf/drag_window_from_shelf_controller_unittest.cc +++ b/ash/shelf/drag_window_from_shelf_controller_unittest.cc
@@ -4,6 +4,8 @@ #include "ash/shelf/drag_window_from_shelf_controller.h" +#include <tuple> + #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_view.h" @@ -117,8 +119,8 @@ // Ensure there is one more frame presented after animation finishes // to allow animation throughput data is passed from cc to ui. - ignore_result( - ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200))); + std::ignore = + ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200)); } SplitViewController* split_view_controller() {
diff --git a/ash/shelf/swipe_home_to_overview_controller_unittest.cc b/ash/shelf/swipe_home_to_overview_controller_unittest.cc index 447d311..db69e59 100644 --- a/ash/shelf/swipe_home_to_overview_controller_unittest.cc +++ b/ash/shelf/swipe_home_to_overview_controller_unittest.cc
@@ -4,6 +4,8 @@ #include "ash/shelf/swipe_home_to_overview_controller.h" +#include <tuple> + #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_view.h" @@ -18,7 +20,6 @@ #include "ash/wm/overview/overview_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h" #include "base/bind.h" -#include "base/ignore_result.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/simple_test_tick_clock.h" @@ -118,8 +119,8 @@ // Ensure there is one more frame presented after animation finishes // to allow animation throughput data is passed from cc to ui. - ignore_result( - ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200))); + std::ignore = + ui::WaitForNextFrameToBePresented(compositor, base::Milliseconds(200)); } void TapOnHomeLauncherSearchBox() {
diff --git a/ash/style/icon_button.cc b/ash/style/icon_button.cc index a6522a79..2ee2e748 100644 --- a/ash/style/icon_button.cc +++ b/ash/style/icon_button.cc
@@ -119,6 +119,13 @@ UpdateVectorIcon(); } +void IconButton::SetIconColor(const SkColor icon_color) { + if (icon_color_ == icon_color) + return; + icon_color_ = icon_color; + UpdateVectorIcon(); +} + void IconButton::SetToggled(bool toggled) { if (!is_togglable_ || toggled_ == toggled) return; @@ -186,8 +193,9 @@ return; auto* color_provider = AshColorProvider::Get(); - const SkColor normal_icon_color = color_provider->GetContentLayerColor( - AshColorProvider::ContentLayerType::kButtonIconColor); + const SkColor normal_icon_color = + icon_color_.value_or(color_provider->GetContentLayerColor( + AshColorProvider::ContentLayerType::kButtonIconColor)); const SkColor toggled_icon_color = color_provider->GetContentLayerColor( AshColorProvider::ContentLayerType::kButtonIconColorPrimary); const SkColor icon_color = toggled_ ? toggled_icon_color : normal_icon_color;
diff --git a/ash/style/icon_button.h b/ash/style/icon_button.h index ee1da017..aeeeb8f0 100644 --- a/ash/style/icon_button.h +++ b/ash/style/icon_button.h
@@ -72,6 +72,10 @@ // states. void SetVectorIcon(const gfx::VectorIcon& icon); + // Sets the icon's color. If the button is togglable, this will be the color + // when it's not toggled. + void SetIconColor(const SkColor icon_color); + // Updates the `toggled_` state of the button. void SetToggled(bool toggled); @@ -96,6 +100,9 @@ // True if the button is currently toggled. bool toggled_ = false; + // Customized value for icon's color. + absl::optional<SkColor> icon_color_; + DisabledButtonBehavior button_behavior_ = DisabledButtonBehavior::kNone; };
diff --git a/ash/system/holding_space/holding_space_animation_registry.cc b/ash/system/holding_space/holding_space_animation_registry.cc index a1c7664..74de091 100644 --- a/ash/system/holding_space/holding_space_animation_registry.cc +++ b/ash/system/holding_space/holding_space_animation_registry.cc
@@ -32,58 +32,60 @@ } // namespace -// HoldingSpaceAnimationRegistry::ProgressRingAnimationDelegate ---------------- +// HoldingSpaceAnimationRegistry::ProgressIndicatorAnimationDelegate ----------- // The delegate of `HoldingSpaceAnimationRegistry` responsible for creating and -// curating progress ring animations based on holding space model state. -class HoldingSpaceAnimationRegistry::ProgressRingAnimationDelegate +// curating progress indicator animations based on holding space model state. +class HoldingSpaceAnimationRegistry::ProgressIndicatorAnimationDelegate : public HoldingSpaceControllerObserver, public HoldingSpaceModelObserver { public: - explicit ProgressRingAnimationDelegate(HoldingSpaceController* controller) + explicit ProgressIndicatorAnimationDelegate( + HoldingSpaceController* controller) : controller_(controller) { controller_observation_.Observe(controller_); if (controller_->model()) OnHoldingSpaceModelAttached(controller_->model()); } - ProgressRingAnimationDelegate(const ProgressRingAnimationDelegate&) = delete; - ProgressRingAnimationDelegate& operator=( - const ProgressRingAnimationDelegate&) = delete; - ~ProgressRingAnimationDelegate() override = default; + ProgressIndicatorAnimationDelegate( + const ProgressIndicatorAnimationDelegate&) = delete; + ProgressIndicatorAnimationDelegate& operator=( + const ProgressIndicatorAnimationDelegate&) = delete; + ~ProgressIndicatorAnimationDelegate() override = default; - // Adds the specified `callback` to be notified of changes to the animation - // associated with the specified `key`. The `callback` will continue to - // receive events so long as both `this` and the returned subscription exist. - ProgressRingAnimationChangedCallbackList::Subscription - AddAnimationChangedCallbackForKey( + // Adds the specified `callback` to be notified of changes to the ring + // animation associated with the specified `key`. The `callback` will continue + // to receive events so long as both `this` and the returned subscription + // exist. + base::CallbackListSubscription AddRingAnimationChangedCallbackForKey( const void* key, ProgressRingAnimationChangedCallbackList::CallbackType callback) { - auto it = animation_changed_callback_lists_by_key_.find(key); + auto it = ring_animation_changed_callback_lists_by_key_.find(key); - // If this is the first time that an animation changed callback is being + // If this is the first time that a ring animation changed callback is being // registered for the specified `key`, set a callback to destroy the // created callback list when it becomes empty. - if (it == animation_changed_callback_lists_by_key_.end()) { - it = animation_changed_callback_lists_by_key_ + if (it == ring_animation_changed_callback_lists_by_key_.end()) { + it = ring_animation_changed_callback_lists_by_key_ .emplace(std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple()) .first; it->second.set_removal_callback(base::BindRepeating( - &ProgressRingAnimationDelegate:: - EraseAnimationChangedCallbackListForKeyIfEmpty, + &ProgressIndicatorAnimationDelegate:: + EraseRingAnimationChangedCallbackListForKeyIfEmpty, base::Unretained(this), base::Unretained(key))); } return it->second.Add(std::move(callback)); } - // Returns the registered animation for the specified `key`. + // Returns the registered ring animation for the specified `key`. // NOTE: This may return `nullptr` if no such animation is registered. - HoldingSpaceProgressRingAnimation* GetAnimationForKey(const void* key) { - auto it = animations_by_key_.find(key); - return it != animations_by_key_.end() ? it->second.animation.get() - : nullptr; + HoldingSpaceProgressRingAnimation* GetRingAnimationForKey(const void* key) { + auto it = ring_animations_by_key_.find(key); + return it != ring_animations_by_key_.end() ? it->second.animation.get() + : nullptr; } private: @@ -130,101 +132,105 @@ // If `item` has just progressed to completion, ensure that a pulse // animation is created and started. if (item->progress().IsComplete()) { - EnsureAnimationOfTypeForKey( + EnsureRingAnimationOfTypeForKey( item, HoldingSpaceProgressRingAnimation::Type::kPulse); } UpdateAnimations(/*for_removal=*/false); } - // Erases all animations, notifying any animation changed callbacks. - void EraseAllAnimations() { - while (!animations_by_key_.empty()) { - auto it = animations_by_key_.begin(); + // Erases all ring animations, notifying any animation changed callbacks. + void EraseAllRingAnimations() { + while (!ring_animations_by_key_.empty()) { + auto it = ring_animations_by_key_.begin(); const void* key = it->first; - animations_by_key_.erase(it); - NotifyAnimationChangedForKey(key); + ring_animations_by_key_.erase(it); + NotifyRingAnimationChangedForKey(key); } } - // Erases the animation for the specified `key`, notifying any animation + // Erases the ring animation for the specified `key`, notifying any animation // changed callbacks. - void EraseAnimationForKey(const void* key) { - auto it = animations_by_key_.find(key); - if (it == animations_by_key_.end()) + void EraseRingAnimationForKey(const void* key) { + auto it = ring_animations_by_key_.find(key); + if (it == ring_animations_by_key_.end()) return; - animations_by_key_.erase(it); - NotifyAnimationChangedForKey(key); + ring_animations_by_key_.erase(it); + NotifyRingAnimationChangedForKey(key); } - // Erases any animation for which `predicate` returns `true`, notifying any - // animation changed callbacks. - void EraseAnimationIf( + // Erases any ring animation for which `predicate` returns `true`, notifying + // any animation changed callbacks. + void EraseRingAnimationIf( base::RepeatingCallback<bool(const void* key)> predicate) { std::set<const void*> keys_to_erase; - for (const auto& animation_by_key : animations_by_key_) { - const void* key = animation_by_key.first; + for (const auto& ring_animation_by_key : ring_animations_by_key_) { + const void* key = ring_animation_by_key.first; if (predicate.Run(key)) keys_to_erase.insert(key); } for (const void* key : keys_to_erase) - EraseAnimationForKey(key); + EraseRingAnimationForKey(key); } - // Erases the animation for the specified `key` if it is not of the desired - // `type`, notifying any animation changed callbacks. - void EraseAnimationIfNotOfTypeForKey( + // Erases the ring animation for the specified `key` if it is not of the + // desired `type`, notifying any animation changed callbacks. + void EraseRingAnimationIfNotOfTypeForKey( const void* key, HoldingSpaceProgressRingAnimation::Type type) { - auto it = animations_by_key_.find(key); - if (it != animations_by_key_.end() && it->second.animation->type() != type) - EraseAnimationForKey(key); + auto it = ring_animations_by_key_.find(key); + if (it != ring_animations_by_key_.end() && + it->second.animation->type() != type) { + EraseRingAnimationForKey(key); + } } - // Erases the animation callback list for the specified `key` if it is empty. - void EraseAnimationChangedCallbackListForKeyIfEmpty(const void* key) { - auto it = animation_changed_callback_lists_by_key_.find(key); - if (it == animation_changed_callback_lists_by_key_.end()) + // Erases the ring animation callback list for the specified `key` if empty. + void EraseRingAnimationChangedCallbackListForKeyIfEmpty(const void* key) { + auto it = ring_animation_changed_callback_lists_by_key_.find(key); + if (it == ring_animation_changed_callback_lists_by_key_.end()) return; if (it->second.empty()) - animation_changed_callback_lists_by_key_.erase(it); + ring_animation_changed_callback_lists_by_key_.erase(it); } - // Ensures that the animation for the specified `key` is of the desired + // Ensures that the ring animation for the specified `key` is of the desired // `type`. If necessary, a new animation is created and started, notifying any // animation changed callbacks. - void EnsureAnimationOfTypeForKey( + void EnsureRingAnimationOfTypeForKey( const void* key, HoldingSpaceProgressRingAnimation::Type type) { - auto it = animations_by_key_.find(key); - if (it != animations_by_key_.end() && it->second.animation->type() == type) + auto it = ring_animations_by_key_.find(key); + if (it != ring_animations_by_key_.end() && + it->second.animation->type() == type) { return; + } auto animation = HoldingSpaceProgressRingAnimation::CreateOfType(type); auto subscription = animation->AddAnimationUpdatedCallback(base::BindRepeating( - &ProgressRingAnimationDelegate::OnAnimationUpdatedForKey, + &ProgressIndicatorAnimationDelegate::OnRingAnimationUpdatedForKey, base::Unretained(this), key, animation.get())); auto subscribed_animation = SubscribedProgressRingAnimation{ .animation = std::move(animation), .subscription = std::move(subscription)}; - animations_by_key_.emplace(key, std::move(subscribed_animation)) + ring_animations_by_key_.emplace(key, std::move(subscribed_animation)) .first->second.animation->Start(); - NotifyAnimationChangedForKey(key); + NotifyRingAnimationChangedForKey(key); } - // Notifies any animation changed callbacks registered for the specified `key` - // that the associated animation has changed. - void NotifyAnimationChangedForKey(const void* key) { - auto it = animation_changed_callback_lists_by_key_.find(key); - if (it == animation_changed_callback_lists_by_key_.end()) + // Notifies any ring animation changed callbacks registered for the specified + // `key` that the associated animation has changed. + void NotifyRingAnimationChangedForKey(const void* key) { + auto it = ring_animation_changed_callback_lists_by_key_.find(key); + if (it == ring_animation_changed_callback_lists_by_key_.end()) return; - auto animation_it = animations_by_key_.find(key); - it->second.Notify(animation_it != animations_by_key_.end() + auto animation_it = ring_animations_by_key_.find(key); + it->second.Notify(animation_it != ring_animations_by_key_.end() ? animation_it->second.animation.get() : nullptr); } @@ -232,17 +238,17 @@ // Updates animation state for the current `model_` state. If `for_removal` is // `true`, the update was triggered by holding space item removal. void UpdateAnimations(bool for_removal) { - // If no `model_` is currently attached, there should be no animations. - // Animations will be updated if and when a `model_` is attached. + // If no `model_` is currently attached, there should be no ring animations. + // Ring animations will be updated if and when a `model_` is attached. if (model_ == nullptr) { cumulative_progress_ = HoldingSpaceProgress(); - EraseAllAnimations(); + EraseAllRingAnimations(); return; } - // Clean up any animations associated with holding space items that are no - // longer present in the attached `model_`. - EraseAnimationIf(base::BindRepeating( + // Clean up any ring animations associated with holding space items that are + // no longer present in the attached `model_`. + EraseRingAnimationIf(base::BindRepeating( [](const std::vector<std::unique_ptr<HoldingSpaceItem>>& items, const void* controller, const void* key) { return key != controller && @@ -257,9 +263,10 @@ // Iterate over each holding space item in the attached `model_`. for (const auto& item : model_->items()) { // If an `item` is not initialized or is not visibly in-progress, it - // shouldn't contribute to `cumulative_progress_` nor have an animation. + // shouldn't contribute to `cumulative_progress_` nor have a ring + // animation. if (!item->IsInitialized() || item->progress().IsHidden()) { - EraseAnimationForKey(item.get()); + EraseRingAnimationForKey(item.get()); continue; } @@ -267,10 +274,10 @@ // animation if one was previously created and started. This would only // have happened in response to the `item` transitioning to completion at // runtime, as items that are already complete on creation are not - // animated. Any other type of animation should be cleared. Note that a - // completed `item` does not contribute to `cumulative_progress_`. + // animated. Any other type of ring animation should be cleared. Note that + // a completed `item` does not contribute to `cumulative_progress_`. if (item->progress().IsComplete()) { - EraseAnimationIfNotOfTypeForKey( + EraseRingAnimationIfNotOfTypeForKey( item.get(), HoldingSpaceProgressRingAnimation::Type::kPulse); continue; } @@ -280,15 +287,15 @@ // If the `item` is in an indeterminate state, an indeterminate animation // should be associated with it (if one does not already exist). if (item->progress().IsIndeterminate()) { - EnsureAnimationOfTypeForKey( + EnsureRingAnimationOfTypeForKey( item.get(), HoldingSpaceProgressRingAnimation::Type::kIndeterminate); continue; } // If `item` is not in an indeterminate state, it should not have an - // associated animation. - EraseAnimationForKey(item.get()); + // associated ring animation. + EraseRingAnimationForKey(item.get()); } if (cumulative_progress_.IsComplete()) { @@ -296,20 +303,20 @@ if (for_removal) { // If `cumulative_progress_` has just become complete as a result of // one or more holding space items being removed, the `controller_` - // should not have an associated animation. - EraseAnimationForKey(controller_); + // should not have an associated ring animation. + EraseRingAnimationForKey(controller_); } else { // If `cumulative_progress_` has just become complete and is *not* due // to the removal of one or more holding space items, ensure that a // pulse animation is created and started. - EnsureAnimationOfTypeForKey( + EnsureRingAnimationOfTypeForKey( controller_, HoldingSpaceProgressRingAnimation::Type::kPulse); } } else { // If `cumulative_progress_` was already complete, it should be allowed // to continue a pulse animation if one was previously created and - // started. Any other type of animation should be cleared. - EraseAnimationIfNotOfTypeForKey( + // started. Any other type of ring animation should be cleared. + EraseRingAnimationIfNotOfTypeForKey( controller_, HoldingSpaceProgressRingAnimation::Type::kPulse); } return; @@ -319,20 +326,21 @@ // animation should be associated with the `controller_` (if one does not // already exist). if (cumulative_progress_.IsIndeterminate()) { - EnsureAnimationOfTypeForKey( + EnsureRingAnimationOfTypeForKey( controller_, HoldingSpaceProgressRingAnimation::Type::kIndeterminate); return; } // If `cumulative_progress_` is not in an indeterminate state, the - // `controller_` should not have an associated animation. - EraseAnimationForKey(controller_); + // `controller_` should not have an associated ring animation. + EraseRingAnimationForKey(controller_); } - // Invoked when the specified `animation` for the specified `key` has been - // updated. This is used to clean up finished animations. - void OnAnimationUpdatedForKey(const void* key, - HoldingSpaceProgressRingAnimation* animation) { + // Invoked when the specified ring `animation` for the specified `key` has + // been updated. This is used to clean up finished animations. + void OnRingAnimationUpdatedForKey( + const void* key, + HoldingSpaceProgressRingAnimation* animation) { if (animation->IsAnimating()) return; // Once `animation` has finished, it can be removed from the registry. Note @@ -341,10 +349,13 @@ base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce( - [](const base::WeakPtr<ProgressRingAnimationDelegate>& delegate, + [](const base::WeakPtr<ProgressIndicatorAnimationDelegate>& + delegate, const void* key, HoldingSpaceProgressRingAnimation* animation) { - if (delegate && delegate->GetAnimationForKey(key) == animation) - delegate->EraseAnimationForKey(key); + if (delegate && + delegate->GetRingAnimationForKey(key) == animation) { + delegate->EraseRingAnimationForKey(key); + } }, weak_factory_.GetWeakPtr(), key, animation)); } @@ -367,13 +378,14 @@ // cumulative progress, the animation is keyed on a pointer to the holding // space `controller_`. For individual item progress, the animation is keyed // on a pointer to the holding space item itself. - std::map<const void*, SubscribedProgressRingAnimation> animations_by_key_; + std::map<const void*, SubscribedProgressRingAnimation> + ring_animations_by_key_; - // Mapping of keys to their associated animation changed callback lists. + // Mapping of keys to their associated ring animation changed callback lists. // Whenever an animation for a given key is changed, the callback list for // that key will be notified. std::map<const void*, ProgressRingAnimationChangedCallbackList> - animation_changed_callback_lists_by_key_; + ring_animation_changed_callback_lists_by_key_; base::ScopedObservation<HoldingSpaceController, HoldingSpaceControllerObserver> @@ -382,14 +394,14 @@ base::ScopedObservation<HoldingSpaceModel, HoldingSpaceModelObserver> model_observation_{this}; - base::WeakPtrFactory<ProgressRingAnimationDelegate> weak_factory_{this}; + base::WeakPtrFactory<ProgressIndicatorAnimationDelegate> weak_factory_{this}; }; // HoldingSpaceAnimationRegistry ----------------------------------------------- HoldingSpaceAnimationRegistry::HoldingSpaceAnimationRegistry() { - progress_ring_animation_delegate_ = - std::make_unique<ProgressRingAnimationDelegate>( + progress_indicator_animation_delegate_ = + std::make_unique<ProgressIndicatorAnimationDelegate>( HoldingSpaceController::Get()); shell_observation_.Observe(Shell::Get()); @@ -405,19 +417,17 @@ return instance_owner.get(); } -HoldingSpaceAnimationRegistry::ProgressRingAnimationChangedCallbackList:: - Subscription - HoldingSpaceAnimationRegistry:: - AddProgressRingAnimationChangedCallbackForKey( - const void* key, - ProgressRingAnimationChangedCallbackList::CallbackType callback) { - return progress_ring_animation_delegate_->AddAnimationChangedCallbackForKey( - key, std::move(callback)); +base::CallbackListSubscription +HoldingSpaceAnimationRegistry::AddProgressRingAnimationChangedCallbackForKey( + const void* key, + ProgressRingAnimationChangedCallbackList::CallbackType callback) { + return progress_indicator_animation_delegate_ + ->AddRingAnimationChangedCallbackForKey(key, std::move(callback)); } HoldingSpaceProgressRingAnimation* HoldingSpaceAnimationRegistry::GetProgressRingAnimationForKey(const void* key) { - return progress_ring_animation_delegate_->GetAnimationForKey(key); + return progress_indicator_animation_delegate_->GetRingAnimationForKey(key); } void HoldingSpaceAnimationRegistry::OnShellDestroying() {
diff --git a/ash/system/holding_space/holding_space_animation_registry.h b/ash/system/holding_space/holding_space_animation_registry.h index 260c8db..cca9c4e 100644 --- a/ash/system/holding_space/holding_space_animation_registry.h +++ b/ash/system/holding_space/holding_space_animation_registry.h
@@ -39,8 +39,7 @@ // ring animation associated with the specified `key`. The `callback` will // continue to receive events so long as both `this` and the returned // subscription exist. - ProgressRingAnimationChangedCallbackList::Subscription - AddProgressRingAnimationChangedCallbackForKey( + base::CallbackListSubscription AddProgressRingAnimationChangedCallbackForKey( const void* key, ProgressRingAnimationChangedCallbackList::CallbackType callback); @@ -58,11 +57,11 @@ // ShellObserver: void OnShellDestroying() override; - // The delegate responsible for creating and curating progress ring animations - // based on holding space model state. - class ProgressRingAnimationDelegate; - std::unique_ptr<ProgressRingAnimationDelegate> - progress_ring_animation_delegate_; + // The delegate responsible for creating and curating progress indicator + // animations based on holding space model state. + class ProgressIndicatorAnimationDelegate; + std::unique_ptr<ProgressIndicatorAnimationDelegate> + progress_indicator_animation_delegate_; base::ScopedObservation<Shell, ShellObserver,
diff --git a/ash/system/holding_space/holding_space_progress_indicator_animation.cc b/ash/system/holding_space/holding_space_progress_indicator_animation.cc new file mode 100644 index 0000000..3f90236 --- /dev/null +++ b/ash/system/holding_space/holding_space_progress_indicator_animation.cc
@@ -0,0 +1,76 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/holding_space/holding_space_progress_indicator_animation.h" + +#include "base/threading/sequenced_task_runner_handle.h" +#include "ui/compositor/scoped_animation_duration_scale_mode.h" +#include "ui/gfx/animation/slide_animation.h" + +namespace ash { + +HoldingSpaceProgressIndicatorAnimation::HoldingSpaceProgressIndicatorAnimation( + base::TimeDelta duration, + bool is_cyclic) + : duration_(duration), is_cyclic_(is_cyclic) {} + +HoldingSpaceProgressIndicatorAnimation:: + ~HoldingSpaceProgressIndicatorAnimation() = default; + +base::CallbackListSubscription +HoldingSpaceProgressIndicatorAnimation::AddAnimationUpdatedCallback( + base::RepeatingClosureList::CallbackType callback) { + return animation_updated_callback_list_.Add(std::move(callback)); +} + +void HoldingSpaceProgressIndicatorAnimation::Start() { + StartInternal(/*is_cyclic_restart=*/false); +} + +bool HoldingSpaceProgressIndicatorAnimation::IsAnimating() const { + return animator_ && animator_->is_animating(); +} + +void HoldingSpaceProgressIndicatorAnimation::AnimationProgressed( + const gfx::Animation* animation) { + UpdateAnimatableProperties(animation->GetCurrentValue()); + animation_updated_callback_list_.Notify(); +} + +void HoldingSpaceProgressIndicatorAnimation::AnimationEnded( + const gfx::Animation* animation) { + if (!is_cyclic_) { + animation_updated_callback_list_.Notify(); + return; + } + + // In tests, animations may be scaled such that duration is zero. When this + // happens, we need to post cyclic restarts rather than restarting them + // immediately. Otherwise the animation will loop endlessly without providing + // other code an opportunity to run. + if (ui::ScopedAnimationDurationScaleMode::duration_multiplier() == 0.f) { + base::SequencedTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&HoldingSpaceProgressIndicatorAnimation::StartInternal, + weak_factory_.GetWeakPtr(), /*is_cyclic_restart=*/true)); + return; + } + + StartInternal(/*is_cyclic_restart=*/true); +} + +void HoldingSpaceProgressIndicatorAnimation::StartInternal( + bool is_cyclic_restart) { + animator_ = std::make_unique<gfx::SlideAnimation>(this); + animator_->SetSlideDuration( + ui::ScopedAnimationDurationScaleMode::duration_multiplier() * duration_); + animator_->SetTweenType(gfx::Tween::Type::LINEAR); + + if (!is_cyclic_restart) + start_time_ = base::TimeTicks::Now(); + + animator_->Show(); +} + +} // namespace ash
diff --git a/ash/system/holding_space/holding_space_progress_indicator_animation.h b/ash/system/holding_space/holding_space_progress_indicator_animation.h new file mode 100644 index 0000000..143f1a3 --- /dev/null +++ b/ash/system/holding_space/holding_space_progress_indicator_animation.h
@@ -0,0 +1,82 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_PROGRESS_INDICATOR_ANIMATION_H_ +#define ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_PROGRESS_INDICATOR_ANIMATION_H_ + +#include <memory> + +#include "base/callback_list.h" +#include "base/time/time.h" +#include "ui/gfx/animation/animation_delegate.h" + +namespace gfx { +class SlideAnimation; +} // namespace gfx + +namespace ash { + +// An animation for a `HoldingSpaceProgressIndicator`. +class HoldingSpaceProgressIndicatorAnimation : public gfx::AnimationDelegate { + public: + HoldingSpaceProgressIndicatorAnimation( + const HoldingSpaceProgressIndicatorAnimation&) = delete; + HoldingSpaceProgressIndicatorAnimation& operator=( + const HoldingSpaceProgressIndicatorAnimation&) = delete; + ~HoldingSpaceProgressIndicatorAnimation() override; + + // Adds the specified `callback` to be notified of animation updates. The + // `callback` will continue to receive events so long as both `this` and the + // returned subscription exist. + base::CallbackListSubscription AddAnimationUpdatedCallback( + base::RepeatingClosureList::CallbackType callback); + + // Immediately starts this animation. + void Start(); + + // Returns whether this animation is currently running. + bool IsAnimating() const; + + // Returns the time at which this animation was `Start()`-ed. + base::TimeTicks start_time() const { return start_time_; } + + protected: + HoldingSpaceProgressIndicatorAnimation(base::TimeDelta duration, + bool is_cyclic); + + // Implementing classes should update any desired animatable properties as + // appropriate for the specified animation `fraction`. + virtual void UpdateAnimatableProperties(double fraction) = 0; + + private: + // gfx::AnimationDelegate: + void AnimationProgressed(const gfx::Animation* animation) override; + void AnimationEnded(const gfx::Animation* animation) override; + + // Immediately start this animation. If `is_cyclic_restart` is `true`, this + // animation is being restarted after completion of a full animation cycle. + void StartInternal(bool is_cyclic_restart); + + // The duration for this animation. + const base::TimeDelta duration_; + + // Whether this animation should loop on completion. + const bool is_cyclic_; + + // The underlying animator which drives animation progress. + std::unique_ptr<gfx::SlideAnimation> animator_; + + // The time at which this animation was `Start()`-ed. + base::TimeTicks start_time_; + + // The list of callbacks for which to notify animation updates. + base::RepeatingClosureList animation_updated_callback_list_; + + base::WeakPtrFactory<HoldingSpaceProgressIndicatorAnimation> weak_factory_{ + this}; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_PROGRESS_INDICATOR_ANIMATION_H_
diff --git a/ash/system/holding_space/holding_space_progress_ring_animation.cc b/ash/system/holding_space/holding_space_progress_ring_animation.cc index a542858..a5a0dcd 100644 --- a/ash/system/holding_space/holding_space_progress_ring_animation.cc +++ b/ash/system/holding_space/holding_space_progress_ring_animation.cc
@@ -3,11 +3,9 @@ // found in the LICENSE file. #include "ash/system/holding_space/holding_space_progress_ring_animation.h" + #include "ash/system/holding_space/holding_space_progress_ring_indeterminate_animation.h" #include "ash/system/holding_space/holding_space_progress_ring_pulse_animation.h" -#include "base/threading/sequenced_task_runner_handle.h" -#include "ui/compositor/scoped_animation_duration_scale_mode.h" -#include "ui/gfx/animation/slide_animation.h" namespace ash { @@ -15,7 +13,8 @@ Type type, base::TimeDelta duration, bool is_cyclic) - : type_(type), duration_(duration), is_cyclic_(is_cyclic) {} + : HoldingSpaceProgressIndicatorAnimation(duration, is_cyclic), + type_(type) {} HoldingSpaceProgressRingAnimation::~HoldingSpaceProgressRingAnimation() = default; @@ -31,59 +30,10 @@ } } -base::RepeatingClosureList::Subscription -HoldingSpaceProgressRingAnimation::AddAnimationUpdatedCallback( - base::RepeatingClosureList::CallbackType callback) { - return animation_updated_callback_list_.Add(std::move(callback)); -} - -void HoldingSpaceProgressRingAnimation::Start() { - StartInternal(/*is_cyclic_restart=*/false); -} - -bool HoldingSpaceProgressRingAnimation::IsAnimating() const { - return animator_ && animator_->is_animating(); -} - -void HoldingSpaceProgressRingAnimation::AnimationProgressed( - const gfx::Animation* animation) { - UpdateAnimatableProperties(animation->GetCurrentValue(), &start_position_, - &end_position_, &opacity_); - animation_updated_callback_list_.Notify(); -} - -void HoldingSpaceProgressRingAnimation::AnimationEnded( - const gfx::Animation* animation) { - if (!is_cyclic_) { - animation_updated_callback_list_.Notify(); - return; - } - - // In tests, animations may be scaled such that duration is zero. When this - // happens, we need to post cyclic restarts rather than restarting them - // immediately. Otherwise the animation will loop endlessly without providing - // other code an opportunity to run. - if (ui::ScopedAnimationDurationScaleMode::duration_multiplier() == 0.f) { - base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&HoldingSpaceProgressRingAnimation::StartInternal, - weak_factory_.GetWeakPtr(), /*is_cyclic_restart=*/true)); - return; - } - - StartInternal(/*is_cyclic_restart=*/true); -} - -void HoldingSpaceProgressRingAnimation::StartInternal(bool is_cyclic_restart) { - animator_ = std::make_unique<gfx::SlideAnimation>(this); - animator_->SetSlideDuration( - ui::ScopedAnimationDurationScaleMode::duration_multiplier() * duration_); - animator_->SetTweenType(gfx::Tween::Type::LINEAR); - - if (!is_cyclic_restart) - start_time_ = base::TimeTicks::Now(); - - animator_->Show(); +void HoldingSpaceProgressRingAnimation::UpdateAnimatableProperties( + double fraction) { + UpdateAnimatableProperties(fraction, &start_position_, &end_position_, + &opacity_); } } // namespace ash
diff --git a/ash/system/holding_space/holding_space_progress_ring_animation.h b/ash/system/holding_space/holding_space_progress_ring_animation.h index af5f4ee..5a331bb 100644 --- a/ash/system/holding_space/holding_space_progress_ring_animation.h +++ b/ash/system/holding_space/holding_space_progress_ring_animation.h
@@ -7,19 +7,14 @@ #include <memory> -#include "base/callback_list.h" -#include "base/time/time.h" -#include "ui/gfx/animation/animation_delegate.h" - -namespace gfx { -class SlideAnimation; -} // namespace gfx +#include "ash/system/holding_space/holding_space_progress_indicator_animation.h" namespace ash { -// An animation for a `HoldingSpaceProgressRing` to be painted in lieu of the -// determinate progress ring that would otherwise be painted. -class HoldingSpaceProgressRingAnimation : public gfx::AnimationDelegate { +// An animation for a `HoldingSpaceProgressIndicator` to be painted in lieu of +// the determinate progress ring that would otherwise be painted. +class HoldingSpaceProgressRingAnimation + : public HoldingSpaceProgressIndicatorAnimation { public: enum class Type { kIndeterminate, // See `HoldingSpaceProgressRingIndeterminateAnimation`. @@ -36,20 +31,8 @@ static std::unique_ptr<HoldingSpaceProgressRingAnimation> CreateOfType( Type type); - // Adds the specified `callback` to be notified of animation updates. The - // `callback` will continue to receive events so long as both `this` and the - // returned subscription exist. - base::RepeatingClosureList::Subscription AddAnimationUpdatedCallback( - base::RepeatingClosureList::CallbackType callback); - - // Immediately starts this animation. - void Start(); - - // Returns whether this animation is currently running. - bool IsAnimating() const; - + // Returns the specific type of this animation. Type type() const { return type_; } - base::TimeTicks start_time() const { return start_time_; } // Returns animatable properties. float start_position() const { return start_position_; } @@ -69,38 +52,16 @@ float* opacity) = 0; private: - // gfx::AnimationDelegate: - void AnimationProgressed(const gfx::Animation* animation) override; - void AnimationEnded(const gfx::Animation* animation) override; - - // Immediately start this animation. If `is_cyclic_restart` is `true`, this - // animation is being restarted after completion of a full animation cycle. - void StartInternal(bool is_cyclic_restart); + // HoldingSpaceProgressIndicatorAnimation: + void UpdateAnimatableProperties(double fraction) override; // The specific type of this animation. const Type type_; - // The duration for this animation. - const base::TimeDelta duration_; - - // Whether or not this animation should loop on completion. - const bool is_cyclic_; - - // The underlying animator which drives animation progress. - std::unique_ptr<gfx::SlideAnimation> animator_; - - // The time at which this animation was `Start()`-ed. - base::TimeTicks start_time_; - // Animatable properties. float start_position_ = 0.f; float end_position_ = 1.f; float opacity_ = 1.f; - - // The list of callbacks for which to notify animation updates. - base::RepeatingClosureList animation_updated_callback_list_; - - base::WeakPtrFactory<HoldingSpaceProgressRingAnimation> weak_factory_{this}; }; } // namespace ash
diff --git a/ash/system/message_center/ash_notification_view.cc b/ash/system/message_center/ash_notification_view.cc index 2b159325..e0efd24 100644 --- a/ash/system/message_center/ash_notification_view.cc +++ b/ash/system/message_center/ash_notification_view.cc
@@ -12,6 +12,7 @@ #include "ash/resources/vector_icons/vector_icons.h" #include "ash/strings/grit/ash_strings.h" #include "ash/style/ash_color_provider.h" +#include "ash/style/icon_button.h" #include "ash/style/pill_button.h" #include "ash/style/style_util.h" #include "ash/system/message_center/ash_notification_expand_button.h" @@ -829,6 +830,15 @@ views::FocusRing::Get(this)->SetColor( AshColorProvider::Get()->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kFocusRingColor)); + + auto* notification = + message_center::MessageCenter::Get()->FindVisibleNotificationById( + notification_id()); + SkColor button_color = notification->accent_color().value_or( + AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kButtonLabelColorBlue)); + if (snooze_button_) + snooze_button_->SetIconColor(button_color); } std::unique_ptr<message_center::NotificationInputContainer> @@ -941,23 +951,12 @@ views::MaximumFlexSizeRule::kUnbounded)) .Build()); - // TODO(crbug/1276581): Make sure the style of this snooze button is fit - // with the style of other action buttons. - action_buttons_row()->AddChildView( - views::Builder<views::ImageButton>() - .CopyAddressTo(&snooze_button_) - .SetCallback( - base::BindRepeating(&AshNotificationView::OnSnoozeButtonPressed, - base::Unretained(this))) - .SetTooltipText(l10n_util::GetStringUTF16( - IDS_MESSAGE_CENTER_NOTIFICATION_SNOOZE_BUTTON_TOOLTIP)) - .Build()); - - SkColor button_color = notification.accent_color().value_or( - AshColorProvider::Get()->GetControlsLayerColor( - AshColorProvider::ControlsLayerType::kControlBackgroundColorActive)); - views::SetImageFromVectorIcon(snooze_button_, kNotificationSnoozeButtonIcon, - 20, button_color); + auto snooze_button = std::make_unique<IconButton>( + base::BindRepeating(&AshNotificationView::OnSnoozeButtonPressed, + base::Unretained(this)), + IconButton::Type::kSmallFloating, &kNotificationSnoozeButtonIcon, + IDS_MESSAGE_CENTER_NOTIFICATION_SNOOZE_BUTTON_TOOLTIP); + snooze_button_ = action_buttons_row()->AddChildView(std::move(snooze_button)); } void AshNotificationView::UpdateMessageViewInExpandedState(
diff --git a/ash/system/message_center/ash_notification_view.h b/ash/system/message_center/ash_notification_view.h index 225c59b..40b28d8 100644 --- a/ash/system/message_center/ash_notification_view.h +++ b/ash/system/message_center/ash_notification_view.h
@@ -19,7 +19,6 @@ namespace views { class BoxLayout; class FlexLayoutView; -class ImageButton; class LabelButton; class View; } // namespace views @@ -28,6 +27,7 @@ class RoundedImageView; class AshNotificationExpandButton; +class IconButton; // Customized NotificationView for notification on ChromeOS. This view is used // to displays all current types of notification on ChromeOS (web, basic, image, @@ -185,7 +185,7 @@ views::LabelButton* turn_off_notifications_button_ = nullptr; views::LabelButton* inline_settings_cancel_button_ = nullptr; views::View* snooze_button_spacer_ = nullptr; - views::ImageButton* snooze_button_ = nullptr; + IconButton* snooze_button_ = nullptr; // These views below are dynamically created inside view hierarchy. NotificationTitleRow* title_row_ = nullptr;
diff --git a/ash/system/message_center/ash_notification_view_unittest.cc b/ash/system/message_center/ash_notification_view_unittest.cc index a35d39b5..d692e370a 100644 --- a/ash/system/message_center/ash_notification_view_unittest.cc +++ b/ash/system/message_center/ash_notification_view_unittest.cc
@@ -6,6 +6,7 @@ #include "ash/public/cpp/rounded_image_view.h" #include "ash/strings/grit/ash_strings.h" +#include "ash/style/icon_button.h" #include "ash/system/message_center/ash_notification_expand_button.h" #include "ash/system/message_center/message_center_style.h" #include "ash/test/ash_test_base.h" @@ -189,9 +190,7 @@ views::LabelButton* inline_settings_cancel_button() { return notification_view_->inline_settings_cancel_button_; } - views::ImageButton* snooze_button() { - return notification_view_->snooze_button_; - } + IconButton* snooze_button() { return notification_view_->snooze_button_; } scoped_refptr<NotificationTestDelegate> delegate() { return delegate_; }
diff --git a/ash/wallpaper/wallpaper_controller_impl.cc b/ash/wallpaper/wallpaper_controller_impl.cc index fae47ef..387b1b0 100644 --- a/ash/wallpaper/wallpaper_controller_impl.cc +++ b/ash/wallpaper/wallpaper_controller_impl.cc
@@ -1070,7 +1070,7 @@ base::BindOnce(&WallpaperControllerImpl::OnWallpaperDecoded, weak_factory_.GetWeakPtr(), account_id, wallpaper_path, info, show_wallpaper), - sequenced_task_runner_, wallpaper_path); + wallpaper_path); } void WallpaperControllerImpl::SetClient(WallpaperControllerClient* client) { @@ -1107,7 +1107,7 @@ base::BindOnce(&WallpaperControllerImpl::OnCustomWallpaperDecoded, set_wallpaper_weak_factory_.GetWeakPtr(), account_id, file_path, layout, preview_mode, std::move(callback)), - sequenced_task_runner_, file_path); + file_path); } void WallpaperControllerImpl::SetCustomWallpaper( @@ -1476,7 +1476,7 @@ ReadAndDecodeWallpaper( base::BindOnce(&WallpaperControllerImpl::OnAlwaysOnTopWallpaperDecoded, weak_factory_.GetWeakPtr(), info), - sequenced_task_runner_, image_path); + image_path); } void WallpaperControllerImpl::RemoveAlwaysOnTopWallpaper() { @@ -1982,7 +1982,7 @@ base::BindOnce(&WallpaperControllerImpl::OnDefaultWallpaperDecoded, weak_factory_.GetWeakPtr(), file_path, layout, show_wallpaper), - sequenced_task_runner_, file_path); + file_path); } } @@ -2014,7 +2014,6 @@ void WallpaperControllerImpl::ReadAndDecodeWallpaper( DecodeImageCallback callback, - scoped_refptr<base::SequencedTaskRunner> task_runner, const base::FilePath& file_path) { decode_requests_for_testing_.push_back(file_path); if (bypass_decode_for_testing_) { @@ -2047,7 +2046,7 @@ base::BindOnce(&WallpaperControllerImpl::OnOnlineWallpaperDecoded, set_wallpaper_weak_factory_.GetWeakPtr(), params, /*save_file=*/false, std::move(callback)), - sequenced_task_runner_, file_path); + file_path); } void WallpaperControllerImpl::SetOnlineWallpaperFromVariantPaths( @@ -2063,7 +2062,7 @@ base::BindOnce(&WallpaperControllerImpl::OnOnlineWallpaperDecoded, set_wallpaper_weak_factory_.GetWeakPtr(), params, /*save_file=*/false, std::move(callback)), - sequenced_task_runner_, url_to_file_path_map.at(params.url.spec())); + url_to_file_path_map.at(params.url.spec())); } void WallpaperControllerImpl::OnOnlineWallpaperDecoded( @@ -2163,7 +2162,7 @@ base::BindOnce(&WallpaperControllerImpl::OnWallpaperDecoded, weak_factory_.GetWeakPtr(), account_id, wallpaper_path, info, show_wallpaper), - sequenced_task_runner_, wallpaper_path); + wallpaper_path); } else { // Default wallpapers are migrated from M21 user profiles. A code // refactor overlooked that case and caused these wallpapers not being @@ -2177,7 +2176,7 @@ base::BindOnce(&WallpaperControllerImpl::OnWallpaperDecoded, weak_factory_.GetWeakPtr(), account_id, wallpaper_path, info, show_wallpaper), - sequenced_task_runner_, wallpaper_path); + wallpaper_path); } } @@ -2493,7 +2492,7 @@ ReadAndDecodeWallpaper( base::BindOnce(&WallpaperControllerImpl::OnDevicePolicyWallpaperDecoded, weak_factory_.GetWeakPtr()), - sequenced_task_runner_.get(), device_policy_wallpaper_path_); + device_policy_wallpaper_path_); } void WallpaperControllerImpl::OnDevicePolicyWallpaperDecoded( @@ -2908,7 +2907,7 @@ weak_factory_.GetWeakPtr(), account_id, file_name, WallpaperType::kCustomized, info.layout, /*show_wallpaper=*/true), - sequenced_task_runner_, drivefs_path); + drivefs_path); } void WallpaperControllerImpl::DriveFsWallpaperChanged(
diff --git a/ash/wallpaper/wallpaper_controller_impl.h b/ash/wallpaper/wallpaper_controller_impl.h index ba24171c..11de4769 100644 --- a/ash/wallpaper/wallpaper_controller_impl.h +++ b/ash/wallpaper/wallpaper_controller_impl.h
@@ -435,10 +435,8 @@ // Reads image from |file_path| on disk, and calls |OnWallpaperDataRead| // with the result of |ReadFileToString|. - void ReadAndDecodeWallpaper( - DecodeImageCallback callback, - scoped_refptr<base::SequencedTaskRunner> task_runner, - const base::FilePath& file_path); + void ReadAndDecodeWallpaper(DecodeImageCallback callback, + const base::FilePath& file_path); // Sets wallpaper info for the user to default and saves it to local // state the user is not ephemeral. Returns false if this fails.
diff --git a/ash/wm/desks/desks_restore_util.cc b/ash/wm/desks/desks_restore_util.cc index 30af319..20bccfb 100644 --- a/ash/wm/desks/desks_restore_util.cc +++ b/ash/wm/desks/desks_restore_util.cc
@@ -4,6 +4,8 @@ #include "ash/wm/desks/desks_restore_util.h" +#include <tuple> + #include "ash/constants/ash_pref_names.h" #include "ash/session/session_controller_impl.h" #include "ash/shell.h" @@ -12,7 +14,6 @@ #include "ash/wm/desks/desks_histogram_enums.h" #include "ash/wm/desks/desks_util.h" #include "base/auto_reset.h" -#include "base/ignore_result.h" #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" #include "base/time/clock.h" @@ -111,8 +112,8 @@ base::Time GetLocalEpoch() { static const base::Time local_epoch = [] { base::Time local_epoch; - ignore_result(base::Time::FromLocalExploded({2010, 1, 5, 1, 0, 0, 0, 0}, - &local_epoch)); + std::ignore = base::Time::FromLocalExploded({2010, 1, 5, 1, 0, 0, 0, 0}, + &local_epoch); return local_epoch; }(); return local_epoch;
diff --git a/ash/wm/desks/templates/desks_templates_item_view.cc b/ash/wm/desks/templates/desks_templates_item_view.cc index ca3c21b..94f4707 100644 --- a/ash/wm/desks/templates/desks_templates_item_view.cc +++ b/ash/wm/desks/templates/desks_templates_item_view.cc
@@ -472,14 +472,27 @@ base::Unretained(this))); } -void DesksTemplatesItemView::OnGridItemPressed() { +void DesksTemplatesItemView::OnGridItemPressed(const ui::Event& event) { + MaybeLaunchTemplate(event.IsShiftDown()); +} + +void DesksTemplatesItemView::MaybeLaunchTemplate(bool should_delay) { if (is_template_name_being_modified_) { DesksTemplatesNameView::CommitChanges(GetWidget()); return; } + // Make shift-click on the launch button launch apps with a delay. This allows + // developers to simulate delayed launch behaviors with ARC apps. + // TODO(crbug.com/1281685): Remove before feature launch. + base::TimeDelta delay; +#if !defined(OFFICIAL_BUILD) + if (should_delay) + delay = base::Seconds(3); +#endif + DesksTemplatesPresenter::Get()->LaunchDeskTemplate( - desk_template_->uuid().AsLowercaseString()); + desk_template_->uuid().AsLowercaseString(), delay); } void DesksTemplatesItemView::OnTemplateNameChanged( @@ -528,7 +541,7 @@ } void DesksTemplatesItemView::MaybeActivateHighlightedView() { - OnGridItemPressed(); + MaybeLaunchTemplate(/*delay=*/false); } void DesksTemplatesItemView::MaybeCloseHighlightedView() {
diff --git a/ash/wm/desks/templates/desks_templates_item_view.h b/ash/wm/desks/templates/desks_templates_item_view.h index 347c20b..8c3611c 100644 --- a/ash/wm/desks/templates/desks_templates_item_view.h +++ b/ash/wm/desks/templates/desks_templates_item_view.h
@@ -78,7 +78,12 @@ void OnDeleteTemplate(); void OnDeleteButtonPressed(); - void OnGridItemPressed(); + void OnGridItemPressed(const ui::Event& event); + + // Launches the apps associated with the template unless editing the desk + // template name is underway. Adds a 3 second delay between each app launch if + // `should_delay` is true. + void MaybeLaunchTemplate(bool should_delay); // Called when we want to update `name_view_` when the template's name // changes.
diff --git a/ash/wm/desks/templates/desks_templates_presenter.cc b/ash/wm/desks/templates/desks_templates_presenter.cc index 6337eb6..7cbc36dd 100644 --- a/ash/wm/desks/templates/desks_templates_presenter.cc +++ b/ash/wm/desks/templates/desks_templates_presenter.cc
@@ -43,12 +43,13 @@ // Callback ran after creating and activating a new desk for launching a // template. Launches apps into the active desk. void OnNewDeskCreatedForTemplate(std::unique_ptr<DeskTemplate> desk_template, + base::TimeDelta delay, bool on_create_activate_success) { if (!on_create_activate_success) return; Shell::Get()->desks_templates_delegate()->LaunchAppsFromTemplate( - std::move(desk_template)); + std::move(desk_template), delay); } } // namespace @@ -129,7 +130,8 @@ } void DesksTemplatesPresenter::LaunchDeskTemplate( - const std::string& template_uuid) { + const std::string& template_uuid, + base::TimeDelta delay) { // If we are at the max desk limit (currently is 8), a new desk // cannot be created, and a toast will be displayed to the user. if (!DesksController::Get()->CanCreateDesks()) { @@ -148,7 +150,7 @@ GetDeskModel()->GetEntryByUUID( template_uuid, base::BindOnce(&DesksTemplatesPresenter::OnGetTemplateForDeskLaunch, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr(), delay)); } void DesksTemplatesPresenter::MaybeSaveActiveDeskAsTemplate() { @@ -229,6 +231,7 @@ } void DesksTemplatesPresenter::OnGetTemplateForDeskLaunch( + base::TimeDelta delay, desks_storage::DeskModel::GetEntryByUuidStatus status, std::unique_ptr<DeskTemplate> entry) { if (status != desks_storage::DeskModel::GetEntryByUuidStatus::kOk) @@ -247,7 +250,7 @@ const auto template_name = entry->template_name(); DesksController::Get()->CreateAndActivateNewDeskForTemplate( template_name, - base::BindOnce(&OnNewDeskCreatedForTemplate, std::move(entry))); + base::BindOnce(&OnNewDeskCreatedForTemplate, std::move(entry), delay)); if (on_update_ui_closure_for_testing) std::move(on_update_ui_closure_for_testing).Run();
diff --git a/ash/wm/desks/templates/desks_templates_presenter.h b/ash/wm/desks/templates/desks_templates_presenter.h index 9fc3bd2..55c75e9 100644 --- a/ash/wm/desks/templates/desks_templates_presenter.h +++ b/ash/wm/desks/templates/desks_templates_presenter.h
@@ -52,8 +52,10 @@ // Calls the DeskModel to delete the template with the provided uuid. void DeleteEntry(const std::string& template_uuid); - // Launches the desk template with 'template_uuid' as a new desk. - void LaunchDeskTemplate(const std::string& template_uuid); + // Launches the desk template with 'template_uuid' as a new desk. `delay` is + // the time between each app launch, used for debugging. + void LaunchDeskTemplate(const std::string& template_uuid, + base::TimeDelta delay); // Calls the DeskModel to capture the active desk as a template entry, with a // callback to `OnAddOrUpdateEntry`. If there are unsupported apps on the @@ -89,6 +91,7 @@ // Launches DeskTemplate after retrieval from storage. void OnGetTemplateForDeskLaunch( + base::TimeDelta delay, desks_storage::DeskModel::GetEntryByUuidStatus status, std::unique_ptr<DeskTemplate> entry);
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc index 82e163b..918043b 100644 --- a/ash/wm/overview/overview_session.cc +++ b/ash/wm/overview/overview_session.cc
@@ -1164,11 +1164,18 @@ } break; case ui::VKEY_T: { - // This is a debug only shortcut. - if (!debug::DeveloperAcceleratorsEnabled() || - !desks_templates_util::AreDesksTemplatesEnabled()) { + // See default section to see why we want to consume events during the + // start animation. + if (shell->overview_controller()->IsInStartAnimation()) + break; + + // Make pressing t while in overview show the templates grid if there + // are templates to be viewed. This allows developers to view the + // templates grid slightly quicker. + // TODO(crbug.com/1281685): Remove before feature launch. +#if !defined(OFFICIAL_BUILD) + if (!desks_templates_util::AreDesksTemplatesEnabled()) return; - } // There are no templates to be viewed. if (!DesksTemplatesPresenter::Get()->should_show_templates_ui()) @@ -1177,6 +1184,9 @@ DCHECK(!grid_list_.empty()); ShowDesksTemplatesGrids(grid_list_[0]->desks_bar_view()->IsZeroState()); break; +#else + return; +#endif } case ui::VKEY_W: { if (!(event->flags() & ui::EF_CONTROL_DOWN))
diff --git a/ash/wm/overview/overview_test_base.cc b/ash/wm/overview/overview_test_base.cc index 0f8c30f..f5f2ac4 100644 --- a/ash/wm/overview/overview_test_base.cc +++ b/ash/wm/overview/overview_test_base.cc
@@ -4,6 +4,8 @@ #include "ash/wm/overview/overview_test_base.h" +#include <tuple> + #include "ash/public/cpp/presentation_time_recorder.h" #include "ash/public/cpp/test/test_desks_templates_delegate.h" #include "ash/session/session_controller_impl.h" @@ -18,7 +20,6 @@ #include "ash/wm/overview/overview_wallpaper_controller.h" #include "ash/wm/overview/scoped_overview_transform_window.h" #include "ash/wm/window_preview_view.h" -#include "base/ignore_result.h" #include "ui/aura/client/aura_constants.h" #include "ui/compositor/layer.h" #include "ui/compositor/test/test_utils.h" @@ -204,9 +205,9 @@ // on the next frame presented after animation stops. Wait for the next // frame with a 100ms timeout for the report, regardless of whether there // is a next frame. - ignore_result(ui::WaitForNextFrameToBePresented( + std::ignore = ui::WaitForNextFrameToBePresented( Shell::GetPrimaryRootWindow()->layer()->GetCompositor(), - base::Milliseconds(500))); + base::Milliseconds(500)); { SCOPED_TRACE(trace + ".Enter");
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc index 0e1b55b..f50ea8b 100644 --- a/ash/wm/splitview/split_view_controller_unittest.cc +++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <memory> #include <string> +#include <tuple> #include <utility> #include <vector> @@ -59,7 +60,6 @@ #include "ash/wm/window_util.h" #include "ash/wm/wm_event.h" #include "base/containers/contains.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" @@ -314,9 +314,9 @@ // on the next frame presented after animation stops. Wait for the next // frame with a 100ms timeout for the report, regardless of whether there // is a next frame. - ignore_result(ui::WaitForNextFrameToBePresented( + std::ignore = ui::WaitForNextFrameToBePresented( Shell::GetPrimaryRootWindow()->layer()->GetCompositor(), - base::Milliseconds(100))); + base::Milliseconds(100)); { SCOPED_TRACE(trace + std::string(".Enter"));
diff --git a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc index 5a2df604..9b2535b2 100644 --- a/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc +++ b/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc
@@ -7,6 +7,7 @@ #include <math.h> #include <memory> +#include <tuple> #include <utility> #include <vector> @@ -37,7 +38,6 @@ #include "ash/wm/window_util.h" #include "ash/wm/wm_event.h" #include "base/command_line.h" -#include "base/ignore_result.h" #include "base/numerics/math_constants.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" @@ -230,12 +230,12 @@ } // Wait one more frame presented for the metrics to get recorded. - // ignore_result() and timeout is because the frame could already be + // std::ignore and timeout is because the frame could already be // presented. void WaitForSmoothnessMetrics() { - ignore_result(ui::WaitForNextFrameToBePresented( + std::ignore = ui::WaitForNextFrameToBePresented( Shell::GetPrimaryRootWindow()->layer()->GetCompositor(), - base::Milliseconds(100))); + base::Milliseconds(100)); } private:
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc index 70dc360..6fd5191 100644 --- a/ash/wm/window_util.cc +++ b/ash/wm/window_util.cc
@@ -5,6 +5,7 @@ #include "ash/wm/window_util.h" #include <memory> +#include <tuple> #include "ash/constants/app_types.h" #include "ash/multi_user/multi_user_window_manager_impl.h" @@ -29,7 +30,6 @@ #include "ash/wm/wm_event.h" #include "base/bind.h" #include "base/containers/contains.h" -#include "base/ignore_result.h" #include "chromeos/ui/base/chromeos_ui_constants.h" #include "chromeos/ui/frame/interior_resize_handler_targeter.h" #include "ui/aura/client/aura_constants.h" @@ -385,10 +385,10 @@ // TODO: Investigate if we should be using the current modifiers. ui::KeyEvent press_key_event(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, ui::EF_NONE); - ignore_result(root_window->GetHost()->SendEventToSink(&press_key_event)); + std::ignore = root_window->GetHost()->SendEventToSink(&press_key_event); ui::KeyEvent release_key_event(ui::ET_KEY_RELEASED, ui::VKEY_BROWSER_BACK, ui::EF_NONE); - ignore_result(root_window->GetHost()->SendEventToSink(&release_key_event)); + std::ignore = root_window->GetHost()->SendEventToSink(&release_key_event); } WindowTransientDescendantIteratorRange GetVisibleTransientTreeIterator(
diff --git a/base/BUILD.gn b/base/BUILD.gn index 250dde1..ae6d122b 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -4198,6 +4198,7 @@ "android/javatests/src/org/chromium/base/task/SequencedTaskRunnerImplTest.java", "android/javatests/src/org/chromium/base/task/SingleThreadTaskRunnerImplTest.java", "android/javatests/src/org/chromium/base/task/TaskRunnerImplTest.java", + "android/javatests/src/org/chromium/base/test/metrics/HistogramTestRuleTest.java", "android/javatests/src/org/chromium/base/util/GarbageCollectionTestUtilsTest.java", ] @@ -4251,6 +4252,7 @@ "test/android/javatests/src/org/chromium/base/test/TestTraceEvent.java", "test/android/javatests/src/org/chromium/base/test/UiThreadStatement.java", "test/android/javatests/src/org/chromium/base/test/UiThreadTest.java", + "test/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRule.java", "test/android/javatests/src/org/chromium/base/test/params/BaseJUnit4RunnerDelegate.java", "test/android/javatests/src/org/chromium/base/test/params/BlockJUnit4RunnerDelegate.java", "test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java",
diff --git a/base/allocator/allocator.gni b/base/allocator/allocator.gni index 5bbe7c9..1a570331 100644 --- a/base/allocator/allocator.gni +++ b/base/allocator/allocator.gni
@@ -29,7 +29,7 @@ # For all other platforms & configurations, the shim is required, to replace # the default system allocators, e.g. with tcmalloc. if ((is_linux || is_chromeos || is_android || is_apple || - (is_fuchsia && _is_partition_alloc_platform) || + (is_fuchsia && _is_partition_alloc_platform && !is_component_build) || (is_win && !is_component_build && !is_debug)) && !_is_using_sanitizers) { _default_use_allocator_shim = true } else {
diff --git a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java index 1c82c6a9..df4be373 100644 --- a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java +++ b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
@@ -262,36 +262,27 @@ /** * Returns the number of samples recorded in the given bucket of the given histogram. + * Does not reset between batched tests. Use HistogramTestRule instead. * * @param name name of the histogram to look up * @param sample the bucket containing this sample value will be looked up */ @VisibleForTesting + @Deprecated public static int getHistogramValueCountForTesting(String name, int sample) { - return RecordHistogramJni.get().getHistogramValueCountForTesting(name, sample); + return RecordHistogramJni.get().getHistogramValueCountForTesting(name, sample, 0); } /** * Returns the number of samples recorded for the given histogram. + * Does not reset between batched tests. Use HistogramTestRule instead. * * @param name name of the histogram to look up */ @VisibleForTesting + @Deprecated public static int getHistogramTotalCountForTesting(String name) { - return RecordHistogramJni.get().getHistogramTotalCountForTesting(name); - } - - /** - * Forgets the given histogram, for testing purposes only. - * - * NOTE: Causes flakiness on batched instrumentation tests! - * See https://crbug.com/1211884 and https://crbug.com/1270962 for details. - * - * @param name name of the histogram to forget - */ - @VisibleForTesting - public static void forgetHistogramForTesting(String name) { - RecordHistogramJni.get().forgetHistogramForTesting(name); + return RecordHistogramJni.get().getHistogramTotalCountForTesting(name, 0); } /** @@ -299,8 +290,9 @@ */ @NativeMethods public interface Natives { - int getHistogramValueCountForTesting(String name, int sample); - int getHistogramTotalCountForTesting(String name); - void forgetHistogramForTesting(String name); + int getHistogramValueCountForTesting(String name, int sample, long snapshotPtr); + int getHistogramTotalCountForTesting(String name, long snapshotPtr); + long createHistogramSnapshotForTesting(); + void destroyHistogramSnapshotForTesting(long snapshotPtr); } }
diff --git a/base/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRuleTest.java b/base/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRuleTest.java new file mode 100644 index 0000000..a1d345c --- /dev/null +++ b/base/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRuleTest.java
@@ -0,0 +1,77 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base.test.metrics; + +import static org.junit.Assert.assertEquals; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.model.Statement; + +import org.chromium.base.library_loader.LibraryLoader; +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.test.BaseJUnit4ClassRunner; + +/** + * Tests HistogramTestRule. + */ +@RunWith(BaseJUnit4ClassRunner.class) +public class HistogramTestRuleTest { + @Before + public void setUp() { + LibraryLoader.getInstance().ensureInitialized(); + } + + /** + * Tests that histogram counts are reset between test runs. + */ + @Test + @SmallTest + public void testResetBetweenTestRuns() { + String histogram = "HelloWorld.BooleanMetric"; + + final HistogramTestRule rule = new HistogramTestRule(); + rule.apply(new Statement() { + @Override + public void evaluate() { + assertEquals(0, rule.getHistogramTotalCount(histogram)); + assertEquals(0, rule.getHistogramValueCount(histogram, 0)); + assertEquals(0, rule.getHistogramValueCount(histogram, 1)); + + RecordHistogram.recordBooleanHistogram(histogram, true); + assertEquals(1, rule.getHistogramTotalCount(histogram)); + assertEquals(0, rule.getHistogramValueCount(histogram, 0)); + assertEquals(1, rule.getHistogramValueCount(histogram, 1)); + + RecordHistogram.recordBooleanHistogram(histogram, true); + assertEquals(2, rule.getHistogramTotalCount(histogram)); + assertEquals(0, rule.getHistogramValueCount(histogram, 0)); + assertEquals(2, rule.getHistogramValueCount(histogram, 1)); + + RecordHistogram.recordBooleanHistogram(histogram, false); + assertEquals(3, rule.getHistogramTotalCount(histogram)); + assertEquals(1, rule.getHistogramValueCount(histogram, 0)); + assertEquals(2, rule.getHistogramValueCount(histogram, 1)); + } + }, null); + + rule.apply(new Statement() { + @Override + public void evaluate() { + assertEquals(0, rule.getHistogramTotalCount(histogram)); + assertEquals(0, rule.getHistogramValueCount(histogram, 0)); + assertEquals(0, rule.getHistogramValueCount(histogram, 1)); + + RecordHistogram.recordBooleanHistogram(histogram, true); + assertEquals(1, rule.getHistogramTotalCount(histogram)); + assertEquals(0, rule.getHistogramValueCount(histogram, 0)); + assertEquals(1, rule.getHistogramValueCount(histogram, 1)); + } + }, null); + } +}
diff --git a/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogram.java b/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogram.java index 0b5e1a3..b6ed3da 100644 --- a/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogram.java +++ b/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogram.java
@@ -14,11 +14,12 @@ import java.util.HashMap; import java.util.Map; -import java.util.Set; /** * Implementation of RecordHistogram which does not rely on native and still enables testing of * histogram counts. + * ShadowRecordHistogram.reset() should be called in the @Before method of test cases using this + * class. */ @Implements(RecordHistogram.class) public class ShadowRecordHistogram { @@ -160,15 +161,6 @@ return (i != null) ? i : 0; } - @Implementation - protected static void forgetHistogramForTesting(String name) { - Set<Pair<String, Integer>> keySet = sSamples.keySet(); - for (Pair<String, Integer> key : keySet) { - if (name.equals(key.first)) sSamples.put(key, 0); - } - sTotals.put(name, 0); - } - private static void recordSample(Pair<String, Integer> key) { Integer bucketValue = sSamples.get(key); if (bucketValue == null) {
diff --git a/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogramTest.java b/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogramTest.java index f1330975..a15fabb 100644 --- a/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogramTest.java +++ b/base/android/junit/src/org/chromium/base/metrics/test/ShadowRecordHistogramTest.java
@@ -19,52 +19,27 @@ @RunWith(BaseRobolectricTestRunner.class) @Config(shadows = {ShadowRecordHistogram.class}) public final class ShadowRecordHistogramTest { - private static final String HISTOGRAM_TO_KEEP_1 = "HISTOGRAM_TO_KEEP_1"; - private static final String HISTOGRAM_TO_KEEP_2 = "HISTOGRAM_TO_KEEP_2"; - private static final String HISTOGRAM_TO_DELETE_1 = "HISTOGRAM_TO_DELETE_1"; - private static final String HISTOGRAM_TO_DELETE_2 = "HISTOGRAM_TO_DELETE_2"; + private static final String HISTOGRAM = "HISTOGRAM"; private static final boolean UNUSED = true; @Test public void testRecordAndGetForTesting() { // Add some - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_DELETE_1, UNUSED); - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_KEEP_1, UNUSED); - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_KEEP_1), - greaterThan(0)); - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_DELETE_1), - greaterThan(0)); + RecordHistogram.recordBooleanHistogram(HISTOGRAM, UNUSED); + assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM), greaterThan(0)); } @Test - public void testForgetHistogramForTesting() { + public void testReset() { // Add some - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_DELETE_1, UNUSED); - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_KEEP_1, UNUSED); - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_DELETE_2, UNUSED); - RecordHistogram.recordBooleanHistogram(HISTOGRAM_TO_KEEP_2, UNUSED); - // Remove some - RecordHistogram.forgetHistogramForTesting(HISTOGRAM_TO_DELETE_1); - RecordHistogram.forgetHistogramForTesting(HISTOGRAM_TO_DELETE_2); - // Removing again should be OK - RecordHistogram.forgetHistogramForTesting(HISTOGRAM_TO_DELETE_1); + RecordHistogram.recordBooleanHistogram(HISTOGRAM, UNUSED); + assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM), greaterThan(0)); + // Remove state + ShadowRecordHistogram.reset(); // Are the deleted ones gone? - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_DELETE_1), - equalTo(0)); - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_DELETE_2), - equalTo(0)); - assertThat(RecordHistogram.getHistogramValueCountForTesting(HISTOGRAM_TO_DELETE_1, 1), - equalTo(0)); - assertThat(RecordHistogram.getHistogramValueCountForTesting(HISTOGRAM_TO_DELETE_2, 1), - equalTo(0)); - // Are the non-deleted ones still there? - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_KEEP_1), - greaterThan(0)); - assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM_TO_KEEP_2), - greaterThan(0)); - assertThat(RecordHistogram.getHistogramValueCountForTesting(HISTOGRAM_TO_KEEP_1, 1), - greaterThan(0)); - assertThat(RecordHistogram.getHistogramValueCountForTesting(HISTOGRAM_TO_KEEP_2, 1), - greaterThan(0)); + assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM), equalTo(0)); + + RecordHistogram.recordBooleanHistogram(HISTOGRAM, UNUSED); + assertThat(RecordHistogram.getHistogramTotalCountForTesting(HISTOGRAM), equalTo(1)); } }
diff --git a/base/android/record_histogram.cc b/base/android/record_histogram.cc index 20b4607..7e8063a9 100644 --- a/base/android/record_histogram.cc +++ b/base/android/record_histogram.cc
@@ -16,6 +16,9 @@ namespace base { namespace android { +using HistogramsSnapshot = + std::map<std::string, std::unique_ptr<HistogramSamples>>; + // This backs a Java test util for testing histograms - // MetricsUtils.HistogramDelta. It should live in a test-specific file, but we // currently can't have test-specific native code packaged in test-specific Java @@ -23,36 +26,59 @@ jint JNI_RecordHistogram_GetHistogramValueCountForTesting( JNIEnv* env, const JavaParamRef<jstring>& histogram_name, - jint sample) { - HistogramBase* histogram = StatisticsRecorder::FindHistogram( - android::ConvertJavaStringToUTF8(env, histogram_name)); + jint sample, + jlong snapshot_ptr) { + std::string name = android::ConvertJavaStringToUTF8(env, histogram_name); + HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); if (histogram == nullptr) { // No samples have been recorded for this histogram (yet?). return 0; } - std::unique_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); - return samples->GetCount(static_cast<int>(sample)); + int actual_count = histogram->SnapshotSamples()->GetCount(sample); + if (snapshot_ptr) { + auto* snapshot = reinterpret_cast<HistogramsSnapshot*>(snapshot_ptr); + auto snapshot_data = snapshot->find(name); + if (snapshot_data != snapshot->end()) + actual_count -= snapshot_data->second->GetCount(sample); + } + + return actual_count; } jint JNI_RecordHistogram_GetHistogramTotalCountForTesting( JNIEnv* env, - const JavaParamRef<jstring>& histogram_name) { - HistogramBase* histogram = StatisticsRecorder::FindHistogram( - android::ConvertJavaStringToUTF8(env, histogram_name)); + const JavaParamRef<jstring>& histogram_name, + jlong snapshot_ptr) { + std::string name = android::ConvertJavaStringToUTF8(env, histogram_name); + HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); if (histogram == nullptr) { // No samples have been recorded for this histogram. return 0; } - return histogram->SnapshotSamples()->TotalCount(); + int actual_count = histogram->SnapshotSamples()->TotalCount(); + if (snapshot_ptr) { + auto* snapshot = reinterpret_cast<HistogramsSnapshot*>(snapshot_ptr); + auto snapshot_data = snapshot->find(name); + if (snapshot_data != snapshot->end()) + actual_count -= snapshot_data->second->TotalCount(); + } + return actual_count; } -void JNI_RecordHistogram_ForgetHistogramForTesting( +jlong JNI_RecordHistogram_CreateHistogramSnapshotForTesting(JNIEnv* env) { + HistogramsSnapshot* snapshot = new HistogramsSnapshot(); + for (const auto* const histogram : StatisticsRecorder::GetHistograms()) { + (*snapshot)[histogram->histogram_name()] = histogram->SnapshotSamples(); + } + return reinterpret_cast<intptr_t>(snapshot); +} + +void JNI_RecordHistogram_DestroyHistogramSnapshotForTesting( JNIEnv* env, - const JavaParamRef<jstring>& histogram_name) { - StatisticsRecorder::ForgetHistogramForTesting( - android::ConvertJavaStringToUTF8(env, histogram_name)); + jlong snapshot_ptr) { + delete reinterpret_cast<HistogramsSnapshot*>(snapshot_ptr); } } // namespace android
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc index b2a2cae2..188db060 100644 --- a/base/metrics/statistics_recorder.cc +++ b/base/metrics/statistics_recorder.cc
@@ -386,9 +386,8 @@ // static bool StatisticsRecorder::ShouldRecordHistogram(uint32_t histogram_hash) { - const absl::MutexLock auto_lock(lock_.Pointer()); - EnsureGlobalRecorderWhileLocked(); - return !top_->record_checker_ || + const absl::ReaderMutexLock auto_lock(lock_.Pointer()); + return !top_ || !top_->record_checker_ || top_->record_checker_->ShouldRecord(histogram_hash); }
diff --git a/base/test/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRule.java b/base/test/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRule.java new file mode 100644 index 0000000..51f178a3 --- /dev/null +++ b/base/test/android/javatests/src/org/chromium/base/test/metrics/HistogramTestRule.java
@@ -0,0 +1,72 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base.test.metrics; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import org.chromium.base.metrics.RecordHistogramJni; + +/** + * A {@link TestRule} to test histograms. Returns the amount of recorded samples during a test run. + * Similar to HistogramTester, it takes a snapshot of existing histogram rules before a test runs + * and only returns the difference to the this snapshot. + * + * Example usage: + * + * @Rule + * public HistogramTestRule mHistogramTester = new HistogramTestRule(); + * + * @Test + * public void testFoo() { + * ... + * assertEquals(1, mHistogramTester.getHistogramTotalCount("Hist.Name")); + * } + */ +public class HistogramTestRule implements TestRule { + // Pointer to a native HistogramSnapshotPtr instance. + // This Java class owns the pointer and is responsible for destroying it. + private long mSnapShotPtr; + + @Override + public Statement apply(Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + assert mSnapShotPtr == 0; + mSnapShotPtr = RecordHistogramJni.get().createHistogramSnapshotForTesting(); + try { + base.evaluate(); + } finally { + RecordHistogramJni.get().destroyHistogramSnapshotForTesting(mSnapShotPtr); + mSnapShotPtr = 0; + } + } + }; + } + + /** + * Returns the number of samples recorded in the given bucket of the given histogram. + * + * @param name name of the histogram to look up + * @param sample the bucket containing this sample value will be looked up + */ + public int getHistogramValueCount(String name, int sample) { + assert mSnapShotPtr != 0; + return RecordHistogramJni.get().getHistogramValueCountForTesting( + name, sample, mSnapShotPtr); + } + + /** + * Returns the number of samples recorded for the given histogram. + * + * @param name name of the histogram to look up + */ + public int getHistogramTotalCount(String name) { + assert mSnapShotPtr != 0; + return RecordHistogramJni.get().getHistogramTotalCountForTesting(name, mSnapShotPtr); + } +}
diff --git a/base/test/metrics/histogram_tester.h b/base/test/metrics/histogram_tester.h index 8712641f..e2a3122 100644 --- a/base/test/metrics/histogram_tester.h +++ b/base/test/metrics/histogram_tester.h
@@ -32,6 +32,7 @@ // histogram data between the renderer and browser processes. If it is in a // content browser test, then content::FetchHistogramsFromChildProcesses() // should be used to achieve that. +// To test histograms in Java tests, use HistogramTestRule. class HistogramTester { public: using CountsMap = std::map<std::string, HistogramBase::Count, std::less<>>;
diff --git a/base/timer/timer_unittest.cc b/base/timer/timer_unittest.cc index 1cecd1f0..749300c1 100644 --- a/base/timer/timer_unittest.cc +++ b/base/timer/timer_unittest.cc
@@ -11,21 +11,14 @@ #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" -#include "base/cxx17_backports.h" -#include "base/memory/ptr_util.h" -#include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/run_loop.h" -#include "base/synchronization/waitable_event.h" #include "base/task/post_task.h" #include "base/task/sequenced_task_runner.h" #include "base/test/bind.h" #include "base/test/task_environment.h" -#include "base/test/test_mock_time_task_runner.h" #include "base/test/test_simple_task_runner.h" -#include "base/threading/platform_thread.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "base/threading/thread.h" #include "base/time/tick_clock.h" #include "base/time/time.h" #include "build/build_config.h" @@ -35,6 +28,9 @@ namespace { +constexpr TimeDelta kTestDelay = Seconds(10); +constexpr TimeDelta kLongTestDelay = Minutes(10); + // The main thread types on which each timer should be tested. const test::TaskEnvironment::MainThreadType testing_main_threads[] = { test::TaskEnvironment::MainThreadType::DEFAULT, @@ -55,341 +51,162 @@ int count_; }; -// A basic helper class that can start a one-shot timer and signal a -// WaitableEvent when this timer fires. -class OneShotTimerTesterBase { - public: - // |did_run|, if provided, will be signaled when Run() fires. - explicit OneShotTimerTesterBase(WaitableEvent* did_run = nullptr, - const TimeDelta& delay = Milliseconds(10)) - : did_run_(did_run), delay_(delay) {} - - OneShotTimerTesterBase(const OneShotTimerTesterBase&) = delete; - OneShotTimerTesterBase& operator=(const OneShotTimerTesterBase&) = delete; - - virtual ~OneShotTimerTesterBase() = default; - - void Start() { - started_time_ = TimeTicks::Now(); - timer_->Start(FROM_HERE, delay_, this, &OneShotTimerTesterBase::Run); - } - - bool IsRunning() { return timer_->IsRunning(); } - - TimeTicks started_time() const { return started_time_; } - TimeDelta delay() const { return delay_; } - - protected: - virtual void Run() { - if (did_run_) { - EXPECT_FALSE(did_run_->IsSignaled()); - did_run_->Signal(); - } - } - - std::unique_ptr<OneShotTimer> timer_ = std::make_unique<OneShotTimer>(); - - private: - const raw_ptr<WaitableEvent> did_run_; - const TimeDelta delay_; - TimeTicks started_time_; -}; - -// Extends functionality of OneShotTimerTesterBase with the abilities to wait -// until the timer fires and to change task runner for the timer. -class OneShotTimerTester : public OneShotTimerTesterBase { - public: - // |did_run|, if provided, will be signaled when Run() fires. - explicit OneShotTimerTester(WaitableEvent* did_run = nullptr, - const TimeDelta& delay = Milliseconds(10)) - : OneShotTimerTesterBase(did_run, delay), - quit_closure_(run_loop_.QuitClosure()) {} - - OneShotTimerTester(const OneShotTimerTester&) = delete; - OneShotTimerTester& operator=(const OneShotTimerTester&) = delete; - - ~OneShotTimerTester() override = default; - - void SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner) { - timer_->SetTaskRunner(std::move(task_runner)); - - // Run() will be invoked on |task_runner| but |run_loop_|'s QuitClosure - // needs to run on this thread (where the task environment lives). - quit_closure_ = BindOnce(IgnoreResult(&SequencedTaskRunner::PostTask), - SequencedTaskRunnerHandle::Get(), FROM_HERE, - run_loop_.QuitClosure()); - } - - // Blocks until Run() executes and confirms that Run() didn't fire before - // |delay_| expired. - void WaitAndConfirmTimerFiredAfterDelay() { - run_loop_.Run(); - - EXPECT_NE(TimeTicks(), started_time()); - EXPECT_GE(TimeTicks::Now() - started_time(), delay()); - } - - protected: - // Overridable method to do things on Run() before signaling events/closures - // managed by this helper. - virtual void OnRun() {} - - private: - void Run() override { - OnRun(); - OneShotTimerTesterBase::Run(); - std::move(quit_closure_).Run(); - } - - RunLoop run_loop_; - OnceClosure quit_closure_; -}; - -class OneShotSelfDeletingTimerTester : public OneShotTimerTester { - protected: - void OnRun() override { timer_.reset(); } -}; - -constexpr int kNumRepeats = 10; - -class RepeatingTimerTester { - public: - explicit RepeatingTimerTester(WaitableEvent* did_run, const TimeDelta& delay) - : counter_(kNumRepeats), - quit_closure_(run_loop_.QuitClosure()), - did_run_(did_run), - delay_(delay) {} - - RepeatingTimerTester(const RepeatingTimerTester&) = delete; - RepeatingTimerTester& operator=(const RepeatingTimerTester&) = delete; - - void Start() { - started_time_ = TimeTicks::Now(); - timer_.Start(FROM_HERE, delay_, this, &RepeatingTimerTester::Run); - } - - void WaitAndConfirmTimerFiredRepeatedlyAfterDelay() { - run_loop_.Run(); - - EXPECT_NE(TimeTicks(), started_time_); - EXPECT_GE(TimeTicks::Now() - started_time_, kNumRepeats * delay_); - } - - private: - void Run() { - if (--counter_ == 0) { - if (did_run_) { - EXPECT_FALSE(did_run_->IsSignaled()); - did_run_->Signal(); - } - timer_.Stop(); - quit_closure_.Run(); - } - } - - RepeatingTimer timer_; - int counter_; - - RunLoop run_loop_; - RepeatingClosure quit_closure_; - const raw_ptr<WaitableEvent> did_run_; - - const TimeDelta delay_; - TimeTicks started_time_; -}; - // Basic test with same setup as RunTest_OneShotTimers_Cancel below to confirm -// that |did_run_a| would be signaled in that test if it wasn't for the -// deletion. +// that |timer| would be fired in that test if it wasn't for the deletion. void RunTest_OneShotTimers( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - WaitableEvent did_run_a(WaitableEvent::ResetPolicy::MANUAL, - WaitableEvent::InitialState::NOT_SIGNALED); - OneShotTimerTester a(&did_run_a); - a.Start(); + Receiver receiver; + OneShotTimer timer; + timer.Start(FROM_HERE, kTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver))); - OneShotTimerTester b; - b.Start(); - - b.WaitAndConfirmTimerFiredAfterDelay(); - - EXPECT_TRUE(did_run_a.IsSignaled()); + task_environment.FastForwardBy(kTestDelay); + EXPECT_TRUE(receiver.WasCalled()); } void RunTest_OneShotTimers_Cancel( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - WaitableEvent did_run_a(WaitableEvent::ResetPolicy::MANUAL, - WaitableEvent::InitialState::NOT_SIGNALED); - OneShotTimerTester* a = new OneShotTimerTester(&did_run_a); + Receiver receiver; + auto timer = std::make_unique<OneShotTimer>(); + auto* timer_ptr = timer.get(); // This should run before the timer expires. - SequencedTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, a); + SequencedTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, std::move(timer)); - // Now start the timer. - a->Start(); + timer_ptr->Start(FROM_HERE, kTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver))); - OneShotTimerTester b; - b.Start(); - - b.WaitAndConfirmTimerFiredAfterDelay(); - - EXPECT_FALSE(did_run_a.IsSignaled()); + task_environment.FastForwardBy(kTestDelay); + EXPECT_FALSE(receiver.WasCalled()); } void RunTest_OneShotSelfDeletingTimer( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - OneShotSelfDeletingTimerTester f; - f.Start(); - f.WaitAndConfirmTimerFiredAfterDelay(); + Receiver receiver; + auto timer = std::make_unique<OneShotTimer>(); + auto* timer_ptr = timer.get(); + + timer_ptr->Start( + FROM_HERE, kTestDelay, + BindLambdaForTesting([&receiver, timer = std::move(timer)]() mutable { + receiver.OnCalled(); + timer.reset(); + })); + + task_environment.FastForwardBy(kTestDelay); + EXPECT_TRUE(receiver.WasCalled()); } void RunTest_RepeatingTimer( test::TaskEnvironment::MainThreadType main_thread_type, const TimeDelta& delay) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - RepeatingTimerTester f(nullptr, delay); - f.Start(); - f.WaitAndConfirmTimerFiredRepeatedlyAfterDelay(); + Receiver receiver; + RepeatingTimer timer; + timer.Start(FROM_HERE, kTestDelay, + BindRepeating(&Receiver::OnCalled, Unretained(&receiver))); + + task_environment.FastForwardBy(20 * kTestDelay); + EXPECT_EQ(receiver.TimesCalled(), 20); } void RunTest_RepeatingTimer_Cancel( test::TaskEnvironment::MainThreadType main_thread_type, const TimeDelta& delay) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - WaitableEvent did_run_a(WaitableEvent::ResetPolicy::MANUAL, - WaitableEvent::InitialState::NOT_SIGNALED); - RepeatingTimerTester* a = new RepeatingTimerTester(&did_run_a, delay); + Receiver receiver; + auto timer = std::make_unique<RepeatingTimer>(); + auto* timer_ptr = timer.get(); // This should run before the timer expires. - SequencedTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, a); + SequencedTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, std::move(timer)); - // Now start the timer. - a->Start(); + timer_ptr->Start(FROM_HERE, delay, + BindRepeating(&Receiver::OnCalled, Unretained(&receiver))); - RepeatingTimerTester b(nullptr, delay); - b.Start(); - - b.WaitAndConfirmTimerFiredRepeatedlyAfterDelay(); - - // |a| should not have fired despite |b| starting after it on the same - // sequence and being complete by now. - EXPECT_FALSE(did_run_a.IsSignaled()); + task_environment.FastForwardBy(delay); + EXPECT_FALSE(receiver.WasCalled()); } -class DelayTimerTarget { - public: - bool signaled() const { return signaled_; } - - void Signal() { - ASSERT_FALSE(signaled_); - signaled_ = true; - } - - private: - bool signaled_ = false; -}; - void RunTest_DelayTimer_NoCall( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - // If Delay is never called, the timer shouldn't go off. - DelayTimerTarget target; - DelayTimer timer(FROM_HERE, Milliseconds(1), &target, - &DelayTimerTarget::Signal); + Receiver receiver; + DelayTimer timer(FROM_HERE, kTestDelay, &receiver, &Receiver::OnCalled); - OneShotTimerTester tester; - tester.Start(); - tester.WaitAndConfirmTimerFiredAfterDelay(); - - ASSERT_FALSE(target.signaled()); + task_environment.FastForwardBy(kTestDelay); + EXPECT_FALSE(receiver.WasCalled()); } void RunTest_DelayTimer_OneCall( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - DelayTimerTarget target; - DelayTimer timer(FROM_HERE, Milliseconds(1), &target, - &DelayTimerTarget::Signal); + Receiver receiver; + DelayTimer timer(FROM_HERE, kTestDelay, &receiver, &Receiver::OnCalled); timer.Reset(); - OneShotTimerTester tester(nullptr, Milliseconds(100)); - tester.Start(); - tester.WaitAndConfirmTimerFiredAfterDelay(); - - ASSERT_TRUE(target.signaled()); + task_environment.FastForwardBy(kTestDelay); + EXPECT_TRUE(receiver.WasCalled()); } -struct ResetHelper { - ResetHelper(DelayTimer* timer, DelayTimerTarget* target) - : timer_(timer), target_(target) {} - - void Reset() { - ASSERT_FALSE(target_->signaled()); - timer_->Reset(); - } - - private: - const raw_ptr<DelayTimer> timer_; - const raw_ptr<DelayTimerTarget> target_; -}; - void RunTest_DelayTimer_Reset( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - // If Delay is never called, the timer shouldn't go off. - DelayTimerTarget target; - DelayTimer timer(FROM_HERE, Milliseconds(50), &target, - &DelayTimerTarget::Signal); + Receiver receiver; + DelayTimer timer(FROM_HERE, kTestDelay, &receiver, &Receiver::OnCalled); timer.Reset(); - ResetHelper reset_helper(&timer, &target); + // Fast-forward by a delay smaller than the timer delay. The timer will not + // fire. + task_environment.FastForwardBy(kTestDelay / 2); + EXPECT_FALSE(receiver.WasCalled()); - OneShotTimer timers[20]; - for (size_t i = 0; i < base::size(timers); ++i) { - timers[i].Start(FROM_HERE, Milliseconds(i * 10), &reset_helper, - &ResetHelper::Reset); - } + // Postpone the fire time. + timer.Reset(); - OneShotTimerTester tester(nullptr, Milliseconds(300)); - tester.Start(); - tester.WaitAndConfirmTimerFiredAfterDelay(); + // Verify that the timer does not fire at its original fire time. + task_environment.FastForwardBy(kTestDelay / 2); + EXPECT_FALSE(receiver.WasCalled()); - ASSERT_TRUE(target.signaled()); + // Fast-forward by the timer delay. The timer will fire. + task_environment.FastForwardBy(kTestDelay / 2); + EXPECT_TRUE(receiver.WasCalled()); } -class DelayTimerFatalTarget { - public: - void Signal() { - ASSERT_TRUE(false); - } -}; - void RunTest_DelayTimer_Deleted( test::TaskEnvironment::MainThreadType main_thread_type) { - test::TaskEnvironment task_environment(main_thread_type); + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME, main_thread_type); - DelayTimerFatalTarget target; + Receiver receiver; { - DelayTimer timer(FROM_HERE, Milliseconds(50), &target, - &DelayTimerFatalTarget::Signal); + DelayTimer timer(FROM_HERE, kTestDelay, &receiver, &Receiver::OnCalled); timer.Reset(); } - // When the timer is deleted, the DelayTimerFatalTarget should never be - // called. - PlatformThread::Sleep(Milliseconds(100)); + // Because the timer was deleted, it will never fire. + task_environment.FastForwardBy(kTestDelay); + EXPECT_FALSE(receiver.WasCalled()); } } // namespace @@ -440,26 +257,26 @@ test::TaskEnvironment::TimeSource::MOCK_TIME); Receiver receiver; OneShotTimer timer(task_environment.GetMockTickClock()); - timer.Start(FROM_HERE, Seconds(1), + timer.Start(FROM_HERE, kTestDelay, BindOnce(&Receiver::OnCalled, Unretained(&receiver))); - task_environment.FastForwardBy(Seconds(1)); + task_environment.FastForwardBy(kTestDelay); EXPECT_TRUE(receiver.WasCalled()); } TEST_P(TimerTestWithThreadType, RepeatingTimer) { - RunTest_RepeatingTimer(GetParam(), Milliseconds(10)); + RunTest_RepeatingTimer(GetParam(), kTestDelay); } TEST_P(TimerTestWithThreadType, RepeatingTimer_Cancel) { - RunTest_RepeatingTimer_Cancel(GetParam(), Milliseconds(10)); + RunTest_RepeatingTimer_Cancel(GetParam(), kTestDelay); } TEST_P(TimerTestWithThreadType, RepeatingTimerZeroDelay) { - RunTest_RepeatingTimer(GetParam(), Milliseconds(0)); + RunTest_RepeatingTimer(GetParam(), Seconds(0)); } TEST_P(TimerTestWithThreadType, RepeatingTimerZeroDelay_Cancel) { - RunTest_RepeatingTimer_Cancel(GetParam(), Milliseconds(0)); + RunTest_RepeatingTimer_Cancel(GetParam(), Seconds(0)); } TEST(TimerTest, RepeatingTimerWithTickClock) { @@ -468,9 +285,9 @@ Receiver receiver; const int expected_times_called = 10; RepeatingTimer timer(task_environment.GetMockTickClock()); - timer.Start(FROM_HERE, Seconds(1), + timer.Start(FROM_HERE, kTestDelay, BindRepeating(&Receiver::OnCalled, Unretained(&receiver))); - task_environment.FastForwardBy(Seconds(expected_times_called)); + task_environment.FastForwardBy(expected_times_called * kTestDelay); timer.Stop(); EXPECT_EQ(expected_times_called, receiver.TimesCalled()); } @@ -483,8 +300,7 @@ RunTest_DelayTimer_OneCall(GetParam()); } -// It's flaky on the buildbot, http://crbug.com/25038. -TEST_P(TimerTestWithThreadType, DISABLED_DelayTimer_Reset) { +TEST_P(TimerTestWithThreadType, DelayTimer_Reset) { RunTest_DelayTimer_Reset(GetParam()); } @@ -496,15 +312,15 @@ test::TaskEnvironment task_environment( test::TaskEnvironment::TimeSource::MOCK_TIME); Receiver receiver; - DelayTimer timer(FROM_HERE, Seconds(1), &receiver, &Receiver::OnCalled, + DelayTimer timer(FROM_HERE, kTestDelay, &receiver, &Receiver::OnCalled, task_environment.GetMockTickClock()); - task_environment.FastForwardBy(Milliseconds(999)); + task_environment.FastForwardBy(kTestDelay - Microseconds(1)); EXPECT_FALSE(receiver.WasCalled()); timer.Reset(); - task_environment.FastForwardBy(Milliseconds(999)); + task_environment.FastForwardBy(kTestDelay - Microseconds(1)); EXPECT_FALSE(receiver.WasCalled()); timer.Reset(); - task_environment.FastForwardBy(Seconds(1)); + task_environment.FastForwardBy(kTestDelay); EXPECT_TRUE(receiver.WasCalled()); } @@ -513,78 +329,43 @@ // message loop does not cause crashes if there were pending // timers not yet fired. It may only trigger exceptions // if debug heap checking is enabled. - WaitableEvent did_run(WaitableEvent::ResetPolicy::MANUAL, - WaitableEvent::InitialState::NOT_SIGNALED); + Receiver receiver; + OneShotTimer timer; + { - OneShotTimerTesterBase a(&did_run); - OneShotTimerTesterBase b(&did_run); - OneShotTimerTesterBase c(&did_run); - OneShotTimerTesterBase d(&did_run); - { - test::TaskEnvironment task_environment; - a.Start(); - b.Start(); - } // Task environment destructs by falling out of scope. - } // OneShotTimers destruct. SHOULD NOT CRASH, of course. + test::TaskEnvironment task_environment; + timer.Start(FROM_HERE, kTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver))); + } // Task environment destructs by falling out of scope. - EXPECT_FALSE(did_run.IsSignaled()); + EXPECT_FALSE(receiver.WasCalled()); + // Timer destruct. SHOULD NOT CRASH, of course. } -// Ref counted class which owns a Timer. The class passes a reference to itself -// via the |user_task| parameter in Timer::Start(). |Timer::user_task_| might -// end up holding the last reference to the class. -class OneShotSelfOwningTimerTester - : public RefCounted<OneShotSelfOwningTimerTester> { - public: - OneShotSelfOwningTimerTester() = default; - - OneShotSelfOwningTimerTester(const OneShotSelfOwningTimerTester&) = delete; - OneShotSelfOwningTimerTester& operator=(const OneShotSelfOwningTimerTester&) = - delete; - - void StartTimer() { - // Start timer with long delay in order to test the timer getting destroyed - // while a timer task is still pending. - timer_.Start(FROM_HERE, Days(1), - BindOnce(&OneShotSelfOwningTimerTester::Run, this)); - } - - private: - friend class RefCounted<OneShotSelfOwningTimerTester>; - ~OneShotSelfOwningTimerTester() = default; - - void Run() { - ADD_FAILURE() << "Timer unexpectedly fired."; - } - - OneShotTimer timer_; -}; - TEST(TimerTest, TaskEnvironmentShutdownSelfOwningTimer) { // This test verifies that shutdown of the task environment does not cause // crashes if there is a pending timer not yet fired and |Timer::user_task_| // owns the timer. The test may only trigger exceptions if debug heap checking // is enabled. - test::TaskEnvironment task_environment; - scoped_refptr<OneShotSelfOwningTimerTester> tester = - new OneShotSelfOwningTimerTester(); + auto timer = std::make_unique<OneShotTimer>(); + auto* timer_ptr = timer.get(); - std::move(tester)->StartTimer(); - // |Timer::user_task_| owns sole reference to |tester|. + test::TaskEnvironment task_environment; + + timer_ptr->Start(FROM_HERE, kTestDelay, + BindLambdaForTesting([timer = std::move(timer)]() {})); + // |Timer::user_task_| owns sole reference to |timer|. // Task environment destructs by falling out of scope. SHOULD NOT CRASH. } -void TimerTestCallback() { -} - TEST(TimerTest, NonRepeatIsRunning) { { test::TaskEnvironment task_environment; OneShotTimer timer; EXPECT_FALSE(timer.IsRunning()); - timer.Start(FROM_HERE, Days(1), BindOnce(&TimerTestCallback)); + timer.Start(FROM_HERE, kTestDelay, DoNothing()); EXPECT_TRUE(timer.IsRunning()); timer.Stop(); EXPECT_FALSE(timer.IsRunning()); @@ -594,7 +375,7 @@ RetainingOneShotTimer timer; test::TaskEnvironment task_environment; EXPECT_FALSE(timer.IsRunning()); - timer.Start(FROM_HERE, Days(1), BindRepeating(&TimerTestCallback)); + timer.Start(FROM_HERE, kTestDelay, DoNothing()); EXPECT_TRUE(timer.IsRunning()); timer.Stop(); EXPECT_FALSE(timer.IsRunning()); @@ -609,7 +390,7 @@ { test::TaskEnvironment task_environment; EXPECT_FALSE(timer.IsRunning()); - timer.Start(FROM_HERE, Days(1), BindOnce(&TimerTestCallback)); + timer.Start(FROM_HERE, kTestDelay, DoNothing()); EXPECT_TRUE(timer.IsRunning()); } EXPECT_FALSE(timer.IsRunning()); @@ -617,7 +398,7 @@ TEST(TimerTest, RetainRepeatIsRunning) { test::TaskEnvironment task_environment; - RepeatingTimer timer(FROM_HERE, Days(1), BindRepeating(&TimerTestCallback)); + RepeatingTimer timer(FROM_HERE, kTestDelay, DoNothing()); EXPECT_FALSE(timer.IsRunning()); timer.Reset(); EXPECT_TRUE(timer.IsRunning()); @@ -629,8 +410,7 @@ TEST(TimerTest, RetainNonRepeatIsRunning) { test::TaskEnvironment task_environment; - RetainingOneShotTimer timer(FROM_HERE, Days(1), - BindRepeating(&TimerTestCallback)); + RetainingOneShotTimer timer(FROM_HERE, kTestDelay, DoNothing()); EXPECT_FALSE(timer.IsRunning()); timer.Reset(); EXPECT_TRUE(timer.IsRunning()); @@ -642,54 +422,36 @@ //----------------------------------------------------------------------------- -namespace { - -bool g_callback_happened1 = false; -bool g_callback_happened2 = false; - -void ClearAllCallbackHappened() { - g_callback_happened1 = false; - g_callback_happened2 = false; -} - -void SetCallbackHappened1() { - g_callback_happened1 = true; - RunLoop::QuitCurrentWhenIdleDeprecated(); -} - -void SetCallbackHappened2() { - g_callback_happened2 = true; - RunLoop::QuitCurrentWhenIdleDeprecated(); -} - -} // namespace - TEST(TimerTest, ContinuationStopStart) { - { - ClearAllCallbackHappened(); - test::TaskEnvironment task_environment; - OneShotTimer timer; - timer.Start(FROM_HERE, Milliseconds(10), BindOnce(&SetCallbackHappened1)); - timer.Stop(); - timer.Start(FROM_HERE, Milliseconds(40), BindOnce(&SetCallbackHappened2)); - RunLoop().Run(); - EXPECT_FALSE(g_callback_happened1); - EXPECT_TRUE(g_callback_happened2); - } + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME); + + Receiver receiver1; + Receiver receiver2; + OneShotTimer timer; + timer.Start(FROM_HERE, kTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver1))); + timer.Stop(); + timer.Start(FROM_HERE, kLongTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver2))); + task_environment.FastForwardBy(kLongTestDelay); + EXPECT_FALSE(receiver1.WasCalled()); + EXPECT_TRUE(receiver2.WasCalled()); } TEST(TimerTest, ContinuationReset) { - { - ClearAllCallbackHappened(); - test::TaskEnvironment task_environment; - OneShotTimer timer; - timer.Start(FROM_HERE, Milliseconds(10), BindOnce(&SetCallbackHappened1)); - timer.Reset(); - // // Since Reset happened before task ran, the user_task must not be - // cleared: ASSERT_FALSE(timer.user_task().is_null()); - RunLoop().Run(); - EXPECT_TRUE(g_callback_happened1); - } + test::TaskEnvironment task_environment( + test::TaskEnvironment::TimeSource::MOCK_TIME); + + Receiver receiver; + OneShotTimer timer; + timer.Start(FROM_HERE, kTestDelay, + BindOnce(&Receiver::OnCalled, Unretained(&receiver))); + timer.Reset(); + // // Since Reset happened before task ran, the user_task must not be + // cleared: ASSERT_FALSE(timer.user_task().is_null()); + task_environment.FastForwardBy(kTestDelay); + EXPECT_TRUE(receiver.WasCalled()); } TEST(TimerTest, AbandonedTaskIsCancelled) { @@ -698,7 +460,7 @@ OneShotTimer timer; // Start a timer. There will be a pending task on the current sequence. - timer.Start(FROM_HERE, Seconds(5), base::DoNothing()); + timer.Start(FROM_HERE, kTestDelay, base::DoNothing()); EXPECT_EQ(1u, task_environment.GetPendingMainThreadTaskCount()); // After AbandonAndStop(), the task is correctly treated as cancelled.
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index d02bbc31..eac3c75 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -7.20220110.1.1 +7.20220110.2.1
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 35a3b22..fdbcbf9 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -7.20220108.0.1 +7.20220110.2.3
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index d02bbc31..eac3c75 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -7.20220110.1.1 +7.20220110.2.1
diff --git a/cc/base/features.cc b/cc/base/features.cc index 6027d1a4..5092d787 100644 --- a/cc/base/features.cc +++ b/cc/base/features.cc
@@ -56,7 +56,7 @@ const base::Feature kPreferNewContentForCheckerboardedScrolls{ "PreferNewContentForCheckerboardedScrolls", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kDurationEstimatesInCompositorTimingHistory{ "DurationEstimatesInCompositorTimingHistory",
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java index 17f5b7d1..e6f6c8a2 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -1471,9 +1471,9 @@ // Incognito in both light/dark theme is the same as non-incognito mode in dark theme. // Non-incognito mode and incognito in both light/dark themes in dark theme all look // dark. - ColorStateList checkedDrawableColorList = AppCompatResources.getColorStateList(mContext, - pseudoTab.isIncognito() ? R.color.default_icon_color_dark - : R.color.default_icon_color_inverse); + ColorStateList checkedDrawableColorList = ColorStateList.valueOf(pseudoTab.isIncognito() + ? mContext.getColor(R.color.default_icon_color_dark) + : SemanticColorUtils.getDefaultIconColorInverse(mContext)); ColorStateList actionButtonBackgroundColorList = AppCompatResources.getColorStateList(mContext, pseudoTab.isIncognito() ? R.color.default_icon_color_light
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorToolbar.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorToolbar.java index 2bdb5ad..9d4dc5b 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorToolbar.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorToolbar.java
@@ -11,9 +11,9 @@ import androidx.annotation.ColorInt; import androidx.annotation.PluralsRes; -import androidx.appcompat.content.res.AppCompatResources; import org.chromium.chrome.tab_ui.R; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.NumberRollView; import org.chromium.components.browser_ui.widget.TintedDrawable; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar; @@ -48,9 +48,9 @@ private void showNavigationButton() { TintedDrawable navigationIconDrawable = TintedDrawable.constructTintedDrawable( getContext(), org.chromium.chrome.R.drawable.ic_arrow_back_white_24dp); - ColorStateList lightIconColorList = AppCompatResources.getColorStateList( - getContext(), org.chromium.chrome.R.color.default_icon_color_inverse); - navigationIconDrawable.setTint(lightIconColorList); + final @ColorInt int lightIconColor = + SemanticColorUtils.getDefaultIconColorInverse(getContext()); + navigationIconDrawable.setTint(lightIconColor); setNavigationIcon(navigationIconDrawable); setNavigationContentDescription(TabUiFeatureUtilities.isLaunchPolishEnabled()
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java index 4848d79..da8dd5d 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java
@@ -192,11 +192,6 @@ */ public static ColorStateList getToggleActionButtonCheckedDrawableTintList( Context context, boolean isIncognito) { - if (!themeRefactorEnabled()) { - return AppCompatResources.getColorStateList(context, - isIncognito ? R.color.default_icon_color_dark - : R.color.default_icon_color_inverse); - } if (isIncognito) { return AppCompatResources.getColorStateList( context, R.color.incognito_tab_bg_selected_color);
diff --git a/chrome/android/java/res/drawable/signin_header_animation.xml b/chrome/android/java/res/drawable/signin_header_animation.xml index 40a8ed0..c9654b0 100644 --- a/chrome/android/java/res/drawable/signin_header_animation.xml +++ b/chrome/android/java/res/drawable/signin_header_animation.xml
@@ -4,9 +4,7 @@ found in the LICENSE file. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21"> + xmlns:aapt="http://schemas.android.com/aapt"> <aapt:attr name="android:drawable"> <vector android:width="360dp" @@ -108,7 +106,7 @@ android:rotation="0"> <path - android:fillColor="?attr/default_icon_color_inverse" + android:fillColor="@color/default_icon_color_inverse_baseline" android:pathData="M297.722,54.149L297.722,51.997L297.981,51.997L297.981,53.479L299.925,51.391L297.981,49.303L297.981,50.785L297.722,50.785L297.722,48.632L300.291,51.391L297.722,54.149ZM297.98,45.667L295.412,42.909L297.98,40.15L297.98,42.303L297.721,42.303L297.721,40.821L295.777,42.909L297.721,44.997L297.721,43.515L297.98,43.515L297.98,45.667ZM301.395,49.392L301.173,49.251C301.521,48.617 301.705,47.89 301.705,47.15C301.705,44.868 299.976,43.011 297.852,43.011L297.852,42.733C300.119,42.733 301.964,44.715 301.964,47.149C301.963,47.939 301.767,48.715 301.395,49.392ZM297.851,51.566C295.584,51.566 293.739,49.585 293.739,47.149C293.739,46.359 293.936,45.583 294.307,44.907L294.529,45.048C294.181,45.682 293.997,46.408 293.997,47.148C293.997,49.431 295.726,51.287 297.851,51.287L297.851,51.566Z"/> </group> <!-- Blue dot -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java index 26a2606..7d0ce4d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java
@@ -8,7 +8,7 @@ import android.widget.CompoundButton; import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; +import androidx.appcompat.content.res.AppCompatResources; import org.chromium.base.Callback; import org.chromium.base.CallbackController; @@ -171,10 +171,9 @@ void setPriceTrackingIconForEnabledState(boolean enabled) { mPropertyModel.set(BookmarkSaveFlowProperties.NOTIFICATION_SWITCH_START_ICON, - ResourcesCompat.getDrawable(mContext.getResources(), + AppCompatResources.getDrawable(mContext, enabled ? R.drawable.price_tracking_enabled_filled - : R.drawable.price_tracking_disabled, - /*theme=*/null)); + : R.drawable.price_tracking_disabled)); } void destroy() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java index 32496ab..e2a9bbda 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.history; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; @@ -22,6 +23,7 @@ import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.ui.favicon.FaviconHelper.DefaultFaviconHelper; import org.chromium.chrome.browser.ui.favicon.FaviconUtils; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.RoundedIconGenerator; import org.chromium.components.browser_ui.widget.selectable_list.SelectableItemView; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListUtils; @@ -55,7 +57,7 @@ context.getResources().getDimensionPixelSize(R.dimen.default_list_row_padding); mStartIconSelectedColorList = - AppCompatResources.getColorStateList(context, R.color.default_icon_color_inverse); + ColorStateList.valueOf(SemanticColorUtils.getDefaultIconColorInverse(context)); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2.java index bc09c9e..47896c0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2.java
@@ -21,6 +21,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.status_indicator.StatusIndicatorCoordinator; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.content_public.common.ContentSwitches; import java.lang.annotation.Retention; @@ -160,8 +161,7 @@ final int textColor = ApiCompatibilityUtils.getColor( mContext.getResources(), R.color.default_text_color_inverse); final Drawable statusIcon = mContext.getDrawable(R.drawable.ic_globe_24dp); - final int iconTint = ApiCompatibilityUtils.getColor( - mContext.getResources(), R.color.default_icon_color_inverse); + final int iconTint = SemanticColorUtils.getDefaultIconColorInverse(mContext); mStatusIndicator.updateContent( mContext.getString(R.string.offline_indicator_v2_back_online_text), statusIcon, backgroundColor, textColor, iconTint, mHideRunnable);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/query_tiles/QueryTileUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/query_tiles/QueryTileUtils.java index 0acfab5..a6620df2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/query_tiles/QueryTileUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/query_tiles/QueryTileUtils.java
@@ -6,24 +6,37 @@ import android.text.TextUtils; +import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; import org.chromium.base.TimeUtils; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.segmentation_platform.SegmentationPlatformServiceFactory; +import org.chromium.components.optimization_guide.proto.ModelsProto.OptimizationTarget; +import org.chromium.components.segmentation_platform.SegmentSelectionResult; +import org.chromium.components.segmentation_platform.SegmentationPlatformService; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** * Handles various feature utility functions for query tiles. */ public class QueryTileUtils { private static Boolean sShowQueryTilesOnNTP; + private static final String BEHAVIOURAL_TARGETING_KEY = "behavioural_targeting"; private static final String NUM_DAYS_KEEP_SHOWING_QUERY_TILES_KEY = "num_days_keep_showing_query_tiles"; private static final String NUM_DAYS_MV_CLICKS_BELOW_THRESHOLD_KEY = "num_days_mv_clicks_below_threshold"; private static final String MV_TILE_CLICKS_THRESHOLD_KEY = "mv_tile_click_threshold"; private static final long INVALID_DECISION_TIMESTAMP = -1L; + private static final String QUERY_TILES_SEGMENTATION_PLATFORM_KEY = "query_tiles"; + private static int sSegmentationResultsForTesting = -1; @VisibleForTesting static final long MILLISECONDS_PER_DAY = TimeUtils.SECONDS_PER_DAY * 1000; @@ -32,6 +45,38 @@ @VisibleForTesting static final int DEFAULT_NUM_DAYS_MV_CLICKS_BELOW_THRESHOLD = 7; + // Constants with ShowQueryTilesSegmentationResult in enums.xml. + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + @IntDef({ShowQueryTilesSegmentationResult.UNINITIALIZED, + ShowQueryTilesSegmentationResult.DONT_SHOW, ShowQueryTilesSegmentationResult.SHOW}) + @Retention(RetentionPolicy.SOURCE) + public @interface ShowQueryTilesSegmentationResult { + int UNINITIALIZED = 0; + int DONT_SHOW = 1; + int SHOW = 2; + int NUM_ENTRIES = 3; + } + + // Constants with ShowQueryTilesSegmentationResultComparison in enums.xml. + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + @IntDef({ShowQueryTilesSegmentationResultComparison.UNINITIALIZED, + ShowQueryTilesSegmentationResultComparison.SEGMENTATION_ENABLED_LOGIC_ENABLED, + ShowQueryTilesSegmentationResultComparison.SEGMENTATION_ENABLED_LOGIC_DISABLED, + ShowQueryTilesSegmentationResultComparison.SEGMENTATION_DISABLED_LOGIC_ENABLED, + ShowQueryTilesSegmentationResultComparison.SEGMENTATION_DISABLED_LOGIC_DISABLED}) + @Retention(RetentionPolicy.SOURCE) + @VisibleForTesting + public @interface ShowQueryTilesSegmentationResultComparison { + int UNINITIALIZED = 0; + int SEGMENTATION_ENABLED_LOGIC_ENABLED = 1; + int SEGMENTATION_ENABLED_LOGIC_DISABLED = 2; + int SEGMENTATION_DISABLED_LOGIC_ENABLED = 3; + int SEGMENTATION_DISABLED_LOGIC_DISABLED = 4; + int NUM_ENTRIES = 5; + } + /** * Whether query tiles is enabled and should be shown on NTP. * @return Whether the query tile feature is enabled on NTP. @@ -58,37 +103,144 @@ return true; } + // Check if segmentation model should be used. + final String behavioralTarget = ChromeFeatureList.getFieldTrialParamByFeature( + ChromeFeatureList.QUERY_TILES_SEGMENTATION, BEHAVIOURAL_TARGETING_KEY); + + boolean shouldUseModelResult = + !TextUtils.isEmpty(behavioralTarget) && TextUtils.equals(behavioralTarget, "model"); + long nextDecisionTimestamp = SharedPreferencesManager.getInstance().readLong( ChromePreferenceKeys.QUERY_TILES_NEXT_DISPLAY_DECISION_TIME_MS, INVALID_DECISION_TIMESTAMP); boolean noPreviousHistory = (nextDecisionTimestamp == INVALID_DECISION_TIMESTAMP); - // If this is the first time we make a decision, don't show query tiles. - if (noPreviousHistory) { - updateDisplayStatusAndNextDecisionTime(false /*showQueryTiles*/); - return false; + + boolean nextDecisionTimestampReached = System.currentTimeMillis() >= nextDecisionTimestamp; + + boolean lastDecisionExpired = noPreviousHistory || nextDecisionTimestampReached; + + // Use segmentation model result only if finch enabled and next decision is expired or + // unavailable. If nextDecisionTimestamp is available and hasn't been reached, continue + // using code algorithm. + if (!shouldUseModelResult || !lastDecisionExpired) { + // If this is the first time we make a decision, don't show query tiles. + if (noPreviousHistory) { + updateDisplayStatusAndNextDecisionTime(false /*showQueryTiles*/); + return false; + } + + // Return the current decision before the next decision timestamp. + if (!nextDecisionTimestampReached) { + return SharedPreferencesManager.getInstance().readBoolean( + ChromePreferenceKeys.QUERY_TILES_SHOW_ON_NTP, false); + } + + int recentMVClicks = SharedPreferencesManager.getInstance().readInt( + ChromePreferenceKeys.QUERY_TILES_NUM_RECENT_MV_TILE_CLICKS, 0); + int recentQueryTileClicks = SharedPreferencesManager.getInstance().readInt( + ChromePreferenceKeys.QUERY_TILES_NUM_RECENT_QUERY_TILE_CLICKS, 0); + + int mvTileClickThreshold = getFieldTrialParamValue(MV_TILE_CLICKS_THRESHOLD_KEY, 0); + + // If MV tiles is clicked recently, hide query tiles for a while. + // Otherwise, show it for a period of time. + final boolean showQueryTiles = (recentMVClicks <= mvTileClickThreshold + || recentMVClicks <= recentQueryTileClicks); + + // Used for measuring consistency of segmentation model result. + recordSegmentationResultComparison(getSegmentationResult(), showQueryTiles); + + updateDisplayStatusAndNextDecisionTime(showQueryTiles); + return showQueryTiles; + } else { + SharedPreferencesManager.getInstance().removeKey( + ChromePreferenceKeys.QUERY_TILES_NEXT_DISPLAY_DECISION_TIME_MS); + return getBehaviourResultFromSegmentation(getSegmentationResult(), false); + } + } + + /** + * Records UMA to compare the result of segmentation platform with hard coded logics. + * @param segmentationResult The result from segmentation model. + * @param existingResult The result from code logics. + */ + private static void recordSegmentationResultComparison( + @ShowQueryTilesSegmentationResult int segmentationResult, boolean existingResult) { + @ShowQueryTilesSegmentationResultComparison + int comparison = ShowQueryTilesSegmentationResultComparison.UNINITIALIZED; + switch (segmentationResult) { + case ShowQueryTilesSegmentationResult.UNINITIALIZED: + comparison = ShowQueryTilesSegmentationResultComparison.UNINITIALIZED; + break; + case ShowQueryTilesSegmentationResult.SHOW: + comparison = existingResult ? ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_ENABLED_LOGIC_ENABLED + : ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_ENABLED_LOGIC_DISABLED; + break; + case ShowQueryTilesSegmentationResult.DONT_SHOW: + comparison = existingResult ? ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_DISABLED_LOGIC_ENABLED + : ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_DISABLED_LOGIC_DISABLED; + break; + } + RecordHistogram.recordEnumeratedHistogram( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison", comparison, + ShowQueryTilesSegmentationResultComparison.NUM_ENTRIES); + } + + /** + * Called to check whether query tiles should be displayed based on segmentation model result. + * @param segmentationResult The result from segmentation model. + * @param defaultResult The default result. + * @return Whether to show query tiles based on segmentation result. When unavailable, returns + * the default value given. + */ + private static boolean getBehaviourResultFromSegmentation( + @ShowQueryTilesSegmentationResult int segmentationResult, boolean defaultResult) { + RecordHistogram.recordEnumeratedHistogram( + "Search.QueryTiles.ShowQueryTilesSegmentationResult", segmentationResult, + ShowQueryTilesSegmentationResult.NUM_ENTRIES); + switch (segmentationResult) { + case ShowQueryTilesSegmentationResult.DONT_SHOW: + return false; + case ShowQueryTilesSegmentationResult.SHOW: + return true; + + case ShowQueryTilesSegmentationResult.UNINITIALIZED: + default: + return defaultResult; + } + } + + /** + * Called to get segment selection result from segmentation platform service. + * @return The segmentation result. + */ + private static @ShowQueryTilesSegmentationResult int getSegmentationResult() { + @ShowQueryTilesSegmentationResult + int segmentationResult; + if (sSegmentationResultsForTesting == -1) { + SegmentationPlatformService segmentationPlatformService = + SegmentationPlatformServiceFactory.getForProfile( + Profile.getLastUsedRegularProfile()); + SegmentSelectionResult result = segmentationPlatformService.getCachedSegmentResult( + QUERY_TILES_SEGMENTATION_PLATFORM_KEY); + if (!result.isReady) { + segmentationResult = ShowQueryTilesSegmentationResult.UNINITIALIZED; + } else if (result.selectedSegment + == OptimizationTarget.OPTIMIZATION_TARGET_SEGMENTATION_QUERY_TILES) { + segmentationResult = ShowQueryTilesSegmentationResult.SHOW; + } else { + segmentationResult = ShowQueryTilesSegmentationResult.DONT_SHOW; + } + } else { + segmentationResult = sSegmentationResultsForTesting; } - // Return the current decision before the next decision timestamp. - if (System.currentTimeMillis() < nextDecisionTimestamp) { - return SharedPreferencesManager.getInstance().readBoolean( - ChromePreferenceKeys.QUERY_TILES_SHOW_ON_NTP, false); - } - - int recentMVClicks = SharedPreferencesManager.getInstance().readInt( - ChromePreferenceKeys.QUERY_TILES_NUM_RECENT_MV_TILE_CLICKS, 0); - int recentQueryTileClicks = SharedPreferencesManager.getInstance().readInt( - ChromePreferenceKeys.QUERY_TILES_NUM_RECENT_QUERY_TILE_CLICKS, 0); - - int mvTileClickThreshold = getFieldTrialParamValue(MV_TILE_CLICKS_THRESHOLD_KEY, 0); - - // If MV tiles is clicked recently, hide query tiles for a while. - // Otherwise, show it for a period of time. - boolean showQueryTiles = - (recentMVClicks <= mvTileClickThreshold || recentMVClicks <= recentQueryTileClicks); - - updateDisplayStatusAndNextDecisionTime(showQueryTiles); - return showQueryTiles; + return segmentationResult; } /** @@ -168,4 +320,10 @@ return defaultValue; } } + + /** For testing only. */ + @VisibleForTesting + public static void setSegmentationResultsForTesting(int result) { + sSegmentationResultsForTesting = result; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java b/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java index 00b1e24..6c62213f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java
@@ -50,6 +50,7 @@ import org.chromium.components.messages.MessageBannerProperties; import org.chromium.components.messages.MessageDispatcher; import org.chromium.components.messages.MessageIdentifier; +import org.chromium.components.messages.MessageScopeType; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.url.GURL; @@ -229,6 +230,11 @@ */ @VisibleForTesting void showSurveyPrompt(@NonNull Tab tab, String siteId) { + String debugMessage = + "Logging invocation of #showSurveyPrompt to investigate crbug.com/1249055."; + String callTrace = Log.getStackTraceString(new Throwable(debugMessage)); + Log.i(TAG, callTrace); + mSurveyPromptTab = tab; if (ChromeFeatureList.isEnabled(ChromeFeatureList.MESSAGES_FOR_ANDROID_CHROME_SURVEY) @@ -299,8 +305,7 @@ mLifecycleObserver = new PauseResumeWithNativeObserver() { @Override public void onResumeWithNative() { - if (SurveyController.getInstance().isSurveyExpired(siteId) - && message != null) { + if (SurveyController.getInstance().isSurveyExpired(siteId)) { String logMessage = String.format( "The survey message prompt was dismissed on activity resumption" + " because the survey with ID %s has expired.", @@ -321,7 +326,8 @@ mLifecycleDispatcher.register(mLifecycleObserver); } - mMessageDispatcher.enqueueWindowScopedMessage(message, false); + mMessageDispatcher.enqueueMessage( + message, mSurveyPromptTab.getWebContents(), MessageScopeType.NAVIGATION, false); } else { InfoBarContainer.get(tab).addAnimationListener(this);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java index 3b9a5ef4..7bbac7d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java
@@ -35,7 +35,7 @@ import org.mockito.MockitoAnnotations; import org.chromium.base.StrictModeContext; -import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.test.metrics.HistogramTestRule; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; @@ -100,6 +100,9 @@ public EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule(); @Rule + public HistogramTestRule mHistogramTester = new HistogramTestRule(); + + @Rule public JniMocker mMocker = new JniMocker(); @Rule @@ -115,11 +118,6 @@ mMocker.mock(PageInfoAboutThisSiteControllerJni.TEST_HOOKS, mMockAboutThisSiteJni); mTestServerRule.setServerUsesHttps(true); sActivityTestRule.loadUrl(mTestServerRule.getServer().getURL(sSimpleHtml)); - - RecordHistogram.forgetHistogramForTesting("Security.PageInfo.TimeOpen.AboutThisSiteShown"); - RecordHistogram.forgetHistogramForTesting( - "Security.PageInfo.TimeOpen.AboutThisSiteNotShown"); - RecordHistogram.forgetHistogramForTesting("WebsiteSettings.Action"); } private void openPageInfo() { @@ -181,10 +179,10 @@ dismissPageInfo(); assertEquals(1, - RecordHistogram.getHistogramTotalCountForTesting( + mHistogramTester.getHistogramTotalCount( "Security.PageInfo.TimeOpen.AboutThisSiteShown")); assertEquals(0, - RecordHistogram.getHistogramTotalCountForTesting( + mHistogramTester.getHistogramTotalCount( "Security.PageInfo.TimeOpen.AboutThisSiteNotShown")); } @@ -207,10 +205,10 @@ dismissPageInfo(); assertEquals(0, - RecordHistogram.getHistogramTotalCountForTesting( + mHistogramTester.getHistogramTotalCount( "Security.PageInfo.TimeOpen.AboutThisSiteShown")); assertEquals(1, - RecordHistogram.getHistogramTotalCountForTesting( + mHistogramTester.getHistogramTotalCount( "Security.PageInfo.TimeOpen.AboutThisSiteNotShown")); } @@ -239,18 +237,18 @@ @MediumTest public void testAboutThisSiteSubPageSourceClicked() throws ExecutionException, TimeoutException { - assertEquals(0, RecordHistogram.getHistogramTotalCountForTesting("WebsiteSettings.Action")); + assertEquals(0, mHistogramTester.getHistogramTotalCount("WebsiteSettings.Action")); mockResponse(createDescription()); openPageInfo(); - assertEquals(1, RecordHistogram.getHistogramTotalCountForTesting("WebsiteSettings.Action")); + assertEquals(1, mHistogramTester.getHistogramTotalCount("WebsiteSettings.Action")); assertEquals(1, - RecordHistogram.getHistogramValueCountForTesting( + mHistogramTester.getHistogramValueCount( "WebsiteSettings.Action", PageInfoAction.PAGE_INFO_OPENED)); onView(withId(PageInfoAboutThisSiteController.ROW_ID)).perform(click()); - assertEquals(2, RecordHistogram.getHistogramTotalCountForTesting("WebsiteSettings.Action")); + assertEquals(2, mHistogramTester.getHistogramTotalCount("WebsiteSettings.Action")); assertEquals(1, - RecordHistogram.getHistogramValueCountForTesting("WebsiteSettings.Action", + mHistogramTester.getHistogramValueCount("WebsiteSettings.Action", PageInfoAction.PAGE_INFO_ABOUT_THIS_SITE_PAGE_OPENED)); final CallbackHelper onTabAdded = new CallbackHelper(); final TabModelObserver observer = new TabModelObserver() { @@ -266,9 +264,9 @@ onView(withText(containsString("Example Source"))).perform(click()); onTabAdded.waitForCallback(callCount); TestThreadUtils.runOnUiThreadBlocking(() -> tabModel.removeObserver(observer)); - assertEquals(3, RecordHistogram.getHistogramTotalCountForTesting("WebsiteSettings.Action")); + assertEquals(3, mHistogramTester.getHistogramTotalCount("WebsiteSettings.Action")); assertEquals(1, - RecordHistogram.getHistogramValueCountForTesting("WebsiteSettings.Action", + mHistogramTester.getHistogramValueCount("WebsiteSettings.Action", PageInfoAction.PAGE_INFO_ABOUT_THIS_SITE_SOURCE_LINK_CLICKED)); } } \ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/query_tiles/QueryTileUtilsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/query_tiles/QueryTileUtilsTest.java index e77a1c5..e7cb539 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/query_tiles/QueryTileUtilsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/query_tiles/QueryTileUtilsTest.java
@@ -16,6 +16,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -40,6 +41,7 @@ @Before public void setUp() { mActivityTestRule.startMainActivityOnBlankPage(); + QueryTileUtils.setSegmentationResultsForTesting(0 /*UNINITIALIZED*/); } @Test @@ -137,6 +139,68 @@ nextDecisionTimeStampInDays(10); } + @Test + @SmallTest + @EnableFeatures({ChromeFeatureList.QUERY_TILES_GEO_FILTER, ChromeFeatureList.QUERY_TILES, + ChromeFeatureList.QUERY_TILES_IN_NTP, ChromeFeatureList.QUERY_TILES_SEGMENTATION}) + public void + testShowQueryTilesSegmentationResultComparison() { + QueryTileUtils.setSegmentationResultsForTesting(1 /*DONT_SHOW*/); + Assert.assertEquals(0, + RecordHistogram.getHistogramTotalCountForTesting( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison")); + + nextDecisionTimeReached(); + Assert.assertTrue(QueryTileUtils.shouldShowQueryTiles()); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison", + QueryTileUtils.ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_DISABLED_LOGIC_ENABLED)); + + nextDecisionTimeReached(); + QueryTileUtils.onMostVisitedTileClicked(); + Assert.assertFalse(QueryTileUtils.shouldShowQueryTiles()); + Assert.assertEquals(2, + RecordHistogram.getHistogramTotalCountForTesting( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Search.QueryTiles.ShowQueryTilesSegmentationResultComparison", + QueryTileUtils.ShowQueryTilesSegmentationResultComparison + .SEGMENTATION_DISABLED_LOGIC_DISABLED)); + } + + @Test + @SmallTest + @EnableFeatures({ChromeFeatureList.QUERY_TILES_SEGMENTATION + "<Study"}) + @CommandLineFlags.Add({"force-fieldtrials=Study/Group", + "force-fieldtrial-params=Study.Group:behavioural_targeting/model"}) + public void + testShouldUseSegmentationModel() { + // Set segmentation model to show query tiles. + SharedPreferencesManager.getInstance().writeBoolean( + ChromePreferenceKeys.QUERY_TILES_SHOW_ON_NTP, false); + QueryTileUtils.setSegmentationResultsForTesting(2 /*SHOW*/); + + // Verify that query tiles is shown via segmentation model when no previous history. + Assert.assertTrue(QueryTileUtils.shouldShowQueryTiles()); + + // Verify that query tiles is shown via segmentation model when previous decision time + // expired. + nextDecisionTimeReached(); + Assert.assertTrue(QueryTileUtils.shouldShowQueryTiles()); + + // Verify that segmentation is not used when previous decision time did not expire. + SharedPreferencesManager.getInstance().writeLong( + ChromePreferenceKeys.QUERY_TILES_NEXT_DISPLAY_DECISION_TIME_MS, + System.currentTimeMillis() + QueryTileUtils.MILLISECONDS_PER_DAY); + Assert.assertFalse(QueryTileUtils.shouldShowQueryTiles()); + } + /** * Check that the next decision time is within |numOfDays| from now. * @param numOfDays Number of days to check.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabDataTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabDataTest.java index a3bd67b..343faedc 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabDataTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabDataTest.java
@@ -312,37 +312,41 @@ @SmallTest @Test public void testWebContentsStateBug_crbug_1220839() throws InterruptedException { - PersistedTabDataConfiguration.setUseTestConfig(false); - String url = mTestServer.getURL("/chrome/test/data/browsing_data/e.html"); - Tab tab = sActivityTestRule.loadUrlInNewTab(url); - final Semaphore semaphore = new Semaphore(0); - // Saving serialized CriticalPersistedTabData ensures we get a direct ByteBuffer - // which is assumed in the rest of Clank. See crbug.com/1220839 for more details. - ThreadUtils.runOnUiThreadBlocking(() -> { - CriticalPersistedTabData criticalPersistedTabData = - new CriticalPersistedTabData(tab, "", "", PARENT_ID, ROOT_ID, TIMESTAMP, - TabStateExtractor.getWebContentsState(tab), CONTENT_STATE_VERSION, - OPENER_APP_ID, THEME_COLOR, LAUNCH_TYPE_AT_CREATION, USER_AGENT_A); - PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get( - CriticalPersistedTabData.class, tab.isIncognito()); - FilePersistedTabDataStorage persistedTabDataStorage = new FilePersistedTabDataStorage(); - persistedTabDataStorage.save(tab.getId(), config.getId(), () -> { - return criticalPersistedTabData.getSerializeSupplier().get(); - }, semaphore::release); - }); - semaphore.acquire(); - ThreadUtils.runOnUiThreadBlocking(() -> { - PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get( - CriticalPersistedTabData.class, tab.isIncognito()); + try (StrictModeContext ignored = StrictModeContext.allowAllThreadPolicies()) { + PersistedTabDataConfiguration.setUseTestConfig(false); + String url = mTestServer.getURL("/chrome/test/data/browsing_data/e.html"); + Tab tab = sActivityTestRule.loadUrlInNewTab(url); + final Semaphore semaphore = new Semaphore(0); + // Saving serialized CriticalPersistedTabData ensures we get a direct ByteBuffer + // which is assumed in the rest of Clank. See crbug.com/1220839 for more details. + ThreadUtils.runOnUiThreadBlocking(() -> { + CriticalPersistedTabData criticalPersistedTabData = + new CriticalPersistedTabData(tab, "", "", PARENT_ID, ROOT_ID, TIMESTAMP, + TabStateExtractor.getWebContentsState(tab), CONTENT_STATE_VERSION, + OPENER_APP_ID, THEME_COLOR, LAUNCH_TYPE_AT_CREATION, USER_AGENT_A); + PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get( + CriticalPersistedTabData.class, tab.isIncognito()); + FilePersistedTabDataStorage persistedTabDataStorage = + new FilePersistedTabDataStorage(); + persistedTabDataStorage.save(tab.getId(), config.getId(), () -> { + return criticalPersistedTabData.getSerializeSupplier().get(); + }, semaphore::release); + }); + semaphore.acquire(); + ThreadUtils.runOnUiThreadBlocking(() -> { + PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get( + CriticalPersistedTabData.class, tab.isIncognito()); - ByteBuffer serialized = - CriticalPersistedTabData.restore(tab.getId(), tab.isIncognito()); - CriticalPersistedTabData deserialized = new CriticalPersistedTabData( - tab, serialized, config.getStorage(), config.getId()); - Assert.assertEquals( - EXPECTED_TITLE, deserialized.getWebContentsState().getDisplayTitleFromState()); - Assert.assertEquals(url, deserialized.getWebContentsState().getVirtualUrlFromState()); - }); + ByteBuffer serialized = + CriticalPersistedTabData.restore(tab.getId(), tab.isIncognito()); + CriticalPersistedTabData deserialized = new CriticalPersistedTabData( + tab, serialized, config.getStorage(), config.getId()); + Assert.assertEquals(EXPECTED_TITLE, + deserialized.getWebContentsState().getDisplayTitleFromState()); + Assert.assertEquals( + url, deserialized.getWebContentsState().getVirtualUrlFromState()); + }); + } } @UiThreadTest
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2UnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2UnitTest.java index 52c0d34..49dc5db 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2UnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerV2UnitTest.java
@@ -16,8 +16,8 @@ import static org.chromium.chrome.browser.offlinepages.indicator.OfflineIndicatorControllerV2.STATUS_INDICATOR_WAIT_BEFORE_HIDE_DURATION_MS; import static org.chromium.chrome.browser.offlinepages.indicator.OfflineIndicatorControllerV2.setMockElapsedTimeSupplier; +import android.app.Activity; import android.content.Context; -import android.content.res.Resources; import android.os.Handler; import org.junit.After; @@ -27,6 +27,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.annotation.Config; import org.chromium.base.TimeUtils; @@ -46,10 +47,6 @@ @Config(manifest = Config.NONE) public class OfflineIndicatorControllerV2UnitTest { @Mock - private Context mContext; - @Mock - private Resources mResources; - @Mock private StatusIndicatorCoordinator mStatusIndicator; @Mock private ConnectivityDetector mConnectivityDetector; @@ -64,22 +61,23 @@ @Mock private OfflineIndicatorMetricsDelegate mMetricsDelegate; + private Context mContext; private ObservableSupplierImpl<Boolean> mIsUrlBarFocusedSupplier = new ObservableSupplierImpl<>(); private OfflineIndicatorControllerV2 mController; private long mElapsedTimeMs; + private String mOfflineString; + private String mOnlineString; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = Robolectric.buildActivity(Activity.class).get(); + mContext.setTheme(org.chromium.chrome.tab_ui.R.style.Theme_BrowserUI_DayNight); - when(mContext.getResources()).thenReturn(mResources); - when(mContext.getTheme()).thenReturn(null); - when(mContext.getString(R.string.offline_indicator_v2_offline_text)).thenReturn("Offline"); - when(mContext.getString(R.string.offline_indicator_v2_back_online_text)) - .thenReturn("Online"); - when(mContext.getDrawable(anyInt())).thenReturn(null); - when(mResources.getColor(anyInt(), any())).thenReturn(0); + mOfflineString = mContext.getString(R.string.offline_indicator_v2_offline_text); + mOnlineString = mContext.getString(R.string.offline_indicator_v2_back_online_text); + when(mCanAnimateNativeBrowserControls.get()).thenReturn(true); TimeUtilsJni.TEST_HOOKS.setInstanceForTesting(mTimeUtils); when(mTimeUtils.getTimeTicksNowUs()).thenReturn(0L); @@ -109,7 +107,7 @@ public void testShowsStatusIndicatorWhenOffline() { // Show. changeConnectionState(true); - verify(mStatusIndicator).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator).show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /** @@ -127,7 +125,7 @@ // after that. First, verify the #updateContent() call. final ArgumentCaptor<Runnable> endAnimationCaptor = ArgumentCaptor.forClass(Runnable.class); verify(mStatusIndicator) - .updateContent(eq("Online"), any(), anyInt(), anyInt(), anyInt(), + .updateContent(eq(mOnlineString), any(), anyInt(), anyInt(), anyInt(), endAnimationCaptor.capture()); // Simulate browser controls animation ending. endAnimationCaptor.getValue().run(); @@ -164,8 +162,8 @@ captor.getValue().run(); // #updateContent() should be called since the cool-down is complete. verify(mStatusIndicator) - .updateContent( - eq("Online"), any(), anyInt(), anyInt(), anyInt(), any(Runnable.class)); + .updateContent(eq(mOnlineString), any(), anyInt(), anyInt(), anyInt(), + any(Runnable.class)); } /** @@ -175,7 +173,8 @@ public void testCoolDown_Show() { // First, show. changeConnectionState(true); - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); // Advance time so we can hide. advanceTimeByMs(STATUS_INDICATOR_COOLDOWN_BEFORE_NEXT_ACTION_MS); // Now, hide. @@ -186,7 +185,8 @@ changeConnectionState(true); // Cool-down should prevent it from showing and post a runnable for after the time is up. // times(1) because it's been already called once above, no new calls. - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class); verify(mHandler).postDelayed( captor.capture(), eq(STATUS_INDICATOR_COOLDOWN_BEFORE_NEXT_ACTION_MS - 1000L)); @@ -195,7 +195,8 @@ advanceTimeByMs(4000); captor.getValue().run(); // #show() should be called since the cool-down is complete. - verify(mStatusIndicator, times(2)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(2)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /** @@ -213,7 +214,8 @@ changeConnectionState(true); // Cool-down should prevent it from showing and post a runnable for after the time is up. // times(1) because it's been already called once above, no new calls. - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class); verify(mHandler).postDelayed( captor.capture(), eq(STATUS_INDICATOR_COOLDOWN_BEFORE_NEXT_ACTION_MS - 1000L)); @@ -228,7 +230,8 @@ advanceTimeByMs(2000); captor.getValue().run(); // Still times(1), no new call after the last one. - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /** @@ -241,11 +244,12 @@ // Now show, at least try. changeConnectionState(true); // Shouldn't show because the omnibox is focused. - verify(mStatusIndicator, never()).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, never()) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); // Should show once unfocused. mIsUrlBarFocusedSupplier.set(false); - verify(mStatusIndicator).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator).show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /** @@ -259,13 +263,15 @@ // Now show, at least try. changeConnectionState(true); // Shouldn't show because the omnibox is focused. - verify(mStatusIndicator, never()).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, never()) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); // Now, simulate going back online. changeConnectionState(false); // Unfocusing shouldn't cause a show because we're not offline. mIsUrlBarFocusedSupplier.set(false); - verify(mStatusIndicator, never()).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, never()) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /** @@ -282,7 +288,8 @@ advanceTimeByMs(1000); changeConnectionState(true); // times(1) because it's been already called once above, no new calls. - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class); verify(mHandler).postDelayed( captor.capture(), eq(STATUS_INDICATOR_COOLDOWN_BEFORE_NEXT_ACTION_MS - 1000L)); @@ -293,10 +300,12 @@ advanceTimeByMs(4000); captor.getValue().run(); // Still times(1), no new calls. The indicator shouldn't show since the omnibox is focused. - verify(mStatusIndicator, times(1)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(1)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); // Should show once unfocused. mIsUrlBarFocusedSupplier.set(false); - verify(mStatusIndicator, times(2)).show(eq("Offline"), any(), anyInt(), anyInt(), anyInt()); + verify(mStatusIndicator, times(2)) + .show(eq(mOfflineString), any(), anyInt(), anyInt(), anyInt()); } /**
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java index 38a6902..a2202fe3 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/survey/ChromeSurveyControllerFlowTest.java
@@ -67,6 +67,7 @@ import org.chromium.components.messages.MessageBannerProperties; import org.chromium.components.messages.MessageDispatcher; import org.chromium.components.messages.MessageIdentifier; +import org.chromium.components.messages.MessageScopeType; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.modelutil.PropertyModel; @@ -773,7 +774,8 @@ private void assertSurveyMessagesEnqueued() { verify(mMessageDispatcher) - .enqueueWindowScopedMessage(mMessagePropertyCaptor.capture(), eq(false)); + .enqueueMessage(mMessagePropertyCaptor.capture(), eq(mMockWebContent), + eq(MessageScopeType.NAVIGATION), eq(false)); Assert.assertNotNull("Message captor is null.", mMessagePropertyCaptor.getValue()); }
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc index eb8725d..5583b3a 100644 --- a/chrome/browser/ash/accessibility/dictation_browsertest.cc +++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -67,6 +67,10 @@ const char* kLocaleMetric = "Accessibility.CrosDictation.Language"; const char* kOnDeviceSpeechMetric = "Accessibility.CrosDictation.UsedOnDeviceSpeech"; +const char* kMacroSucceededMetric = + "Accessibility.CrosDictation.MacroSucceeded"; +const char* kMacroFailedMetric = "Accessibility.CrosDictation.MacroFailed"; +const int kInputTextViewMetricValue = 1; static const char* kEnglishDictationCommands[] = { "delete", @@ -1137,6 +1141,22 @@ SendFinalSpeechResultAndWaitForTextAreaValue(" PaStE ", "StarStar"); } +// Ensures that a metric is recorded when a macro succeeds. +// TODO(1247299): Add a test to ensure that a metric is recorded when a macro +// fails. +IN_PROC_BROWSER_TEST_P(DictationCommandsExtensionTest, MacroSucceededMetric) { + base::HistogramTester histogram_tester_; + SendFinalSpeechResultAndWaitForTextAreaValue( + "Vega is the brightest star in Lyra", + "Vega is the brightest star in Lyra"); + histogram_tester_.ExpectUniqueSample(/*name=*/kMacroSucceededMetric, + /*sample=*/kInputTextViewMetricValue, + /*expected_bucket_count=*/1); + histogram_tester_.ExpectUniqueSample(/*name=*/kMacroFailedMetric, + /*sample=*/kInputTextViewMetricValue, + /*expected_bucket_count=*/0); +} + // TODO(1266696): DictationCommandsExtensionTest.Help is failing on // linux-chromeos-debug. #if BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ash/app_restore/app_launch_handler.cc b/chrome/browser/ash/app_restore/app_launch_handler.cc index f68de35..5405bbf 100644 --- a/chrome/browser/ash/app_restore/app_launch_handler.cc +++ b/chrome/browser/ash/app_restore/app_launch_handler.cc
@@ -128,13 +128,33 @@ } }); +#if !defined(OFFICIAL_BUILD) + base::TimeDelta current_delay = delay_; +#endif for (const auto& app_id : app_ids) { // Chrome browser web pages are restored separately, so we don't need to // launch browser windows. if (app_id == extension_misc::kChromeAppId) continue; +#if !defined(OFFICIAL_BUILD) + // Make shift-click on the launch button launch apps with a delay. This + // allows developers to simulate delayed launch behaviors with ARC apps. + // TODO(crbug.com/1281685): Remove before feature launch. + if (delay_.is_zero()) { + LaunchApp(cache->GetAppType(app_id), app_id); + } else { + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&AppLaunchHandler::LaunchApp, base::Unretained(this), + cache->GetAppType(app_id), app_id), + current_delay); + current_delay += delay_; + } +#else + DCHECK(delay_.is_zero()); LaunchApp(cache->GetAppType(app_id), app_id); +#endif } }
diff --git a/chrome/browser/ash/app_restore/app_launch_handler.h b/chrome/browser/ash/app_restore/app_launch_handler.h index 8958998c..729cea4 100644 --- a/chrome/browser/ash/app_restore/app_launch_handler.h +++ b/chrome/browser/ash/app_restore/app_launch_handler.h
@@ -46,6 +46,8 @@ ::app_restore::RestoreData* restore_data() { return restore_data_.get(); } + void set_delay(base::TimeDelta delay) { delay_ = delay; } + protected: // Note: LaunchApps does not launch browser windows, this is handled // separately. @@ -80,6 +82,10 @@ Profile* const profile_; std::unique_ptr<::app_restore::RestoreData> restore_data_; + + // A delay between apps launch time. This should only be set in non official + // builds. + base::TimeDelta delay_; }; } // namespace ash
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc index f092bc4..de72d31 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc
@@ -63,7 +63,9 @@ int call_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); EXPECT_EQ(0, call_count); EXPECT_FALSE(observer.active()); @@ -75,7 +77,9 @@ int call_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); EXPECT_EQ(1, call_count); EXPECT_TRUE(observer.active());
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc index 05fc40cb..50a81de 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc
@@ -78,7 +78,9 @@ int call_count = 0; observer.StartObserving( profile(), - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); EXPECT_EQ(0, call_count); EXPECT_FALSE(observer.active()); @@ -126,7 +128,9 @@ int call_count = 0; observer.StartObserving( profile(), - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); observer.OnPreAnr(mojom::AnrType::PROCESS); EXPECT_EQ(1, call_count); @@ -159,7 +163,9 @@ int call_count = 0; observer.StartObserving( profile(), - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); observer.OnPreAnr(mojom::AnrType::FOREGROUND_SERVICE); EXPECT_EQ(1, call_count);
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc index 06bd4ada..43b0769 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer_unittest.cc
@@ -19,7 +19,9 @@ int call_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); EXPECT_EQ(0, call_count); EXPECT_FALSE(observer.active()); @@ -33,7 +35,9 @@ int call_count = 0; observer.StartObserving( nullptr /* context */, - base::BindRepeating([](int* counter) { (*counter)++; }, &call_count)); + base::BindRepeating( + [](int* counter, const ash::ThrottleObserver*) { (*counter)++; }, + &call_count)); EXPECT_EQ(1, call_count); EXPECT_TRUE(observer.active());
diff --git a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc index be97145..8477ef04 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc +++ b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.h" #include "ash/constants/app_types.h" +#include "ash/public/cpp/window_properties.h" +#include "chrome/browser/ash/crostini/crostini_util.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" @@ -20,9 +22,23 @@ aura::Window* lost_active) { if (!gained_active) return false; + // Return true if the gained_active window is a Crostini app. - return gained_active->GetProperty(aura::client::kAppType) == - static_cast<int>(ash::AppType::CROSTINI_APP); + if (gained_active->GetProperty(aura::client::kAppType) == + static_cast<int>(ash::AppType::CROSTINI_APP)) { + return true; + } + + // Return false if the window is not a Chrome app (e.g. the browser, ARC app.) + if (gained_active->GetProperty(aura::client::kAppType) != + static_cast<int>(ash::AppType::CHROME_APP)) { + return false; + } + + // Return true if the ID is the terminal app's. Note that the terminal app is + // a Chrome app although it provides a Crostini shell. + const std::string* app_id = gained_active->GetProperty(ash::kAppIDKey); + return app_id && *app_id == crostini::kCrostiniTerminalSystemAppId; } } // namespace crostini
diff --git a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer_unittest.cc b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer_unittest.cc index 24e96993..e0f6ab4 100644 --- a/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer_unittest.cc +++ b/chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer_unittest.cc
@@ -5,7 +5,9 @@ #include "chrome/browser/ash/crostini/throttle/crostini_active_window_throttle_observer.h" #include "ash/constants/app_types.h" +#include "ash/public/cpp/window_properties.h" #include "base/test/task_environment.h" +#include "chrome/browser/ash/crostini/crostini_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/test/test_window_delegate.h" @@ -41,10 +43,24 @@ std::unique_ptr<aura::Window> chrome_window( aura::test::CreateTestWindowWithDelegate(&dummy_delegate, 2, gfx::Rect(), nullptr)); + std::unique_ptr<aura::Window> terminal_window( + aura::test::CreateTestWindowWithDelegate(&dummy_delegate, 3, gfx::Rect(), + nullptr)); + std::unique_ptr<aura::Window> chrome_app_window( + aura::test::CreateTestWindowWithDelegate(&dummy_delegate, 4, gfx::Rect(), + nullptr)); crostini_window->SetProperty(aura::client::kAppType, static_cast<int>(ash::AppType::CROSTINI_APP)); chrome_window->SetProperty(aura::client::kAppType, static_cast<int>(ash::AppType::BROWSER)); + terminal_window->SetProperty(aura::client::kAppType, + static_cast<int>(ash::AppType::CHROME_APP)); + terminal_window->SetProperty<std::string>( + ash::kAppIDKey, crostini::kCrostiniTerminalSystemAppId); + chrome_app_window->SetProperty(aura::client::kAppType, + static_cast<int>(ash::AppType::CHROME_APP)); + chrome_app_window->SetProperty<std::string>(ash::kAppIDKey, + "this_is_another_chrome_app"); EXPECT_FALSE(observer()->active()); @@ -54,10 +70,21 @@ crostini_window.get(), chrome_window.get()); EXPECT_TRUE(observer()->active()); + // Test observer is active for terminal window. + observer()->OnWindowActivated( + CrostiniActiveWindowThrottleObserver::ActivationReason::INPUT_EVENT, + terminal_window.get(), crostini_window.get()); + EXPECT_TRUE(observer()->active()); + // Test observer is inactive for non-crostini window. observer()->OnWindowActivated( CrostiniActiveWindowThrottleObserver::ActivationReason::INPUT_EVENT, - chrome_window.get(), crostini_window.get()); + chrome_window.get(), terminal_window.get()); + EXPECT_FALSE(observer()->active()); + + observer()->OnWindowActivated( + CrostiniActiveWindowThrottleObserver::ActivationReason::INPUT_EVENT, + chrome_app_window.get(), chrome_window.get()); EXPECT_FALSE(observer()->active()); // Test observer is inactive for null gained_active window.
diff --git a/chrome/browser/ash/login/demo_mode/demo_session.cc b/chrome/browser/ash/login/demo_mode/demo_session.cc index f089bca..8309e1e 100644 --- a/chrome/browser/ash/login/demo_mode/demo_session.cc +++ b/chrome/browser/ash/login/demo_mode/demo_session.cc
@@ -617,8 +617,11 @@ } void DemoSession::OnAppUpdate(const apps::AppUpdate& update) { - if (update.AppId() != GetHighlightsAppId()) + if (update.AppId() != GetHighlightsAppId() || + !(update.GetPriorReadiness() == apps::Readiness::kUnknown && + update.GetReadiness() == apps::Readiness::kReady)) { return; + } Profile* profile = ProfileManager::GetActiveUserProfile(); DCHECK(profile); apps::AppServiceProxyFactory::GetForProfile(profile)->LaunchAppWithParams(
diff --git a/chrome/browser/ash/throttle_observer.cc b/chrome/browser/ash/throttle_observer.cc index f6ecc15..c6fd571 100644 --- a/chrome/browser/ash/throttle_observer.cc +++ b/chrome/browser/ash/throttle_observer.cc
@@ -50,7 +50,7 @@ return; active_ = active; if (callback_) - callback_.Run(); + callback_.Run(this); } std::string ThrottleObserver::GetDebugDescription() const {
diff --git a/chrome/browser/ash/throttle_observer.h b/chrome/browser/ash/throttle_observer.h index 563da88..9580137 100644 --- a/chrome/browser/ash/throttle_observer.h +++ b/chrome/browser/ash/throttle_observer.h
@@ -21,7 +21,8 @@ // calls the ObserverStateChangedCallback when there is a change. class ThrottleObserver { public: - using ObserverStateChangedCallback = base::RepeatingCallback<void()>; + using ObserverStateChangedCallback = + base::RepeatingCallback<void(const ThrottleObserver*)>; enum class PriorityLevel { UNKNOWN, LOW, NORMAL, IMPORTANT, CRITICAL }; ThrottleObserver(PriorityLevel level, const std::string& name);
diff --git a/chrome/browser/ash/throttle_observer_unittest.cc b/chrome/browser/ash/throttle_observer_unittest.cc index 49354c50..ab9363e2 100644 --- a/chrome/browser/ash/throttle_observer_unittest.cc +++ b/chrome/browser/ash/throttle_observer_unittest.cc
@@ -26,7 +26,7 @@ ThrottleObserverTest(const ThrottleObserverTest&) = delete; ThrottleObserverTest& operator=(const ThrottleObserverTest&) = delete; - void OnObserverStateChanged() { notify_count_++; } + void OnObserverStateChanged(const ThrottleObserver*) { notify_count_++; } protected: ThrottleObserver* observer() { return &observer_; }
diff --git a/chrome/browser/ash/throttle_service.cc b/chrome/browser/ash/throttle_service.cc index 5de716b..ff55f1a2 100644 --- a/chrome/browser/ash/throttle_service.cc +++ b/chrome/browser/ash/throttle_service.cc
@@ -25,7 +25,7 @@ } void ThrottleService::NotifyObserverStateChangedForTesting() { - OnObserverStateChanged(); + OnObserverStateChanged(nullptr); } void ThrottleService::SetObserversForTesting( @@ -60,10 +60,14 @@ if (enforced_level_ == level) return; enforced_level_ = level; - OnObserverStateChanged(); + OnObserverStateChanged(nullptr); } -void ThrottleService::OnObserverStateChanged() { +void ThrottleService::OnObserverStateChanged( + const ThrottleObserver* changed_observer) { + DVLOG(1) << "OnObserverStateChanged: changed throttle observer is " + << (changed_observer ? changed_observer->name() : "none"); + ThrottleObserver::PriorityLevel max_level = ThrottleObserver::PriorityLevel::LOW; ThrottleObserver* effective_observer = nullptr;
diff --git a/chrome/browser/ash/throttle_service.h b/chrome/browser/ash/throttle_service.h index d03ab8df..8a21aa7 100644 --- a/chrome/browser/ash/throttle_service.h +++ b/chrome/browser/ash/throttle_service.h
@@ -63,7 +63,7 @@ void AddObserver(std::unique_ptr<ThrottleObserver> observer); void StartObservers(); void StopObservers(); - void OnObserverStateChanged(); + void OnObserverStateChanged(const ThrottleObserver* changed_observer); void SetLevel(ThrottleObserver::PriorityLevel level); // This function is called whenever there is a new level to which the
diff --git a/chrome/browser/browser_switcher/browser_switcher_navigation_throttle_unittest.cc b/chrome/browser/browser_switcher/browser_switcher_navigation_throttle_unittest.cc index b5e5626..11e0fcad 100644 --- a/chrome/browser/browser_switcher/browser_switcher_navigation_throttle_unittest.cc +++ b/chrome/browser/browser_switcher/browser_switcher_navigation_throttle_unittest.cc
@@ -47,6 +47,7 @@ MOCK_METHOD1(SetExternalGreylist, void(ParsedXml&&)); MOCK_CONST_METHOD0(GetIeemSitelist, const RuleSet*()); MOCK_CONST_METHOD0(GetExternalSitelist, const RuleSet*()); + MOCK_CONST_METHOD0(GetExternalGreylist, const RuleSet*()); }; } // namespace
diff --git a/chrome/browser/browser_switcher/browser_switcher_prefs.cc b/chrome/browser/browser_switcher/browser_switcher_prefs.cc index e11133f3..12898ff 100644 --- a/chrome/browser/browser_switcher/browser_switcher_prefs.cc +++ b/chrome/browser/browser_switcher/browser_switcher_prefs.cc
@@ -66,6 +66,16 @@ : priority_(original_rule.size()), inverted_(base::StartsWith(original_rule, "!")) {} +RawRuleSet::RawRuleSet() = default; +RawRuleSet::RawRuleSet(RawRuleSet&&) = default; +RawRuleSet::~RawRuleSet() = default; + +RawRuleSet::RawRuleSet(std::vector<std::string>&& sitelist_, + std::vector<std::string>&& greylist_) + : sitelist(std::move(sitelist_)), greylist(std::move(greylist_)) {} + +RawRuleSet& RawRuleSet::operator=(RawRuleSet&& that) = default; + RuleSet::RuleSet() = default; RuleSet::RuleSet(RuleSet&&) = default; RuleSet::~RuleSet() = default;
diff --git a/chrome/browser/browser_switcher/browser_switcher_prefs.h b/chrome/browser/browser_switcher/browser_switcher_prefs.h index 2075c41..1973f6a 100644 --- a/chrome/browser/browser_switcher/browser_switcher_prefs.h +++ b/chrome/browser/browser_switcher/browser_switcher_prefs.h
@@ -52,7 +52,23 @@ std::string spec_without_port_; }; -// A single "rule" from a sitelist or greylist. +// A named pair type, for rules that haven't been pre-processed and +// canonicalized (e.g., just loaded from prefs or policies). +struct RawRuleSet { + RawRuleSet(); + RawRuleSet(std::vector<std::string>&& sitelist, + std::vector<std::string>&& greylist); + RawRuleSet(RawRuleSet&&); + ~RawRuleSet(); + + RawRuleSet& operator=(RawRuleSet&&); + + std::vector<std::string> sitelist; + std::vector<std::string> greylist; +}; + +// A single "rule" from a sitelist or greylist, after pre-processing and +// canonicalization. class Rule { public: explicit Rule(base::StringPiece original_rule); @@ -85,7 +101,7 @@ bool inverted_; }; -// A named pair type. +// A named pair type, for pre-processed and canonicalized rules. struct RuleSet { RuleSet(); RuleSet(RuleSet&&); @@ -243,6 +259,10 @@ std::vector<std::string> chrome_params_; #endif + // Rules from the BrowserSwitcherUrlList and BrowserSwitcherGreylist policies. + // + // Other rules are parsed from XML, and stored in BrowserSwitcherSitelist + // instead of here. RuleSet rules_; // List of prefs (pref names) that changed since the last policy refresh.
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_win.cc b/chrome/browser/browser_switcher/browser_switcher_service_win.cc index dd16a8f7..ce18993 100644 --- a/chrome/browser/browser_switcher/browser_switcher_service_win.cc +++ b/chrome/browser/browser_switcher/browser_switcher_service_win.cc
@@ -58,6 +58,7 @@ &prefs.GetRules(), sitelist->GetIeemSitelist(), sitelist->GetExternalSitelist(), + sitelist->GetExternalGreylist(), }; MergedRuleSet rules; for (const RuleSet* source : source_rulesets) {
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc index 2b3026f4..336d398 100644 --- a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc +++ b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
@@ -73,14 +73,6 @@ return reason; } -bool RulePriorityCompare(const Rule* a, const Rule* b) { - if (!a) - return true; - if (!b) - return false; - return a->priority() < b->priority(); -} - // Rules that are just an "*" are the most simple: they just return true all the // time, regardless of ParsingMode. class WildcardRule : public Rule { @@ -416,14 +408,18 @@ } NoCopyUrl no_copy_url(url); + const RuleSet* rulesets[] = {&prefs_->GetRules(), &ieem_sitelist_, + &external_sitelist_, &external_greylist_}; - const Rule* reason_to_go = std::max( - { - MatchUrlToList(no_copy_url, prefs_->GetRules().sitelist, true), - MatchUrlToList(no_copy_url, ieem_sitelist_.sitelist, true), - MatchUrlToList(no_copy_url, external_sitelist_.sitelist, true), - }, - RulePriorityCompare); + const Rule* reason_to_go = nullptr; + for (const RuleSet* rules : rulesets) { + const Rule* match = MatchUrlToList(no_copy_url, rules->sitelist, + /*contains_inverted_matches=*/true); + if (!match) + continue; + if (!reason_to_go || match->priority() > reason_to_go->priority()) + reason_to_go = match; + } // If sitelists don't match, no need to check the greylists. if (!reason_to_go) @@ -431,13 +427,15 @@ if (reason_to_go->inverted()) return {kStay, kSitelist, reason_to_go}; - const Rule* reason_to_stay = std::max( - { - MatchUrlToList(no_copy_url, prefs_->GetRules().greylist, false), - MatchUrlToList(no_copy_url, ieem_sitelist_.greylist, false), - MatchUrlToList(no_copy_url, external_sitelist_.greylist, false), - }, - RulePriorityCompare); + const Rule* reason_to_stay = nullptr; + for (const RuleSet* rules : rulesets) { + const Rule* match = MatchUrlToList(no_copy_url, rules->greylist, + /*contains_inverted_matches=*/false); + if (!match) + continue; + if (!reason_to_stay || match->priority() > reason_to_stay->priority()) + reason_to_stay = match; + } if (reason_to_go->priority() <= 1 && reason_to_stay) return {kStay, kGreylist, reason_to_stay}; @@ -474,7 +472,7 @@ UMA_HISTOGRAM_COUNTS_100000("BrowserSwitcher.ExternalGreylistSize", parsed_xml.rules.size()); - StoreRules(&external_sitelist_.greylist, parsed_xml.rules); + StoreRules(&external_greylist_.greylist, parsed_xml.rules); original_external_greylist_ = std::move(parsed_xml.rules); } @@ -486,6 +484,10 @@ return &external_sitelist_; } +const RuleSet* BrowserSwitcherSitelistImpl::GetExternalGreylist() const { + return &external_greylist_; +} + void BrowserSwitcherSitelistImpl::StoreRules( std::vector<std::unique_ptr<Rule>>* dst, const std::vector<std::string>& src) { @@ -506,7 +508,7 @@ // ParsingMode changed, re-canonicalize rules. StoreRules(&ieem_sitelist_.sitelist, original_ieem_sitelist_); StoreRules(&external_sitelist_.sitelist, original_external_sitelist_); - StoreRules(&external_sitelist_.greylist, original_external_greylist_); + StoreRules(&external_greylist_.greylist, original_external_greylist_); } } @@ -515,7 +517,7 @@ return false; const RuleSet* rulesets[] = {&prefs_->GetRules(), &ieem_sitelist_, - &external_sitelist_}; + &external_sitelist_, &external_greylist_}; for (const RuleSet* rules : rulesets) { if (!rules->sitelist.empty() || !rules->greylist.empty()) return true;
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist.h b/chrome/browser/browser_switcher/browser_switcher_sitelist.h index cfb3571..4c68c65 100644 --- a/chrome/browser/browser_switcher/browser_switcher_sitelist.h +++ b/chrome/browser/browser_switcher/browser_switcher_sitelist.h
@@ -7,6 +7,7 @@ #include "base/memory/raw_ptr.h" #include "chrome/browser/browser_switcher/browser_switcher_prefs.h" +#include "chrome/browser/browser_switcher/ieem_sitelist_parser.h" #include "components/prefs/pref_change_registrar.h" class GURL; @@ -14,7 +15,6 @@ namespace browser_switcher { class BrowserSwitcherPrefs; -class ParsedXml; // Return a Rule object for |original_rule|, with the right type depending on // |parsing_mode|. @@ -87,6 +87,7 @@ virtual const RuleSet* GetIeemSitelist() const = 0; virtual const RuleSet* GetExternalSitelist() const = 0; + virtual const RuleSet* GetExternalGreylist() const = 0; }; // Manages the sitelist configured by the administrator for @@ -108,6 +109,7 @@ void SetExternalGreylist(ParsedXml&& greylist) override; const RuleSet* GetIeemSitelist() const override; const RuleSet* GetExternalSitelist() const override; + const RuleSet* GetExternalGreylist() const override; private: // Returns true if there are any rules configured. @@ -127,6 +129,7 @@ RuleSet ieem_sitelist_; RuleSet external_sitelist_; + RuleSet external_greylist_; // Original values used for canonicalization. std::vector<std::string> original_ieem_sitelist_;
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc b/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc index 1ae02497..d1ad1da4 100644 --- a/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc +++ b/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc
@@ -39,6 +39,13 @@ return std::make_unique<base::Value>(values); } +void CheckRuleSetSize(size_t expected_sitelist_size, + size_t expected_greylist_size, + const RuleSet* ruleset) { + ASSERT_EQ(expected_sitelist_size, ruleset->sitelist.size()); + ASSERT_EQ(expected_greylist_size, ruleset->greylist.size()); +} + } // namespace class BrowserSwitcherSitelistTest : public testing::TestWithParam<ParsingMode> { @@ -476,11 +483,10 @@ sitelist()->SetExternalGreylist(std::move(external_greylist)); // Check initial state. - ASSERT_EQ(1u, prefs()->GetRules().sitelist.size()); - ASSERT_EQ(1u, prefs()->GetRules().greylist.size()); - ASSERT_EQ(1u, sitelist()->GetIeemSitelist()->sitelist.size()); - ASSERT_EQ(1u, sitelist()->GetExternalSitelist()->sitelist.size()); - ASSERT_EQ(1u, sitelist()->GetExternalSitelist()->greylist.size()); + CheckRuleSetSize(1u, 1u, &prefs()->GetRules()); + CheckRuleSetSize(1u, 0u, sitelist()->GetIeemSitelist()); + CheckRuleSetSize(1u, 0u, sitelist()->GetExternalSitelist()); + CheckRuleSetSize(0u, 1u, sitelist()->GetExternalGreylist()); if (parsing_mode() == ParsingMode::kDefault) { EXPECT_EQ("google.com", prefs()->GetRules().sitelist[0]->ToString()); EXPECT_EQ("mail.google.com", prefs()->GetRules().greylist[0]->ToString()); @@ -489,7 +495,7 @@ EXPECT_EQ("yahoo.com", sitelist()->GetExternalSitelist()->sitelist[0]->ToString()); EXPECT_EQ("duckduckgo.com", - sitelist()->GetExternalSitelist()->greylist[0]->ToString()); + sitelist()->GetExternalGreylist()->greylist[0]->ToString()); } else { EXPECT_EQ("*://google.com/", prefs()->GetRules().sitelist[0]->ToString()); EXPECT_EQ("*://mail.google.com/", @@ -499,7 +505,7 @@ EXPECT_EQ("*://yahoo.com/", sitelist()->GetExternalSitelist()->sitelist[0]->ToString()); EXPECT_EQ("*://duckduckgo.com/", - sitelist()->GetExternalSitelist()->greylist[0]->ToString()); + sitelist()->GetExternalGreylist()->greylist[0]->ToString()); } // Change parsing mode. @@ -514,11 +520,10 @@ base::RunLoop().RunUntilIdle(); // Check that canonicalization changed. - ASSERT_EQ(1u, prefs()->GetRules().sitelist.size()); - ASSERT_EQ(1u, prefs()->GetRules().greylist.size()); - ASSERT_EQ(1u, sitelist()->GetIeemSitelist()->sitelist.size()); - ASSERT_EQ(1u, sitelist()->GetExternalSitelist()->sitelist.size()); - ASSERT_EQ(1u, sitelist()->GetExternalSitelist()->greylist.size()); + CheckRuleSetSize(1u, 1u, &prefs()->GetRules()); + CheckRuleSetSize(1u, 0u, sitelist()->GetIeemSitelist()); + CheckRuleSetSize(1u, 0u, sitelist()->GetExternalSitelist()); + CheckRuleSetSize(0u, 1u, sitelist()->GetExternalGreylist()); if (new_parsing_mode == ParsingMode::kDefault) { EXPECT_EQ("google.com", prefs()->GetRules().sitelist[0]->ToString()); EXPECT_EQ("mail.google.com", prefs()->GetRules().greylist[0]->ToString()); @@ -527,7 +532,7 @@ EXPECT_EQ("yahoo.com", sitelist()->GetExternalSitelist()->sitelist[0]->ToString()); EXPECT_EQ("duckduckgo.com", - sitelist()->GetExternalSitelist()->greylist[0]->ToString()); + sitelist()->GetExternalGreylist()->greylist[0]->ToString()); } else { EXPECT_EQ("*://google.com/", prefs()->GetRules().sitelist[0]->ToString()); EXPECT_EQ("*://mail.google.com/", @@ -537,7 +542,7 @@ EXPECT_EQ("*://yahoo.com/", sitelist()->GetExternalSitelist()->sitelist[0]->ToString()); EXPECT_EQ("*://duckduckgo.com/", - sitelist()->GetExternalSitelist()->greylist[0]->ToString()); + sitelist()->GetExternalGreylist()->greylist[0]->ToString()); } }
diff --git a/chrome/browser/browser_switcher/ieem_sitelist_parser_browsertest.cc b/chrome/browser/browser_switcher/ieem_sitelist_parser_unittest.cc similarity index 92% rename from chrome/browser/browser_switcher/ieem_sitelist_parser_browsertest.cc rename to chrome/browser/browser_switcher/ieem_sitelist_parser_unittest.cc index 767de7f..14bd1d6 100644 --- a/chrome/browser/browser_switcher/ieem_sitelist_parser_browsertest.cc +++ b/chrome/browser/browser_switcher/ieem_sitelist_parser_unittest.cc
@@ -8,9 +8,9 @@ #include "base/callback_helpers.h" #include "base/memory/scoped_refptr.h" #include "base/run_loop.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "content/public/test/browser_test.h" +#include "base/test/task_environment.h" #include "services/data_decoder/public/cpp/safe_xml_parser.h" +#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h" #include "testing/gtest/include/gtest/gtest.h" namespace browser_switcher { @@ -36,24 +36,28 @@ } // namespace -class IeemSitelistParserTest : public InProcessBrowserTest { +class IeemSitelistParserTest : public testing::Test { public: IeemSitelistParserTest() = default; ~IeemSitelistParserTest() override = default; + + private: + base::test::SingleThreadTaskEnvironment task_environment_; + data_decoder::test::InProcessDataDecoder data_decoder_; }; -IN_PROC_BROWSER_TEST_F(IeemSitelistParserTest, BadXml) { +TEST_F(IeemSitelistParserTest, BadXml) { TestParseXml("", ParsedXml({}, "Invalid XML: bad content")); TestParseXml("thisisnotxml", ParsedXml({}, "Invalid XML: bad content")); } -IN_PROC_BROWSER_TEST_F(IeemSitelistParserTest, BadXmlParsed) { +TEST_F(IeemSitelistParserTest, BadXmlParsed) { TestParseXml("<bogus></bogus>", ParsedXml({}, "Invalid XML root element")); TestParseXml("<rules version=\"424\"><unknown></unknown></rules>", ParsedXml({}, absl::nullopt)); } -IN_PROC_BROWSER_TEST_F(IeemSitelistParserTest, V1OnlyBogusElements) { +TEST_F(IeemSitelistParserTest, V1OnlyBogusElements) { std::string xml = "<rules version=\"424\">" "<unknown><more><docMode><domain>ignore.com</domain></docMode>" @@ -63,7 +67,7 @@ TestParseXml(xml, ParsedXml({}, absl::nullopt)); } -IN_PROC_BROWSER_TEST_F(IeemSitelistParserTest, V1Full) { +TEST_F(IeemSitelistParserTest, V1Full) { std::string xml = "<rules version=\"424\"><unknown><more><docMode><domain>ignore" "</domain></docMode></more><emie><domain>ignoretoo.com<path>/ignored_path" @@ -134,7 +138,7 @@ TestParseXml(xml, ParsedXml(std::move(expected_sitelist), absl::nullopt)); } -IN_PROC_BROWSER_TEST_F(IeemSitelistParserTest, V2Full) { +TEST_F(IeemSitelistParserTest, V2Full) { // Very subtle issue in the closing element for rules. std::string xml = "<site-list version=\"205\"><!-- File creation header -->"
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index bf9f80e0..3c23dc83 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -57,6 +57,7 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" +#include "base/timer/timer.h" #include "base/values.h" #include "build/build_config.h" #include "chrome/app/chrome_command_ids.h" @@ -837,32 +838,105 @@ return true; } -struct SmoothnessTrackerInfo { - absl::optional<ui::ThroughputTracker> tracker; - ui::ThroughputTrackerHost::ReportCallback callback; - bool stopping = false; +class DisplaySmoothnessTracker { + public: + using ReportCallback = base::OnceCallback<void( + const cc::FrameSequenceMetrics::CustomReportData& frame_data, + std::vector<int>&& throughput)>; + + DisplaySmoothnessTracker() = default; + DisplaySmoothnessTracker(const DisplaySmoothnessTracker&) = delete; + DisplaySmoothnessTracker& operator=(const DisplaySmoothnessTracker&) = delete; + ~DisplaySmoothnessTracker() = default; + + // Return true if tracking is started successfully. + bool Start(int64_t display_id, + base::TimeDelta throughput_interval, + ui::ThroughputTrackerHost::ReportCallback callback) { + auto* root_window = ash::Shell::GetRootWindowForDisplayId(display_id); + if (!root_window) + return false; + + DCHECK(root_window_tracker_.windows().empty()); + root_window_tracker_.Add(root_window); + + tracker_ = + root_window->layer()->GetCompositor()->RequestNewThroughputTracker(); + tracker_->Start(std::move(callback)); + + throughtput_timer_.Start(FROM_HERE, throughput_interval, this, + &DisplaySmoothnessTracker::OnThroughputTimerFired); + + return true; + } + + void Stop(ReportCallback callback) { + stopping_ = true; + throughtput_timer_.Stop(); + callback_ = std::move(callback); + tracker_->Stop(); + } + + ReportCallback TakeCallback() { return std::move(callback_); } + std::vector<int> TakeThroughput() { return std::move(throughput_); } + + bool stopping() const { return stopping_; } + bool has_error() const { return has_error_; } + + private: + void OnThroughputTimerFired() { + auto windows = root_window_tracker_.windows(); + if (windows.empty()) { + // RootWindow is gone. This could happen when display is reconfigured + // during the test run. Treat it as error since no meaningful smoothness + // data would be captured in such case. + LOG(ERROR) << "Unable to collect throughput because underlying " + "RootWindow is gone."; + has_error_ = true; + throughtput_timer_.Stop(); + return; + } + + DCHECK_EQ(windows.size(), 1u); + auto* root_window = windows[0]; + throughput_.push_back( + root_window->GetHost()->compositor()->GetAverageThroughput()); + } + + aura::WindowTracker root_window_tracker_; + absl::optional<ui::ThroughputTracker> tracker_; + ReportCallback callback_; + bool stopping_ = false; + bool has_error_ = false; + + base::RepeatingTimer throughtput_timer_; + std::vector<int> throughput_; }; -using DisplaySmoothnessTrackerInfos = std::map<int64_t, SmoothnessTrackerInfo>; -DisplaySmoothnessTrackerInfos* GetDisplaySmoothnessTrackerInfos() { - static base::NoDestructor<DisplaySmoothnessTrackerInfos> trackers; + +using DisplaySmoothnessTrackers = + std::map<int64_t, std::unique_ptr<DisplaySmoothnessTracker>>; +DisplaySmoothnessTrackers* GetDisplaySmoothnessTrackers() { + static base::NoDestructor<DisplaySmoothnessTrackers> trackers; return trackers.get(); } // Forwards frame rate data to the callback for |display_id| and resets. void ForwardFrameRateDataAndReset( int64_t display_id, - const cc::FrameSequenceMetrics::CustomReportData& data) { - auto* infos = GetDisplaySmoothnessTrackerInfos(); - auto it = infos->find(display_id); - DCHECK(it != infos->end()); - DCHECK(it->second.callback); + const cc::FrameSequenceMetrics::CustomReportData& frame_data) { + auto* trackers = GetDisplaySmoothnessTrackers(); + auto it = trackers->find(display_id); + DCHECK(it != trackers->end()); + + auto throughput = it->second->TakeThroughput(); // Moves the callback out and erases the mapping first to allow new tracking // for |display_id| to start before |callback| run returns. // See https://crbug.com/1098886. - auto callback = std::move(it->second.callback); - infos->erase(it); - std::move(callback).Run(data); + auto callback = it->second->TakeCallback(); + DCHECK(callback); + trackers->erase(it); + std::move(callback).Run(frame_data, std::move(throughput)); } std::string ResolutionToString( @@ -5015,24 +5089,26 @@ Error(base::StrCat({"Invalid display id: ", *params->display_id}))); } - auto* infos = GetDisplaySmoothnessTrackerInfos(); - if (infos->find(display_id) != infos->end()) { + auto* trackers = GetDisplaySmoothnessTrackers(); + if (trackers->find(display_id) != trackers->end()) { return RespondNow( Error(base::StrCat({"Smoothness already tracked for display: ", base::NumberToString(display_id)}))); } - auto* root_window = ash::Shell::GetRootWindowForDisplayId(display_id); - if (!root_window) { + base::TimeDelta throughput_interval = kDefaultThroughputInterval; + if (params->throughput_interval_ms) + throughput_interval = base::Milliseconds(*params->throughput_interval_ms); + + auto tracker = std::make_unique<DisplaySmoothnessTracker>(); + if (!tracker->Start( + display_id, throughput_interval, + base::BindOnce(&ForwardFrameRateDataAndReset, display_id))) { return RespondNow(Error(base::StrCat( {"Invalid display_id; no root window found for the display id ", base::NumberToString(display_id)}))); } - - auto tracker = - root_window->layer()->GetCompositor()->RequestNewThroughputTracker(); - tracker.Start(base::BindOnce(&ForwardFrameRateDataAndReset, display_id)); - (*infos)[display_id].tracker = std::move(tracker); + (*trackers)[display_id] = std::move(tracker); return RespondNow(NoArguments()); } @@ -5055,21 +5131,23 @@ Error(base::StrCat({"Invalid display id: ", *params->display_id}))); } - auto* infos = GetDisplaySmoothnessTrackerInfos(); - auto it = infos->find(display_id); - if (it == infos->end()) { + auto* trackers = GetDisplaySmoothnessTrackers(); + auto it = trackers->find(display_id); + if (it == trackers->end()) { return RespondNow( Error(base::StrCat({"Smoothness is not tracked for display: ", base::NumberToString(display_id)}))); } - if (it->second.stopping) { + if (it->second->stopping()) { return RespondNow(Error( base::StrCat({"stopSmoothnessTracking already called for display: ", base::NumberToString(display_id)}))); } - // ThroughputTracker::Stop does not invoke the report callback when + const bool has_error = it->second->has_error(); + + // DisplaySmoothnessTracker::Stop does not invoke the report callback when // gpu-process crashes and has no valid data to report. Start a timer to // handle this case. timeout_timer_.Start( @@ -5077,30 +5155,36 @@ base::BindOnce(&AutotestPrivateStopSmoothnessTrackingFunction::OnTimeOut, this, display_id)); - it->second.callback = base::BindOnce( - &AutotestPrivateStopSmoothnessTrackingFunction::OnReportData, this); - it->second.stopping = true; - it->second.tracker->Stop(); + it->second->Stop(base::BindOnce( + &AutotestPrivateStopSmoothnessTrackingFunction::OnReportData, this)); // Trigger a repaint after ThroughputTracker::Stop() to generate a frame to // ensure the tracker report will be sent back. auto* root_window = ash::Shell::GetRootWindowForDisplayId(display_id); root_window->GetHost()->compositor()->ScheduleFullRedraw(); + if (has_error) { + return RespondNow(Error(base::StrCat( + {"Error happened during smoothness collection for display: ", + base::NumberToString(display_id)}))); + } + return did_respond() ? AlreadyResponded() : RespondLater(); } void AutotestPrivateStopSmoothnessTrackingFunction::OnReportData( - const cc::FrameSequenceMetrics::CustomReportData& data) { + const cc::FrameSequenceMetrics::CustomReportData& frame_data, + std::vector<int>&& throughput) { if (did_respond()) return; timeout_timer_.AbandonAndStop(); - api::autotest_private::ThroughputTrackerAnimationData result_data; - result_data.frames_expected = data.frames_expected; - result_data.frames_produced = data.frames_produced; - result_data.jank_count = data.jank_count; + api::autotest_private::DisplaySmoothnessData result_data; + result_data.frames_expected = frame_data.frames_expected; + result_data.frames_produced = frame_data.frames_produced; + result_data.jank_count = frame_data.jank_count; + result_data.throughput = std::move(throughput); Respond(ArgumentList( api::autotest_private::StopSmoothnessTracking::Results::Create( @@ -5113,11 +5197,11 @@ return; // Clean up the non-functional tracker. - auto* infos = GetDisplaySmoothnessTrackerInfos(); - auto it = infos->find(display_id); - if (it == infos->end()) + auto* trackers = GetDisplaySmoothnessTrackers(); + auto it = trackers->find(display_id); + if (it == trackers->end()) return; - infos->erase(it); + trackers->erase(it); Respond(Error("Smoothness is not available")); }
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h index e750ffa0..cb4889e 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
@@ -1340,6 +1340,10 @@ class AutotestPrivateStartSmoothnessTrackingFunction : public ExtensionFunction { public: + // Default sampling interval to collect display smoothness. + static constexpr base::TimeDelta kDefaultThroughputInterval = + base::Seconds(5); + DECLARE_EXTENSION_FUNCTION("autotestPrivate.startSmoothnessTracking", AUTOTESTPRIVATE_STARTSMOOTHNESSTRACKING) @@ -1357,7 +1361,9 @@ ~AutotestPrivateStopSmoothnessTrackingFunction() override; ResponseAction Run() override; - void OnReportData(const cc::FrameSequenceMetrics::CustomReportData& data); + void OnReportData( + const cc::FrameSequenceMetrics::CustomReportData& frame_data, + std::vector<int>&& throughput); void OnTimeOut(int64_t display_id); base::OneShotTimer timeout_timer_;
diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/browser/client_hints/client_hints_browsertest.cc index efa5899..94ec9e6 100644 --- a/chrome/browser/client_hints/client_hints_browsertest.cc +++ b/chrome/browser/client_hints/client_hints_browsertest.cc
@@ -1548,7 +1548,9 @@ third_party_client_hints_count_seen()); } -IN_PROC_BROWSER_TEST_F(ClientHintsBrowserTest, DelegateToFoo_MetaName) { +// Flaky on all platforms. https://crbug.com/1285479. +IN_PROC_BROWSER_TEST_F(ClientHintsBrowserTest, + DISABLED_DelegateToFoo_MetaName) { // Go to a page which delegates hints to `foo.com`. GURL gurl = meta_name_accept_ch_delegation_foo(); SetClientHintExpectationsOnMainFrame(false); @@ -1560,9 +1562,8 @@ EXPECT_EQ(expected_default_third_party_client_hints_number * 7, third_party_client_hints_count_seen()); } -// Flaky on all platforms. https://crbug.com/1285479. IN_PROC_BROWSER_TEST_F(ClientHintsBrowserTestWithThirdPartyDelegation, - DISABLED_DelegateToFoo_MetaName) { + DelegateToFoo_MetaName) { // Go to a page which delegates hints to `foo.com`. GURL gurl = meta_name_accept_ch_delegation_foo(); SetClientHintExpectationsOnMainFrame(false);
diff --git a/chrome/browser/download/internal/android/java/res/layout/list_selection_handle_view.xml b/chrome/browser/download/internal/android/java/res/layout/list_selection_handle_view.xml index 296df3f..784e7a4 100644 --- a/chrome/browser/download/internal/android/java/res/layout/list_selection_handle_view.xml +++ b/chrome/browser/download/internal/android/java/res/layout/list_selection_handle_view.xml
@@ -16,7 +16,7 @@ android:scaleType="center" android:background="@drawable/list_item_icon_modern_bg" android:visibility="gone" - app:tint="?attr/default_icon_color_inverse" + app:tint="@macro/default_icon_color_inverse" app:layout_gravity="center" tools:ignore="ContentDescription" />
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 3306c9a..fb0a4345 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -389,6 +389,8 @@ "api/tabs/windows_util.h", "api/top_sites/top_sites_api.cc", "api/top_sites/top_sites_api.h", + "api/web_authentication_proxy/value_conversions.cc", + "api/web_authentication_proxy/value_conversions.h", "api/web_authentication_proxy/web_authentication_proxy_api.cc", "api/web_authentication_proxy/web_authentication_proxy_api.h", "api/web_authentication_proxy/web_authentication_proxy_service.cc", @@ -779,6 +781,7 @@ "//chrome/browser/safe_browsing", "//chrome/browser/safe_browsing:metrics_collector", "//chrome/browser/web_applications", + "//components/cbor:cbor", "//components/safe_browsing/content/browser", "//components/safe_browsing/core/browser:safe_browsing_metrics_collector", "//components/site_engagement/core/mojom:mojo_bindings",
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.cc b/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.cc new file mode 100644 index 0000000..6780ede9 --- /dev/null +++ b/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.cc
@@ -0,0 +1,321 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h" + +#include "base/base64url.h" +#include "base/strings/string_piece.h" +#include "base/values.h" +#include "components/cbor/reader.h" +#include "device/fido/attestation_object.h" +#include "device/fido/authenticator_data.h" +#include "device/fido/authenticator_selection_criteria.h" +#include "device/fido/fido_constants.h" +#include "device/fido/fido_transport_protocol.h" +#include "device/fido/fido_types.h" +#include "device/fido/public_key_credential_descriptor.h" +#include "device/fido/public_key_credential_params.h" +#include "device/fido/public_key_credential_rp_entity.h" +#include "device/fido/public_key_credential_user_entity.h" +#include "url/gurl.h" + +namespace extensions { + +namespace { + +std::string Base64UrlEncode(base::span<const uint8_t> input) { + // Byte strings, which appear in the WebAuthn IDL as ArrayBuffer or + // ByteSource, are base64url-encoded without trailing '=' padding. + std::string output; + base::Base64UrlEncode( + base::StringPiece(reinterpret_cast<const char*>(input.data()), + input.size()), + base::Base64UrlEncodePolicy::OMIT_PADDING, &output); + return output; +} + +bool Base64UrlDecode(base::StringPiece input, std::string* output) { + return base::Base64UrlDecode( + input, base::Base64UrlDecodePolicy::DISALLOW_PADDING, output); +} + +std::vector<uint8_t> ToByteVector(const std::string& in) { + const uint8_t* in_ptr = reinterpret_cast<const uint8_t*>(in.data()); + return std::vector<uint8_t>(in_ptr, in_ptr + in.size()); +} + +base::Value ToValue(const device::PublicKeyCredentialRpEntity& relying_party) { + base::Value value(base::Value::Type::DICTIONARY); + value.SetStringKey("id", relying_party.id); + if (relying_party.name) { + value.SetKey("name", base::Value(*relying_party.name)); + } + if (relying_party.icon_url) { + value.SetKey("icon_url", base::Value(relying_party.icon_url->spec())); + } + return value; +} + +base::Value ToValue(const device::PublicKeyCredentialUserEntity& user) { + base::Value value(base::Value::Type::DICTIONARY); + value.SetStringKey("id", Base64UrlEncode(user.id)); + if (user.name) { + value.SetKey("name", base::Value(*user.name)); + } + if (user.icon_url) { + value.SetKey("icon_url", base::Value(user.icon_url->spec())); + } + if (user.display_name) { + value.SetKey("display_name", base::Value(*user.display_name)); + } + return value; +} + +base::Value ToValue( + const device::PublicKeyCredentialParams::CredentialInfo& params) { + base::Value value(base::Value::Type::DICTIONARY); + switch (params.type) { + case device::CredentialType::kPublicKey: + value.SetKey("type", base::Value(device::kPublicKey)); + } + value.SetIntKey("algorithm", params.algorithm); + return value; +} + +base::Value ToValue(const device::PublicKeyCredentialDescriptor& descriptor) { + base::Value value(base::Value::Type::DICTIONARY); + switch (descriptor.credential_type) { + case device::CredentialType::kPublicKey: + value.SetKey("type", base::Value(device::kPublicKey)); + } + value.SetStringKey("id", Base64UrlEncode(descriptor.id)); + std::vector<base::Value> transports; + for (const device::FidoTransportProtocol& transport : descriptor.transports) { + transports.emplace_back(base::Value(ToString(transport))); + } + value.SetKey("transports", base::Value(std::move(transports))); + return value; +} + +base::Value ToValue( + const device::AuthenticatorAttachment& authenticator_attachment) { + switch (authenticator_attachment) { + case device::AuthenticatorAttachment::kAny: + return base::Value(); + case device::AuthenticatorAttachment::kCrossPlatform: + return base::Value("cross-platform"); + case device::AuthenticatorAttachment::kPlatform: + return base::Value("platform"); + } +} + +base::Value ToValue( + const device::ResidentKeyRequirement& resident_key_requirement) { + switch (resident_key_requirement) { + case device::ResidentKeyRequirement::kDiscouraged: + return base::Value("discouraged"); + case device::ResidentKeyRequirement::kPreferred: + return base::Value("preferred"); + case device::ResidentKeyRequirement::kRequired: + return base::Value("required"); + } +} + +base::Value ToValue( + const device::UserVerificationRequirement& user_verification_requirement) { + switch (user_verification_requirement) { + case device::UserVerificationRequirement::kDiscouraged: + return base::Value("discouraged"); + case device::UserVerificationRequirement::kPreferred: + return base::Value("preferred"); + case device::UserVerificationRequirement::kRequired: + return base::Value("required"); + } +} + +base::Value ToValue( + const device::AuthenticatorSelectionCriteria& authenticator_selection) { + base::Value value(base::Value::Type::DICTIONARY); + absl::optional<std::string> attachment; + value.SetKey("authenticatorAttachment", + ToValue(authenticator_selection.authenticator_attachment)); + value.SetKey("residentKey", ToValue(authenticator_selection.resident_key)); + value.SetKey("userVerification", + ToValue(authenticator_selection.user_verification_requirement)); + return value; +} + +base::Value ToValue(const device::AttestationConveyancePreference& + attestation_conveyance_preference) { + switch (attestation_conveyance_preference) { + case device::AttestationConveyancePreference::kNone: + return base::Value("none"); + case device::AttestationConveyancePreference::kIndirect: + return base::Value("indirect"); + case device::AttestationConveyancePreference::kDirect: + return base::Value("direct"); + case device::AttestationConveyancePreference::kEnterpriseApprovedByBrowser: + case device::AttestationConveyancePreference:: + kEnterpriseIfRPListedOnAuthenticator: + return base::Value("enterprise"); + } +} + +absl::optional<device::FidoTransportProtocol> FidoTransportProtocolFromValue( + const base::Value& value) { + if (!value.is_string()) { + return absl::nullopt; + } + return device::ConvertToFidoTransportProtocol(value.GetString()); +} + +absl::optional<device::AuthenticatorAttachment> +AuthenticatorAttachmentFromValue(const base::Value& value) { + if (!value.is_none() && !value.is_string()) { + return absl::nullopt; + } + if (value.is_none()) { + return device::AuthenticatorAttachment::kAny; + } + const std::string& attachment_name = value.GetString(); + if (attachment_name == "platform") { + return device::AuthenticatorAttachment::kPlatform; + } else if (attachment_name == "cross-platform") { + return device::AuthenticatorAttachment::kPlatform; + } + return absl::nullopt; +} + +} // namespace + +base::Value ToValue( + const blink::mojom::PublicKeyCredentialCreationOptionsPtr& options) { + base::Value value(base::Value::Type::DICTIONARY); + value.SetKey("rp", ToValue(options->relying_party)); + value.SetKey("user", ToValue(options->user)); + value.SetStringKey("challenge", Base64UrlEncode(options->challenge)); + std::vector<base::Value> public_key_parameters; + for (const device::PublicKeyCredentialParams::CredentialInfo& params : + options->public_key_parameters) { + public_key_parameters.push_back(ToValue(params)); + } + value.SetKey("pubKeyCredParams", + base::Value(std::move(public_key_parameters))); + std::vector<base::Value> exclude_credentials; + for (const device::PublicKeyCredentialDescriptor& descriptor : + options->exclude_credentials) { + exclude_credentials.push_back(ToValue(descriptor)); + } + value.SetKey("excludeCredentials", + base::Value(std::move(exclude_credentials))); + if (options->authenticator_selection) { + value.SetKey("authenticatorSelection", + ToValue(*options->authenticator_selection)); + } + value.SetKey("attestation", ToValue(options->attestation)); + + // TODO(https://crbug.com/1231802): Serialize extensions. + + return value; +} + +blink::mojom::MakeCredentialAuthenticatorResponsePtr FromValue( + const base::Value& value) { + if (!value.is_dict()) { + return nullptr; + } + + const std::string* type = value.FindStringKey("type"); + if (!type || *type != device::kPublicKey) { + return nullptr; + } + + auto response = blink::mojom::MakeCredentialAuthenticatorResponse::New(); + response->info = blink::mojom::CommonCredentialInfo::New(); + + const std::string* id = value.FindStringKey("id"); + if (!id) { + return nullptr; + } + response->info->id = *id; + const std::string* raw_id_b64url = value.FindStringKey("rawId"); + if (!id) { + return nullptr; + } + std::string raw_id_string; + if (!Base64UrlDecode(*raw_id_b64url, &raw_id_string)) { + return nullptr; + } + response->info->raw_id = ToByteVector(raw_id_string); + + const base::Value* authenticator_attachment_value = + value.FindKey("authenticatorAttachment"); + if (!authenticator_attachment_value) { + return nullptr; + } + absl::optional<device::AuthenticatorAttachment> authenticator_attachment = + AuthenticatorAttachmentFromValue(*authenticator_attachment_value); + if (!authenticator_attachment) { + return nullptr; + } + response->authenticator_attachment = *authenticator_attachment; + + const base::Value* response_dict = value.FindDictKey("response"); + if (!response_dict) { + return nullptr; + } + + const std::string* client_data_json_b64url = + response_dict->FindStringKey("clientDataJSON"); + if (!client_data_json_b64url) { + return nullptr; + } + std::string client_data_json; + if (!Base64UrlDecode(*client_data_json_b64url, &client_data_json)) { + return nullptr; + } + response->info->client_data_json = ToByteVector(client_data_json); + + const std::string* attestation_object_b64url = + response_dict->FindStringKey("attestationObject"); + if (!attestation_object_b64url) { + return nullptr; + } + std::string attestation_object_bytes; + if (!Base64UrlDecode(*attestation_object_b64url, &attestation_object_bytes)) { + return nullptr; + } + absl::optional<cbor::Value> attestation_object_cbor = cbor::Reader::Read( + base::as_bytes(base::make_span(attestation_object_bytes))); + if (!attestation_object_cbor) { + return nullptr; + } + absl::optional<device::AttestationObject> attestation_object = + device::AttestationObject::Parse(*attestation_object_cbor); + if (!attestation_object) { + return nullptr; + } + response->attestation_object = ToByteVector(attestation_object_bytes); + response->info->authenticator_data = + attestation_object->authenticator_data().SerializeToByteArray(); + + const base::Value* transports = response_dict->FindListKey("transports"); + if (!transports) { + return nullptr; + } + for (const base::Value& transport_name : transports->GetList()) { + absl::optional<device::FidoTransportProtocol> transport = + FidoTransportProtocolFromValue(transport_name); + if (!transport) { + return nullptr; + } + response->transports.push_back(*transport); + } + + // TODO(https://crbug.com/1231802): Parse getClientExtensionResults(). + + return response; +} + +} // namespace extensions
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h b/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h new file mode 100644 index 0000000..c8e21b5 --- /dev/null +++ b/chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h
@@ -0,0 +1,41 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_EXTENSIONS_API_WEB_AUTHENTICATION_PROXY_VALUE_CONVERSIONS_H_ +#define CHROME_BROWSER_EXTENSIONS_API_WEB_AUTHENTICATION_PROXY_VALUE_CONVERSIONS_H_ + +#include "base/values.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h" + +namespace extensions { + +// Converts a `PublicKeyCredentialCreationOptions` into a `base::Value`, which +// can be JSON serialized and included in an +// `webAuthenticationProxy.onCreateRequest` event. +// +// The output conforms to the WebAuthn `PublicKeyCredentialCreationOptions` +// dictionary IDL, but with all ArrayBuffer-valued attributes represented as +// base64URL-encoded strings instead. +// (https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptions) +// +// TODO(crbug.com/1231802): Reference serialization method once available. Also +// update the IDL docs at that point. +base::Value ToValue( + const blink::mojom::PublicKeyCredentialCreationOptionsPtr& options); + +// Converts a `base::Value` encoding a WebAuthn +// `PublicKeyCredential` instance into an equivalent +// `MakeCredentialAuthenticatorResponse`. +// +// The input is expected to be a JSON-serialized `PublicKeyCredential` in which +// ArrayBuffer-valued attributes are replaced by base64URL-encoded strings. +// +// TODO(crbug.com/1231802): Reference serialization method once available. Also +// update the IDL docs at that point. +blink::mojom::MakeCredentialAuthenticatorResponsePtr FromValue( + const base::Value& value); + +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_API_WEB_AUTHENTICATION_PROXY_VALUE_CONVERSIONS_H_
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.cc b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.cc index d1f1d8f..387ea93 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.cc +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.cc
@@ -50,6 +50,31 @@ return RespondNow(NoArguments()); } +WebAuthenticationProxyCompleteCreateRequestFunction:: + WebAuthenticationProxyCompleteCreateRequestFunction() = default; +WebAuthenticationProxyCompleteCreateRequestFunction:: + ~WebAuthenticationProxyCompleteCreateRequestFunction() = default; + +ExtensionFunction::ResponseAction +WebAuthenticationProxyCompleteCreateRequestFunction::Run() { + DCHECK(extension()); + auto params = + api::web_authentication_proxy::CompleteCreateRequest::Params::Create( + args()); + EXTENSION_FUNCTION_VALIDATE(params.get()); + WebAuthenticationProxyService* proxy_service = + WebAuthenticationProxyServiceFactory::GetForBrowserContext( + browser_context()); + if (proxy_service->GetActiveRequestProxy() != extension()) { + return RespondNow(Error("Invalid sender")); + } + std::string error; + if (!proxy_service->CompleteCreateRequest(params->details, &error)) { + return RespondNow(Error(error)); + } + return RespondNow(NoArguments()); +} + WebAuthenticationProxyCompleteIsUvpaaRequestFunction:: WebAuthenticationProxyCompleteIsUvpaaRequestFunction() = default; WebAuthenticationProxyCompleteIsUvpaaRequestFunction:: @@ -68,8 +93,7 @@ if (proxy_service->GetActiveRequestProxy() != extension()) { return RespondNow(Error("Invalid sender")); } - if (!proxy_service->CompleteIsUvpaaRequest(params->details.request_id, - params->details.is_uvpaa)) { + if (!proxy_service->CompleteIsUvpaaRequest(params->details)) { return RespondNow(Error("Invalid request id")); } return RespondNow(NoArguments());
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.h b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.h index a439a3a2..adc98600 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.h +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_api.h
@@ -36,6 +36,20 @@ WEB_AUTHENTICATION_PROXY_DETACH) }; +class WebAuthenticationProxyCompleteCreateRequestFunction + : public ExtensionFunction { + public: + WebAuthenticationProxyCompleteCreateRequestFunction(); + + protected: + ~WebAuthenticationProxyCompleteCreateRequestFunction() override; + + // ExtensionFunction: + ResponseAction Run() override; + DECLARE_EXTENSION_FUNCTION("webAuthenticationProxy.completeCreateRequest", + WEB_AUTHENTICATION_PROXY_COMPLETE_CREATE_REQUEST) +}; + class WebAuthenticationProxyCompleteIsUvpaaRequestFunction : public ExtensionFunction { public:
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_apitest.cc b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_apitest.cc index f8469224..2c7f2a0 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_apitest.cc +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_apitest.cc
@@ -10,11 +10,16 @@ #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" namespace extensions { namespace { +MATCHER_P(IsDomError, name, "") { + return arg.error.find(name) != std::string::npos; +} + class WebAuthenticationProxyApiTest : public ExtensionApiTest { protected: void SetUpOnMainThread() override { @@ -38,6 +43,25 @@ .ExtractBool(); } + content::EvalJsResult NavigateAndCallMakeCredential() { + if (!ui_test_utils::NavigateToURL( + browser(), https_test_server_.GetURL("/page.html"))) { + ADD_FAILURE() << "Failed to navigate to test URL"; + } + constexpr char kMakeCredentialJs[] = + R"((async () => { + let credential = await navigator.credentials.create({publicKey: { + rp: {'name': 'A'}, + challenge: new ArrayBuffer(), + user: {displayName : 'A', name: 'A', id: new ArrayBuffer()}, + pubKeyCredParams: [], + }}); + return credential.id; + })();)"; + return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(), + kMakeCredentialJs); + } + base::FilePath extension_dir_; net::EmbeddedTestServer https_test_server_{ net::EmbeddedTestServer::TYPE_HTTPS}; @@ -143,5 +167,71 @@ EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); } +IN_PROC_BROWSER_TEST_F(WebAuthenticationProxyApiTest, MakeCredential) { + SetJsTestName("makeCredential"); + ResultCatcher result_catcher; + + ExtensionTestMessageListener ready_listener("ready", false); + ASSERT_TRUE(LoadExtension(extension_dir_)) << message_; + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + // base64url('test') = 'dGVzdA'. This matches the credential ID passed to + // `MAKE_CREDENTIAL_RESPONSE_JSON ` in the JS test. + constexpr char kCredentialId[] = "dGVzdA"; + EXPECT_EQ(NavigateAndCallMakeCredential().ExtractString(), kCredentialId); + EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); +} + +IN_PROC_BROWSER_TEST_F(WebAuthenticationProxyApiTest, MakeCredentialError) { + SetJsTestName("makeCredentialError"); + ResultCatcher result_catcher; + + ExtensionTestMessageListener ready_listener("ready", false); + ExtensionTestMessageListener error_listener("nextError", true); + ASSERT_TRUE(LoadExtension(extension_dir_)) << message_; + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + // The JS side listens for DOMError names to pass to completeCreateRequest(). + // The DOMError observed by the client-side JS that made the WebAuthn request + // should match. + constexpr const char* kDomErrorNames[] = { + // clang-format off + "NotAllowedError", + "InvalidStateError", + "OperationError", + "NotSupportedError", + "AbortError", + "NotReadableError", + "SecurityError", + }; + for (auto* error_name : kDomErrorNames) { + ASSERT_TRUE(error_listener.WaitUntilSatisfied()); + error_listener.Reply(error_name); + error_listener.Reset(); + EXPECT_THAT(NavigateAndCallMakeCredential(), IsDomError(error_name)); + } + + // Tell the JS side to stop expecting more errors and end the test. + ASSERT_TRUE(error_listener.WaitUntilSatisfied()); + error_listener.Reply(""); + EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); +} + +IN_PROC_BROWSER_TEST_F(WebAuthenticationProxyApiTest, + MakeCredentialResolvesOnDetach) { + SetJsTestName("makeCredentialResolvesOnDetach"); + ResultCatcher result_catcher; + + ExtensionTestMessageListener ready_listener("ready", true); + ASSERT_TRUE(LoadExtension(extension_dir_)) << message_; + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + // Call makeCredential() and tell the extension that there is a result. The + // extension never resolves the request but detaches itself. + EXPECT_THAT(NavigateAndCallMakeCredential(), IsDomError("NotAllowedError")); + ready_listener.Reply(""); + EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); +} + } // namespace } // namespace extensions
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc index ca0f0af0..1c4c5c0 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc
@@ -6,17 +6,22 @@ #include <limits> +#include "base/json/json_string_value_serializer.h" #include "base/no_destructor.h" #include "base/rand_util.h" +#include "chrome/browser/extensions/api/web_authentication_proxy/value_conversions.h" #include "chrome/common/extensions/api/web_authentication_proxy.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "device/fido/public_key_credential_rp_entity.h" #include "extensions/browser/event_router.h" #include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_event_histogram_value.h" #include "extensions/browser/extension_function.h" #include "extensions/browser/extension_function_histogram_value.h" #include "extensions/browser/extension_registry_factory.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom-shared.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h" namespace extensions { @@ -24,6 +29,32 @@ int32_t NewRequestId() { return base::RandGenerator(std::numeric_limits<uint32_t>::max()) + 1; } + +absl::optional<blink::mojom::AuthenticatorStatus> +ToAuthenticatorStatusForMakeCredential(const std::string& error_name) { + constexpr std::pair<const char*, blink::mojom::AuthenticatorStatus> + kErrors[] = { + {"NotAllowedError", + blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR}, + {"InvalidStateError", + blink::mojom::AuthenticatorStatus::CREDENTIAL_EXCLUDED}, + {"OperationError", + blink::mojom::AuthenticatorStatus::PENDING_REQUEST}, + {"NotSupportedError", + blink::mojom::AuthenticatorStatus::ALGORITHM_UNSUPPORTED}, + {"AbortError", blink::mojom::AuthenticatorStatus::ABORT_ERROR}, + {"NotReadableError", + blink::mojom::AuthenticatorStatus::UNKNOWN_ERROR}, + {"SecurityError", blink::mojom::AuthenticatorStatus::INVALID_DOMAIN}, + }; + for (const auto& err : kErrors) { + if (err.first == error_name) { + return err.second; + } + } + return absl::nullopt; +} + } // namespace WebAuthenticationProxyService::WebAuthenticationProxyService( @@ -62,24 +93,83 @@ // Callers must explicitly clear the active request proxy first. DCHECK(!active_request_proxy_extension_id_) << "SetActiveRequestProxy() called with an active proxy"; + // Clearing the request proxy should have resolved all outstanding requests. + DCHECK(pending_create_callbacks_.empty()); + DCHECK(pending_is_uvpaa_callbacks_.empty()); active_request_proxy_extension_id_ = extension->id(); } -bool WebAuthenticationProxyService::CompleteIsUvpaaRequest(EventId event_id, - bool is_uvpaa) { - auto callback_it = pending_is_uvpaa_callbacks_.find(event_id); +bool WebAuthenticationProxyService::CompleteCreateRequest( + const api::web_authentication_proxy::CreateResponseDetails& details, + std::string* error_out) { + DCHECK(error_out); + auto callback_it = pending_create_callbacks_.find(details.request_id); + if (callback_it == pending_create_callbacks_.end()) { + *error_out = "Invalid requestId"; + return false; + } + CreateCallback callback = std::move(callback_it->second); + pending_create_callbacks_.erase(callback_it); + + if (details.error_name) { + absl::optional<blink::mojom::AuthenticatorStatus> status = + ToAuthenticatorStatusForMakeCredential(*details.error_name); + // TODO(https://crbug.com/1231802): Allow passing DOMErrors through the + // Authenticator interface rather than having to project them back into + // AuthenticatorStatus values, which is inherently lossy. + if (!status) { + *error_out = "Invalid CreateResponseDetails.errorName"; + return false; + } + std::move(callback).Run(*status, nullptr); + return true; + } + if (!details.response_json) { + *error_out = "Missing CreateResponseDetails.responseJson"; + return false; + } + + JSONStringValueDeserializer deserializer(*details.response_json); + std::string deserialize_error; + std::unique_ptr<base::Value> response_value = + deserializer.Deserialize(/*error_code=*/nullptr, &deserialize_error); + if (!response_value) { + *error_out = "Parsing responseJson failed: " + deserialize_error; + return false; + } + blink::mojom::MakeCredentialAuthenticatorResponsePtr response = + FromValue(*response_value); + if (!response) { + *error_out = "Invalid responseJson"; + return false; + } + + std::move(callback).Run(blink::mojom::AuthenticatorStatus::SUCCESS, + std::move(response)); + return true; +} + +bool WebAuthenticationProxyService::CompleteIsUvpaaRequest( + const api::web_authentication_proxy::IsUvpaaResponseDetails& details) { + auto callback_it = pending_is_uvpaa_callbacks_.find(details.request_id); if (callback_it == pending_is_uvpaa_callbacks_.end()) { return false; } IsUvpaaCallback callback = std::move(callback_it->second); pending_is_uvpaa_callbacks_.erase(callback_it); - std::move(callback).Run(is_uvpaa); + std::move(callback).Run(details.is_uvpaa); return true; } void WebAuthenticationProxyService::CancelPendingCallbacks() { DCHECK(IsActive()); + for (auto& pair : pending_create_callbacks_) { + std::move(pair.second) + .Run(blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR, nullptr); + } + pending_create_callbacks_.clear(); + for (auto& pair : pending_is_uvpaa_callbacks_) { std::move(pair.second).Run(/*is_uvpaa=*/false); } @@ -90,6 +180,30 @@ return active_request_proxy_extension_id_.has_value(); } +void WebAuthenticationProxyService::SignalCreateRequest( + const blink::mojom::PublicKeyCredentialCreationOptionsPtr& options_ptr, + CreateCallback callback) { + DCHECK(IsActive()); + + uint32_t request_id = NewRequestId(); + pending_create_callbacks_.emplace(request_id, std::move(callback)); + + api::web_authentication_proxy::CreateRequest request; + request.request_id = request_id; + + base::Value options_value = ToValue(options_ptr); + std::string request_json; + JSONStringValueSerializer serializer(&request.request_details_json); + CHECK(serializer.Serialize(options_value)); + + event_router_->DispatchEventToExtension( + *active_request_proxy_extension_id_, + std::make_unique<Event>( + events::WEB_AUTHENTICATION_PROXY_ON_CREATE_REQUEST, + api::web_authentication_proxy::OnCreateRequest::kEventName, + api::web_authentication_proxy::OnCreateRequest::Create(request))); +} + void WebAuthenticationProxyService::SignalIsUvpaaRequest( IsUvpaaCallback callback) { DCHECK(IsActive()); @@ -103,16 +217,14 @@ request_id = NewRequestId(); } pending_is_uvpaa_callbacks_.emplace(request_id, std::move(callback)); - base::Value request(base::Value::Type::DICTIONARY); - request.SetIntKey("requestId", request_id); - base::Value args(base::Value::Type::LIST); - args.Append(std::move(request)); + api::web_authentication_proxy::IsUvpaaRequest request; + request.request_id = request_id; event_router_->DispatchEventToExtension( *active_request_proxy_extension_id_, std::make_unique<Event>( events::WEB_AUTHENTICATION_PROXY_ON_ISUVPAA_REQUEST, api::web_authentication_proxy::OnIsUvpaaRequest::kEventName, - std::move(args).TakeList())); + api::web_authentication_proxy::OnIsUvpaaRequest::Create(request))); } void WebAuthenticationProxyService::OnExtensionUnloaded(
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h index 81b5364d..77ca7bc 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.h
@@ -8,6 +8,7 @@ #include "base/memory/raw_ptr.h" #include "base/no_destructor.h" #include "base/scoped_observation.h" +#include "chrome/common/extensions/api/web_authentication_proxy.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/web_authentication_request_proxy.h" @@ -45,13 +46,24 @@ // Unregisters the currently active request proxy extension, if any. void ClearActiveRequestProxy(); - // CompleteIsUvpaaRequest injects the result for the + // Injects the result for the + // `events::WEB_AUTHENTICATION_PROXY_CREATE_REQUEST` with `EventId` matching + // the one in `details`. + // + // Returns whether completing the request succeeded. If it didn't, `error_out` + // contains an error message. + bool CompleteCreateRequest( + const api::web_authentication_proxy::CreateResponseDetails& details, + std::string* error_out); + + // Injects the result for the // `events::WEB_AUTHENTICATION_PROXY_ON_ISUVPAA_REQUEST` event with // `event_id`. `is_uvpaa` is the result to be returned to the original caller // of the PublicKeyCredential.IsUserPlatformAuthenticatorAvailable(). // - // Returns whether an event matching `event_id` was found. - bool CompleteIsUvpaaRequest(EventId event_id, bool is_uvpaa); + // Returns whether the ID was valid. + bool CompleteIsUvpaaRequest( + const api::web_authentication_proxy::IsUvpaaResponseDetails& details); private: friend class WebAuthenticationProxyServiceFactory; @@ -64,6 +76,9 @@ // content::WebAuthnRequestProxy: bool IsActive() override; + void SignalCreateRequest( + const blink::mojom::PublicKeyCredentialCreationOptionsPtr& options, + CreateCallback callback) override; void SignalIsUvpaaRequest(IsUvpaaCallback callback) override; // ExtensionRegistryObserver: @@ -83,6 +98,7 @@ absl::optional<std::string> active_request_proxy_extension_id_; std::map<EventId, IsUvpaaCallback> pending_is_uvpaa_callbacks_; + std::map<EventId, CreateCallback> pending_create_callbacks_; }; // WebAuthenticationProxyServiceFactory creates instances of
diff --git a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc index 86c16e1..9c656b8 100644 --- a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc +++ b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc
@@ -104,9 +104,8 @@ return profile_->GetTestingPrefService()->FindPreference(path); } - const base::DictionaryValue* GetDictionary(const std::string& path) const { - return &base::Value::AsDictionaryValue( - *profile_->GetTestingPrefService()->GetDictionary(path)); + const base::Value* GetDictionary(const std::string& path) const { + return profile_->GetTestingPrefService()->GetDictionary(path); } // On devices that support per-application provisioning pre-provisioning
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java index 5d73372b..652ad81 100644 --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -753,6 +753,12 @@ public static final String QUERY_TILES_SHOW_ON_NTP = "Chrome.Querytiles.ShowOnNTP"; /** + * Keys used to store result from segmentation model of showing query tiles on NTP. + */ + public static final String QUERY_TILES_SHOW_SEGMENTATION_RESULT = + "Chrome.QueryTiles.ShowSegmentationResult"; + + /** * Keys used to store user actions for behavioral targeting of showing Start surface on startup. */ public static final String PRIMARY_ACCOUNT_SYNC = "Chrome.StartSurface.PrimaryAccountSync"; @@ -1105,6 +1111,7 @@ QUERY_TILES_NUM_RECENT_MV_TILE_CLICKS, QUERY_TILES_NUM_RECENT_QUERY_TILE_CLICKS, QUERY_TILES_SHOW_ON_NTP, + QUERY_TILES_SHOW_SEGMENTATION_RESULT, REGULAR_TAB_COUNT, SETTINGS_SAFETY_CHECK_LAST_RUN_TIMESTAMP, SETTINGS_SAFETY_CHECK_RUN_COUNTER,
diff --git a/chrome/browser/profiles/avatar_menu.cc b/chrome/browser/profiles/avatar_menu.cc index e2f4ae9..d848847 100644 --- a/chrome/browser/profiles/avatar_menu.cc +++ b/chrome/browser/profiles/avatar_menu.cc
@@ -95,8 +95,7 @@ return; } - profiles::SwitchToProfile(item.profile_path, always_create, - ProfileManager::CreateCallback()); + profiles::SwitchToProfile(item.profile_path, always_create); } void AvatarMenu::AddNewProfile(ProfileMetrics::ProfileAdd type) {
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc index beef6a5..7e1e1510e 100644 --- a/chrome/browser/profiles/profile_manager_browsertest.cc +++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -59,8 +59,6 @@ namespace { -const ProfileManager::CreateCallback kOnProfileSwitchDoNothing; - // An observer that returns back to test code after a new profile is // initialized. void OnUnblockOnProfileCreation(base::RunLoop* run_loop, @@ -566,20 +564,20 @@ EXPECT_EQ(1U, browser_list->size()); // Open a browser window for the first profile. - profiles::SwitchToProfile(path_profile1, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile1, false); EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); EXPECT_EQ(1U, browser_list->size()); EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath()); // Open a browser window for the second profile. - profiles::SwitchToProfile(path_profile2, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile2, false); content::RunAllTasksUntilIdle(); EXPECT_EQ(2U, chrome::GetTotalBrowserCount()); EXPECT_EQ(2U, browser_list->size()); EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); // Switch to the first profile without opening a new window. - profiles::SwitchToProfile(path_profile1, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile1, false); EXPECT_EQ(2U, chrome::GetTotalBrowserCount()); EXPECT_EQ(2U, browser_list->size()); @@ -615,12 +613,12 @@ EXPECT_EQ(1U, browser_list->size()); // Open a browser window for the first profile. - profiles::SwitchToProfile(path_profile1, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile1, false); EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); ASSERT_EQ(1U, browser_list->size()); EXPECT_EQ(path_profile1, browser_list->get(0)->profile()->GetPath()); // Open a browser window for the second profile. - profiles::SwitchToProfile(path_profile2, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile2, false); EXPECT_EQ(2U, chrome::GetTotalBrowserCount()); ASSERT_EQ(2U, browser_list->size()); EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); @@ -665,14 +663,14 @@ EXPECT_EQ(1U, browser_list->size()); // Open a browser window for the second profile. - profiles::SwitchToProfile(path_profile2, false, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile2, false); content::RunAllTasksUntilIdle(); EXPECT_EQ(2U, chrome::GetTotalBrowserCount()); EXPECT_EQ(2U, browser_list->size()); EXPECT_EQ(path_profile2, browser_list->get(1)->profile()->GetPath()); // Create a second window for the ephemeral profile. - profiles::SwitchToProfile(path_profile2, true, kOnProfileSwitchDoNothing); + profiles::SwitchToProfile(path_profile2, true); EXPECT_EQ(3U, chrome::GetTotalBrowserCount()); EXPECT_EQ(3U, browser_list->size());
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc index 1bfe710..4ad2a830 100644 --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc
@@ -10,6 +10,7 @@ #include <vector> #include "base/bind.h" +#include "base/callback.h" #include "base/command_line.h" #include "base/files/file_path.h" #include "base/location.h" @@ -98,6 +99,24 @@ callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); } +// Calls `profiles::OpenBrowserWindowForProfile()` only if the profile is +// initialized, and moves the callback only in this case. +void OpenBrowserWindowForProfileHelper( + base::OnceCallback<void(Profile*)>& callback, + bool always_create, + Profile* profile, + Profile::CreateStatus status) { + if (status != Profile::CREATE_STATUS_INITIALIZED) + return; + + // This function is called with `CREATE_STATUS_INITIALIZED` at most once, so + // it is fine to move the callback. + profiles::OpenBrowserWindowForProfile(std::move(callback), always_create, + /*is_new_profile=*/false, + /*unblock_extensions=*/false, profile, + status); +} + } // namespace namespace profiles { @@ -140,7 +159,7 @@ /*launch_mode_recorder=*/nullptr); } -void OpenBrowserWindowForProfile(CreateOnceCallback callback, +void OpenBrowserWindowForProfile(base::OnceCallback<void(Profile*)> callback, bool always_create, bool is_new_profile, bool unblock_extensions, @@ -198,7 +217,7 @@ if (browser) { browser->window()->Activate(); if (callback) - std::move(callback).Run(profile, Profile::CREATE_STATUS_INITIALIZED); + std::move(callback).Run(profile); return; } } @@ -210,8 +229,10 @@ // up calling LaunchBrowser and opens a new window. If for whatever reason // that fails, either something has crashed, or the observer will be cleaned // up when a different browser for this profile is opened. - if (callback) - new BrowserAddedForProfileObserver(profile, std::move(callback)); + if (callback) { + new BrowserAddedForProfileObserver( + profile, base::BindOnce(std::move(callback), profile)); + } // We already dealt with the case when |always_create| was false and a browser // existed, which means that here a browser definitely needs to be created. @@ -231,17 +252,19 @@ void SwitchToProfile(const base::FilePath& path, bool always_create, - ProfileManager::CreateCallback callback) { + base::OnceCallback<void(Profile*)> callback) { g_browser_process->profile_manager()->CreateProfileAsync( - path, base::BindRepeating(&profiles::OpenBrowserWindowForProfile, - callback, always_create, false, false)); + path, + base::BindRepeating( + &OpenBrowserWindowForProfileHelper, + // `OpenBrowserWindowForProfileHelper` is called multiple times, but + // `callback` is only called when the profile is initialized. + base::OwnedRef(std::move(callback)), always_create)); } -void SwitchToGuestProfile(ProfileManager::CreateCallback callback) { - g_browser_process->profile_manager()->CreateProfileAsync( - ProfileManager::GetGuestProfilePath(), - base::BindRepeating(&profiles::OpenBrowserWindowForProfile, callback, - false, false, false)); +void SwitchToGuestProfile(base::OnceCallback<void(Profile*)> callback) { + SwitchToProfile(ProfileManager::GetGuestProfilePath(), + /*always_create=*/false, std::move(callback)); } #endif @@ -284,7 +307,7 @@ BrowserAddedForProfileObserver::BrowserAddedForProfileObserver( Profile* profile, - CreateOnceCallback callback) + base::OnceClosure callback) : profile_(profile), callback_(std::move(callback)) { DCHECK(callback_); BrowserList::AddObserver(this); @@ -298,9 +321,8 @@ // By the time the browser is added a tab (or multiple) are about to be // added. Post the callback to the message loop so it gets executed after // the tabs are created. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback_), profile_, - Profile::CREATE_STATUS_INITIALIZED)); + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + std::move(callback_)); base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); } }
diff --git a/chrome/browser/profiles/profile_window.h b/chrome/browser/profiles/profile_window.h index 376ceb8a..358c2a6 100644 --- a/chrome/browser/profiles/profile_window.h +++ b/chrome/browser/profiles/profile_window.h
@@ -42,16 +42,12 @@ chrome::startup::IsFirstRun is_first_run, bool always_create); -// Similar to `ProfileManager::CreateCallback` but only called once. -using CreateOnceCallback = - base::OnceCallback<void(Profile*, Profile::CreateStatus)>; - // Opens a Browser for |profile|. // If |always_create| is true a window is created even if one already exists. // If |is_new_profile| is true a first run window is created. // If |unblock_extensions| is true, all extensions are unblocked. // When the browser is opened, |callback| will be run if it isn't null. -void OpenBrowserWindowForProfile(CreateOnceCallback callback, +void OpenBrowserWindowForProfile(base::OnceCallback<void(Profile*)> callback, bool always_create, bool is_new_profile, bool unblock_extensions, @@ -69,10 +65,12 @@ // opened, |callback| will be run if it isn't null. void SwitchToProfile(const base::FilePath& path, bool always_create, - ProfileManager::CreateCallback callback); + base::OnceCallback<void(Profile*)> callback = + base::OnceCallback<void(Profile*)>()); // Opens a Browser for the guest profile and runs |callback| if it isn't null. -void SwitchToGuestProfile(ProfileManager::CreateCallback callback); +void SwitchToGuestProfile(base::OnceCallback<void(Profile*)> callback = + base::OnceCallback<void(Profile*)>()); // Returns true if |profile| has potential profile switch targets, ie there's at // least one other profile available to switch to, not counting guest. This is @@ -94,7 +92,7 @@ // is created and the callback is executed. class BrowserAddedForProfileObserver : public BrowserListObserver { public: - BrowserAddedForProfileObserver(Profile* profile, CreateOnceCallback callback); + BrowserAddedForProfileObserver(Profile* profile, base::OnceClosure callback); ~BrowserAddedForProfileObserver() override; BrowserAddedForProfileObserver(const BrowserAddedForProfileObserver&) = @@ -108,7 +106,7 @@ // Profile for which the browser should be opened. raw_ptr<Profile> profile_; - CreateOnceCallback callback_; + base::OnceClosure callback_; }; } // namespace profiles
diff --git a/chrome/browser/profiles/profile_window_browsertest.cc b/chrome/browser/profiles/profile_window_browsertest.cc index 7a2b275..3769923 100644 --- a/chrome/browser/profiles/profile_window_browsertest.cc +++ b/chrome/browser/profiles/profile_window_browsertest.cc
@@ -308,7 +308,7 @@ Profile* profile = browser()->profile(); size_t num_browsers = BrowserList::GetInstance()->size(); profiles::OpenBrowserWindowForProfile( - ProfileManager::CreateCallback(), true, false, false, profile, + base::OnceCallback<void(Profile*)>(), true, false, false, profile, Profile::CreateStatus::CREATE_STATUS_INITIALIZED); base::RunLoop().RunUntilIdle(); EXPECT_EQ(num_browsers + 1, BrowserList::GetInstance()->size()); @@ -338,7 +338,7 @@ ProfilePicker::AddOnProfilePickerOpenedCallbackForTesting( run_loop.QuitClosure()); profiles::OpenBrowserWindowForProfile( - ProfileManager::CreateCallback(), true, false, false, profile, + base::OnceCallback<void(Profile*)>(), true, false, false, profile, Profile::CreateStatus::CREATE_STATUS_INITIALIZED); run_loop.Run(); EXPECT_EQ(num_browsers, BrowserList::GetInstance()->size());
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 48c1aee..2dba2d3 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -575,23 +575,20 @@ void OnProfileCreated(const GURL& link_url, const content::Referrer& referrer, - Profile* profile, - Profile::CreateStatus status) { - if (status == Profile::CREATE_STATUS_INITIALIZED) { - Browser* browser = chrome::FindLastActiveWithProfile(profile); - NavigateParams nav_params( - browser, link_url, - /* |ui::PAGE_TRANSITION_TYPED| is used rather than - |ui::PAGE_TRANSITION_LINK| since this ultimately opens the link in - another browser. This parameter is used within the tab strip model of - the browser it opens in implying a link from the active tab in the - destination browser which is not correct. */ - ui::PAGE_TRANSITION_TYPED); - nav_params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; - nav_params.referrer = referrer; - nav_params.window_action = NavigateParams::SHOW_WINDOW; - Navigate(&nav_params); - } + Profile* profile) { + Browser* browser = chrome::FindLastActiveWithProfile(profile); + NavigateParams nav_params( + browser, link_url, + /* |ui::PAGE_TRANSITION_TYPED| is used rather than + |ui::PAGE_TRANSITION_LINK| since this ultimately opens the link in + another browser. This parameter is used within the tab strip model of + the browser it opens in implying a link from the active tab in the + destination browser which is not correct. */ + ui::PAGE_TRANSITION_TYPED); + nav_params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + nav_params.referrer = referrer; + nav_params.window_action = NavigateParams::SHOW_WINDOW; + Navigate(&nav_params); } bool DoesInputFieldTypeSupportEmoji(
diff --git a/chrome/browser/resources/browser_switch/internals/app.ts b/chrome/browser/resources/browser_switch/internals/app.ts index 2d6f7078..c54ed26 100644 --- a/chrome/browser/resources/browser_switch/internals/app.ts +++ b/chrome/browser/resources/browser_switch/internals/app.ts
@@ -78,35 +78,27 @@ if (listType === 'sitelist') { cells[1].innerText = rule.startsWith('!') ? getBrowserName() : getAltBrowserName(); - cells[2].appendChild( - this.createRulesetColumnWithTooltip(rulesetName, listType)); + cells[2].appendChild(this.createRulesetColumnWithTooltip(rulesetName)); } else if (listType === 'greylist') { - cells[1].appendChild( - this.createRulesetColumnWithTooltip(rulesetName, listType)); + cells[1].appendChild(this.createRulesetColumnWithTooltip(rulesetName)); } return row; } - createRulesetColumnWithTooltip(rulesetName: string, listType: ListName): - HTMLSpanElement { + createRulesetColumnWithTooltip(rulesetName: string): HTMLSpanElement { const textSpan = document.createElement('span'); textSpan.className = 'tooltip'; textSpan.innerText = rulesetName; const tooltipSpan = document.createElement('span'); tooltipSpan.className = 'right'; - const rulesetToPolicy: Record<ListName, Record<string, string>> = { - 'sitelist': { - 'gpo': 'BrowserSwitcherUrlList', - 'ieem': 'BrowserSwitcherUseIeSitelist', - 'external': 'BrowserSwitcherExternalSitelistUrl', - }, - 'greylist': { - 'gpo': 'BrowserSwitcherUrlGreylist', - 'external': 'BrowserSwitcherExternalGreylistUrl', - } + const rulesetToPolicy: Record<string, string> = { + 'gpo': 'BrowserSwitcherUrlList', + 'ieem': 'BrowserSwitcherUseIeSitelist', + 'external_sitelist': 'BrowserSwitcherExternalSitelistUrl', + 'external_greylist': 'BrowserSwitcherExternalGreylistUrl', }; - tooltipSpan.innerText = rulesetToPolicy[listType][rulesetName]; + tooltipSpan.innerText = rulesetToPolicy[rulesetName]; textSpan.appendChild(tooltipSpan); return textSpan; }
diff --git a/chrome/browser/resources/browser_switch/internals/browser_switch_internals_proxy.ts b/chrome/browser/resources/browser_switch/internals/browser_switch_internals_proxy.ts index 1bfbcc2f6..be9969e 100644 --- a/chrome/browser/resources/browser_switch/internals/browser_switch_internals_proxy.ts +++ b/chrome/browser/resources/browser_switch/internals/browser_switch_internals_proxy.ts
@@ -30,7 +30,8 @@ export type RuleSetList = { gpo: RuleSet; ieem?: RuleSet; - external?: RuleSet; + external_sitelist?: RuleSet; + external_greylist?: RuleSet; }; export type RuleSet = {
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js index f13741f..81ec2d0 100644 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js
@@ -259,14 +259,14 @@ // TODO(crbug.com/1264544): Deal with ambiguous results here. const checkContextResult = macro.checkContext(); if (!checkContextResult.canTryAction) { - this.showMacroExecutionFailed_(transcript); + this.showMacroExecutionFailed_(macro, transcript); return; } // Try to run the macro. const runMacroResult = macro.runMacro(); if (!runMacroResult.isSuccess) { - this.showMacroExecutionFailed_(transcript); + this.showMacroExecutionFailed_(macro, transcript); return; } if (macro.getMacroName() === MacroName.LIST_COMMANDS) { @@ -409,7 +409,7 @@ /** * Shows that a macro was executed in the UI by putting a checkmark next to * the transcript. - * @param {Macro} macro + * @param {!Macro} macro * @param {string} transcript * @private */ @@ -419,6 +419,8 @@ return; } + MetricsUtils.recordMacroSucceeded(macro); + if (macro.getMacroName() === MacroName.INPUT_TEXT_VIEW || macro.getMacroName() === MacroName.NEW_LINE) { this.clearInterimText_(); @@ -435,17 +437,20 @@ * Shows a message in the UI that a command failed to execute. * TODO(crbug.com/1252037): Optionally use the MacroError to provide * additional context. + * @param {!Macro} macro * @param {string} transcript The user's spoken transcript, shown so they * understand the final speech recognized which might be helpful in * understanding why the command failed. * @private */ - showMacroExecutionFailed_(transcript) { + showMacroExecutionFailed_(macro, transcript) { if (this.chromeVoxEnabled_ || !this.commandsFeatureEnabled_) { // Using chrome.input.ime for UI causes too much verbosity with ChromeVox. return; } + MetricsUtils.recordMacroFailed(macro); + this.interimText_ = ''; // TODO(crbug.com/1252037): Finalize string and internationalization. this.inputController_.showBubble(`ⓘ Failed to execute: ` + transcript);
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/macro_names.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/macro_names.js index 3e80e9c..8a14098 100644 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/macro_names.js +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/macro_names.js
@@ -7,6 +7,10 @@ * google3/intelligence/dbw/proto/macros/user_intent.proto. * These should match semantic tags in Voice Access, see * voiceaccess_config.config and voiceaccess.patterns_template. + * These values are persisted to logs. Entries should not be renumbered and + * numeric values should never be reused. + * Ensure this enum stays in sync with the CrosDictationMacroName enum in + * tools/metrics/histograms/enums.xml. * @enum {number} */ export const MacroName = {
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/metrics_utils.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/metrics_utils.js index c8c97eb..26509d6 100644 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/metrics_utils.js +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/metrics_utils.js
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import {Macro} from './macros/macro.js'; + const SpeechRecognitionType = chrome.speechRecognitionPrivate.SpeechRecognitionType; @@ -20,6 +22,18 @@ this.speechRecognitionStartTime_ = null; } + /** @param {!Macro} macro */ + static recordMacroSucceeded(macro) { + chrome.metricsPrivate.recordSparseValue( + MetricsUtils.MACRO_SUCCEEDED_METRIC, macro.getMacroName()); + } + + /** @param {!Macro} macro */ + static recordMacroFailed(macro) { + chrome.metricsPrivate.recordSparseValue( + MetricsUtils.MACRO_FAILED_METRIC, macro.getMacroName()); + } + /** Records metrics when speech recognition starts. */ recordSpeechRecognitionStarted() { chrome.metricsPrivate.recordBoolean( @@ -80,3 +94,16 @@ */ MetricsUtils.LISTENING_DURATION_METRIC_NETWORK = 'Accessibility.CrosDictation.ListeningDuration.NetworkRecognition'; + +/** + * The metric used to record that a macro succeeded. + * @const {string} + */ +MetricsUtils.MACRO_SUCCEEDED_METRIC = + 'Accessibility.CrosDictation.MacroSucceeded'; + +/** + * The metric used to record that a macro failed. + * @const {string} + */ +MetricsUtils.MACRO_FAILED_METRIC = 'Accessibility.CrosDictation.MacroFailed';
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn index bcb54f2..d5d57889 100644 --- a/chrome/browser/resources/chromeos/login/BUILD.gn +++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -85,6 +85,15 @@ "$target_gen_dir/$existing_unconditional_files_manifest", ] input_files = [ + # Lottie animation resources + "animations/all_set.json", + "animations/downloading_apps.json", + "animations/gesture_go_back.json", + "animations/gesture_go_home.json", + "animations/gesture_hotseat_overview.json", + "animations/welcome_screen_animation.json", + + # Vector resources "images/arc_sideloading_illustration.svg", "images/browser_sync.svg", "images/device-disabled.svg",
diff --git a/chrome/browser/resources/chromeos/login/animations/all_set.json b/chrome/browser/resources/chromeos/login/animations/all_set.json new file mode 100644 index 0000000..cea3152e --- /dev/null +++ b/chrome/browser/resources/chromeos/login/animations/all_set.json
@@ -0,0 +1 @@ +{"v":"5.7.7","fr":30,"ip":0,"op":321,"w":346,"h":280,"nm":"12_You'reallset-NoLoop - 346x280","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Main Scale Null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[173,140,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[70,70,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":382,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":" 16","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-39.648,-96.013,0],"ix":2,"l":2},"a":{"a":0,"k":[-54.248,-97.763,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.958,1.833],[-2.887,0.78],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[0.958,-1.833],[3.083,-0.833],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.537,-82.028],[-57.746,-87.32],[-53.329,-95.361],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-62.708,-83.362],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-62.708,-83.362],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":169,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"mouth ref","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-34.319,-87.372,0],"ix":2,"l":2},"a":{"a":0,"k":[-34.319,-87.372,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0,0],[-1.028,-0.339]],"o":[[0.405,1.004],[0,0]],"v":[[-35.467,-88.447],[-33.171,-86.296]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"head","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":152,"s":[0],"e":[13.7]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":169,"s":[13.7],"e":[13.7]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":181,"s":[13.7],"e":[-10.3]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":197,"s":[-10.3],"e":[-10.3]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":209,"s":[-10.3],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[0],"e":[0]},{"t":293}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[-39.831,-90.23,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":62,"s":[-41.081,-89.73,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[-41.081,-89.73,0],"e":[-39.831,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":148,"s":[-39.831,-89.73,0],"e":[-39.831,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[-39.831,-89.73,0],"e":[-34.831,-88.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":169,"s":[-34.831,-88.98,0],"e":[-34.831,-88.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-34.831,-88.98,0],"e":[-36.081,-90.23,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-36.081,-90.23,0],"e":[-36.081,-90.23,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-36.081,-90.23,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":223,"s":[-41.081,-89.73,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"t":293}],"ix":2,"l":2},"a":{"a":0,"k":[-39.831,-90.23,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":[[-3.357,-2.862],[2.862,-3.357],[3.357,2.862],[-2.862,3.357]],"o":[[3.357,2.862],[-2.862,3.357],[-3.357,-2.862],[2.862,-3.357]],"v":[[-34.648,-96.308],[-33.753,-85.047],[-45.014,-84.151],[-45.91,-95.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector 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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"neck","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.665,-71.889,0],"ix":2,"l":2},"a":{"a":0,"k":[-41.665,-71.889,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":169,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"neck base","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-25.477,-48.56,0],"ix":2,"l":2},"a":{"a":0,"k":[-25.477,-48.56,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":[[-12.386,-0.414],[0,0]],"o":[[0,0],[4.627,0.055]],"v":[[-50.677,-76.752],[-32.569,-76.597]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"torso","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.647],"y":[1.029]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[0],"e":[5]},{"i":{"x":[0.598],"y":[0.761]},"o":{"x":[0.409],"y":[0.286]},"t":30,"s":[5],"e":[3.5]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.279],"y":[0.128]},"t":40,"s":[3.5],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[0]},"t":58,"s":[0],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[0],"e":[2.6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":166,"s":[2.6],"e":[2.6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":204,"s":[2.6],"e":[0]},{"t":220}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.647],"y":[1.029]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[-37.244],"e":[-11.844]},{"i":{"x":[0.505],"y":[0.403]},"o":{"x":[0.409],"y":[0.286]},"t":30,"s":[-11.844],"e":[-13.744]},{"i":{"x":[0.398],"y":[1.002]},"o":{"x":[0.626],"y":[0.068]},"t":40,"s":[-13.744],"e":[-51.844]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[1.815]},"t":58,"s":[-51.844],"e":[-51.762]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[-51.762],"e":[-50.274]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":166,"s":[-50.274],"e":[-50.274]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":204,"s":[-50.274],"e":[-51.762]},{"t":220}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.652],"y":[1.074]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[-38.283],"e":[-41.533]},{"i":{"x":[0.636],"y":[0.286]},"o":{"x":[0.512],"y":[0.111]},"t":30,"s":[-41.533],"e":[-39.533]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.186],"y":[-2.628]},"t":40,"s":[-39.533],"e":[-40.033]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[0]},"t":58,"s":[-40.033],"e":[-40.033]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[-40.033],"e":[-40.033]},{"t":220}],"ix":4}},"a":{"a":0,"k":[-37.244,-38.283,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],[0,0],[-0.392,1.882],[-0.003,0.014],[-0.054,1.477],[-0.518,2.462],[1.06,2.282]],"o":[[0,0],[1.922,0],[0.003,-0.014],[0.289,-1.449],[0.091,-2.514],[0.518,-2.462],[0,0]],"v":[[-53.445,-38.283],[-28.387,-38.283],[-24.335,-41.464],[-24.326,-41.508],[-24.179,-45.931],[-21.468,-57.034],[-21.804,-64.441]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"necklace","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-39.271,-60.851,0],"ix":2,"l":2},"a":{"a":0,"k":[-39.271,-60.851,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[{"i":[[0,-1.202],[1.202,0],[0,1.202],[-1.202,0]],"o":[[0,1.202],[-1.202,0],[0,-1.202],[1.202,0]],"v":[[-34.723,-47.081],[-36.899,-44.905],[-39.076,-47.081],[-36.899,-49.258]],"c":true}],"e":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":20,"s":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}],"e":[{"i":[[-0.254,-1.175],[1.175,-0.254],[0.254,1.175],[-1.175,0.254]],"o":[[0.254,1.175],[-1.175,0.254],[-0.254,-1.175],[1.175,-0.254]],"v":[[-28.738,-49.025],[-30.406,-46.437],[-32.993,-48.105],[-31.325,-50.692]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":31,"s":[{"i":[[-0.254,-1.175],[1.175,-0.254],[0.254,1.175],[-1.175,0.254]],"o":[[0.254,1.175],[-1.175,0.254],[-0.254,-1.175],[1.175,-0.254]],"v":[[-28.738,-49.025],[-30.406,-46.437],[-32.993,-48.105],[-31.325,-50.692]],"c":true}],"e":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}],"e":[{"i":[[0,-1.202],[1.202,0],[0,1.202],[-1.202,0]],"o":[[0,1.202],[-1.202,0],[0,-1.202],[1.202,0]],"v":[[-34.723,-47.081],[-36.899,-44.905],[-39.076,-47.081],[-36.899,-49.258]],"c":true}]},{"t":46}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[{"i":[[0,0],[-14.35,0],[0,0]],"o":[[0,0],[12.657,0],[0,0]],"v":[[-47.615,-76.797],[-36.899,-48.399],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":20,"s":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.026,3.032],[0,0]],"o":[[0,0],[12.371,-2.674],[0,0]],"v":[[-47.615,-76.797],[-31.144,-49.852],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":31,"s":[{"i":[[0,0],[-14.026,3.032],[0,0]],"o":[[0,0],[12.371,-2.674],[0,0]],"v":[[-47.615,-76.797],[-31.144,-49.852],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.35,0],[0,0]],"o":[[0,0],[12.657,0],[0,0]],"v":[[-47.601,-76.485],[-36.899,-48.399],[-34.319,-76.58]],"c":false}]},{"t":46}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":3,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"right arm","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":12,"s":[0],"e":[-14.9]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":29,"s":[-14.9],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":51,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":55,"s":[0],"e":[2.6]},{"t":69}],"ix":10},"p":{"a":0,"k":[-47.647,-76.613,0],"ix":2,"l":2},"a":{"a":0,"k":[-47.647,-76.613,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-0.603,-0.47],[-0.452,-0.039],[-1.913,0.936],[-1.46,1.551],[-0.364,0.544],[-0.426,1.122]],"o":[[-0.552,0.528],[0.357,0.279],[2.122,0.184],[1.913,-0.936],[0.448,-0.476],[0.668,-0.998],[0,0]],"v":[[-85.811,-3.751],[-85.709,-1.732],[-84.429,-1.336],[-78.243,-2.587],[-73.186,-6.435],[-71.944,-7.952],[-70.417,-11.205]],"c":false}],"e":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}],"e":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}],"e":[{"i":[[0,0],[-0.603,-0.47],[-0.452,-0.039],[-1.913,0.936],[-1.46,1.551],[-0.364,0.544],[-0.426,1.122]],"o":[[-0.552,0.528],[0.357,0.279],[2.122,0.184],[1.913,-0.936],[0.448,-0.476],[0.668,-0.998],[0,0]],"v":[[-85.811,-3.751],[-85.709,-1.732],[-84.429,-1.336],[-78.243,-2.587],[-73.186,-6.435],[-71.944,-7.952],[-70.417,-11.205]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-1.324,-0.98],[0.247,-0.264],[1.633,-1.219],[0.082,-0.779],[-0.948,0.112],[-1.842,3.608]],"o":[[0.278,1.908],[0.216,0.16],[-1.403,1.501],[-0.573,0.427],[-0.137,1.299],[4.744,-0.56],[0,0]],"v":[[-80.497,-18.554],[-78.185,-13.675],[-80.162,-10.751],[-84.962,-7.022],[-86.484,-5.214],[-84.14,-3.887],[-73.934,-12.125]],"c":false}],"e":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}],"e":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}],"e":[{"i":[[0,0],[-1.324,-0.98],[0.247,-0.264],[1.633,-1.219],[0.082,-0.779],[-0.948,0.112],[-1.842,3.608]],"o":[[0.278,1.908],[0.216,0.16],[-1.403,1.501],[-0.573,0.427],[-0.137,1.299],[4.744,-0.56],[0,0]],"v":[[-80.497,-18.554],[-78.185,-13.675],[-80.162,-10.751],[-84.962,-7.022],[-86.484,-5.214],[-84.14,-3.887],[-73.934,-12.125]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-0.803,-3.366],[0.258,-1.825],[5.279,-3.498],[1.518,-0.108],[0.553,1.455]],"o":[[2.279,2.069],[0.427,1.793],[-0.888,6.27],[-1.123,0.744],[-1.344,0.096],[0,0]],"v":[[-70.34,-30.514],[-65.476,-22.239],[-64.924,-15.526],[-73.329,-1.342],[-78.587,0.483],[-82.928,-1.298]],"c":false}],"e":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}],"e":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}],"e":[{"i":[[0,0],[-0.803,-3.366],[0.258,-1.825],[5.279,-3.498],[1.518,-0.108],[0.553,1.455]],"o":[[2.279,2.069],[0.427,1.793],[-0.888,6.27],[-1.123,0.744],[-1.344,0.096],[0,0]],"v":[[-70.34,-30.514],[-65.476,-22.239],[-64.924,-15.526],[-73.329,-1.342],[-78.587,0.483],[-82.928,-1.298]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[4.308,-5.079],[-1.754,16.452],[-34.681,2.044]],"o":[[-7.627,2.556],[3.64,4.694],[0,0],[-7.197,1.148],[1.38,-12.947],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-69.922,-31.144],[-80.497,-18.554],[-104.773,-46.17],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[4.308,-5.079],[-1.754,16.452],[-34.681,2.044]],"o":[[-7.627,2.556],[3.64,4.694],[0,0],[-7.197,1.148],[1.38,-12.947],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-69.922,-31.144],[-80.497,-18.554],[-104.773,-46.17],[-47.615,-76.797]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector 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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"torso right","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55.445,-47.081,0],"ix":2,"l":2},"a":{"a":0,"k":[-55.445,-47.081,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],[-1.244,-7.241]],"o":[[1.228,6.912],[0,0]],"v":[[-56.915,-55.939],[-53.975,-38.223]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"hair2","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[-91.931,-82.48,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.167,"y":0.167},"t":62,"s":[-81.722,-64.98,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[-81.722,-64.98,0],"e":[-85.076,-70.728,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":148,"s":[-85.076,-70.728,0],"e":[-85.076,-70.728,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-85.076,-70.728,0],"e":[-81.618,-67.477,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-81.618,-67.477,0],"e":[-81.618,-67.477,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-81.618,-67.477,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":223,"s":[-81.722,-64.98,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"t":293}],"ix":2,"l":2},"a":{"a":0,"k":[-91.931,-82.48,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,-5.534],[-5.534,0],[0,5.534],[5.534,0]],"o":[[0,5.534],[5.534,0],[0,-5.534],[-5.534,0]],"v":[[-101.951,-82.48],[-91.931,-72.459],[-81.91,-82.48],[-91.931,-92.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"hair1","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":152,"s":[0],"e":[-12]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":169,"s":[-12],"e":[-12]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":181,"s":[-12],"e":[7.9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":197,"s":[7.9],"e":[7.9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":209,"s":[7.9],"e":[0]},{"t":223}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0.188,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0.188,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.333,"y":0.333},"t":117,"s":[-39.753,-99.33,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[-39.753,-99.33,0],"e":[-42.148,-99.389,0],"to":[-0.399,-0.01,0],"ti":[0.399,0.01,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":169,"s":[-42.148,-99.389,0],"e":[-42.148,-99.389,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-42.148,-99.389,0],"e":[-38.369,-99.211,0],"to":[0.63,0.03,0],"ti":[-0.63,-0.03,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-38.369,-99.211,0],"e":[-38.369,-99.211,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-38.369,-99.211,0],"e":[-39.753,-99.33,0],"to":[-0.231,-0.02,0],"ti":[0.231,0.02,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":223,"s":[-39.753,-99.33,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0.188,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0.188,0]},{"t":281}],"ix":2,"l":2},"a":{"a":0,"k":[-39.753,-99.33,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[2.104,-0.737],[2.141,-0.401],[2.195,-0.452],[3.473,-3.467],[0.523,-2.194],[0.045,-0.26],[-2.892,-2.967],[-5.029,2.118],[-2.554,0.155],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-2.058,0.721],[-2.203,0.413],[-4.691,0.967],[-1.596,1.593],[-0.061,0.257],[-0.735,4.2],[0,0],[1.778,-0.749],[5.6,-0.341],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.302,-95.867],[-59.637,-94.274],[-66.248,-93.058],[-79.205,-87.127],[-82.474,-81.324],[-82.634,-80.549],[-78.801,-69.233],[-70.075,-68.22],[-52.907,-76.944],[-41.626,-86.945],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Layer 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":14,"s":[0],"e":[6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[6],"e":[6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":40,"s":[6],"e":[0]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.652,"y":0.926},"o":{"x":0.69,"y":0},"t":14,"s":[-53.445,-38.283,0],"e":[-29.47,-43.033,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.505,"y":0.403},"o":{"x":0.512,"y":0.57},"t":30,"s":[-29.47,-43.033,0],"e":[-30.97,-40.533,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.398,"y":0.998},"o":{"x":0.626,"y":0.107},"t":40,"s":[-30.97,-40.533,0],"e":[-67.97,-40.533,0],"to":[0,0,0],"ti":[0,0,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[-53.445,-38.283,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.365,0],[0,0],[1.465,0.66],[0.599,0.223],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[0.406,-1.555],[-0.583,-0.263],[-0.599,-0.223],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.554,118.806],[-75.92,118.806],[-77.833,114.938],[-79.659,114.357],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.446,-2.931],[0,0],[0.833,1.312],[1.346,1.393],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[1.795,0.132],[-0.343,-0.54],[-0.444,-0.46],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.866,119.306],[-76.857,122.868],[-76.083,119.313],[-78.721,115.982],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.446,-2.931],[0,0],[0.833,1.312],[1.346,1.393],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[1.795,0.132],[-0.343,-0.54],[-0.444,-0.46],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.866,119.306],[-76.857,122.868],[-76.083,119.313],[-78.721,115.982],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.17,-0.426],[0,0],[1.299,0.852],[1.801,0.714],[0.423,0.479],[0.049,0.577],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.448,4.11],[0,0],[1.689,-0.619],[-0.535,-0.351],[-0.594,-0.236],[-0.383,-0.434],[-0.228,-2.673],[0,0]],"v":[[-96.283,99.875],[-95.721,124.487],[-87.057,124.851],[-85.944,113.901],[-81.184,119.575],[-67.166,123.371],[-55.667,122.081],[-56.426,118.523],[-60.203,116.575],[-63.49,114.922],[-63.99,113.29],[-65.309,100.457]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.17,-0.426],[0,0],[1.299,0.852],[1.801,0.714],[0.423,0.479],[0.049,0.577],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.448,4.11],[0,0],[1.689,-0.619],[-0.535,-0.351],[-0.594,-0.236],[-0.383,-0.434],[-0.228,-2.673],[0,0]],"v":[[-96.283,99.875],[-95.721,124.487],[-87.057,124.851],[-85.944,113.901],[-81.184,119.575],[-67.166,123.371],[-55.667,122.081],[-56.426,118.523],[-60.203,116.575],[-63.49,114.922],[-63.99,113.29],[-65.309,100.457]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}]},{"t":152}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":1,"k":[{"t":44,"s":[100],"h":1},{"t":45,"s":[0],"h":1}],"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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[2.418,-11.585],[1.616,-8.848]],"o":[[-2.845,15.314],[-0.551,4.806],[-2.513,11.564],[-1.603,7.682],[0,0]],"v":[[-38.37,-25.438],[-45.309,18.981],[-47.471,33.325],[-55.944,77.926],[-60.028,100.579]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[2.418,-11.585],[1.616,-8.848]],"o":[[-2.845,15.314],[-0.551,4.806],[-2.513,11.564],[-1.603,7.682],[0,0]],"v":[[-38.37,-25.438],[-45.309,18.981],[-47.471,33.325],[-55.944,77.926],[-60.028,100.579]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[-11.123,-0.294]],"o":[[11.37,0.393],[0,0]],"v":[[-103.613,99.669],[-60.028,100.579]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[-11.123,-0.294]],"o":[[11.37,0.393],[0,0]],"v":[[-103.613,99.669],[-60.028,100.579]],"c":false}],"e":[{"i":[[0,0],[-11.123,-0.224]],"o":[[11.371,0.322],[0,0]],"v":[[-97.512,98.969],[-58.517,99.925]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[-11.123,-0.224]],"o":[[11.371,0.322],[0,0]],"v":[[-97.512,98.969],[-58.517,99.925]],"c":false}],"e":[{"i":[[0,0],[-11.125,0.188]],"o":[[11.376,-0.099],[0,0]],"v":[[-95.984,97.138],[-49.65,96.091]],"c":false}]},{"t":58}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[1.037,-3.802],[-1.016,-12.381]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-2.434,8.92],[0,0]],"v":[[-53.125,-38.25],[-66.553,-22.769],[-76.81,-0.826],[-86.714,46.344],[-99.328,68.822],[-103.613,99.669]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[1.037,-3.802],[-1.016,-12.381]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-2.434,8.92],[0,0]],"v":[[-53.125,-38.25],[-66.553,-22.769],[-76.81,-0.826],[-86.714,46.344],[-99.328,68.822],[-103.613,99.669]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.564,-7.625],[4.289,-16.168],[0.959,-3.817],[1.18,-11.367]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.236,15.777],[-2.122,7.499],[-2.289,9.255],[0,0]],"v":[[-53.125,-38.25],[-66.078,-23.013],[-74.41,0.102],[-84.595,41.573],[-91.333,68.744],[-97.494,98.951]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.564,-7.625],[4.289,-16.168],[0.959,-3.817],[1.18,-11.367]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.236,15.777],[-2.122,7.499],[-2.289,9.255],[0,0]],"v":[[-53.125,-38.25],[-66.078,-23.013],[-74.41,0.102],[-84.595,41.573],[-91.333,68.744],[-97.494,98.951]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":" 8","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.383],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[-2.2],"e":[0]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[-69.003,105.869,0],"e":[-70.503,106.994,0],"to":[-0.208,0,0],"ti":[3.899,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.379,"y":0},"t":47,"s":[-70.503,106.994,0],"e":[-78.571,108.119,0],"to":[-0.121,0,0],"ti":[0.255,0,0]},{"i":{"x":0.21,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[-78.571,108.119,0],"e":[-93.25,107.869,0],"to":[-3.792,0,0],"ti":[0,0,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[-84.25,105.744,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[0.269,-1.808],[0.802,-0.37],[0.555,-0.933],[-0.018,-1.173],[-5.66,-0.006],[-2.778,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.519,5.415],[-0.436,2.931],[-0.802,0.37],[-0.77,1.293],[0.9,0.004],[6.285,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-99.424,92.28],[-100.86,106.854],[-102.371,110.921],[-104.648,112.713],[-105.561,116.594],[-84.154,117.182],[-81.266,106.122],[-84.141,106.184],[-84.66,117.176],[-76.602,117.342],[-75.346,95.453]],"c":false}],"e":[{"i":[[0,0],[0.369,-1.851],[1.097,-0.379],[0.76,-0.955],[-0.024,-1.201],[-6.282,-0.006],[-2.778,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.546,6.093],[-0.598,3],[-1.097,0.379],[-1.054,1.324],[1.232,0.004],[6.975,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-94.052,92.759],[-95.951,106.838],[-99.961,111.016],[-103.079,112.85],[-104.329,116.824],[-90.063,116.84],[-73.999,106.312],[-73.999,106.312],[-73.999,116.827],[-66.132,116.833],[-64.827,92.794]],"c":true}]},{"t":53}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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}],"ip":45,"op":357,"st":50,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Layer 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-15.04,39.857,0],"ix":2,"l":2},"a":{"a":0,"k":[-15.04,39.857,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.69,"y":0},"t":14,"s":[{"i":[[0,0],[-0.716,4.737],[-1.079,4.298],[1.07,4.194],[0.143,5.237]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.054,-4.198],[-1.295,-5.076],[0,0]],"v":[[-41.808,94.965],[-43.267,82.478],[-39.362,67.384],[-39.386,54.532],[-43.649,39.469]],"c":false}],"e":[{"i":[[0,0],[-0.783,4.7],[-1.153,4.321],[0.966,4.409],[0.002,5.293]],"o":[[-1.039,-4.656],[0.724,-4.348],[1.127,-4.221],[-1.161,-5.152],[0,0]],"v":[[-40.919,94.562],[-42.136,81.879],[-38.195,66.949],[-39.023,53.362],[-43.04,34.954]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-0.783,4.7],[-1.153,4.321],[0.966,4.409],[0.002,5.293]],"o":[[-1.039,-4.656],[0.724,-4.348],[1.127,-4.221],[-1.161,-5.152],[0,0]],"v":[[-40.919,94.562],[-42.136,81.879],[-38.195,66.949],[-39.023,53.362],[-43.04,34.954]],"c":false}],"e":[{"i":[[0,0],[-0.903,4.679],[-1.263,4.29],[0.88,4.427],[-0.133,5.292]],"o":[[-0.92,-4.681],[0.835,-4.328],[1.234,-4.191],[-1.029,-5.18],[0,0]],"v":[[-38.555,93.57],[-39.449,80.861],[-35.129,66.035],[-35.611,52.432],[-38.658,33.802]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-0.903,4.679],[-1.263,4.29],[0.88,4.427],[-0.133,5.292]],"o":[[-0.92,-4.681],[0.835,-4.328],[1.234,-4.191],[-1.029,-5.18],[0,0]],"v":[[-38.555,93.57],[-39.449,80.861],[-35.129,66.035],[-35.611,52.432],[-38.658,33.802]],"c":false}],"e":[{"i":[[0,0],[-1.172,4.5],[-1.578,4.441],[0.385,5.578],[-3.336,6.624]],"o":[[-0.774,-4.609],[1.084,-4.162],[1.541,-4.338],[-0.408,-5.569],[0,0]],"v":[[-35.634,92.182],[-35.483,78.435],[-31.271,64.414],[-30.945,48.403],[-27.789,29.751]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[-1.172,4.5],[-1.578,4.441],[0.385,5.578],[-3.336,6.624]],"o":[[-0.774,-4.609],[1.084,-4.162],[1.541,-4.338],[-0.408,-5.569],[0,0]],"v":[[-35.634,92.182],[-35.483,78.435],[-31.271,64.414],[-30.945,48.403],[-27.789,29.751]],"c":false}],"e":[{"i":[[0,0],[-1.24,4.454],[-1.658,4.48],[0.259,5.87],[-0.954,5.675]],"o":[[-0.737,-4.59],[1.147,-4.12],[1.619,-4.376],[-0.25,-5.668],[0,0]],"v":[[-34.892,91.829],[-34.475,77.819],[-30.29,64.003],[-29.759,47.38],[-26.282,30.603]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[-1.24,4.454],[-1.658,4.48],[0.259,5.87],[-0.954,5.675]],"o":[[-0.737,-4.59],[1.147,-4.12],[1.619,-4.376],[-0.25,-5.668],[0,0]],"v":[[-34.892,91.829],[-34.475,77.819],[-30.29,64.003],[-29.759,47.38],[-26.282,30.603]],"c":false}],"e":[{"i":[[0,0],[-1.089,4.536],[-1.544,4.58],[0.441,5.559],[-0.702,5.751]],"o":[[-0.837,-4.612],[1.007,-4.196],[1.508,-4.474],[-0.489,-5.706],[0,0]],"v":[[-34.543,92.78],[-34.668,78.714],[-30.587,64.824],[-30.056,48.798],[-31.252,32.642]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[-1.089,4.536],[-1.544,4.58],[0.441,5.559],[-0.702,5.751]],"o":[[-0.837,-4.612],[1.007,-4.196],[1.508,-4.474],[-0.489,-5.706],[0,0]],"v":[[-34.543,92.78],[-34.668,78.714],[-30.587,64.824],[-30.056,48.798],[-31.252,32.642]],"c":false}],"e":[{"i":[[0,0],[-0.716,4.737],[-1.263,4.827],[0.889,4.791],[-0.083,5.938]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.234,-4.715],[-1.076,-5.799],[0,0]],"v":[[-33.683,95.121],[-35.142,80.916],[-31.315,66.846],[-30.787,52.287],[-34.399,35.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-0.716,4.737],[-1.263,4.827],[0.889,4.791],[-0.083,5.938]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.234,-4.715],[-1.076,-5.799],[0,0]],"v":[[-33.683,95.121],[-35.142,80.916],[-31.315,66.846],[-30.787,52.287],[-34.399,35.062]],"c":false}],"e":[{"i":[[0,0],[-0.711,4.737],[-1.258,4.829],[0.894,4.79],[-0.076,5.938]],"o":[[-1.811,-4.441],[0.657,-4.382],[1.229,-4.717],[-1.082,-5.798],[0,0]],"v":[[-34.564,95.191],[-36.174,80.901],[-32.364,66.751],[-31.851,52.191],[-36.018,34.182]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-0.711,4.737],[-1.258,4.829],[0.894,4.79],[-0.076,5.938]],"o":[[-1.811,-4.441],[0.657,-4.382],[1.229,-4.717],[-1.082,-5.798],[0,0]],"v":[[-34.564,95.191],[-36.174,80.901],[-32.364,66.751],[-31.851,52.191],[-36.018,34.182]],"c":false}],"e":[{"i":[[0,0],[-0.702,4.739],[-1.249,4.831],[0.903,4.789],[-0.065,5.938]],"o":[[-1.796,-3.796],[0.649,-4.383],[1.22,-4.719],[-1.093,-5.796],[0,0]],"v":[[-34.704,95.171],[-36.597,82.176],[-34.317,66.572],[-33.832,52.012],[-38.746,28.796]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[-0.702,4.739],[-1.249,4.831],[0.903,4.789],[-0.065,5.938]],"o":[[-1.796,-3.796],[0.649,-4.383],[1.22,-4.719],[-1.093,-5.796],[0,0]],"v":[[-34.704,95.171],[-36.597,82.176],[-34.317,66.572],[-33.832,52.012],[-38.746,28.796]],"c":false}],"e":[{"i":[[0,0],[1.898,9.128],[0.825,4.904],[1.704,5.653],[1.144,5.806]],"o":[[-2.594,-5.794],[-1.442,-6.935],[-1.109,-6.593],[-2.522,-6.122],[0,0]],"v":[[-41.156,94.512],[-45.648,76.747],[-48.266,58.343],[-53.329,43.347],[-57.955,24.76]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":58,"s":[{"i":[[0,0],[1.898,9.128],[0.825,4.904],[1.704,5.653],[1.144,5.806]],"o":[[-2.594,-5.794],[-1.442,-6.935],[-1.109,-6.593],[-2.522,-6.122],[0,0]],"v":[[-41.156,94.512],[-45.648,76.747],[-48.266,58.343],[-53.329,43.347],[-57.955,24.76]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.4,"y":0},"t":70,"s":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}],"e":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}],"e":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.514,"y":1},"o":{"x":0.839,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.552,-39.1],[6.377,94.902],[-41.808,94.908]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.24,-41.114],[8.252,95.022],[-34.888,91.774]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.24,-41.114],[8.252,95.022],[-34.888,91.774]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.177,-39.151],[8.252,95.059],[-33.683,95.064]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.177,-39.151],[8.252,95.059],[-33.683,95.064]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.651,-39.163],[7.686,95.128],[-34.522,95.134]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.651,-39.163],[7.686,95.128],[-34.522,95.134]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-12.122,-39.185],[6.632,95.147],[-34.584,95.113]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-12.122,-39.185],[6.632,95.147],[-34.584,95.113]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.671,-41.037],[-0.595,94.56],[-40.656,94.566]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":58,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.671,-41.037],[-0.595,94.56],[-40.656,94.566]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.4,"y":0},"t":70,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-51.939,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-51.939,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-50.814,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-50.814,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.69,"y":0},"t":14,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[1.092,6.093],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.623,94.901],[4.294,108.811],[8.679,112.989],[11.961,114.823],[13.568,118.797],[-0.697,118.813],[-17.705,108.285],[-17.705,108.285],[-16.762,118.8],[-24.628,118.806],[-28.576,94.931]],"c":false}],"e":[{"i":[[0,0],[-0.423,-1.879],[-1.107,-0.446],[-0.787,-1.004],[-0.011,-1.204],[6.27,0.37],[2.513,6.771],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.666],[0.686,3.047],[1.107,0.446],[1.091,1.392],[-1.23,-0.07],[-6.962,-0.411],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.373,94.74],[3.626,108.575],[7.753,113.007],[10.92,115.035],[12.286,119.098],[-1.955,118.26],[-16.966,104.874],[-16.966,104.874],[-18.599,115.231],[-26.402,114.238],[-26.571,92.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[-0.423,-1.879],[-1.107,-0.446],[-0.787,-1.004],[-0.011,-1.204],[6.27,0.37],[2.513,6.771],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.666],[0.686,3.047],[1.107,0.446],[1.091,1.392],[-1.23,-0.07],[-6.962,-0.411],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.373,94.74],[3.626,108.575],[7.753,113.007],[10.92,115.035],[12.286,119.098],[-1.955,118.26],[-16.966,104.874],[-16.966,104.874],[-18.599,115.231],[-26.402,114.238],[-26.571,92.846]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-27.701,95.042]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-27.701,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.002,95.113],[-1.206,108.867],[3.179,113.044],[6.461,114.879],[8.068,118.853],[-6.197,118.869],[-21.955,108.376],[-21.955,108.376],[-22.262,118.856],[-30.128,118.861],[-33.201,95.042]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":58,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.002,95.113],[-1.206,108.867],[3.179,113.044],[6.461,114.879],[8.068,118.853],[-6.197,118.869],[-21.955,108.376],[-21.955,108.376],[-22.262,118.856],[-30.128,118.861],[-33.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-11.765,94.243],[-10.969,108.934],[-6.584,113.112],[-3.302,114.947],[-1.695,118.92],[-15.96,118.937],[-31.719,108.444],[-31.719,108.444],[-32.025,118.923],[-39.891,118.929],[-42.965,94.172]],"c":false}]},{"t":70}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":" 7","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.515],"y":[0.929]},"o":{"x":[0.174],"y":[0.273]},"t":0,"s":[0],"e":[-45]},{"i":{"x":[0.518],"y":[0.904]},"o":{"x":[0.467],"y":[-0.063]},"t":32,"s":[-45],"e":[16]},{"i":{"x":[0.515],"y":[0.956]},"o":{"x":[0.456],"y":[-0.025]},"t":68,"s":[16],"e":[-45]},{"i":{"x":[0.01],"y":[1]},"o":{"x":[0.467],"y":[-0.069]},"t":95,"s":[-45],"e":[0]},{"i":{"x":[0.515],"y":[0.939]},"o":{"x":[0.174],"y":[0.236]},"t":124,"s":[0],"e":[-45]},{"i":{"x":[0.518],"y":[0.904]},"o":{"x":[0.467],"y":[-0.063]},"t":168,"s":[-45],"e":[16]},{"i":{"x":[0.515],"y":[0.949]},"o":{"x":[0.456],"y":[-0.029]},"t":225,"s":[16],"e":[-45]},{"i":{"x":[0.845],"y":[1.051]},"o":{"x":[0.467],"y":[-0.069]},"t":274.928,"s":[-45],"e":[0]},{"t":321}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[2.5,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":29,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":124,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":163,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":221,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":271.75,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[2.5,0,0]},{"t":321}],"ix":2,"l":2},"a":{"a":0,"k":[-191.387,-43.434,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":[[-1.895,4.463],[0,0],[-4.463,-1.895],[0,0],[1.895,-4.463],[0,0],[4.463,1.895],[0,0]],"o":[[0,0],[1.895,-4.463],[0,0],[4.463,1.895],[0,0],[-1.895,4.463],[0,0],[-4.463,-1.895]],"v":[[-208.928,-50.867],[-208.928,-50.867],[-197.415,-55.517],[-178.497,-47.515],[-173.846,-36.002],[-173.846,-36.002],[-185.36,-31.352],[-204.278,-39.353]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.901960790157,0.905882358551,0.917647063732,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Group 1","parent":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],"e":[-360]},{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[-360],"e":[-720]},{"t":321}],"ix":10},"p":{"a":0,"k":[181.759,-45.473,0],"ix":2,"l":2},"a":{"a":0,"k":[181.759,-45.473,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-4.648],[4.648,0],[0,4.648],[-4.648,0]],"o":[[0,4.648],[-4.648,0],[0,-4.648],[4.648,0]],"v":[[188.525,-47.623],[180.11,-39.208],[171.694,-47.623],[180.11,-56.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Group 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":124,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":224,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":273,"s":[-24],"e":[0]},{"t":321}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0.833,0.458,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":61,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":91,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":124,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":220,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":270,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0.833,0.458,0]},{"t":321}],"ix":2,"l":2},"a":{"a":0,"k":[189.509,7.428,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.893,-3.251],[11.285,2.779],[0.492,11.051],[-3.653,-0.9]],"o":[[3.653,0.9],[-5.566,9.559],[-11.285,-2.779],[-0.167,-3.758],[0,0]],"v":[[209.413,1.566],[212.973,9.888],[184.741,21.845],[165.289,-1.854],[172.306,-7.571]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.901960790157,0.905882358551,0.917647063732,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"body cover","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[14.599,1.75,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-16.5,64],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-16.5,64],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.533388983035,0.178523000081,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"finger left","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-13]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[-13],"e":[-26.4]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[-26.4],"e":[-26.4]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[-26.4],"e":[-7.4]},{"t":76}],"ix":10},"p":{"a":0,"k":[30.047,-52.909,0],"ix":2,"l":2},"a":{"a":0,"k":[30.047,-52.909,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],[-3.751,5.292],[0.431,0.639],[0.779,-0.176],[2.473,-2.118]],"o":[[5.885,-2.607],[0.446,-0.629],[-0.432,-0.64],[-3.158,0.713],[0,0]],"v":[[30.047,-52.909],[43.409,-66.225],[43.871,-68.346],[41.599,-69.095],[33.684,-63.249]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"hexa","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[51.616,-52.909,0],"ix":2,"l":2},"a":{"a":0,"k":[51.616,-52.909,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.818,0.108],[0,0],[0.503,-0.654],[0,0],[-0.315,-0.763],[0,0],[-0.818,-0.108],[0,0],[-0.503,0.654],[0,0],[0.315,0.763],[0,0]],"o":[[0,0],[-0.818,-0.108],[0,0],[-0.503,0.654],[0,0],[0.315,0.763],[0,0],[0.818,0.108],[0,0],[0.503,-0.654],[0,0],[-0.315,-0.763]],"v":[[60.761,-66.702],[46.378,-68.607],[44.243,-67.725],[35.401,-56.222],[35.098,-53.932],[40.639,-40.523],[42.47,-39.116],[56.853,-37.21],[58.988,-38.092],[67.83,-49.595],[68.134,-51.885],[62.593,-65.294]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984313726425,0.737254917622,0.019607843831,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":31,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"left hand","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-13]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[-13],"e":[-32]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[-32],"e":[-32]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[-32],"e":[-22.8]},{"t":76}],"ix":10},"p":{"a":0,"k":[19.691,-62.984,0],"ix":2,"l":2},"a":{"a":0,"k":[19.691,-62.984,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.782,-1.829]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[36.388,-74.129],[43.457,-75.929],[47.901,-71.956]],"c":false}],"e":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}],"e":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}],"e":[{"i":[[0,0],[-2.347,-0.363],[-1.694,-0.76]],"o":[[2.141,-0.934],[1.864,0.288],[0,0]],"v":[[36.82,-71.551],[43.987,-72.44],[48.705,-71.356]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-2.347,-0.363],[-1.694,-0.76]],"o":[[2.141,-0.934],[1.864,0.288],[0,0]],"v":[[36.82,-71.551],[43.987,-72.44],[48.705,-71.356]],"c":false}],"e":[{"i":[[0,0],[-1.913,1.218],[-1.582,0.933]],"o":[[1.853,-1.447],[1.656,-1.054],[0,0]],"v":[[35.926,-71.002],[41.345,-75.046],[45.465,-77.391]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-1.913,1.218],[-1.582,0.933]],"o":[[1.853,-1.447],[1.656,-1.054],[0,0]],"v":[[35.926,-71.002],[41.345,-75.046],[45.465,-77.391]],"c":false}],"e":[{"i":[[0,0],[-2.268,-0.015],[-1.835,-0.074]],"o":[[1.853,-1.447],[1.963,0.013],[0,0]],"v":[[35.926,-71.002],[43.038,-72.289],[47.71,-72.462]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-2.268,-0.015],[-1.835,-0.074]],"o":[[1.853,-1.447],[1.963,0.013],[0,0]],"v":[[35.926,-71.002],[43.038,-72.289],[47.71,-72.462]],"c":false}],"e":[{"i":[[0,0],[-1.551,-1.155],[-0.882,-1.611]],"o":[[1.853,-1.447],[1.575,1.172],[0,0]],"v":[[35.926,-71.002],[41.742,-70.141],[44.91,-66.689]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100],"e":[0]},{"t":38}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-5.248,4.287],[-2.13,0.665],[-1.934,-1.125],[-0.324,-0.627],[0.111,-0.699]],"o":[[5.192,-5.654],[1.737,-1.419],[2.13,-0.665],[0.605,0.352],[0.324,0.627],[0,0]],"v":[[19.691,-62.984],[32.161,-75.058],[38.032,-78.25],[44.517,-77.807],[45.982,-76.405],[46.314,-74.344]],"c":false}],"e":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}],"e":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}],"e":[{"i":[[0,0],[-5.589,2.98],[-1.866,0.143],[-1.853,-0.286],[-1.169,-0.525],[-1.035,-0.43]],"o":[[5.478,-5.345],[2.089,-1.114],[2.142,-0.164],[0.664,0.103],[1.948,0.551],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[40.259,-73.69],[45.022,-73.259],[48.112,-72.533],[52.232,-71.165]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-5.589,2.98],[-1.866,0.143],[-1.853,-0.286],[-1.169,-0.525],[-1.035,-0.43]],"o":[[5.478,-5.345],[2.089,-1.114],[2.142,-0.164],[0.664,0.103],[1.948,0.551],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[40.259,-73.69],[45.022,-73.259],[48.112,-72.533],[52.232,-71.165]],"c":false}],"e":[{"i":[[0,0],[-5.589,2.98],[-1.528,0.898],[-1.657,0.877],[-1.251,0.277],[-1.087,0.273]],"o":[[5.478,-5.345],[2.089,-1.114],[1.853,-1.088],[0.594,-0.315],[1.891,-0.722],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[37.296,-74.394],[41.375,-76.717],[44.287,-77.98],[47.962,-79.96]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-5.589,2.98],[-1.528,0.898],[-1.657,0.877],[-1.251,0.277],[-1.087,0.273]],"o":[[5.478,-5.345],[2.089,-1.114],[1.853,-1.088],[0.594,-0.315],[1.891,-0.722],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[37.296,-74.394],[41.375,-76.717],[44.287,-77.98],[47.962,-79.96]],"c":false}],"e":[{"i":[[0,0],[-4.53,1.806],[-2.126,0.202],[-1.868,-0.162],[-1.608,-0.307],[-1.062,-0.36]],"o":[[5.478,-5.345],[2.199,-0.877],[2.139,-0.203],[0.67,0.058],[1.98,0.42],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[39.043,-73.414],[43.781,-73.428],[48.037,-72.842],[51.509,-72.015]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-4.53,1.806],[-2.126,0.202],[-1.868,-0.162],[-1.608,-0.307],[-1.062,-0.36]],"o":[[5.478,-5.345],[2.199,-0.877],[2.139,-0.203],[0.67,0.058],[1.98,0.42],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[39.043,-73.414],[43.781,-73.428],[48.037,-72.842],[51.509,-72.015]],"c":false}],"e":[{"i":[[0,0],[-2.654,0.204],[-1.299,-0.532],[-0.802,-1.388],[-0.318,-1.311],[0.646,-1.254]],"o":[[5.478,-5.345],[1.778,-0.137],[1.913,0.783],[1.168,2.022],[0.1,1.972],[0,0]],"v":[[19.691,-62.984],[36.163,-70.356],[39.65,-70.135],[43.127,-67.345],[44.095,-63.67],[42.974,-60.228]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-0.858,-0.51],[-1.118,-0.301],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[0.895,0.494],[0.889,0.528],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[45.842,-67.462],[48.41,-65.901],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.979,0.038],[-1.041,0.3],[0.32,0.804],[0.648,0.151],[3.711,0.085],[2.555,-1.472]],"o":[[2.283,-2.077],[0.978,-0.038],[0.905,-0.26],[-0.223,-0.561],[-3.621,-0.842],[-3.036,-0.069],[0,0]],"v":[[37.27,-64.561],[47.553,-67.889],[52.178,-68.243],[53.753,-70.021],[52.143,-70.965],[42.844,-72.346],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-0.979,0.038],[-1.041,0.3],[0.32,0.804],[0.648,0.151],[3.711,0.085],[2.555,-1.472]],"o":[[2.283,-2.077],[0.978,-0.038],[0.905,-0.26],[-0.223,-0.561],[-3.621,-0.842],[-3.036,-0.069],[0,0]],"v":[[37.27,-64.561],[47.553,-67.889],[52.178,-68.243],[53.753,-70.021],[52.143,-70.965],[42.844,-72.346],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.584,0.787],[-0.656,0.862],[0.736,0.454],[0.609,-0.266],[3.027,-2.149],[2.555,-1.472]],"o":[[2.283,-2.077],[0.947,-1.274],[0.57,-0.749],[-0.514,-0.317],[-3.406,1.488],[-2.476,1.758],[0,0]],"v":[[37.27,-64.561],[46.612,-73.922],[49.665,-77.584],[49.866,-79.951],[48.011,-79.747],[40.173,-74.683],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-0.584,0.787],[-0.656,0.862],[0.736,0.454],[0.609,-0.266],[3.027,-2.149],[2.555,-1.472]],"o":[[2.283,-2.077],[0.947,-1.274],[0.57,-0.749],[-0.514,-0.317],[-3.406,1.488],[-2.476,1.758],[0,0]],"v":[[37.27,-64.561],[46.612,-73.922],[49.665,-77.584],[49.866,-79.951],[48.011,-79.747],[40.173,-74.683],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.918,0.344],[-1.019,0.368],[0.372,0.78],[0.656,0.107],[3.709,-0.163],[2.555,-1.472]],"o":[[2.283,-2.077],[1.487,-0.557],[0.886,-0.32],[-0.26,-0.545],[-3.669,-0.598],[-3.034,0.134],[0,0]],"v":[[37.27,-64.561],[46.613,-67.964],[51.164,-69.385],[52.617,-71.264],[50.947,-72.098],[41.617,-72.096],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-0.918,0.344],[-1.019,0.368],[0.372,0.78],[0.656,0.107],[3.709,-0.163],[2.555,-1.472]],"o":[[2.283,-2.077],[1.487,-0.557],[0.886,-0.32],[-0.26,-0.545],[-3.669,-0.598],[-3.034,0.134],[0,0]],"v":[[37.27,-64.561],[46.613,-67.964],[51.164,-69.385],[52.617,-71.264],[50.947,-72.098],[41.617,-72.096],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.584,-0.694],[1.189,-1.691],[-2.21,1.869],[-2.212,3.492],[1.82,2.49],[2.702,-0.054]],"o":[[0.457,-0.105],[0.387,1.664],[-1.377,1.958],[1.122,-0.949],[1.94,-3.063],[-1.233,-1.687],[0,0]],"v":[[36.202,-63.898],[38.443,-63.231],[33.948,-55.543],[37.716,-53.739],[42.762,-59.745],[42.807,-68.015],[36.684,-70.539]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 5","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"left arm 2","parent":26,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-17]},{"i":{"x":[0.817],"y":[1.014]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[-17],"e":[43.2]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.602],"y":[0.096]},"t":24,"s":[43.2],"e":[12.5]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":32,"s":[12.5],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":46,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[0],"e":[89.4]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[6.191,-49.734,0],"e":[19.291,-31.818,0],"to":[2.183,2.986,0],"ti":[-2.183,-2.986,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[6.191,-49.734,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[6.277,-49.855]],"c":false}],"e":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}],"e":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.249,-0.943],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.255,5.141],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[-1.782,-26.869],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[-2.249,-0.943],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.255,5.141],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[-1.782,-26.869],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.025],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.06,0.103],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[7.855,-25.27],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":24,"s":[{"i":[[-2.438,-0.025],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.06,0.103],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[7.855,-25.27],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.437,0.039],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.345,-0.175],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.395,-24.92],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-2.437,0.039],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.345,-0.175],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.395,-24.92],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.418,0.309],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.505,-1.598],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.892,-24.324],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[-2.418,0.309],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.505,-1.598],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.892,-24.324],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.429,0.015],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.878,-0.077],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.301,-24.007],[30.047,-52.909],[19.691,-62.984],[4.807,-48.203]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[-2.429,0.015],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.878,-0.077],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.301,-24.007],[30.047,-52.909],[19.691,-62.984],[4.807,-48.203]],"c":false}],"e":[{"i":[[-2.409,-0.38],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[13.088,2.062],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[0.874,-25.547],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[-2.409,-0.38],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[13.088,2.062],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[0.874,-25.547],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-1.678,1.769],[-2.931,12.19],[5.082,5.232],[4.914,-4.8]],"o":[[8.229,-8.674],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[10.492,-23.815],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"t":76}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Layer 8","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-9.544,-35.853,0],"ix":2,"l":2},"a":{"a":0,"k":[-10.531,-36.411,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-0.354,-2.572],[0,0]],"o":[[1.553,4.061],[0,0],[0,0]],"v":[[-24.785,-47.619],[-20.786,-31.236],[-26.8,-15.645]],"c":false}],"e":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-14.598,-49.016],[-23.691,-32.536]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-14.598,-49.016],[-23.691,-32.536]],"c":false}],"e":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-15.223,-48.141],[-24.691,-31.786]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-1.096,-1.141],[-1.522,0.762]],"o":[[0,0],[1.096,1.141],[0,0]],"v":[[-29.574,5.465],[-26.503,12.908],[-22.113,14.117]],"c":false}],"e":[{"i":[[0,0],[-1.577,0.133],[-0.366,1.662]],"o":[[0,0],[1.577,-0.133],[0,0]],"v":[[-21.552,-1.257],[-13.835,1.043],[-10.132,-1.606]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-1.577,0.133],[-0.366,1.662]],"o":[[0,0],[1.577,-0.133],[0,0]],"v":[[-21.552,-1.257],[-13.835,1.043],[-10.132,-1.606]],"c":false}],"e":[{"i":[[0,0],[-1.58,-0.086],[-0.592,1.595]],"o":[[0,0],[1.58,0.086],[0,0]],"v":[[-23.263,-2.183],[-15.938,1.16],[-11.905,-0.953]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-5.425,-4.366],[0.891,-8.821],[10.344,-12.303],[3.907,2.109]],"o":[[0,0],[11.875,9.557],[-0.916,9.067],[-3.906,-2.109],[0,0]],"v":[[-33.451,-77.183],[-20.015,-73.365],[-2.724,-36.251],[-14.152,-7.492],[-25.872,-13.819]],"c":false}],"e":[{"i":[[0,0],[-6.245,-3.082],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.413,6.619],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-19.64,-74.303],[4.54,-50.069],[-12.219,-23.106],[-23.568,-32.44]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-6.245,-3.082],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.413,6.619],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-19.64,-74.303],[4.54,-50.069],[-12.219,-23.106],[-23.568,-32.44]],"c":false}],"e":[{"i":[[0,0],[-5.998,-3.539],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.127,7.744],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-20.515,-74.053],[3.29,-49.569],[-13.219,-22.356],[-24.568,-31.69]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[0.628,2.059],[0.62,2.632]],"o":[[-1.512,4.121],[0,0],[-0.62,-2.632]],"v":[[-17.753,14.36],[-24.079,10.045],[-25.784,2.505]],"c":false}],"e":[{"i":[[0,0],[1.995,0.808],[2.436,1.175]],"o":[[2.25,3.77],[0,0],[-2.436,-1.175]],"v":[[-7.198,-4.84],[-14.533,-2.642],[-21.465,-6.065]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[1.995,0.808],[2.436,1.175]],"o":[[2.25,3.77],[0,0],[-2.436,-1.175]],"v":[[-7.198,-4.84],[-14.533,-2.642],[-21.465,-6.065]],"c":false}],"e":[{"i":[[0,0],[1.864,1.076],[2.25,1.5]],"o":[[1.708,4.044],[0,0],[-2.25,-1.5]],"v":[[-8.553,-3.751],[-16.121,-2.587],[-22.513,-6.933]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[0.283,8.27],[-0.175,1.78],[-0.697,4.923]],"o":[[-1.644,4.68],[0,-5.573],[0.309,-3.152],[0,0]],"v":[[-21.372,3.671],[-16.14,11.39],[-15.68,1.96],[-15.021,-7.536]],"c":false}],"e":[{"i":[[0,0],[6.603,4.987],[-0.662,1.662],[0.996,4.87]],"o":[[2.601,4.224],[-6.701,-3.264],[0.639,-1.605],[0,0]],"v":[[-17.782,-8.758],[-8.49,-7.964],[-15.501,-14.228],[-13.064,-23.316]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[6.603,4.987],[-0.662,1.662],[0.996,4.87]],"o":[[2.601,4.224],[-6.701,-3.264],[0.639,-1.605],[0,0]],"v":[[-17.782,-8.758],[-8.49,-7.964],[-15.501,-14.228],[-13.064,-23.316]],"c":false}],"e":[{"i":[[0,0],[5.851,5.85],[-0.662,1.662],[0.996,4.87]],"o":[[1.993,4.543],[-6.186,-4.158],[0.639,-1.605],[0,0]],"v":[[-18.494,-9.092],[-9.401,-7.023],[-15.501,-14.228],[-14.064,-22.566]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":102,"op":400,"st":102,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Layer 6","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55.735,-36.137,0],"ix":2,"l":2},"a":{"a":0,"k":[-56.46,-36.387,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[4.827,-6.177]],"o":[[3.434,5.335],[0,0]],"v":[[-4.227,4.087],[-7.54,33.941]],"c":false}],"e":[{"i":[[0,0],[5.926,-5.132]],"o":[[2.343,5.897],[0,0]],"v":[[-12.28,5.968],[-19.124,34.028]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":79,"s":[{"i":[[0,0],[5.926,-5.132]],"o":[[2.343,5.897],[0,0]],"v":[[-12.28,5.968],[-19.124,34.028]],"c":false}],"e":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":85,"s":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}],"e":[{"i":[[0,0],[5.797,-5.276]],"o":[[2.488,5.836],[0,0]],"v":[[-10.659,5.84],[-16.805,34.059]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0,0],[5.797,-5.276]],"o":[[2.488,5.836],[0,0]],"v":[[-10.659,5.84],[-16.805,34.059]],"c":false}],"e":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":99,"s":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}],"e":[{"i":[[0,0],[7.82,0.553]],"o":[[-1.505,7.049],[0,0]],"v":[[-13.497,-21.924],[-22.036,-4.894]],"c":false}]},{"t":105}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-0.708,-6.79],[-1.059,-2.383],[-0.328,-7.542],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.27,2.594],[3.286,7.393],[0,0],[0,0]],"v":[[-34.319,-76.892],[-20.578,-73.99],[-13.434,-58.901],[-11.542,-35.085],[-8.286,-18.143],[-4.047,3.667],[-13.035,6.383]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.087,-7.704],[-0.872,-2.457],[3.857,-6.762],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.364,2.582],[2.639,7.435],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-12.591,-34.451],[-9.828,-17.224],[-12.022,5.589],[-19.21,5.928]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":79,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.087,-7.704],[-0.872,-2.457],[3.857,-6.762],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.364,2.582],[2.639,7.435],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-12.591,-34.451],[-9.828,-17.224],[-12.022,5.589],[-19.21,5.928]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":85,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.277,-7.674],[-0.933,-2.435],[3.688,-6.854],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.428,2.572],[2.822,7.366],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.972,-34.555],[-8.783,-17.403],[-10.412,5.456],[-17.588,5.973]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.277,-7.674],[-0.933,-2.435],[3.688,-6.854],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.428,2.572],[2.822,7.366],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.972,-34.555],[-8.783,-17.403],[-10.412,5.456],[-17.588,5.973]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":99,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-4.037,-3.724],[-0.073,-8.921],[1.629,-2.64],[5.296,-3.74],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[4.432,4.088],[0.041,4.96],[-4.144,6.713],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-7.059,-64.651],[3.77,-46.147],[-0.381,-35.298],[-13.048,-22.01],[-24.125,-31.347]],"c":false}]},{"t":105}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":71,"op":102,"st":71,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"left arm","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[8.1]},{"i":{"x":[0.746],"y":[0.982]},"o":{"x":[0.167],"y":[0]},"t":18,"s":[8.1],"e":[-33.9]},{"i":{"x":[0.727],"y":[0.856]},"o":{"x":[0.457],"y":[-0.104]},"t":30,"s":[-33.9],"e":[-29.6]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":32,"s":[-29.6],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":46,"s":[0],"e":[0]},{"i":{"x":[0.524],"y":[1.027]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[0],"e":[43.2]},{"i":{"x":[0.453],"y":[1]},"o":{"x":[0.43],"y":[0.558]},"t":76,"s":[43.2],"e":[41.4]},{"t":84}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[-25.227,-75.935,0],"e":[-17.727,-72.935,0],"to":[1.25,0.5,0],"ti":[-1.25,-0.5,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[-25.227,-75.935,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.689],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.214,-2.23],[-10.553,-7.794]],"o":[[4.67,-0.755],[11.625,6.153],[0,0]],"v":[[-34.176,-75.363],[-20.373,-73.765],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[0,0],[-4.214,-2.23],[-10.553,-7.794]],"o":[[4.67,-0.755],[11.625,6.153],[0,0]],"v":[[-34.176,-75.363],[-20.373,-73.765],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-3.905,-2.647],[-9.137,-8.126]],"o":[[4.538,1.406],[10.708,7.25],[0,0]],"v":[[-32.305,-79.013],[-19.248,-72.297],[5.816,-49.577]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[-3.905,-2.647],[-9.137,-8.126]],"o":[[4.538,1.406],[10.708,7.25],[0,0]],"v":[[-32.305,-79.013],[-19.248,-72.297],[5.816,-49.577]],"c":false}],"e":[{"i":[[0,0],[-3.851,-2.719],[-8.892,-8.184]],"o":[[4.515,1.782],[10.549,7.441],[0,0]],"v":[[-31.992,-79.511],[-19.053,-72.042],[5.343,-49.941]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-3.851,-2.719],[-8.892,-8.184]],"o":[[4.515,1.782],[10.549,7.441],[0,0]],"v":[[-31.992,-79.511],[-19.053,-72.042],[5.343,-49.941]],"c":false}],"e":[{"i":[[0,0],[-3.69,-2.936],[-8.154,-8.357]],"o":[[4.446,2.908],[10.071,8.012],[0,0]],"v":[[-31.323,-80.583],[-18.466,-71.276],[4.305,-49.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[-3.69,-2.936],[-8.154,-8.357]],"o":[[4.446,2.908],[10.071,8.012],[0,0]],"v":[[-31.323,-80.583],[-18.466,-71.276],[4.305,-49.053]],"c":false}],"e":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.436,3.071],[10.002,8.095],[0,0]],"v":[[-31.228,-80.768],[-18.381,-71.166],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.436,3.071],[10.002,8.095],[0,0]],"v":[[-31.228,-80.768],[-18.381,-71.166],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.389,2.674],[10.002,8.095],[0,0]],"v":[[-31.475,-80.228],[-18.381,-71.166],[5.778,-49.676]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.389,2.674],[10.002,8.095],[0,0]],"v":[[-31.475,-80.228],[-18.381,-71.166],[5.778,-49.676]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.324,-76.705],[-20.578,-73.99],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.324,-76.705],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.658],[-20.578,-73.99],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.658],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.204,-2.452],[-10.958,-8.32]],"o":[[4.621,-0.121],[11.37,6.639],[0,0]],"v":[[-34.534,-76.51],[-20.522,-73.957],[6.806,-49.133]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0,0],[-4.204,-2.452],[-10.958,-8.32]],"o":[[4.621,-0.121],[11.37,6.639],[0,0]],"v":[[-34.534,-76.51],[-20.522,-73.957],[6.806,-49.133]],"c":false}],"e":[{"i":[[0,0],[-4.317,-2.509],[-11.472,-8.987]],"o":[[4.821,-0.75],[11.391,6.634],[0,0]],"v":[[-35.391,-76.195],[-20.673,-74.166],[7.556,-47.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[0,0],[-4.317,-2.509],[-11.472,-8.987]],"o":[[4.821,-0.75],[11.391,6.634],[0,0]],"v":[[-35.391,-76.195],[-20.673,-74.166],[7.556,-47.607]],"c":false}],"e":[{"i":[[0,0],[-4.429,-2.566],[-11.985,-9.654]],"o":[[5.093,-1.105],[11.412,6.63],[0,0]],"v":[[-36.266,-75.941],[-20.824,-74.375],[8.704,-45.73]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[0,0],[-4.429,-2.566],[-11.985,-9.654]],"o":[[5.093,-1.105],[11.412,6.63],[0,0]],"v":[[-36.266,-75.941],[-20.824,-74.375],[8.704,-45.73]],"c":false}],"e":[{"i":[[0,0],[-4.57,-2.573],[-9.876,-5.901]],"o":[[4.966,-1.346],[13.683,7.684],[0,0]],"v":[[-37.149,-75.605],[-20.899,-74.466],[10.86,-42.798]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-4.57,-2.573],[-9.876,-5.901]],"o":[[4.966,-1.346],[13.683,7.684],[0,0]],"v":[[-37.149,-75.605],[-20.899,-74.466],[10.86,-42.798]],"c":false}],"e":[{"i":[[0,0],[-4.711,-2.58],[-7.767,-2.149]],"o":[[4.838,-1.586],[15.954,8.738],[0,0]],"v":[[-37.982,-74.993],[-20.974,-74.558],[13.016,-39.867]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[-4.711,-2.58],[-7.767,-2.149]],"o":[[4.838,-1.586],[15.954,8.738],[0,0]],"v":[[-37.982,-74.993],[-20.974,-74.558],[13.016,-39.867]],"c":false}],"e":[{"i":[[0,0],[-4.57,-3.056],[-6.792,-1.944]],"o":[[6.505,-2.454],[13.909,9.303],[0,0]],"v":[[-38.802,-74.031],[-20.495,-74.297],[14.662,-37.792]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[-4.57,-3.056],[-6.792,-1.944]],"o":[[6.505,-2.454],[13.909,9.303],[0,0]],"v":[[-38.802,-74.031],[-20.495,-74.297],[14.662,-37.792]],"c":false}],"e":[{"i":[[0,0],[-4.817,-3.042],[-9.864,-6.258]],"o":[[5.849,-2.715],[13.133,8.401],[0,0]],"v":[[-38.983,-73.029],[-20.46,-74.298],[15.798,-36.146]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0,0],[-4.817,-3.042],[-9.864,-6.258]],"o":[[5.849,-2.715],[13.133,8.401],[0,0]],"v":[[-38.983,-73.029],[-20.46,-74.298],[15.798,-36.146]],"c":false}],"e":[{"i":[[0,0],[-6.112,-3.559],[-16.01,-14.884]],"o":[[4.538,-3.238],[11.517,6.706],[0,0]],"v":[[-39.279,-70.827],[-20.221,-74.038],[17.284,-34.146]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,0],[-6.112,-3.559],[-16.01,-14.884]],"o":[[4.538,-3.238],[11.517,6.706],[0,0]],"v":[[-39.279,-70.827],[-20.221,-74.038],[17.284,-34.146]],"c":false}],"e":[{"i":[[0,0],[-5.117,-2.939],[-17.667,-17.037]],"o":[[4.446,-3.795],[11.603,6.665],[0,0]],"v":[[-38.948,-69.066],[-20.363,-74.409],[18.26,-33.072]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0,0],[-5.117,-2.939],[-17.667,-17.037]],"o":[[4.446,-3.795],[11.603,6.665],[0,0]],"v":[[-38.948,-69.066],[-20.363,-74.409],[18.26,-33.072]],"c":false}],"e":[{"i":[[0,0],[-5.578,-3.16],[-18.495,-18.113]],"o":[[4.4,-4.073],[11.661,6.617],[0,0]],"v":[[-38.979,-68.457],[-20.137,-74.316],[18.428,-33.092]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0,0],[-5.578,-3.16],[-18.495,-18.113]],"o":[[4.4,-4.073],[11.661,6.617],[0,0]],"v":[[-38.979,-68.457],[-20.137,-74.316],[18.428,-33.092]],"c":false}],"e":[{"i":[[0,0],[-6.04,-3.381],[-19.324,-19.19]],"o":[[4.354,-4.352],[11.719,6.57],[0,0]],"v":[[-39.011,-67.848],[-19.985,-74.413],[18.658,-33.025]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0,0],[-6.04,-3.381],[-19.324,-19.19]],"o":[[4.354,-4.352],[11.719,6.57],[0,0]],"v":[[-39.011,-67.848],[-19.985,-74.413],[18.658,-33.025]],"c":false}],"e":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.633,-4.946],[11.761,6.562],[0,0]],"v":[[-39.247,-67.494],[-20.016,-74.003],[18.99,-32.3]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.633,-4.946],[11.761,6.562],[0,0]],"v":[[-39.247,-67.494],[-20.016,-74.003],[18.99,-32.3]],"c":false}],"e":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.853,-4.779],[11.761,6.562],[0,0]],"v":[[-39.765,-67.703],[-19.787,-73.8],[19.081,-32.386]],"c":false}]},{"t":84}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-3.618,-2.448],[-5.499,-0.272]],"o":[[3.522,3.439],[3.171,2.519],[11.525,-0.559]],"v":[[-19.561,-41.08],[-10.481,-32.836],[5.467,-25.517]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-3.618,-2.448],[-5.499,-0.272]],"o":[[3.522,3.439],[3.171,2.519],[11.525,-0.559]],"v":[[-19.561,-41.08],[-10.481,-32.836],[5.467,-25.517]],"c":false}],"e":[{"i":[[0,0],[-2.536,-2.091],[-6.177,-0.331]],"o":[[2.841,2.771],[3.277,2.799],[11.184,-0.705]],"v":[[-19.553,-41.018],[-12.165,-34.008],[5.632,-25.444]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-2.536,-2.091],[-6.177,-0.331]],"o":[[2.841,2.771],[3.277,2.799],[11.184,-0.705]],"v":[[-19.553,-41.018],[-12.165,-34.008],[5.632,-25.444]],"c":false}],"e":[{"i":[[0,0],[-2.378,-2.039],[-4.817,-1.149]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[2.303,-26.101]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[-2.378,-2.039],[-4.817,-1.149]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[2.303,-26.101]],"c":false}],"e":[{"i":[[0,0],[-2.378,-2.039],[-4.598,-0.986]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[1.987,-26.103]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,0],[-2.378,-2.039],[-4.598,-0.986]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[1.987,-26.103]],"c":false}],"e":[{"i":[[0,0],[-2.349,-2.03],[-4.314,-2.14]],"o":[[2.968,2.463],[3.295,2.847],[11.651,5.779]],"v":[[-20.204,-41.481],[-12.454,-34.209],[-0.868,-27.092]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[0,0],[-2.349,-2.03],[-4.314,-2.14]],"o":[[2.968,2.463],[3.295,2.847],[11.651,5.779]],"v":[[-20.204,-41.481],[-12.454,-34.209],[-0.868,-27.092]],"c":false}],"e":[{"i":[[0,0],[-3.076,-2.72],[-3.634,-1.935]],"o":[[3.448,2.993],[3.179,2.696],[11.613,5.851]],"v":[[-22.769,-43.719],[-12.751,-34.217],[-3.45,-27.683]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-3.076,-2.72],[-3.634,-1.935]],"o":[[3.448,2.993],[3.179,2.696],[11.613,5.851]],"v":[[-22.769,-43.719],[-12.751,-34.217],[-3.45,-27.683]],"c":false}],"e":[{"i":[[0,0],[-4.011,-3.608],[-2.758,-1.672]],"o":[[4.065,3.675],[3.03,2.502],[11.565,5.943]],"v":[[-26.067,-46.597],[-13.133,-34.226],[-6.075,-28.771]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-4.011,-3.608],[-2.758,-1.672]],"o":[[4.065,3.675],[3.03,2.502],[11.565,5.943]],"v":[[-26.067,-46.597],[-13.133,-34.226],[-6.075,-28.771]],"c":false}],"e":[{"i":[[0,0],[-5.01,-4.557],[-1.823,-1.391]],"o":[[4.725,4.403],[2.871,2.295],[11.513,6.041]],"v":[[-29.594,-49.674],[-13.542,-34.236],[-8.772,-30.251]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-5.01,-4.557],[-1.823,-1.391]],"o":[[4.725,4.403],[2.871,2.295],[11.513,6.041]],"v":[[-29.594,-49.674],[-13.542,-34.236],[-8.772,-30.251]],"c":false}],"e":[{"i":[[0,0],[-5.155,-4.796],[-1.883,-1.741]],"o":[[5.05,4.762],[2.217,2.096],[1.174,1.046]],"v":[[-31.046,-50.48],[-16.384,-36.769],[-10.917,-31.777]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[-5.155,-4.796],[-1.883,-1.741]],"o":[[5.05,4.762],[2.217,2.096],[1.174,1.046]],"v":[[-31.046,-50.48],[-16.384,-36.769],[-10.917,-31.777]],"c":false}],"e":[{"i":[[0,0],[-5.104,-4.684],[-3.308,-2.141]],"o":[[3.648,4.663],[3.339,3.085],[3.449,2.218]],"v":[[-33.089,-51.535],[-21.123,-38.449],[-10.582,-30.507]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-5.104,-4.684],[-3.308,-2.141]],"o":[[3.648,4.663],[3.339,3.085],[3.449,2.218]],"v":[[-33.089,-51.535],[-21.123,-38.449],[-10.582,-30.507]],"c":false}],"e":[{"i":[[0,0],[-7.095,-5.236],[-2.558,-1.472]],"o":[[4.958,6.354],[2.606,1.98],[9.974,5.582]],"v":[[-36.411,-54.009],[-18.154,-35.168],[-9.441,-29.152]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[-7.095,-5.236],[-2.558,-1.472]],"o":[[4.958,6.354],[2.606,1.98],[9.974,5.582]],"v":[[-36.411,-54.009],[-18.154,-35.168],[-9.441,-29.152]],"c":false}],"e":[{"i":[[0,0],[-7.522,-5.355],[-2.398,-1.329]],"o":[[6.481,6.343],[2.448,1.743],[11.375,6.304]],"v":[[-37.124,-54.541],[-15.56,-33.48],[-7.771,-28.499]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-7.522,-5.355],[-2.398,-1.329]],"o":[[6.481,6.343],[2.448,1.743],[11.375,6.304]],"v":[[-37.124,-54.541],[-15.56,-33.48],[-7.771,-28.499]],"c":false}],"e":[{"i":[[0,0],[-7.307,-5.645],[-4.842,-1.695]],"o":[[6.481,6.343],[4.005,3.094],[12.275,4.297]],"v":[[-36.245,-52.885],[-14.415,-33.128],[-2.281,-26.517]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-7.307,-5.645],[-4.842,-1.695]],"o":[[6.481,6.343],[4.005,3.094],[12.275,4.297]],"v":[[-36.245,-52.885],[-14.415,-33.128],[-2.281,-26.517]],"c":false}],"e":[{"i":[[0,0],[-7.584,-5.196],[-4.218,-1.237]],"o":[[6.481,6.343],[3.653,2.606],[12.474,3.148]],"v":[[-32.958,-50.864],[-11.367,-31.522],[-0.382,-26.192]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-7.584,-5.196],[-4.218,-1.237]],"o":[[6.481,6.343],[3.653,2.606],[12.474,3.148]],"v":[[-32.958,-50.864],[-11.367,-31.522],[-0.382,-26.192]],"c":false}],"e":[{"i":[[0,0],[-7.94,-4.619],[-3.415,-0.649]],"o":[[6.481,6.343],[3.2,1.979],[12.729,1.67]],"v":[[-28.733,-48.265],[-7.427,-29.526],[2.08,-25.842]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[0,0],[-7.94,-4.619],[-3.415,-0.649]],"o":[[6.481,6.343],[3.2,1.979],[12.729,1.67]],"v":[[-28.733,-48.265],[-7.427,-29.526],[2.08,-25.842]],"c":false}],"e":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-8.035,-4.491],[-2.916,-0.054]],"o":[[6.481,6.343],[2.649,1.485],[13.002,0.213]],"v":[[-24.177,-45.464],[-5.197,-28.787],[4.303,-25.739]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[-8.035,-4.491],[-2.916,-0.054]],"o":[[6.481,6.343],[2.649,1.485],[13.002,0.213]],"v":[[-24.177,-45.464],[-5.197,-28.787],[4.303,-25.739]],"c":false}],"e":[{"i":[[0,0],[-7.568,-5.29],[-3.508,-0.117]],"o":[[6.481,6.343],[2.547,1.781],[12.998,0.432]],"v":[[-24.177,-45.464],[-8.489,-30.476],[3.58,-25.177]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0,0],[-7.568,-5.29],[-3.508,-0.117]],"o":[[6.481,6.343],[2.547,1.781],[12.998,0.432]],"v":[[-24.177,-45.464],[-8.489,-30.476],[3.58,-25.177]],"c":false}],"e":[{"i":[[0,0],[-7.337,-5.593],[-3.024,-0.171]],"o":[[6.21,6.599],[2.47,1.882],[12.976,0.79]],"v":[[-24.245,-45.447],[-9.2,-29.839],[2.12,-24.392]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[0,0],[-7.337,-5.593],[-3.024,-0.171]],"o":[[6.21,6.599],[2.47,1.882],[12.976,0.79]],"v":[[-24.245,-45.447],[-9.2,-29.839],[2.12,-24.392]],"c":false}],"e":[{"i":[[0,0],[-7.107,-5.895],[-2.54,-0.225]],"o":[[5.938,6.855],[2.392,1.984],[12.955,1.147]],"v":[[-24.312,-45.43],[-9.911,-29.201],[0.69,-23.108]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":64,"s":[{"i":[[0,0],[-7.107,-5.895],[-2.54,-0.225]],"o":[[5.938,6.855],[2.392,1.984],[12.955,1.147]],"v":[[-24.312,-45.43],[-9.911,-29.201],[0.69,-23.108]],"c":false}],"e":[{"i":[[0,0],[-6.943,-6.082],[-2.7,-0.674]],"o":[[5.748,7.01],[2.337,2.047],[12.53,2.949]],"v":[[-24.214,-45.515],[-10.206,-28.602],[-0.016,-21.906]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-6.943,-6.082],[-2.7,-0.674]],"o":[[5.748,7.01],[2.337,2.047],[12.53,2.949]],"v":[[-24.214,-45.515],[-10.206,-28.602],[-0.016,-21.906]],"c":false}],"e":[{"i":[[0,0],[-6.779,-6.27],[-2.859,-1.122]],"o":[[5.559,7.165],[2.282,2.11],[12.106,4.751]],"v":[[-24.116,-45.6],[-10.611,-28.618],[-0.833,-21.32]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":66,"s":[{"i":[[0,0],[-6.779,-6.27],[-2.859,-1.122]],"o":[[5.559,7.165],[2.282,2.11],[12.106,4.751]],"v":[[-24.116,-45.6],[-10.611,-28.618],[-0.833,-21.32]],"c":false}],"e":[{"i":[[0,0],[-6.546,-6.504],[-2.922,-1.171]],"o":[[5.296,7.355],[2.203,2.189],[12.065,4.833]],"v":[[-23.637,-46.238],[-9.979,-29.599],[-1.056,-21.143]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[-6.546,-6.504],[-2.922,-1.171]],"o":[[5.296,7.355],[2.203,2.189],[12.065,4.833]],"v":[[-23.637,-46.238],[-9.979,-29.599],[-1.056,-21.143]],"c":false}],"e":[{"i":[[0,0],[-6.313,-6.738],[-2.492,-0.541]],"o":[[5.033,7.544],[2.125,2.268],[12.709,2.76]],"v":[[-23.158,-46.877],[-10.902,-28.973],[-1.147,-21.6]],"c":false}]},{"t":68}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":" 6","parent":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":31,"s":[-0.151],"e":[99.849]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[99.849],"e":[-44.151]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.447],"y":[0.05]},"t":52,"s":[-44.151],"e":[-73.651]},{"t":61}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[87.558],"e":[78.165]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[78.165],"e":[78.394]},{"i":{"x":[0.919],"y":[-0.443]},"o":{"x":[0.167],"y":[0]},"t":52,"s":[78.394],"e":[81.608]},{"t":61}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[-113.474],"e":[-129.635]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.66],"y":[0]},"t":37,"s":[-129.635],"e":[-54.885]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[-54.885],"e":[-140.688]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":52,"s":[-140.688],"e":[-140.688]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[-140.688],"e":[-108.045]},{"t":61}],"ix":4}},"a":{"a":0,"k":[77.835,-112.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.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413],[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0]],"o":[[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0],[0,0.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413]],"v":[[92.71,-105.499],[92.71,-120.008],[91.555,-122.008],[78.99,-129.263],[76.68,-129.263],[64.115,-122.008],[62.96,-120.008],[62.96,-105.499],[64.115,-103.499],[76.68,-96.244],[78.99,-96.244],[91.555,-103.499]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823529412,0.521568627451,0.956862804936,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":31,"op":62,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":" 5","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-8.267,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[50.735,-15.692,0],"e":[87.646,-23.988,0],"to":[6.152,-1.383,0],"ti":[-3.379,1.573,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[87.646,-23.988,0],"e":[71.006,-25.129,0],"to":[3.379,-1.573,0],"ti":[0.372,7.788,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":44,"s":[71.006,-25.129,0],"e":[85.414,-70.717,0],"to":[-0.372,-7.788,0],"ti":[-2.401,7.598,0]},{"t":55}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-77.267,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":[[3.722,7.328],[0,0],[-7.328,3.722],[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0]],"o":[[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0],[3.722,7.328],[0,0],[-7.328,3.722]],"v":[[64.459,-70.474],[64.459,-70.474],[70.988,-90.481],[71.204,-90.59],[91.211,-84.061],[91.211,-84.061],[84.681,-64.054],[84.465,-63.944]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.972549021244,0.509803950787,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":" 4","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[-326],"e":[-115]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":46,"s":[-115],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[0],"e":[24]},{"t":61}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":0,"s":[40.299,16.694,0],"e":[70.913,-3.83,0],"to":[5.102,-3.421,0],"ti":[-5.102,8.087,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":46,"s":[70.913,-3.83,0],"e":[70.913,-31.83,0],"to":[5.102,-8.087,0],"ti":[0,4.667,0]},{"t":56}],"ix":2,"l":2},"a":{"a":0,"k":[77.32,-35.798,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.665,-1.528],[-0.581,-0.776],[0,0],[0.705,-2.679],[0.23,-1.529],[-5.535,0.02],[0.376,4.941],[0.368,2.246],[-1.221,2.134],[0,0],[-0.387,0.907],[0.213,2.205],[6.128,0.358],[-0.026,-7.219]],"o":[[0.392,0.9],[0,0],[1.393,2.395],[-0.391,1.484],[-0.803,5.349],[4.864,-0.018],[-0.174,-2.282],[-0.394,-2.405],[0,0],[0.576,-0.78],[0.798,-1.871],[-0.59,-6.11],[-7.319,-0.427],[0.006,1.768]],"v":[[65.772,-40.987],[67.239,-38.466],[68.813,-35.76],[69.886,-27.837],[68.763,-23.333],[77.44,-12.997],[86.192,-22.224],[84.708,-28.878],[85.902,-35.822],[87.456,-38.54],[88.905,-41.075],[89.85,-47.253],[78.076,-58.578],[64.729,-45.963]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":" 3","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.44],"y":[0.88]},"o":{"x":[0.575],"y":[-0.156]},"t":0,"s":[12],"e":[-8.592]},{"i":{"x":[0.507],"y":[1.099]},"o":{"x":[0.557],"y":[-0.122]},"t":22,"s":[-8.592],"e":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.709],"y":[-0.161]},"t":39,"s":[12],"e":[18.8]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[18.8],"e":[-14]},{"t":57}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.44,"y":0.88},"o":{"x":0.575,"y":0.156},"t":0,"s":[67.106,32.567,0],"e":[84.002,28.008,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.507,"y":0.901},"o":{"x":0.557,"y":0.122},"t":22,"s":[84.002,28.008,0],"e":[67.106,32.567,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.709,"y":0.088},"t":39,"s":[67.106,32.567,0],"e":[71.976,35.311,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[71.976,35.311,0],"e":[70.339,21.422,0],"to":[0,0,0],"ti":[0,0,0]},{"t":57}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,20.502,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":[[1.616,-1.616],[0,0],[1.616,1.616],[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0]],"o":[[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0],[1.616,-1.616],[0,0],[1.616,1.616]],"v":[[107.605,23.427],[80.761,50.272],[74.909,50.272],[48.064,23.427],[48.064,17.576],[74.909,-9.269],[80.761,-9.269],[107.605,17.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.658823549747,0.32549020648,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":59,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":" 15","parent":32,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.835,-95.935,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[0,0],[0,0],[-0.139,-0.103],[0,0]],"o":[[0,0],[0.087,0.075],[0,0],[0,0]],"v":[[70.784,-114.454],[70.886,-114.403],[71.012,-114.314],[71.175,-114.215]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.502,-0.017],[0,0]],"o":[[0,0],[0.366,0.364],[0,0],[0,0]],"v":[[70.784,-114.454],[76.151,-109.096],[76.28,-109.108],[76.825,-109.007]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[{"i":[[0,0],[0,0],[-0.502,-0.017],[0,0]],"o":[[0,0],[0.366,0.364],[0,0],[0,0]],"v":[[70.784,-114.454],[76.151,-109.096],[76.28,-109.108],[76.825,-109.007]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[79.255,-108.419]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[79.255,-108.419]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[91.529,-120.775]],"c":false}]},{"t":112}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98,"op":323,"st":59,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":" 9","parent":34,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-5.971],"e":[-2.322]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":67.4,"s":[-2.322],"e":[-0.6]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":76.374,"s":[-0.6],"e":[-3.152]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94.323,"s":[-3.152],"e":[-1.923]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":112.271,"s":[-1.923],"e":[-2.515]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":130.221,"s":[-2.515],"e":[-2.23]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":148.169,"s":[-2.23],"e":[-2.367]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":166.118,"s":[-2.367],"e":[-2.301]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":184.066,"s":[-2.301],"e":[-2.333]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":202.016,"s":[-2.333],"e":[-2.317]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":219.964,"s":[-2.317],"e":[-2.325]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":237.913,"s":[-2.325],"e":[-2.321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":255.861,"s":[-2.321],"e":[-2.323]},{"t":273.810546875}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[80.192,-103.391,0],"e":[78.163,-96.131,0],"to":[-0.338,1.21,0],"ti":[0.309,-0.711,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[78.163,-96.131,0],"e":[78.337,-99.126,0],"to":[-0.309,0.711,0],"ti":[-0.029,0.499,0]},{"t":66}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413],[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0]],"o":[[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0],[0,0.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413]],"v":[[92.71,-105.499],[92.71,-120.008],[91.555,-122.008],[78.99,-129.263],[76.68,-129.263],[64.115,-122.008],[62.96,-120.008],[62.96,-105.499],[64.115,-103.499],[76.68,-96.244],[78.99,-96.244],[91.555,-103.499]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823529412,0.521568627451,0.956862804936,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":61,"op":393,"st":6,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":" 17","parent":32,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.471,"ix":10},"p":{"a":0,"k":[77.835,-95.935,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[91.308,-120.843]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[95.027,-124.185]],"c":false}]},{"t":117}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921583587,0.658823529412,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":112,"op":441,"st":59,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":" 12","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[-32],"e":[1.037]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":70.4,"s":[1.037],"e":[16.63]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79.374,"s":[16.63],"e":[-6.471]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97.323,"s":[-6.471],"e":[4.653]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":115.271,"s":[4.653],"e":[-0.704]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":133.221,"s":[-0.704],"e":[1.875]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":151.169,"s":[1.875],"e":[0.633]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":169.118,"s":[0.633],"e":[1.231]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":187.066,"s":[1.231],"e":[0.943]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":205.016,"s":[0.943],"e":[1.082]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":222.964,"s":[1.082],"e":[1.015]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":240.913,"s":[1.015],"e":[1.047]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":258.861,"s":[1.047],"e":[1.032]},{"t":276.810546875}],"ix":10},"p":{"a":0,"k":[76.074,-72.679,0],"ix":2,"l":2},"a":{"a":0,"k":[78.137,-72.824,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":[[3.722,7.328],[0,0],[-7.328,3.722],[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0]],"o":[[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0],[3.722,7.328],[0,0],[-7.328,3.722]],"v":[[64.459,-70.474],[64.459,-70.474],[70.988,-90.481],[71.204,-90.59],[91.211,-84.061],[91.211,-84.061],[84.681,-64.054],[84.465,-63.944]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.972549021244,0.509803950787,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":62,"op":393,"st":6,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":" 11","parent":36,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.212],"y":[0]},"t":21,"s":[0],"e":[38]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[38],"e":[0.61]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":69.4,"s":[0.61],"e":[-17.038]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":78.374,"s":[-17.038],"e":[9.108]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":96.323,"s":[9.108],"e":[-3.482]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":114.271,"s":[-3.482],"e":[2.58]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":132.221,"s":[2.58],"e":[-0.339]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":150.169,"s":[-0.339],"e":[1.067]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":168.118,"s":[1.067],"e":[0.39]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":186.066,"s":[0.39],"e":[0.716]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":204.016,"s":[0.716],"e":[0.559]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":221.964,"s":[0.559],"e":[0.634]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":239.913,"s":[0.634],"e":[0.598]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":257.861,"s":[0.598],"e":[0.615]},{"t":275.810546875}],"ix":10},"p":{"a":0,"k":[77.32,-12.997,0],"ix":2,"l":2},"a":{"a":0,"k":[77.32,-12.997,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.665,-1.528],[-0.581,-0.776],[0,0],[0.705,-2.679],[0.23,-1.529],[-5.535,0.02],[0.376,4.941],[0.368,2.246],[-1.221,2.134],[0,0],[-0.387,0.907],[0.213,2.205],[6.128,0.358],[-0.026,-7.219]],"o":[[0.392,0.9],[0,0],[1.393,2.395],[-0.391,1.484],[-0.803,5.349],[4.864,-0.018],[-0.174,-2.282],[-0.394,-2.405],[0,0],[0.576,-0.78],[0.798,-1.871],[-0.59,-6.11],[-7.319,-0.427],[0.006,1.768]],"v":[[65.772,-40.987],[67.239,-38.466],[68.813,-35.76],[69.886,-27.837],[68.763,-23.333],[77.44,-12.997],[86.192,-22.224],[84.708,-28.878],[85.902,-35.822],[87.456,-38.54],[88.905,-41.075],[89.85,-47.253],[78.076,-58.578],[64.729,-45.963]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":61,"op":393,"st":6,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":" 10","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[-14],"e":[0.564]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":68.4,"s":[0.564],"e":[7.438]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":77.374,"s":[7.438],"e":[-2.746]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":95.323,"s":[-2.746],"e":[2.158]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":113.271,"s":[2.158],"e":[-0.203]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":131.221,"s":[-0.203],"e":[0.934]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":149.169,"s":[0.934],"e":[0.386]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":167.118,"s":[0.386],"e":[0.65]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":185.066,"s":[0.65],"e":[0.523]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":203.016,"s":[0.523],"e":[0.584]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":220.964,"s":[0.584],"e":[0.554]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":238.913,"s":[0.554],"e":[0.569]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":256.861,"s":[0.569],"e":[0.562]},{"t":274.810546875}],"ix":10},"p":{"a":0,"k":[77.835,51.484,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,51.484,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":[[1.616,-1.616],[0,0],[1.616,1.616],[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0]],"o":[[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0],[1.616,-1.616],[0,0],[1.616,1.616]],"v":[[107.605,23.427],[80.761,50.272],[74.909,50.272],[48.064,23.427],[48.064,17.576],[74.909,-9.269],[80.761,-9.269],[107.605,17.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.658823549747,0.32549020648,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":59,"op":393,"st":6,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":" 2","parent":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.173],"y":[0.074]},"t":5,"s":[15.1],"e":[-4]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[-4],"e":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":61.4,"s":[0],"e":[1.888]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70.374,"s":[1.888],"e":[-0.909]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":88.323,"s":[-0.909],"e":[0.438]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106.271,"s":[0.438],"e":[-0.211]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":124.221,"s":[-0.211],"e":[0.102]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":142.169,"s":[0.102],"e":[-0.049]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":160.118,"s":[-0.049],"e":[0.024]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":178.066,"s":[0.024],"e":[-0.011]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":196.016,"s":[-0.011],"e":[0.005]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":213.964,"s":[0.005],"e":[-0.003]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":231.913,"s":[-0.003],"e":[0.001]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":249.861,"s":[0.001],"e":[-0.001]},{"t":267.810546875}],"ix":10},"p":{"a":0,"k":[78.022,91.237,0],"ix":2,"l":2},"a":{"a":0,"k":[78.022,91.237,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":[[1.749,0],[0,0],[-0.875,-1.515],[0,0],[-0.875,1.515],[0,0]],"o":[[0,0],[-1.749,0],[0,0],[0.875,1.515],[0,0],[0.875,-1.515]],"v":[[96.775,54],[58.895,54],[56.927,57.408],[75.867,90.213],[79.802,90.213],[98.742,57.408]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.98431372549,0.737254901961,0.019607843137,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":387,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.835,106.525,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,106.525,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.002,6.768],[0,0],[-6.768,0.002],[0,0],[-0.002,-6.768],[0,0],[6.768,-0.002],[0,0]],"o":[[0,0],[-0.002,-6.768],[0,0],[6.768,-0.002],[0,0],[0.002,6.768],[0,0],[-6.768,0.002]],"v":[[51.245,106.555],[51.245,106.554],[63.495,94.295],[92.165,94.246],[104.424,106.496],[104.424,106.496],[92.174,118.755],[63.504,118.805]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917647063732,0.262745112181,0.207843139768,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":387,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"ground","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,118.813,0],"ix":2,"l":2},"a":{"a":0,"k":[0,118.813,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-232.588,118.813],[232.588,118.813]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":383,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":1,"nm":"Bkrnd","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[173,140,0],"ix":2,"l":2},"a":{"a":0,"k":[173,140,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":346,"sh":280,"sc":"#ffffff","ip":0,"op":382,"st":0,"bm":0}],"markers":[{"tm":125,"cm":"1","dr":0},{"tm":321,"cm":"2","dr":0}]}
diff --git a/chrome/browser/resources/chromeos/login/images/downloading_apps.json b/chrome/browser/resources/chromeos/login/animations/downloading_apps.json similarity index 100% rename from chrome/browser/resources/chromeos/login/images/downloading_apps.json rename to chrome/browser/resources/chromeos/login/animations/downloading_apps.json
diff --git a/chrome/browser/resources/chromeos/login/images/gesture_go_back.json b/chrome/browser/resources/chromeos/login/animations/gesture_go_back.json similarity index 100% rename from chrome/browser/resources/chromeos/login/images/gesture_go_back.json rename to chrome/browser/resources/chromeos/login/animations/gesture_go_back.json
diff --git a/chrome/browser/resources/chromeos/login/images/gesture_go_home.json b/chrome/browser/resources/chromeos/login/animations/gesture_go_home.json similarity index 100% rename from chrome/browser/resources/chromeos/login/images/gesture_go_home.json rename to chrome/browser/resources/chromeos/login/animations/gesture_go_home.json
diff --git a/chrome/browser/resources/chromeos/login/images/gesture_hotseat_overview.json b/chrome/browser/resources/chromeos/login/animations/gesture_hotseat_overview.json similarity index 100% rename from chrome/browser/resources/chromeos/login/images/gesture_hotseat_overview.json rename to chrome/browser/resources/chromeos/login/animations/gesture_hotseat_overview.json
diff --git a/chrome/browser/resources/chromeos/login/animations/welcome_screen_animation.json b/chrome/browser/resources/chromeos/login/animations/welcome_screen_animation.json new file mode 100644 index 0000000..3a4e34f --- /dev/null +++ b/chrome/browser/resources/chromeos/login/animations/welcome_screen_animation.json
@@ -0,0 +1 @@ +{"v":"5.7.6","fr":30,"ip":0,"op":101,"w":648,"h":320,"nm":"R02_Welcome-648x320","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Main Scale Null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[324,160,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[54,54,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Oval_character 1","parent":104,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":29,"ix":3},"y":{"a":0,"k":194.5,"ix":4}},"a":{"a":0,"k":[29,194.5,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-7.431,5.894],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-6.24,-11.036]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.432,6.292],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-3.736,-10.299]],"c":true}]},{"i":{"x":0.57,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.432,6.292],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-3.736,-10.299]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-3.14,7.541],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[0.544,-8.433]],"c":true}]},{"i":{"x":0.77,"y":1},"o":{"x":0.56,"y":0.26},"t":20,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-3.14,7.541],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[0.544,-8.433]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.215,6.235],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-2.42,-9.601]],"c":true}]},{"i":{"x":0.42,"y":1},"o":{"x":0.4,"y":0.1},"t":49,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.215,6.235],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-2.42,-9.601]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-7.16,6.101],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-5.758,-10.881]],"c":true}]},{"t":101}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.173,193.797],"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":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hand 3","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-16.333,"ix":10},"p":{"a":0,"k":[83.128,147.933,0],"ix":2,"l":2},"a":{"a":0,"k":[83.128,147.933,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"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":[[0,0],[2.532,-1.018],[0.837,0.292],[-0.209,0.626]],"o":[[-1.837,2.334],[-0.823,0.331],[-0.838,-0.292],[0,0]],"v":[[5.235,-3.796],[-3.403,2.172],[-5.983,2.505],[-6.65,0.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":2,"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":[[0,0],[3.317,-1.237],[0.891,0.234],[-0.221,0.895]],"o":[[-2.276,2.63],[-0.864,0.321],[-0.891,-0.234],[0,0]],"v":[[5.61,-3.711],[-2.872,2.126],[-5.569,2.477],[-7.013,0.445]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.523,-4.593]],"c":false}],"e":[{"i":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.344,-4.456]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0.382,-0.472],[4.917,0.646],[0.134,0.885]],"o":[[-3.533,4.371],[-1.285,-0.169],[0,0]],"v":[[-3.954,24.911],[-17.795,33.087],[-19.485,31.465]],"c":false}],"e":[{"i":[[0.37,-0.46],[4.931,0.648],[0.134,0.885]],"o":[[-3.534,4.387],[-1.285,-0.169],[0,0]],"v":[[-3.923,24.873],[-17.795,33.087],[-19.485,31.465]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":-1,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"1-right hand 3","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-11.013,4.255],[-17.731,11.232],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.841,14.933]],"c":true}],"e":[{"i":[[0.032,0.027],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-13.632,7.461],[-17.894,11.218],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.153,17.771]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0.032,0.027],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-13.632,7.461],[-17.894,11.218],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.153,17.771]],"c":true}],"e":[{"i":[[0.077,-0.115],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.257,8.772],[-18.056,11.203],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-3.992,18.641]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.077,-0.115],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.257,8.772],[-18.056,11.203],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-3.992,18.641]],"c":true}],"e":[{"i":[[0.156,-0.247],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.629,1.582]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.599,9.167],[-18.219,11.189],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.422,21.54],[-5.154,18.431]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0.156,-0.247],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.629,1.582]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.599,9.167],[-18.219,11.189],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.422,21.54],[-5.154,18.431]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.691,9.256],[-18.381,11.175],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-5.615,18.488]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.691,9.256],[-18.381,11.175],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-5.615,18.488]],"c":true}],"e":[{"i":[[0.143,-0.214],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.059],[-1.024,1.851]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.432,-0.266],[-0.446,-0.299]],"v":[[-15.091,8.836],[-17.882,10.807],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-4.039,18.377]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0.143,-0.214],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.059],[-1.024,1.851]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.432,-0.266],[-0.446,-0.299]],"v":[[-15.091,8.836],[-17.882,10.807],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-4.039,18.377]],"c":true}],"e":[{"i":[[0.05,-0.05],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.156,0.06],[-1.449,2.068]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.813,-0.395],[-0.446,-0.299]],"v":[[-14.267,7.832],[-17.382,10.44],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.464,18.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0.05,-0.05],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.156,0.06],[-1.449,2.068]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.813,-0.395],[-0.446,-0.299]],"v":[[-14.267,7.832],[-17.382,10.44],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.464,18.266]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.89019613827,0.988235353956,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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"leg 8","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[10.23,-6.979],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[87.152,249.23],"e":[78.459,242.816],"to":[-1.449,-1.069],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[78.459,242.816],"e":[87.152,248.73],"to":[0,-0.083],"ti":[-1.449,-0.986]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[87.152,248.73],"e":[87.152,248.73],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-10],"e":[17.626]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[17.626],"e":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-10],"e":[-10]},{"t":36}],"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":"shoes2","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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[1.019,-7.116]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.878,5.994],[-9.663,2.894],[-8.267,-0.472],[-4.679,-8.652]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.878,5.994],[-9.663,2.894],[-8.267,-0.472],[-4.679,-8.652]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[71.552,242.76],"e":[65.832,230.597],"to":[-0.953,-2.027],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[65.832,230.597],"e":[71.552,242.26],"to":[0,-0.083],"ti":[-0.953,-1.944]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[71.552,242.26],"e":[71.552,242.26],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-14],"e":[13.567]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[13.567],"e":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-14],"e":[-14]},{"t":36}],"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":"shoes back","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[3.189,-7.515],[1.602,-2.314]],"o":[[-1.461,3.444],[0,0]],"v":[[-11.052,30.255],[-17.039,43.27]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[3.189,-7.515],[1.602,-2.314]],"o":[[-1.461,3.444],[0,0]],"v":[[-11.052,30.255],[-17.039,43.27]],"c":false}],"e":[{"i":[[3.055,-7.474],[1.544,-2.422]],"o":[[-1.4,3.425],[0,0]],"v":[[-9.788,29.129],[-16.126,43.783]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[3.055,-7.474],[1.544,-2.422]],"o":[[-1.4,3.425],[0,0]],"v":[[-9.788,29.129],[-16.126,43.783]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.16,-7.323],[1.086,-3.052]],"o":[[-0.931,3.156],[0,0]],"v":[[-6.673,38.037],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[2.16,-7.323],[1.086,-3.052]],"o":[[-0.931,3.156],[0,0]],"v":[[-6.673,38.037],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.372]],"c":false}],"e":[{"i":[[0.396,-0.829],[0,0],[0,0]],"o":[[-4.005,8.372],[0,0],[0,0]],"v":[[-24.274,-13.641],[-46.73,27.072],[-17.272,43.283]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0.396,-0.829],[0,0],[0,0]],"o":[[-4.005,8.372],[0,0],[0,0]],"v":[[-24.274,-13.641],[-46.73,27.072],[-17.272,43.283]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.909,-2.794],[0,0],[0,0]],"o":[[-4.826,14.826],[0,0],[0,0]],"v":[[-23.85,-12.762],[-40.793,41.539],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.909,-2.794],[0,0],[0,0]],"o":[[-4.826,14.826],[0,0],[0,0]],"v":[[-23.85,-12.762],[-40.793,41.539],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.627,40.722],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.627,40.722],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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":"middle","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"1-big sqaure","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-1.25,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-24.526,-50.637],[-37.05,50.637],[37.05,50.637],[30.144,-29.532]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[68.022,206.431],"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":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"1-laptop","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[5.356,12.197],[-17.392,13.023]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[178.642,89.983],"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":180,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"1-arm and hand 3","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[0.744]},"t":0,"s":[-9],"e":[2.7]},{"i":{"x":[0.394],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[2.7],"e":[-6]},{"i":{"x":[0.567],"y":[1]},"o":{"x":[0.264],"y":[0]},"t":36,"s":[-6],"e":[3]},{"i":{"x":[0.521],"y":[1]},"o":{"x":[0.216],"y":[0]},"t":49,"s":[3],"e":[-3]},{"i":{"x":[0.521],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":67,"s":[-3],"e":[-3]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[-3],"e":[-9]},{"t":100}],"ix":10},"p":{"a":0,"k":[151.562,128.625,0],"ix":2,"l":2},"a":{"a":0,"k":[151.562,128.625,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],[-0.164,-0.418],[0.403,-0.437],[0.551,-0.224],[4.089,0.984]],"o":[[0.431,0.125],[0.217,0.554],[-0.403,0.438],[-3.898,1.581],[0,0]],"v":[[6.3,-2.689],[7.171,-1.74],[6.786,-0.098],[5.275,0.824],[-7.388,1.704]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","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],[-0.037,-0.873],[0.894,-0.456],[3.681,0.776]],"o":[[1.059,-0.495],[0.043,1.003],[-3.277,1.672],[0,0]],"v":[[4.079,-2.239],[6.206,-1.228],[4.376,0.946],[-6.249,1.958]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":2,"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,0],[-0.037,-0.873],[0.894,-0.456],[3.681,0.775]],"o":[[1.059,-0.495],[0.043,1.002],[-3.277,1.672],[0,0]],"v":[[4.079,-2.238],[6.206,-1.227],[4.376,0.946],[-6.249,1.958]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":2,"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":[[0,0],[-3.03,1.597],[-0.017,0.639],[0.67,0.046],[0.63,-0.232],[2.269,0.215],[2.033,0.229],[1.647,-1.213],[1.159,-2.129]],"o":[[3.312,0.873],[0.566,-0.298],[0.017,-0.671],[-0.669,-0.047],[-2.139,0.786],[-2.037,-0.194],[-2.033,-0.23],[-1.638,1.207],[0,0]],"v":[[2.508,-1.228],[12.482,-2.367],[13.675,-3.747],[12.325,-4.971],[10.383,-4.508],[3.659,-3.637],[-2.39,-4.659],[-8.267,-3.488],[-13.692,5.018]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.418,7.949],[4.419,-7.949]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":2,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.644,-2.912],[6.644,2.912]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":2,"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":[[-11.254,0]],"o":[[6.448,0]],"v":[[0.582,15.475]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[-11.254,0],[-2.149,3.251],[-1.518,6.226]],"o":[[6.448,0],[3.832,-5.798],[0,0]],"v":[[0.582,15.475],[13.051,7.746],[22.55,-15.475]],"c":false}],"e":[{"i":[[-11.012,2.323],[-2.149,3.251],[-1.518,6.226]],"o":[[4.699,-0.991],[3.832,-5.798],[0,0]],"v":[[3.63,15.081],[13.051,7.746],[22.55,-15.475]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.012,2.323],[-2.149,3.251],[-1.518,6.226]],"o":[[4.699,-0.991],[3.832,-5.798],[0,0]],"v":[[3.63,15.081],[13.051,7.746],[22.55,-15.475]],"c":false}],"e":[{"i":[[-11.254,0],[-2.149,3.251],[-1.518,6.226]],"o":[[6.448,0],[3.832,-5.798],[0,0]],"v":[[0.582,15.475],[13.051,7.746],[22.55,-15.475]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"1-laptop 2","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[10.304,-6.253],[5.412,12.975]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":49,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[10.304,-6.253],[5.412,12.975]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529471603,0.89019613827,0.988235353956,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[178.642,89.983],"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":36,"op":180,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"1-arm bottom","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-6,"ix":10},"p":{"a":0,"k":[151.562,128.625,0],"ix":2,"l":2},"a":{"a":0,"k":[151.562,128.625,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"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":[[0,0],[-11.254,0]],"o":[[6.598,9.985],[6.448,0]],"v":[[-22.485,-4.474],[0.582,15.475]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-11.254,0]],"o":[[6.448,0]],"v":[[0.582,15.475]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"1-left hand","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":[[-1.945,-0.705],[-0.312,0.8],[-4.143,1.623],[-0.259,0.399],[0.72,0.247],[-0.314,0.803],[0.031,0.241],[0.744,0.126],[0.187,0.743],[0.659,-0.389],[0.877,0.255],[0.422,-0.104],[1.54,-0.213],[1.251,0.137],[1.406,0.328],[1.361,-0.48],[0.582,-0.422],[1.267,-2.82],[-0.485,-0.515],[-0.608,-0.302],[-1.692,-0.732]],"o":[[0.312,-0.8],[4.426,-0.454],[0.443,-0.174],[0.415,-0.638],[0.728,-0.463],[0.089,-0.226],[-0.095,-0.748],[0.546,-0.537],[-0.188,-0.742],[0.604,-0.683],[-0.416,-0.121],[-1.51,0.371],[-1.247,0.172],[-1.435,-0.155],[-1.405,-0.328],[-0.678,0.24],[-2.504,1.815],[-0.253,0.564],[0.474,0.504],[1.65,0.823],[1.899,0.822]],"v":[[-1.54,9.438],[0.174,4.18],[13.368,2.599],[14.529,1.809],[13.884,-0.064],[15.502,-2.028],[15.629,-2.739],[13.879,-3.904],[14.617,-5.972],[12.848,-6.864],[12.307,-9.098],[11.024,-9.005],[6.444,-8.129],[2.681,-7.974],[-1.535,-8.944],[-5.804,-8.957],[-7.678,-7.906],[-13.457,-0.785],[-15.176,3.667],[-12.323,4.814],[-7.308,7.147]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[174.466,111.82],"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":180,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":1,"nm":"Pale Royal Blue Solid 3","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":6,"ix":10},"p":{"a":0,"k":[297.162,163.41,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[363.375,196.625],[369.25,157.125]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[363.375,196.625],[369.25,157.125]],"c":true}]},{"t":95}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#d2e3fc","ip":36,"op":180,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"front hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-0.188,"ix":10},"p":{"a":0,"k":[114.198,89.625,0],"ix":2,"l":2},"a":{"a":0,"k":[2.52,-2.189,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[0,0],[-5.137,-5.543],[4.707,3.704],[0,0]],"o":[[7.785,1.186],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-4.119,4.544],[4.707,3.704],[0,0]],"o":[[1.108,13.599],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[{"i":[[0,0],[-4.119,4.544],[4.707,3.704],[0,0]],"o":[[1.108,13.599],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":85,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-5.137,-5.543],[4.707,3.704],[0,0]],"o":[[7.785,1.186],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"t":94.9998046875}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":202.8,"st":7.2,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"mouse","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":36,"s":[-58.096],"e":[-43.096]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[-43.096],"e":[-43.096]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[-43.096],"e":[-58.096]},{"t":93}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[121.315,93.502,0],"e":[116.344,94.921,0],"to":[-0.677,1.812,0],"ti":[1.114,0.544,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.408,"y":0},"t":53,"s":[116.344,94.921,0],"e":[116.31,94.891,0],"to":[-0.014,-0.007,0],"ti":[0.01,0.009,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[116.31,94.891,0],"e":[116.382,95.92,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[116.382,95.92,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.734,"y":0.971},"o":{"x":0.167,"y":0.166},"t":84,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.457,"y":0.01},"t":85,"s":[116.31,94.891,0],"e":[121.315,93.502,0],"to":[-0.126,-0.11,0],"ti":[-1.825,2.839,0]},{"t":93}],"ix":2,"l":2},"a":{"a":0,"k":[119.816,95.089,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[120.76,133.087],"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},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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 4","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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 6","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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 12","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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 13","np":1,"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":[[0,0],[-1.191,0.123]],"o":[[-0.082,0.949],[0,0]],"v":[[-1.11,-1.167],[1.254,0.841]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[119.869,94.938],"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 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[88.56,246.151],"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 15","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[75.052,236.26],"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 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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 19","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[86.166,185.898],"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 20","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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 22","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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 23","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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 24","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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 25","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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 27","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.592,92.779],"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 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"1-head-hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":36,"s":[-16],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[0],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0],"e":[-16]},{"t":95}],"ix":10},"p":{"a":0,"k":[115.5,92.562,0],"ix":2,"l":2},"a":{"a":0,"k":[115.5,92.562,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[-1.228,2.267],[1.269,0.074],[1.25,-0.719],[0.664,-0.736],[0.013,-1.849],[-0.801,-1.333],[-0.434,1.067],[0.045,0.088],[0.05,0.27],[-0.327,0.483],[-0.508,-0.973]],"o":[[-1.146,-0.552],[-1.44,-0.084],[-0.859,0.494],[-1.239,1.372],[-0.01,1.514],[0.312,0.521],[0.019,-0.048],[-0.125,-0.244],[-0.107,-0.57],[0.715,-1.056],[2.257,-1.51]],"v":[[6.261,-5.028],[2.132,-6.614],[-2.462,-5.392],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-1.412,3.569],[-1.845,2.905],[-2.105,2.131],[-1.774,0.426],[0.815,0.84]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[0.605,3.494],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[3.434,1.412]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[{"i":[[0.605,3.494],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[3.434,1.412]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[1.269,0.074],[1.25,-0.719],[0.664,-0.736],[0.013,-1.849],[-0.801,-1.333],[-0.434,1.067],[0.045,0.088],[0.05,0.27],[-0.327,0.483],[-0.508,-0.973]],"o":[[-1.146,-0.552],[-1.44,-0.084],[-0.859,0.494],[-1.239,1.372],[-0.01,1.514],[0.312,0.521],[0.019,-0.048],[-0.125,-0.244],[-0.107,-0.57],[0.715,-1.056],[2.257,-1.51]],"v":[[6.261,-5.028],[2.132,-6.614],[-2.462,-5.392],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-1.412,3.569],[-1.845,2.905],[-2.105,2.131],[-1.774,0.426],[0.815,0.84]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[114.041,91.717],"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":180,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"1-arm and hand 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-2.023,-6.292],[-14.971,-9.372],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-2.023,-6.292],[-14.971,-9.372],[-16.407,-14.432]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"head","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":36,"s":[0],"e":[4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[4],"e":[4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[4],"e":[4]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":84,"s":[4],"e":[4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[4],"e":[0]},{"t":95}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[115.5,92.5,0],"e":[115.131,92.5,0],"to":[-0.064,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0},"t":53,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[115.131,92.5,0],"e":[115.131,93,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[115.131,93,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[115.131,92.5,0],"e":[115.5,92.5,0],"to":[-0.203,0,0],"ti":[0.146,0,0]},{"t":95}],"ix":2,"l":2},"a":{"a":0,"k":[115.5,92.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[120.76,133.087],"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},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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 4","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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 6","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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 12","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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 13","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[119.869,94.938],"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 14","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[88.56,246.151],"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 15","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[75.052,236.26],"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 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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 19","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[86.166,185.898],"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 20","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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 22","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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 23","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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 24","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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 25","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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 27","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.235,-2.759],[2.759,-3.235],[3.235,2.759],[-2.759,3.235]],"o":[[3.236,2.759],[-2.759,3.236],[-3.236,-2.759],[2.759,-3.236]],"v":[[4.995,-5.859],[5.859,4.995],[-4.995,5.859],[-5.859,-4.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.592,92.779],"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 28","np":3,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"arm 3","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[101.5,113.5,0],"ix":2,"l":2},"a":{"a":0,"k":[101.5,113.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":1,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[17.778,-25.43],[18.881,-30.456]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"hand","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-16.333,"ix":10},"p":{"a":0,"k":[83.128,147.933,0],"ix":2,"l":2},"a":{"a":0,"k":[83.128,147.933,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.7,-1.859],[7.254,2.036]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.912,-0.933],[-1.65,-0.392],[-1.445,0.495]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.912,-0.933],[-1.65,-0.392],[-1.445,0.495]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[0.003,2.554],[-4.054,1.066],[-2.565,-2.991],[1.491,-1.503]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[0.003,2.554],[-4.054,1.066],[-2.565,-2.991],[1.491,-1.503]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":3,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.772,-2.354],[6.465,2.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":2,"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":[[0,0],[2.532,-1.018],[0.837,0.292],[-0.209,0.626]],"o":[[-1.837,2.334],[-0.823,0.331],[-0.838,-0.292],[0,0]],"v":[[5.235,-3.796],[-3.403,2.172],[-5.983,2.505],[-6.65,0.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":2,"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":[[0,0],[3.317,-1.237],[0.891,0.234],[-0.221,0.895]],"o":[[-2.276,2.63],[-0.864,0.321],[-0.891,-0.234],[0,0]],"v":[[5.61,-3.711],[-2.872,2.126],[-5.569,2.477],[-7.013,0.445]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":2,"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":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478],[-1.369,0.965]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957],[0,0]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.1,-3.747],[5.769,-8.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":2,"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":[[0,0],[-0.658,1.655],[-0.799,2.035]],"o":[[0.611,-1.7],[1.483,-3.729],[2.091,-5.325]],"v":[[-20.694,29.55],[-18.762,24.473],[-15.019,15.317]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":2,"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":[[2.441,-6.683],[3.541,-4.899],[5.448,0.716],[0.134,0.885]],"o":[[-2.073,5.677],[-3.54,4.898],[-1.285,-0.169],[0,0]],"v":[[6.736,1.805],[-3.244,24.014],[-17.795,33.087],[-19.485,31.465]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"arm","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.48],"y":[1]},"o":{"x":[0.26],"y":[0.692]},"t":0,"s":[-2.667],"e":[-7]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":13,"s":[-7],"e":[-2.667]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":27,"s":[-2.667],"e":[-2.667]},{"t":32}],"ix":10},"p":{"a":0,"k":[110.5,104.5,0],"ix":2,"l":2},"a":{"a":0,"k":[110.909,104.928,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":1,"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":[[-0.094,5.676],[-15.46,2.964],[0,0]],"o":[[0.398,-23.99],[2.639,-0.506],[0,0]],"v":[[-15.596,16.705],[12.197,-24.71],[17.778,-25.43]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.735,130.181],"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":"shoulder","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"1-right hand 2","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.669,0.293],[1.112,-1.541],[0.551,-0.968],[-0.948,0.01],[-1.959,2.629]],"o":[[-1.652,2.352],[-0.65,0.904],[-0.151,0.267],[0.895,-1.227],[-1.424,-0.156]],"v":[[5.417,-22.798],[2.053,-18.211],[-1.341,-13.174],[12.865,-8.628],[17.96,-15.479]],"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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"1-right hand","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.669,0.293],[1.112,-1.541],[0.551,-0.968],[-0.045,-0.302],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-0.188,0.475],[-0.826,2.917],[-0.609,3.857]],"o":[[-0.734,2.66],[-0.65,0.904],[-0.151,0.267],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[3.311,-1.334],[1.114,-2.819],[1.065,-3.756],[-1.424,-0.156]],"v":[[-0.732,-13.666],[-7.426,0.476],[-9.521,3.07],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[4.238,10.285],[8.485,2.272],[12.796,-8.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"1-body 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.2,1.652],[-3.075,1.652],[-3.075,-1.651],[1.2,-1.651]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.2,1.652],[-3.075,1.652],[-3.075,-1.651],[1.2,-1.651]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[121.51,133.087],"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":"벨트 악세서리","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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-12.92,1.652],[12.92,1.652],[12.92,-1.651],[-12.92,-1.651]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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":"벨트","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,0],[-4.576,1.017],[-1.341,1.793]],"o":[[3.344,3.286],[2.186,-0.486],[0,0]],"v":[[-8.796,-2.017],[3.655,1.349],[9.315,-2]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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":"목","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0.593,-4.574],[0.24,-1.849]],"o":[[0.304,5.122],[-0.224,1.726],[0,0]],"v":[[0.504,-9.683],[-0.213,4.348],[-0.61,8.151]],"c":false}],"e":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}],"e":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}],"e":[{"i":[[0,0],[0.593,-4.574],[0.24,-1.849]],"o":[[0.304,5.122],[-0.224,1.726],[0,0]],"v":[[0.504,-9.683],[-0.213,4.348],[-0.61,8.151]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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":"가슴","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.114,-4.363]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-0.478,-2.361]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-0.478,-2.361]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.092,-6.349]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.092,-6.349]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.239,-5.238]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.239,-5.238]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.114,-4.363]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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":"허리","np":2,"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":[[0,0]],"o":[[8.372,35.331]],"v":[[6.852,-51.678]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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":"벨트중앙","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"leg 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[10.23,-6.979],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.779,9.104],[5.981,8.858],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[87.152,249.23],"e":[78.459,242.816],"to":[-1.449,-1.069],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[78.459,242.816],"e":[87.152,248.73],"to":[0,-0.083],"ti":[-1.449,-0.986]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[87.152,248.73],"e":[87.152,248.73],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-10],"e":[11.626]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[11.626],"e":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-10],"e":[-10]},{"t":36}],"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":"shoes2","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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[1.019,-7.116]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-4.659,7.481],[-10.444,4.381],[-8.267,-0.472],[-3.853,-10.314]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-4.659,7.481],[-10.444,4.381],[-8.267,-0.472],[-3.853,-10.314]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[71.552,242.76],"e":[65.832,230.597],"to":[-0.953,-2.027],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[65.832,230.597],"e":[71.552,242.26],"to":[0,-0.083],"ti":[-0.953,-1.944]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[71.552,242.26],"e":[71.552,242.26],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-14],"e":[7.567]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[7.567],"e":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-14],"e":[-14]},{"t":36}],"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":"shoes back","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-10.64,-34.313]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-10.64,-34.313]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[4.28,-10.68],[3.329,-7.046],[5.098,-7.362]],"o":[[-0.652,13.885],[-1.539,3.84],[-3.842,8.132],[0,0]],"v":[[9.812,-43.26],[1.561,-2.106],[-3.751,12.245],[-17.039,43.27]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[4.28,-10.68],[3.329,-7.046],[5.098,-7.362]],"o":[[-0.652,13.885],[-1.539,3.84],[-3.842,8.132],[0,0]],"v":[[9.812,-43.26],[1.561,-2.106],[-3.751,12.245],[-17.039,43.27]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.605,-18.847],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.294,2.128],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-21.068,-20.446],[-46.73,27.072],[-17.272,43.283]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[1.173,-2.306],[2.605,-18.847],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.294,2.128],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-21.068,-20.446],[-46.73,27.072],[-17.272,43.283]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-8.372,-35.331],[1.643,-24.463],[0.372,-7.462]],"o":[[8.372,35.331],[-0.495,7.367],[0,0]],"v":[[19.143,-60.813],[28.883,21.104],[27.342,45.919]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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":"middle","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"shoes","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-59,1,0],"ix":2,"l":2},"a":{"a":0,"k":[112,256.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[-3.141,0.001],[0,0],[-5.684,0.019],[-0.328,0.001],[0.669,1.041],[0.817,0.298],[0.108,2.361],[-0.306,4.793]],"o":[[0,0],[0,0],[0,0],[1.394,2.445],[0,0],[0.165,-0.945],[-0.482,-0.751],[-0.818,-0.297],[-0.067,-1.455],[0,0]],"v":[[-14.018,-8.372],[-15.105,8.353],[-7.956,8.352],[-7.549,4.89],[2.988,8.353],[14.939,8.346],[14.436,5.221],[12.206,3.777],[9.555,0.491],[9.799,-8.372]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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":"shoes","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":3,"nm":"Null 6","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[0.6]},"t":0,"s":[0],"e":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.26],"y":[0]},"t":12,"s":[5],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":36,"s":[0],"e":[0]},{"t":87}],"ix":10},"p":{"a":0,"k":[-317,216,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"1-hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.564],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[-33],"e":[-33]},{"i":{"x":[0.678],"y":[1]},"o":{"x":[0.322],"y":[0]},"t":17,"s":[-33],"e":[-24]},{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.436],"y":[0]},"t":29,"s":[-24],"e":[-46]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":39,"s":[-46],"e":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[-20],"e":[-20]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":85,"s":[-20],"e":[-33]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":39,"s":[107.439,91.749,0],"e":[122.178,90.586,0],"to":[6.037,4.409,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[122.178,90.586,0],"e":[122.073,89.09,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":67,"s":[122.073,89.09,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":0.58},"o":{"x":0.167,"y":0.167},"t":84,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[122.178,90.586,0],"e":[107.438,91.767,0],"to":[0,0,0],"ti":[6.369,4.328,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[109,88.5,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":[[1.127,-1.127],[1.386,-0.574],[1.532,0],[1.437,0.595],[1.127,1.127],[0.574,1.387],[0,1.532],[-0.595,1.437],[-1.127,1.127],[-1.386,0.574],[-1.532,0],[-1.438,-0.594],[-1.127,-1.127],[-0.573,-1.386],[0,-1.531],[0.595,-1.437]],"o":[[-1.127,1.127],[-1.438,0.595],[-1.531,0],[-1.386,-0.574],[-1.127,-1.127],[-0.595,-1.437],[0,-1.531],[0.574,-1.386],[1.127,-1.127],[1.438,-0.594],[1.531,0],[1.386,0.574],[1.127,1.127],[0.595,1.437],[0,1.532],[-0.573,1.387]],"v":[[8.973,8.973],[4.144,10.002],[-0.001,12.689],[-4.144,10.002],[-8.973,8.973],[-10.002,4.143],[-12.689,0],[-10.002,-4.143],[-8.973,-8.972],[-4.144,-10.002],[0.001,-12.689],[4.144,-10.002],[8.973,-8.972],[10.002,-4.143],[12.689,0],[10.002,4.143]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[100.549,79.222],"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":136,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"1-neck 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.953,0.217],[0.205,-0.054],[0.127,-0.368],[0.278,-0.804],[0.184,-0.126],[0.145,-0.027],[1.26,-0.227],[-0.537,-0.36],[-1.492,-0.387],[-1.059,-0.035],[-1.747,0.507],[-1.104,1.221],[-0.026,0.142],[0.247,0.086],[0.261,-0.018],[0.783,0.182],[0.122,0.131],[0.042,0.139],[0.283,0.933],[0.791,0.004],[0.773,-0.084]],"o":[[-0.207,-0.047],[-0.377,0.099],[-0.278,0.804],[-0.073,0.21],[-0.122,0.084],[-1.262,0.227],[-0.031,0.645],[1.28,0.857],[1.026,0.266],[1.818,0.06],[1.581,-0.459],[0.097,-0.107],[0.047,-0.257],[-0.246,-0.086],[-0.802,0.056],[-0.175,-0.041],[-0.099,-0.107],[-0.283,-0.933],[-0.205,-0.679],[-0.773,-0.004],[-0.968,0.106]],"v":[[-2.382,-4.172],[-3.01,-4.222],[-3.695,-3.335],[-4.529,-0.924],[-4.87,-0.363],[-5.286,-0.225],[-9.07,0.456],[-7.969,1.941],[-3.87,4.027],[-0.717,4.37],[4.702,3.962],[8.834,1.376],[9.054,1.011],[8.64,0.423],[7.864,0.384],[5.469,0.193],[4.988,-0.032],[4.803,-0.422],[3.955,-3.221],[2.9,-4.465],[0.523,-4.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.255,104.67],"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":180,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"3-neck-line","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-5.897,-0.049],[-1.983,4.842]],"o":[[0,3.813],[5.095,0.044],[0,0]],"v":[[-10.744,-2.849],[-2.613,3.867],[10.745,-3.911]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[526.426,106.414],"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":180,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"3-mouse","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":16,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[519.299,92.713,0],"e":[520.187,91.535,0],"to":[0.148,-0.196,0],"ti":[-0.148,0.196,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":62,"s":[520.187,91.535,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[520.187,91.535,0],"e":[520.198,92.16,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[520.198,92.16,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":85,"s":[520.187,91.535,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[520.187,91.535,0],"e":[519.299,92.713,0],"to":[-0.148,0.196,0],"ti":[0.148,-0.196,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[518.983,93.692,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.024,0.691],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":62,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.024,0.691],[2.489,-0.764]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[521.265,92.955],"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":180,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"3-head hair 2","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[300,148,0],"e":[300.011,148.625,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[300.011,148.625,0],"e":[300,148,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"t":85}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.2,0.54],[0,0],[0,0]],"o":[[1.999,-3.439],[0,0],[0,0],[0,0]],"v":[[-8.022,0.186],[-3.262,-3.189],[-4.522,-3.006],[-6.554,-1.793]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.935,0.773],[-4.843,-3.002],[-4.766,-3.766],[-7.335,-1.654]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.935,0.773],[-4.843,-3.002],[-4.766,-3.766],[-7.335,-1.654]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.433,0.89],[-4.34,-2.885],[-4.263,-3.65],[-7.335,-1.654]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.433,0.89],[-4.34,-2.885],[-4.263,-3.65],[-7.335,-1.654]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[0,0],[0,0]],"o":[[1.999,-3.439],[0,0],[0,0],[0,0]],"v":[[-8.022,0.186],[-3.262,-3.189],[-4.522,-3.006],[-6.554,-1.793]],"c":true}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[526.795,87.931],"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":180,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"3-head hair","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[300,148,0],"e":[300.011,148.625,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[300.011,148.625,0],"e":[300,148,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"t":85}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":53,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-5.289,-2.635],[5.289,3.707],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":65,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-5.289,-2.635],[5.289,3.707],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[526.795,87.931],"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":180,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"3-head","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":50,"s":[-17],"e":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[1],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":92,"s":[1],"e":[-17]},{"t":100}],"ix":10},"p":{"a":0,"k":[526.969,91.5,0],"ix":2,"l":2},"a":{"a":0,"k":[524.969,91.5,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":[[-2.223,-3.169],[3.169,-2.222],[2.222,3.168],[-3.168,2.222]],"o":[[2.222,3.168],[-3.168,2.222],[-2.221,-3.169],[3.169,-2.222]],"v":[[5.737,-4.023],[4.022,5.737],[-5.738,4.023],[-4.024,-5.737]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[524.924,91.355],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"3-neck","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.29,-1.089],[1.245,-0.105],[0.282,-0.005],[1.525,-0.547],[-1.142,-1.267],[-1.271,-0.189],[-1.257,0.265],[-1.644,1.229],[-0.48,1.996],[0.895,0.672],[0.367,1.453],[0.943,-0.11],[0.77,-0.212]],"o":[[-0.074,0.79],[-0.279,0.024],[-1.62,0.031],[0.283,1.681],[0.861,0.954],[1.271,0.19],[2.009,-0.425],[1.645,-1.229],[-1.194,-0.12],[-1.198,-0.9],[-0.924,0.215],[-0.803,0.092],[-1.325,0.366]],"v":[[-3.712,-2.207],[-5.812,-1.031],[-5.812,-1.031],[-10.572,-0.156],[-8.818,4.572],[-5.44,6.264],[-0.209,6.025],[5.485,4.095],[10.697,-1.289],[4.82,-2.314],[3.845,-6.454],[-0.551,-5.967],[-2.285,-6.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[526.599,103.886],"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":180,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"3-left-arm-borderwithhand","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[8.51,-2.038],[-8.51,2.038]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[564.773,159.549],"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":180,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"3-leftarm","parent":39,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[541,104,0],"ix":2,"l":2},"a":{"a":0,"k":[541,104,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}],"e":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}],"e":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}]},{"t":71}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[551.651,129.844],"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":180,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"3-arm","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":0,"s":[12],"e":[22]},{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":10,"s":[22],"e":[18]},{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":18,"s":[18],"e":[18]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":50,"s":[18],"e":[10]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[10],"e":[12]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":71,"s":[12],"e":[11.5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":78,"s":[11.5],"e":[12]},{"t":85}],"ix":10},"p":{"a":0,"k":[539,112.5,0],"ix":2,"l":2},"a":{"a":0,"k":[539,112.5,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":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}],"e":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":50,"s":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}],"e":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}]},{"t":71}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[550.555,145.729],"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":180,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":1,"nm":"White Solid 7","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-7,"ix":10},"p":{"a":0,"k":[285.074,179.754,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"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":[[1177.377,307.014],[1142.901,309.128],[1143.75,324.25],[1176.97,322.017]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"3-finger3","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.916,-2.478],[0.065,-1.328],[0.29,-0.438],[0.525,0.035],[0.252,0.535]],"o":[[1.175,2.367],[0.462,1.247],[-0.025,0.525],[-0.291,0.44],[-0.589,-0.04],[0,0]],"v":[[-2.491,-7.609],[1.63,1.465],[2.426,5.345],[2.006,6.846],[0.686,7.575],[-1.274,6.292]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[571.424,174.236],"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":180,"st":0,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"3-finger2","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.846,-3.817],[0.783,-0.493],[0.487,0.304],[0.327,0.477],[0.586,1.274],[1.435,2.842]],"o":[[1.757,3.486],[0.203,0.918],[-0.482,0.304],[-0.487,-0.302],[-0.792,-1.155],[-1.194,-2.596],[0,0]],"v":[[-0.415,-7.027],[4.18,4.148],[3.654,6.724],[2.036,6.628],[0.865,5.372],[-0.714,2.651],[-4.438,-6.141]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[565.875,174.854],"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":180,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"3-finger4","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.678,-3.918],[0.422,-0.73],[0.782,0.699]],"o":[[2.029,3.946],[0.145,0.832],[-0.422,0.731],[0,0]],"v":[[-2.359,-7.499],[2.214,3.773],[1.9,6.241],[-0.477,6.799]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[574.386,173.075],"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":180,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"3-finger5","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,1.04],[2.895,5.618]],"o":[[0.967,-0.387],[0,-2.453],[0,0]],"v":[[1.658,9.608],[3.172,7.081],[-3.797,-12.109]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[575.198,167.421],"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":180,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"3-arm 2","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":12,"ix":10},"p":{"a":0,"k":[552.25,109.25,0],"ix":2,"l":2},"a":{"a":0,"k":[539,112.5,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],[0.019,-1.904],[0.828,-0.332],[0.399,0.336],[0.197,0.482],[0.21,0.947],[-0.269,4.207]],"o":[[-0.019,1.904],[-0.008,0.89],[-0.483,0.194],[-0.398,-0.336],[-0.368,-0.898],[-0.91,-4.116],[0,0]],"v":[[11.242,25.423],[11.625,31.047],[10.652,33.361],[9.197,33.051],[8.35,31.756],[7.562,28.958],[3.908,17.007]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[550.555,145.729],"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":180,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"3-hand-right","parent":39,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.594],"y":[2.114]},"o":{"x":[0.163],"y":[0]},"t":0,"s":[11],"e":[12.6]},{"i":{"x":[0.716],"y":[0.816]},"o":{"x":[0.363],"y":[0.121]},"t":11,"s":[12.6],"e":[3]},{"i":{"x":[0.779],"y":[1]},"o":{"x":[0.429],"y":[-0.669]},"t":19,"s":[3],"e":[5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[5],"e":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[5],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[0],"e":[12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":71,"s":[12],"e":[11]},{"t":78}],"ix":10},"p":{"a":0,"k":[566.1,159.239,0],"ix":2,"l":2},"a":{"a":0,"k":[564.804,158.647,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.668,-2.419],[-1.424,-0.582],[-0.17,0.049],[-0.11,0.21],[0.008,2.235],[-1.223,-2.392],[-1,-0.447],[-0.089,1.091],[-0.747,0.265],[-0.286,0.74],[-0.344,-0.055],[-0.287,0.196],[0.206,1.174],[0.014,1.13],[0.396,1.06],[2.42,4.174],[4.606,-1.832],[-0.009,-1.49],[-0.187,-1.231]],"o":[[0.41,1.481],[0.165,0.069],[0.228,-0.067],[1.033,-1.983],[0.833,2.555],[0.498,0.976],[1,0.446],[0.017,0.793],[0.748,-0.265],[-0.069,0.342],[0.343,0.054],[0.984,-0.674],[1.094,0.283],[-0.015,-1.132],[-1.815,-4.861],[-4.896,0.553],[-1.354,0.539],[0.008,1.245],[0.38,2.484]],"v":[[-9.123,4.672],[-6.911,9.033],[-6.391,9.102],[-5.911,8.603],[-4.677,1.424],[-1.586,8.861],[0.508,11.306],[3.065,10.149],[5.424,11.713],[6.349,9.408],[7.521,10.142],[8.497,9.848],[9.227,6.72],[11.302,4.647],[9.665,-0.742],[3.932,-15.103],[-9.961,-8.823],[-11.159,-6.377],[-10.843,-2.659]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[567.348,170.05],"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":-16,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":1,"nm":"White Solid 7","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-7,"ix":10},"p":{"a":0,"k":[285.074,179.754,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[-1.207,-5.214],[0,0],[0,0]],"o":[[0,0],[0,0],[1.207,5.214],[0,0],[0,0]],"v":[[1144.884,230.797],[1123.75,233.5],[1135.129,269.406],[1143.75,324.25],[1174.541,319.359]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"3-waist","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[302,148,0],"e":[300,148,0],"to":[-0.333,0,0],"ti":[0.333,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":20,"s":[300,148,0],"e":[300,148,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[300,148,0],"e":[302,148,0],"to":[0.333,0,0],"ti":[-0.333,0,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[539.935,131.182],[514.349,131.182]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"3-dress back","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[0.893,5.189],[1.732,-2.939]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":20,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[0.893,5.189],[1.732,-2.939]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[540.88,125.868],"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":180,"st":0,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"3-shorder-right","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.551,8.848]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.979,-1.228],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-4.757,2.952],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[-0.185,-8.583],[-13.392,7.321]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":27,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.979,-1.228],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-4.757,2.952],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[-0.185,-8.583],[-13.392,7.321]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.51,14.243]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.51,14.243]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":39,"s":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":50,"s":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.006,-0.749],[1.638,-1.17],[4.555,-9.481]],"o":[[0,0],[-2.425,0.374],[-1.823,0.678],[-7.51,5.395],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.978,-9.124],[-14.342,11.41]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,0],[0.842,-0.13],[2.006,-0.749],[1.638,-1.17],[4.555,-9.481]],"o":[[0,0],[-2.425,0.374],[-1.823,0.678],[-7.51,5.395],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.978,-9.124],[-14.342,11.41]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.551,8.848]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[506.233,116.41],"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":180,"st":0,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"3-right-arm","parent":53,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":32,"s":[0],"e":[14]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":39,"s":[14],"e":[14]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":50,"s":[14],"e":[0]},{"t":61}],"ix":10},"p":{"a":0,"k":[491.33,130.102,0],"ix":2,"l":2},"a":{"a":0,"k":[491.33,130.102,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],[0,0]],"o":[[0,0],[0,0]],"v":[[12.745,-1.316],[-12.879,1.303]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[478.836,131.698],"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":180,"st":0,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"3-arm-right-borderwithhand","parent":51,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[467.24,133.616,0],"ix":2,"l":2},"a":{"a":0,"k":[467.24,133.616,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],[0,0]],"o":[[0,0],[0,0]],"v":[[0.608,8.602],[-0.608,-8.601]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[466.699,141.615],"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":180,"st":0,"bm":0},{"ddd":0,"ind":53,"ty":4,"nm":"3-rightarm","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.516],"y":[1]},"o":{"x":[0.209],"y":[0.878]},"t":0,"s":[13.638],"e":[18.282]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":27,"s":[18.282],"e":[-1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":32,"s":[-1],"e":[24]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":39,"s":[24],"e":[24]},{"i":{"x":[0.479],"y":[0.88]},"o":{"x":[0.199],"y":[0]},"t":50,"s":[24],"e":[6.238]},{"i":{"x":[0.619],"y":[0.851]},"o":{"x":[0.288],"y":[-0.091]},"t":57,"s":[6.238],"e":[13.638]},{"t":61}],"ix":10},"p":{"a":0,"k":[512.75,128.781,0],"ix":2,"l":2},"a":{"a":0,"k":[512.75,128.781,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[23.55,-12.388],[19.797,-3.391],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":32,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.189,3.236]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-9.453,9.537],[-25.845,5.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.189,3.236]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-9.453,9.537],[-25.845,5.074]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":39,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[23.55,-12.388],[19.797,-3.391],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[490.034,140.787],"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":180,"st":0,"bm":0},{"ddd":0,"ind":54,"ty":1,"nm":"White Solid 6","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[277.75,148,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[24,1.25],[0,0],[0,0],[-0.375,-0.125],[0,0]],"o":[[-24,-1.25],[0,0],[0,0],[0.375,0.125],[0,0]],"v":[[1109.75,203.875],[1070.375,209.75],[1065.375,218.875],[1106.125,225.5],[1146.125,217.875]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":55,"ty":4,"nm":"3-hair","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[522.75,92,0],"e":[522.219,91.437,0],"to":[-0.147,0.312,0],"ti":[0.347,0.562,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":61,"s":[522.219,91.437,0],"e":[522.219,91.437,0],"to":[-0.347,-0.562,0],"ti":[0.347,0.562,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[522.219,91.437,0],"e":[522.75,92,0],"to":[-0.347,-0.562,0],"ti":[0.147,-0.312,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[523,92,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":[[-2.499,-1.633],[-3.52,-1.797],[-1.583,-1.379],[0.014,-1.618],[0.658,-0.643],[4.145,-0.664],[0.138,0.004],[0.154,0.341],[-0.466,0.994],[-1.982,3.933]],"o":[[3.084,2.05],[1.49,0.76],[1.283,1.119],[-0.021,2.375],[-4.347,-2.116],[-0.136,0.022],[-1.483,-0.044],[-1.04,-2.301],[0.448,-0.956],[2.553,-5.067]],"v":[[-4.795,-10.246],[2.414,-2.43],[7.464,0.431],[9.546,5.324],[6.23,11.112],[-6.49,9.784],[-20.362,13.526],[-23.087,10.709],[-22.349,2.868],[-16.521,-7.446]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[537.002,94.638],"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":180,"st":0,"bm":0},{"ddd":0,"ind":57,"ty":4,"nm":"3-hand","parent":51,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[-28],"e":[9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":28,"s":[9],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":34,"s":[0],"e":[9]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":52,"s":[9],"e":[-37]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[-37],"e":[-29]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[-29],"e":[-33]},{"t":71}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[466.349,141.8,0],"e":[466.244,140.304,0],"to":[-0.017,-0.249,0],"ti":[0.017,0.249,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[466.244,140.304,0],"e":[466.244,140.304,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[466.244,140.304,0],"e":[466.349,141.8,0],"to":[0.017,0.249,0],"ti":[-0.017,-0.249,0]},{"t":60}],"ix":2,"l":2},"a":{"a":0,"k":[610.244,296.429,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[0.475,-0.078],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[0,0],[-1.073,0.175],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[1.21,0.64],[0.054,1.629],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.604,-0.126],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.241,0.16],[-1.365,0.285],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[4.516,0.102],[1.347,1.622],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0.604,-0.126],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.241,0.16],[-1.365,0.285],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[4.516,0.102],[1.347,1.622],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.737,-0.176],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.488,0.324],[-1.666,0.398],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.56,0.39],[2.678,1.615],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0.737,-0.176],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.488,0.324],[-1.666,0.398],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.56,0.39],[2.678,1.615],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.823,-0.208],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.649,0.43],[-1.86,0.471],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.906,1.611],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":28,"s":[{"i":[[0,0],[0.823,-0.208],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.649,0.43],[-1.86,0.471],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.906,1.611],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":43,"s":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.475,-0.078],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[0,0],[-1.073,0.175],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[1.211,0.64],[0.054,1.629],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[605.756,302.103],"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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.798,1.708]],"c":false}],"e":[{"i":[[0,0],[1.731,-0.354],[0.964,-2.177]],"o":[[-1.43,-0.253],[-1.881,0.432],[-0.432,1.111]],"v":[[6.021,-4.551],[1.348,-5.117],[-4.604,-0.939]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[1.731,-0.354],[0.964,-2.177]],"o":[[-1.43,-0.253],[-1.881,0.432],[-0.432,1.111]],"v":[[6.021,-4.551],[1.348,-5.117],[-4.604,-0.939]],"c":false}],"e":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}],"e":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[-0.41,-8.229]],"o":[[-1.43,-0.253],[-1.28,0.041],[0.062,1.238]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.995,4.443]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[1.456,-0.046],[-0.41,-8.229]],"o":[[-1.43,-0.253],[-1.28,0.041],[0.062,1.238]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.995,4.443]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.798,1.708]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[595.165,295.223],"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},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[13.346,-1.673],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.401,-3.388],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":20,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.401,-3.388],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[13.346,-1.673],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[599.593,292.427],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.584,0.136],[0.203,0.316],[-0.868,0.632],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.805,0.158],[-0.427,-0.099],[-0.696,-1.359],[1.483,-1.08],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.935,1.4],[-8.385,2.586],[-10.524,2.652],[-11.492,2.04],[-9.349,-1.328],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.647,-0.209],[0.79,0.212],[0.644,0.445],[0.219,0.341],[-1.078,-0.33],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.45,-0.139],[-0.077,0.006],[-1.038,-0.315],[-0.471,-0.326],[-1.048,-1.931],[3.619,1.107],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-2.658,-2.095],[-7.045,-1.153],[-9.388,-1.49],[-11.934,-2.66],[-12.978,-3.671],[-10.795,-6.416],[-2.58,-7.056],[3.692,-5.593]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":28,"s":[{"i":[[0,0],[2.146,0.684],[2.647,-0.209],[0.79,0.212],[0.644,0.445],[0.219,0.341],[-1.078,-0.33],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.45,-0.139],[-0.077,0.006],[-1.038,-0.315],[-0.471,-0.326],[-1.048,-1.931],[3.619,1.107],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-2.658,-2.095],[-7.045,-1.153],[-9.388,-1.49],[-11.934,-2.66],[-12.978,-3.671],[-10.795,-6.416],[-2.58,-7.056],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[1.633,-1.271],[0.303,-0.077],[0.408,0.13],[0.203,0.316],[-0.757,0.762],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.075,0.059],[-0.7,0.179],[-0.298,-0.095],[-1.486,-2.406],[1.459,-1.468],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.113,-0.873],[-4.424,4.228],[-7.399,5.621],[-9.027,5.725],[-9.767,5.12],[-8.008,0.362],[-2.175,-5.868],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[2.146,0.684],[1.633,-1.271],[0.303,-0.077],[0.408,0.13],[0.203,0.316],[-0.757,0.762],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.075,0.059],[-0.7,0.179],[-0.298,-0.095],[-1.486,-2.406],[1.459,-1.468],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.113,-0.873],[-4.424,4.228],[-7.399,5.621],[-9.027,5.725],[-9.767,5.12],[-8.008,0.362],[-2.175,-5.868],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.584,0.136],[0.203,0.316],[-0.868,0.632],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.805,0.158],[-0.427,-0.099],[-0.696,-1.359],[1.483,-1.08],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.935,1.4],[-8.385,2.586],[-10.524,2.652],[-11.492,2.04],[-9.349,-1.328],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[598.116,299.533],"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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[-0.075,-0.037],[1.436,-3.994],[0.192,-0.127],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[0.35,0.803],[-1.285,0.553],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.901,-0.8]],"o":[[-0.673,4.021],[-0.293,0.14],[-0.823,0.544],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[-0.529,-1.213],[0.252,-0.109],[0.243,-0.45],[2.122,-0.528],[1.186,0.022],[1.373,0.379]],"v":[[12.97,-5.367],[6.979,6.533],[6.269,6.935],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.961,4.846],[-10.369,5.904],[-13.313,5.418],[-11.236,2.287],[-8.421,-5.551],[-5.697,-7.992],[0.314,-8.868],[8.995,-6.852]],"c":true}],"e":[{"i":[[-0.056,-0.027],[0.152,-5.929],[0.45,-0.196],[2.305,-0.04],[-0.635,1.275],[-1.774,-0.155],[-0.014,0.018],[3.055,0.997],[0.804,-0.264],[1.52,0.019],[0.172,0.826],[-2.594,0.179],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.404,-0.654]],"o":[[-0.214,4.15],[-0.412,0.23],[-1.714,0.747],[-1.022,0.018],[0.584,-1.349],[0.977,0.079],[-2.807,-0.801],[-1.951,0.942],[-0.471,0.196],[-1.498,-0.009],[-0.236,-1.878],[0.237,-0.05],[0.243,-0.45],[2.122,-0.528],[1.369,0.026],[0.962,0.263]],"v":[[10.353,-6.507],[10.254,5.94],[8.092,7.194],[2.953,7.85],[-1.352,5.289],[3.583,4.36],[5.401,4.314],[-4.348,1.446],[-7.248,2.64],[-10.513,3.136],[-14.839,0.737],[-9.932,-1.505],[-8.159,-5.627],[-4.881,-8.252],[0.314,-8.868],[8.515,-7.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-0.056,-0.027],[0.152,-5.929],[0.45,-0.196],[2.305,-0.04],[-0.635,1.275],[-1.774,-0.155],[-0.014,0.018],[3.055,0.997],[0.804,-0.264],[1.52,0.019],[0.172,0.826],[-2.594,0.179],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.404,-0.654]],"o":[[-0.214,4.15],[-0.412,0.23],[-1.714,0.747],[-1.022,0.018],[0.584,-1.349],[0.977,0.079],[-2.807,-0.801],[-1.951,0.942],[-0.471,0.196],[-1.498,-0.009],[-0.236,-1.878],[0.237,-0.05],[0.243,-0.45],[2.122,-0.528],[1.369,0.026],[0.962,0.263]],"v":[[10.353,-6.507],[10.254,5.94],[8.092,7.194],[2.953,7.85],[-1.352,5.289],[3.583,4.36],[5.401,4.314],[-4.348,1.446],[-7.248,2.64],[-10.513,3.136],[-14.839,0.737],[-9.932,-1.505],[-8.159,-5.627],[-4.881,-8.252],[0.314,-8.868],[8.515,-7.066]],"c":true}],"e":[{"i":[[-0.036,-0.018],[-0.221,-4.283],[0.483,-0.172],[2.359,-0.041],[-0.322,1.195],[-1.924,-0.115],[-0.016,0.021],[3.468,0.773],[0.804,-0.264],[1.595,0.356],[-0.012,0.849],[-3.949,-0.207],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.889,-0.502]],"o":[[0.26,4.284],[-0.461,0.281],[-2.066,0.738],[-1.022,0.018],[0.425,-1.646],[1.266,0.075],[-2.807,-0.801],[-2.509,0.875],[-0.477,0.199],[-1.532,-0.34],[0.066,-2.566],[0.22,0.012],[0.243,-0.45],[2.122,-0.528],[1.558,0.029],[0.538,0.143]],"v":[[8.939,-7.029],[11.139,6.457],[9.723,7.13],[3.043,7.774],[-1.519,5.62],[3.174,4.427],[5.64,4.178],[-4.78,1.276],[-7.946,2.312],[-11.41,2.101],[-15.072,-0.479],[-9.241,-2.452],[-7.887,-5.705],[-4.038,-8.522],[0.314,-8.868],[8.019,-7.288]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.036,-0.018],[-0.221,-4.283],[0.483,-0.172],[2.359,-0.041],[-0.322,1.195],[-1.924,-0.115],[-0.016,0.021],[3.468,0.773],[0.804,-0.264],[1.595,0.356],[-0.012,0.849],[-3.949,-0.207],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.889,-0.502]],"o":[[0.26,4.284],[-0.461,0.281],[-2.066,0.738],[-1.022,0.018],[0.425,-1.646],[1.266,0.075],[-2.807,-0.801],[-2.509,0.875],[-0.477,0.199],[-1.532,-0.34],[0.066,-2.566],[0.22,0.012],[0.243,-0.45],[2.122,-0.528],[1.558,0.029],[0.538,0.143]],"v":[[8.939,-7.029],[11.139,6.457],[9.723,7.13],[3.043,7.774],[-1.519,5.62],[3.174,4.427],[5.64,4.178],[-4.78,1.276],[-7.946,2.312],[-11.41,2.101],[-15.072,-0.479],[-9.241,-2.452],[-7.887,-5.705],[-4.038,-8.522],[0.314,-8.868],[8.019,-7.288]],"c":true}],"e":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.494,-0.177],[2.359,-0.041],[-0.289,1.187],[-1.939,-0.111],[-0.016,0.021],[3.512,0.749],[0.804,-0.264],[1.603,0.391],[-0.032,0.852],[-2.124,-0.606],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.849,-0.489]],"o":[[0.309,4.298],[-0.47,0.288],[-2.114,0.757],[-1.022,0.018],[0.408,-1.677],[1.296,0.074],[-2.807,-0.801],[-2.567,0.868],[-0.478,0.199],[-1.536,-0.375],[0.098,-2.638],[0.212,0.061],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.527,0.139]],"v":[[8.807,-7.076],[11.286,6.416],[9.84,7.107],[3.052,7.767],[-1.536,5.654],[3.132,4.434],[5.665,4.164],[-4.889,1.234],[-7.998,2.178],[-11.465,1.899],[-15.165,-0.792],[-10.801,-2.607],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[7.907,-7.328]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":28,"s":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.494,-0.177],[2.359,-0.041],[-0.289,1.187],[-1.939,-0.111],[-0.016,0.021],[3.512,0.749],[0.804,-0.264],[1.603,0.391],[-0.032,0.852],[-2.124,-0.606],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.849,-0.489]],"o":[[0.309,4.298],[-0.47,0.288],[-2.114,0.757],[-1.022,0.018],[0.408,-1.677],[1.296,0.074],[-2.807,-0.801],[-2.567,0.868],[-0.478,0.199],[-1.536,-0.375],[0.098,-2.638],[0.212,0.061],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.527,0.139]],"v":[[8.807,-7.076],[11.286,6.416],[9.84,7.107],[3.052,7.767],[-1.536,5.654],[3.132,4.434],[5.665,4.164],[-4.889,1.234],[-7.998,2.178],[-11.465,1.899],[-15.165,-0.792],[-10.801,-2.607],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[7.907,-7.328]],"c":true}],"e":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.468,-0.185],[2.359,-0.041],[-0.353,1.675],[-1.827,-0.215],[-0.012,0.016],[3.084,0.654],[1.007,-1.112],[1.317,-0.485],[0.439,0.731],[-1.279,1.101],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.266,-0.649]],"o":[[0.309,4.298],[-0.47,0.288],[-2.006,0.79],[-1.022,0.018],[0.309,-1.463],[0.783,0.092],[-2.807,-0.801],[-0.483,0.904],[-0.79,0.83],[-1.262,0.465],[-1.111,-1.851],[0.222,-0.191],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.646,0.185]],"v":[[10.36,-6.478],[10.97,6.629],[9.564,7.332],[3.171,8.112],[-1.383,5.348],[3.82,4.269],[5.17,4.447],[-2.222,2.507],[-5.31,6.559],[-8.835,8.776],[-11.706,8.591],[-10.524,4.216],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[9.265,-6.806]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.468,-0.185],[2.359,-0.041],[-0.353,1.675],[-1.827,-0.215],[-0.012,0.016],[3.084,0.654],[1.007,-1.112],[1.317,-0.485],[0.439,0.731],[-1.279,1.101],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.266,-0.649]],"o":[[0.309,4.298],[-0.47,0.288],[-2.006,0.79],[-1.022,0.018],[0.309,-1.463],[0.783,0.092],[-2.807,-0.801],[-0.483,0.904],[-0.79,0.83],[-1.262,0.465],[-1.111,-1.851],[0.222,-0.191],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.646,0.185]],"v":[[10.36,-6.478],[10.97,6.629],[9.564,7.332],[3.171,8.112],[-1.383,5.348],[3.82,4.269],[5.17,4.447],[-2.222,2.507],[-5.31,6.559],[-8.835,8.776],[-11.706,8.591],[-10.524,4.216],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[9.265,-6.806]],"c":true}],"e":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}],"e":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}],"e":[{"i":[[-0.075,-0.037],[1.436,-3.994],[0.192,-0.127],[2.359,-0.041],[-0.938,1.351],[-1.629,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[0.35,0.803],[-1.285,0.553],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.901,-0.8]],"o":[[-0.673,4.021],[-0.293,0.14],[-0.823,0.544],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[-0.529,-1.213],[0.252,-0.109],[0.243,-0.45],[2.122,-0.528],[1.186,0.022],[1.373,0.379]],"v":[[12.97,-5.367],[6.979,6.533],[6.269,6.935],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.961,4.846],[-10.369,5.904],[-13.313,5.418],[-11.236,2.287],[-8.421,-5.551],[-5.697,-7.992],[0.314,-8.868],[8.995,-6.852]],"c":true}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[600.066,296.117],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"3-skirt","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[-338.5,-217,0],"e":[-383,-217,0],"to":[-7.417,0,0],"ti":[7.417,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.167,"y":0.167},"t":20,"s":[-383,-217,0],"e":[-383,-217,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[-383,-217,0],"e":[-338.5,-217,0],"to":[7.417,0,0],"ti":[-7.417,0,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-0.732,-8.958],[-3.316,-10.363],[-0.374,-6.039],[0,0],[-5.352,26.968],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[1.74,5.441],[0,0],[0,0],[2.587,-13.033],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[12.945,-27.234],[20.74,-2.499],[25.198,29.801],[27.42,46.373],[-29.171,42.623],[-18.352,3.616],[-12.731,-26.973],[-14.28,-30.411],[-13.607,-34.367],[-14.156,-38.613],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-3.316,-10.363],[-0.374,-6.039],[0,0],[-5.352,26.968],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[1.74,5.441],[0,0],[0,0],[2.587,-13.033],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[12.945,-27.234],[20.74,-2.499],[25.198,29.801],[27.42,46.373],[-29.171,42.623],[-18.352,3.616],[-12.731,-26.973],[-14.28,-30.411],[-13.607,-34.367],[-14.156,-38.613],[-14.938,-46.373]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[528.704,158.166],"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":180,"st":0,"bm":0},{"ddd":0,"ind":59,"ty":4,"nm":"3-leg-left1","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[549.642,194.407],[550.727,196.701],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.068,198.856],[551.737,200.502],[564.77,226.841]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.068,198.856],[551.737,200.502],[564.77,226.841]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.625,201.022],[552.48,203.3],[564.609,226.836]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.625,201.022],[552.48,203.3],[564.609,226.836]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.532,199.63],[552.098,201.861],[564.989,226.847]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.532,199.63],[552.098,201.861],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[549.642,194.407],[550.727,196.701],[564.989,226.847]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823528992896,0.890196018593,0.988234994926,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[560.376,215.488],"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":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":60,"ty":4,"nm":"3-leg-left2","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-3.094,-6.943],[0,0]],"o":[[1.373,4.03],[3.134,7.032],[0,0]],"v":[[-7.86,-17.252],[0.449,2.539],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-2.234,-5.437],[0,0]],"o":[[0.737,3.621],[2.512,6.325],[0,0]],"v":[[-7.841,-16.423],[-2.667,-1.879],[6.382,15.609]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[-2.234,-5.437],[0,0]],"o":[[0.737,3.621],[2.512,6.325],[0,0]],"v":[[-7.841,-16.423],[-2.667,-1.879],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1.6,-4.328],[0,0]],"o":[[0.268,3.32],[2.054,5.804],[0,0]],"v":[[-7.981,-16.445],[-4.961,-5.131],[6.382,15.609]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[-1.6,-4.328],[0,0]],"o":[[0.268,3.32],[2.054,5.804],[0,0]],"v":[[-7.981,-16.445],[-4.961,-5.131],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1.932,-4.909],[0,0]],"o":[[0.514,3.478],[2.294,6.077],[0,0]],"v":[[-8.074,-16.481],[-3.995,-3.932],[6.759,16.415]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[-1.932,-4.909],[0,0]],"o":[[0.514,3.478],[2.294,6.077],[0,0]],"v":[[-8.074,-16.481],[-3.995,-3.932],[6.759,16.415]],"c":false}],"e":[{"i":[[0,0],[-3.094,-6.943],[0,0]],"o":[[1.373,4.03],[3.134,7.032],[0,0]],"v":[[-7.966,-17.479],[-0.079,1.406],[7.23,17.421]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[536.831,220.148],"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":180,"st":0,"bm":0},{"ddd":0,"ind":61,"ty":4,"nm":"3-leg-left","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"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":[[-19.065,-17.71],[-13.53,-6.315],[-4.326,15.609],[17.09,6.287],[3.554,-22.697],[2.158,-25.686]],"c":true}],"e":[{"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}],"e":[{"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}],"e":[{"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":[[-19.065,-17.71],[-13.53,-6.315],[-4.326,15.609],[17.09,6.287],[3.554,-22.697],[2.158,-25.686]],"c":true}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[547.539,220.148],"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":180,"st":0,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"3-shoes-left","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[25],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[1],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[1],"e":[25]},{"t":67}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[166.131,-0.434,0],"e":[159.577,-26.053,0],"to":[-1.092,-4.27,0],"ti":[1.092,4.27,0]},{"i":{"x":0.437,"y":0.437},"o":{"x":0.329,"y":0.329},"t":20,"s":[159.577,-26.053,0],"e":[159.577,-26.053,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[159.577,-26.053,0],"e":[166.131,-0.434,0],"to":[1.092,4.27,0],"ti":[-1.092,-4.27,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[571.25,241.375,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0],[4.965,-2.56],[0.878,-0.45],[-0.283,1.234],[-0.64,0.653],[0.631,2.136],[1.755,4.091]],"o":[[0,0],[0,0],[0,0],[0.274,5.107],[-4.473,2.306],[-0.441,-0.757],[0.205,-0.888],[0.997,-1.019],[-0.388,-1.317],[0,0]],"v":[[7.531,-13.927],[13.885,0.927],[8.285,3.815],[4.585,-2.899],[-3.142,9.729],[-12.288,13.927],[-12.797,10.93],[-11.224,8.613],[-10.729,3.815],[-13.885,-4.714]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[557.098,240.471],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":63,"ty":4,"nm":"3-shoes-right","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[22],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0],"e":[22]},{"t":67}],"ix":10},"p":{"a":0,"k":[62.5,-0.5,0],"ix":2,"l":2},"a":{"a":0,"k":[522.75,256.25,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.283,-1.499],[0.856,-0.297],[0.58,-0.752],[-0.042,-0.946],[-4.941,-0.003],[-2.064,5.031],[0,0],[0,0],[0,0]],"o":[[-0.312,4.687],[-0.444,2.355],[-0.856,0.298],[-0.804,1.041],[0.968,0.003],[5.486,0.005],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.22,-8.368],[-9.14,0.495],[-12.215,3.782],[-14.632,5.226],[-15.54,8.351],[-4.319,8.363],[8.117,0.083],[8.315,8.354],[14.503,8.357],[15.582,-8.368]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[507.294,248.097],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":64,"ty":4,"nm":"3-leg-right","parent":63,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.523,-24.692]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.29,-20.404]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.29,-20.404]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.999,-17.162],[-13.206,17.921],[10.596,17.921],[13.196,-18.394]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.999,-17.162],[-13.206,17.921],[10.596,17.921],[13.196,-18.394]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.346,-19.902]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.346,-19.902]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.523,-24.692]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[512.251,222.188],"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":180,"st":0,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"3-left-right","parent":63,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.708,-24.848]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.708,-24.848]],"c":true}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[512.251,222.134],"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":180,"st":0,"bm":0},{"ddd":0,"ind":66,"ty":3,"nm":"character4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[384,219,0],"ix":2,"l":2},"a":{"a":0,"k":[0.564,1.926,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":67,"ty":1,"nm":"White Solid 10","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[288.5,142.5,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"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":[[610.633,461.5],[553.75,461.5],[553,482.053],[610.633,482.053]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"Shape Layer 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"Shape Layer 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,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]],"o":[[0,0]],"v":[[-42.5,54.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.125490196078,0.454901990704,0.901960844152,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"주머니","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.036,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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]],"o":[[0,0]],"v":[[225.75,233.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823528992896,0.890196018593,0.988234994926,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":"Shape 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":[[0,0],[0,0],[0,0],[0,0],[-1.515,-0.979],[0,0]],"o":[[0,0],[0,0],[0,0],[0.014,1.803],[0,0],[0,0]],"v":[[2.04,-6.254],[-2.041,-6.254],[-2.041,1.122],[-2.041,1.164],[0.525,5.589],[1.555,6.254]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[344.245,182.577],"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":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"2-phone","parent":74,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.83],"y":[0.622]},"o":{"x":[0.13],"y":[0.067]},"t":0,"s":[0],"e":[-6]},{"i":{"x":[0.88],"y":[0.987]},"o":{"x":[0.17],"y":[0]},"t":5,"s":[-6],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0],"e":[10]},{"t":9}],"ix":10},"p":{"a":0,"k":[290.091,137.132,0],"ix":2,"l":2},"a":{"a":0,"k":[290.091,137.132,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-8.111,-6.873],[8.111,6.873]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[282.181,130.296],"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":180,"st":0,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"2-thumb 2","parent":74,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.13,"y":0.03},"t":0,"s":[{"i":[[0,0],[0.189,0.59],[-0.617,0.75],[-0.734,-0.789],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.258,-0.807],[0.991,-1.205],[2.17,2.329],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-3.012,-6.135],[-3.846,-7.793],[-3.895,-10.586],[-0.672,-9.646],[4.387,-1.649],[6.49,3.131],[7.016,4.367]],"c":false}],"e":[{"i":[[0,0],[0.065,0.616],[-0.816,0.57],[0.104,-1.78],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.111,-1.057],[0.768,-0.974],[-0.179,3.074],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-1.432,-5.238],[-0.996,-9.537],[0.046,-12.836],[2.78,-10.92],[5.172,-1.735],[6.49,3.131],[7.016,4.367]],"c":false}]},{"i":{"x":0.88,"y":0.98},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0.065,0.616],[-0.816,0.57],[0.104,-1.78],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.111,-1.057],[0.768,-0.974],[-0.179,3.074],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-1.432,-5.238],[-0.996,-9.537],[0.046,-12.836],[2.78,-10.92],[5.172,-1.735],[6.49,3.131],[7.016,4.367]],"c":false}],"e":[{"i":[[0,0],[0.189,0.59],[-0.617,0.75],[-0.734,-0.789],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.258,-0.807],[0.991,-1.205],[2.17,2.329],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-3.012,-6.135],[-3.846,-7.793],[-3.895,-10.586],[-0.672,-9.646],[4.387,-1.649],[6.49,3.131],[7.016,4.367]],"c":false}]},{"t":8}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[294.542,144.929],"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":180,"st":0,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"2-finger","parent":74,"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],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0],"e":[12]},{"t":11}],"ix":10},"p":{"a":0,"k":[292,139,0],"ix":2,"l":2},"a":{"a":0,"k":[292,139,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],[2.072,1.585],[0.414,0.934],[-0.582,0.591],[-0.903,-0.389],[-1.031,-0.597],[-1.361,-0.923],[-0.702,-0.517],[0,0]],"o":[[-2.072,-1.584],[-0.791,-0.605],[-0.327,-0.74],[0.77,-0.784],[1.101,0.475],[1.424,0.823],[0.721,0.489],[1.433,1.054],[0,0]],"v":[[0.044,5.009],[-6.172,0.255],[-8.235,-1.959],[-7.896,-4.225],[-5.032,-4.341],[-1.968,-2.496],[2.21,0.124],[4.345,1.634],[8.562,4.805]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[287.185,137.16],"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":180,"st":0,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"2-hand","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.13],"y":[0.015]},"t":2,"s":[0],"e":[-9]},{"i":{"x":[0.88],"y":[0.99]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[-9],"e":[0]},{"t":12.5}],"ix":10},"p":{"a":0,"k":[295,152.25,0],"ix":2,"l":2},"a":{"a":0,"k":[295,152.25,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],[0.189,0.224],[0.998,1.673],[-0.79,1.701],[-0.345,0.47],[0.232,0.709]],"o":[[0,0],[-1.259,-1.49],[-0.831,-1.393],[0.245,-0.528],[0.344,-0.47],[0,0]],"v":[[4.053,7.929],[1.376,4.951],[-1.956,0.52],[-3.262,-4.547],[-2.251,-5.967],[-1.678,-7.93]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[285.775,147.703],"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":180,"st":0,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"2-arm 2","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.83],"y":[1]},"o":{"x":[0.13],"y":[0.02]},"t":0,"s":[0],"e":[-9]},{"i":{"x":[0.88],"y":[0.99]},"o":{"x":[0.17],"y":[0]},"t":5,"s":[-9],"e":[0]},{"t":10}],"ix":10},"p":{"a":0,"k":[313.629,165.755,0],"ix":2,"l":2},"a":{"a":0,"k":[313.629,165.755,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],[0,0]],"o":[[1.64,2.163],[0,0]],"v":[[-5.98,-8.058],[5.98,8.058]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[307.538,157.354],"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":180,"st":0,"bm":0},{"ddd":0,"ind":76,"ty":1,"nm":"White Solid 8","parent":98,"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":45,"s":[300,147.68,0],"e":[299.75,148.43,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[299.75,148.43,0],"e":[300,147.68,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83}],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[19.275,8.304],[12.988,-0.127],[2.376,-10.473],[0,0],[0,0],[-0.162,13.471]],"o":[[-11.23,-4.838],[-8.96,0.088],[-2.376,10.473],[0,0],[0,0],[0.162,-13.471]],"v":[[642.23,353.088],[588.512,341.877],[555.126,355.277],[569,377.25],[656.75,405.75],[689.588,385.471]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"2-body","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[-8],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.332],"y":[0]},"t":20,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[0],"e":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-5],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[0],"e":[-0.5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[-0.5],"e":[0]},{"i":{"x":[0.806],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":94,"s":[0],"e":[-7]},{"t":100}],"ix":10},"p":{"a":0,"k":[345.844,166.969,0],"ix":2,"l":2},"a":{"a":0,"k":[345.835,166.987,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],[0.795,5.068],[5.264,3.399],[3.889,-3.5],[3.429,-10.447]],"o":[[-0.053,-5.128],[-0.913,-5.816],[-4.452,-2.875],[-6.466,5.82],[0,0]],"v":[[17.855,17.616],[16.511,1.188],[8.904,-14.741],[-5.325,-13.399],[-17.855,11.476]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[327.944,149.303],"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":180,"st":0,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"2-belt","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[345.812,166.656,0],"ix":2,"l":2},"a":{"a":0,"k":[345.812,166.906,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[345.8,166.919],[331.205,166.9]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[345.8,166.919],[330.705,166.919]],"c":false}]},{"t":10}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"Layer 2 Outlines","parent":78,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[340.407,166.919],[340.407,169.56]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":80,"ty":4,"nm":"Layer 3 Outlines","parent":78,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[330.814,169.908],[345.799,169.923]],"c":true}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}]},{"t":20}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":81,"ty":4,"nm":"some","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.176,-0.412],[4.306,-1.81]],"o":[[-4.305,1.81],[0,0]],"v":[[7.016,4.367],[-7.016,11.791]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[294.542,144.929],"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":180,"st":0,"bm":0},{"ddd":0,"ind":82,"ty":4,"nm":"2-arm","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.453,1.654]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.44,1.844]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.44,1.844]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[1.751,4.252]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[1.751,4.252]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[2.654,6.194]],"c":false}]},{"t":22}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[290.368,163.351],"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":180,"st":0,"bm":0},{"ddd":0,"ind":83,"ty":4,"nm":"2-arm-back","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.757,2.881],[-1.219,8.152]],"o":[[2.319,-1.977],[1.967,-7.471],[0,0]],"v":[[-4.53,15.224],[-0.091,7.45],[4.529,-15.224]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[330.029,162.473],"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":180,"st":0,"bm":0},{"ddd":0,"ind":84,"ty":4,"nm":"2-head-hair","parent":86,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":3,"s":[1.446],"e":[41.446]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[41.446],"e":[41.446]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":27,"s":[41.446],"e":[1.446]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[1.446],"e":[1.446]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[1.446],"e":[1.446]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":3,"s":[329.626,116.245,0],"e":[332.984,116.955,0],"to":[0.56,0.118,0],"ti":[-0.56,-0.118,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[332.984,116.955,0],"e":[332.984,116.955,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":27,"s":[332.984,116.955,0],"e":[329.626,116.245,0],"to":[-0.56,-0.118,0],"ti":[0.56,0.118,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":50,"s":[329.626,116.245,0],"e":[329.626,116.245,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[329.626,116.245,0],"e":[329.626,116.245,0],"to":[0,0,0],"ti":[0,0,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[329.5,116.25,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],[0.109,0.671],[4.728,-0.092],[0.546,-4.455],[-0.677,0],[0,0],[-0.079,0.362],[0,0],[-0.071,-0.174],[0,0],[-0.477,0.015]],"o":[[0.68,-0.022],[-0.72,-4.426],[-4.732,0.092],[-0.082,0.672],[0,0],[0.371,0],[0,0],[0.06,-0.178],[0,0],[0.18,0.443],[0,0]],"v":[[8.172,4.372],[9.27,3.068],[-0.155,-4.608],[-9.297,3.438],[-8.157,4.7],[-1.442,4.7],[-0.672,4.079],[0.3,1.223],[0.68,1.212],[1.744,3.834],[2.837,4.545]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[329.491,115.912],"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":180,"st":0,"bm":0},{"ddd":0,"ind":85,"ty":4,"nm":"2-mouse","parent":86,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":3,"s":[2.8],"e":[34.8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[34.8],"e":[34.8]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":27,"s":[34.8],"e":[2.8]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[2.8],"e":[2.8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[2.8],"e":[2.8]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":3,"s":[322.848,125.48,0],"e":[322.069,121.563,0],"to":[-0.13,-0.653,0],"ti":[0.13,0.653,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[322.069,121.563,0],"e":[322.069,121.563,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":27,"s":[322.069,121.563,0],"e":[322.848,125.48,0],"to":[0.13,0.653,0],"ti":[-0.13,-0.653,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":50,"s":[322.848,125.48,0],"e":[322.848,125.48,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[322.848,125.48,0],"e":[322.848,125.48,0],"to":[0,0,0],"ti":[0,0,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[323.062,125.812,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],[-0.75,1.102]],"o":[[1.42,0.098],[0,0]],"v":[[-1.79,0.781],[1.79,-0.88]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[324.856,124.973],"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":180,"st":0,"bm":0},{"ddd":0,"ind":86,"ty":4,"nm":"2-head","parent":87,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[0.945]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[-15.8],"e":[0.9]},{"i":{"x":[0.732],"y":[1.162]},"o":{"x":[0.242],"y":[-0.226]},"t":22,"s":[0.9],"e":[0]},{"i":{"x":[0.64],"y":[1.073]},"o":{"x":[0.27],"y":[0.022]},"t":36,"s":[0],"e":[4]},{"i":{"x":[0.696],"y":[1.025]},"o":{"x":[0.522],"y":[0.089]},"t":43,"s":[4],"e":[-3]},{"i":{"x":[0.562],"y":[1]},"o":{"x":[0.384],"y":[0.081]},"t":50.2,"s":[-3],"e":[0]},{"i":{"x":[0.696],"y":[1.057]},"o":{"x":[0.167],"y":[0]},"t":57.399,"s":[0],"e":[-3]},{"i":{"x":[0.562],"y":[1]},"o":{"x":[0.384],"y":[0.081]},"t":64.6,"s":[-3],"e":[0]},{"i":{"x":[0.696],"y":[1.057]},"o":{"x":[0.167],"y":[0]},"t":71.8,"s":[0],"e":[-3]},{"i":{"x":[0.696],"y":[0.642]},"o":{"x":[0.384],"y":[0.508]},"t":79,"s":[-3],"e":[-3]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.384],"y":[-0.016]},"t":94,"s":[-3],"e":[-15.8]},{"t":100}],"ix":10},"p":{"a":0,"k":[329.75,121.25,0],"ix":2,"l":2},"a":{"a":0,"k":[329.75,121.25,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":[[-2.572,-3.669],[3.669,-2.572],[2.573,3.669],[-3.669,2.573]],"o":[[2.573,3.669],[-3.669,2.573],[-2.572,-3.669],[3.669,-2.573]],"v":[[6.642,-4.658],[4.658,6.643],[-6.644,4.658],[-4.659,-6.643]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[329.506,120.937],"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":180,"st":0,"bm":0},{"ddd":0,"ind":87,"ty":4,"nm":"2-neck-back","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.9,"ix":10},"p":{"a":0,"k":[335.293,133.27,0],"ix":2,"l":2},"a":{"a":0,"k":[335.293,133.27,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],[0,0]],"o":[[0,0],[0,0]],"v":[[0.578,2.98],[-0.579,-2.98]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[334.743,130.56],"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":180,"st":0,"bm":0},{"ddd":0,"ind":88,"ty":4,"nm":"2-neck-front","parent":87,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.32,2.191],[0.32,-2.19]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[326.693,131.242],"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":180,"st":0,"bm":0},{"ddd":0,"ind":89,"ty":4,"nm":"2-shoes-acc-1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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":[[-2.14,-0.055],[2.14,0.055]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[268.457,245.384],"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":180,"st":0,"bm":0},{"ddd":0,"ind":90,"ty":4,"nm":"2-shoes-acc-2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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":[[-2.034,-0.011],[2.034,0.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[268.562,242.362],"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":180,"st":0,"bm":0},{"ddd":0,"ind":91,"ty":4,"nm":"2-leg-left","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.369,11.358],[-11.808,4.922],[-14.354,-6.626]],"o":[[0.152,-3.604],[1.272,-10.549],[13.701,-5.711],[0,0]],"v":[[-34.727,35.072],[-32.243,-1.637],[-15.114,-29.361],[34.727,-20.152]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[298.555,201.253],"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":180,"st":0,"bm":0},{"ddd":0,"ind":92,"ty":4,"nm":"2-leg-shoes","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.295,-3.069],[2.305,-1.052],[0.732,-1.055],[0.105,-0.853],[-6.322,0.002],[0,0],[0,0],[0,0]],"o":[[-0.192,3.076],[-0.216,2.247],[-1.123,0.513],[-0.508,0.732],[1.075,0.003],[0,0],[3.485,-0.001],[0,0],[0,0]],"v":[[-9.866,-9.767],[-10.498,-0.542],[-13.37,5.286],[-16.465,7.328],[-17.103,9.764],[-4.624,9.764],[7.511,9.761],[16.421,9.759],[17.103,-9.645]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[276.584,246.694],"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":180,"st":0,"bm":0},{"ddd":0,"ind":93,"ty":4,"nm":"2-leg-bottom-left","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.625,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-16.169,18.77],[14.461,18.77],[16.169,-18.77]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[279.998,217.555],"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":180,"st":0,"bm":0},{"ddd":0,"ind":94,"ty":4,"nm":"Layer 101 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.128,-19.302],[-8.588,9.449],[-0.529,25.238],[5.587,26.765],[6.178,9.449],[6.95,9.244],[8.588,-26.766]],"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":[287.509,227.081],"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":180,"st":0,"bm":0},{"ddd":0,"ind":95,"ty":4,"nm":"2-shoes-right-acc1","parent":102,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.921,-0.945],[1.921,0.945]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[230.248,235.586],"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":180,"st":0,"bm":0},{"ddd":0,"ind":96,"ty":4,"nm":"2-shoes-right-acc2","parent":102,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.843,-0.861],[1.844,0.861]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[231.607,232.884],"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":180,"st":0,"bm":0},{"ddd":0,"ind":97,"ty":1,"nm":"White Solid 8","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.75,148.43,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0.763],[0,0],[0,0],[-0.162,13.471]],"o":[[-2.512,0],[0,0],[0,0],[0.162,-13.471]],"v":[[481.512,417.877],[462.25,448],[517.125,473.5],[524.088,442.471]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":98,"ty":4,"nm":"2-leg-hip","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":0,"ix":3},"y":{"a":0,"k":0.5,"ix":4}},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.883,-1.175],[-4.882,-0.17],[-3.885,2.116],[-0.972,4.748],[0.736,8.684]],"o":[[4.883,1.178],[4.73,1.139],[4.347,0.151],[4.316,-2.35],[0.973,-4.75],[0,0]],"v":[[-25.338,13.475],[-10.668,16.915],[3.735,19.346],[16.587,16.678],[24.304,5.686],[24.041,-18.998]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[321.598,185.314],"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":180,"st":0,"bm":0},{"ddd":0,"ind":99,"ty":4,"nm":"2-pants-right","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[284.5,169.25,0],"ix":2,"l":2},"a":{"a":0,"k":[284.5,169.5,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],[-6.35,10.527],[-12.94,-0.125],[-2.26,-0.707]],"o":[[1.759,-3.459],[5.898,-9.777],[2.237,0.021],[0,0]],"v":[[-26.865,26.636],[-8.104,-8.202],[19.92,-28.136],[26.678,-27.008]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.156,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[256.601,197.973],"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":180,"st":0,"bm":0},{"ddd":0,"ind":100,"ty":4,"nm":"2-pants-right2","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.214,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-17.27,-6.3],[11.807,7.251],[17.27,-4.251]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[247.099,231.722],"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":180,"st":0,"bm":0},{"ddd":0,"ind":101,"ty":4,"nm":"2-sofa","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[58.875,218.125,0],"ix":2,"l":2},"a":{"a":0,"k":[329.438,257.062,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.371,0],[0,0],[0,14.372],[-14.371,0],[0,0],[0,-14.37]],"o":[[0,0],[-14.371,0],[0,-14.37],[0,0],[14.371,0],[0,14.372]],"v":[[16.305,26.02],[-16.306,26.02],[-42.326,-0.001],[-16.306,-26.02],[16.305,-26.02],[42.326,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[329.495,231.078],"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":180,"st":0,"bm":0},{"ddd":0,"ind":102,"ty":4,"nm":"2-shoes-right","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-1,"ix":10},"p":{"a":0,"k":[-99.375,212.929,0],"ix":2,"l":2},"a":{"a":0,"k":[247.562,255,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.551,-2.664],[2.534,0.008],[1.107,-0.652],[0.452,-0.733],[-5.744,-2.641],[0,0],[0,0],[0,0]],"o":[[-1.459,2.714],[-1.135,1.951],[-1.235,-0.004],[-0.767,0.454],[0.976,0.452],[0,0],[3.167,1.455],[0,0],[0,0]],"v":[[-4.856,-14.363],[-9.285,-6.247],[-14.331,-2.152],[-17.997,-1.591],[-19.594,0.357],[-8.257,5.572],[2.769,10.641],[10.865,14.363],[19.594,-2.981]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[237.059,241.539],"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":180,"st":0,"bm":0},{"ddd":0,"ind":103,"ty":4,"nm":"square sky blue","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[0.2]},"o":{"x":[0.26],"y":[0]},"t":0,"s":[0],"e":[-5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.26],"y":[0]},"t":14,"s":[-5],"e":[5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":47,"s":[5],"e":[0]},{"t":100}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.74],"y":[1]},"o":{"x":[0.4],"y":[0.8]},"t":0,"s":[129],"e":[131]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":19,"s":[131],"e":[130]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":42,"s":[130],"e":[131]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":61,"s":[131],"e":[129]},{"t":100}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.74],"y":[1]},"o":{"x":[0.4],"y":[0.8]},"t":0,"s":[-9],"e":[-23]},{"i":{"x":[0.77],"y":[1.12]},"o":{"x":[0.56],"y":[0.52]},"t":19,"s":[-23],"e":[-18]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":42,"s":[-18],"e":[-22]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":61,"s":[-22],"e":[-9]},{"t":100}],"ix":4}},"a":{"a":0,"k":[364.5,143.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.732,-0.975],[0,0],[0.975,-0.733],[0,0],[0.734,0.975],[0,0],[-0.976,0.733],[0,0]],"o":[[0,0],[0.733,0.975],[0,0],[-0.975,0.733],[0,0],[-0.733,-0.975],[0,0],[0.976,-0.733]],"v":[[2.76,-8.047],[8.497,-0.412],[8.058,2.681],[0.332,8.486],[-2.761,8.047],[-8.497,0.412],[-8.058,-2.681],[-0.333,-8.486]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[364.634,143.492],"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":180,"st":0,"bm":0},{"ddd":0,"ind":104,"ty":4,"nm":"Oval_character 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.95]},"o":{"x":[0.17],"y":[0.225]},"t":0,"s":[2.081],"e":[-5.919]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":20,"s":[-5.919],"e":[2.081]},{"t":98.7890625}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.57],"y":[1.029]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-514.596],"e":[-524.596]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":20,"s":[-524.596],"e":[-518.596]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.4],"y":[-0.236]},"t":48.736,"s":[-518.596],"e":[-514.596]},{"t":101}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.57],"y":[1.029]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[129.05],"e":[124.55]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":20,"s":[124.55],"e":[127.3]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.4],"y":[-0.225]},"t":48.736,"s":[127.3],"e":[129.05]},{"t":101}],"ix":4}},"a":{"a":0,"k":[29,194.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,-0.836],[-3.307,-1.317],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0],[1.644,-4.127]],"o":[[-0.2,3.369],[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[-4.127,-1.639],[-0.327,0.819]],"v":[[-16.988,-4.042],[-11.932,3.905],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-5.985,-11.039],[-16.43,-6.54]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.173,193.797],"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":180,"st":0,"bm":0},{"ddd":0,"ind":105,"ty":4,"nm":"다이아","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.518],"y":[0.857]},"o":{"x":[0.467],"y":[-0.093]},"t":0,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.668],"y":[-0.211]},"o":{"x":[0.456],"y":[-0.108]},"t":29,"s":[10.446],"e":[2.081]},{"i":{"x":[0.515],"y":[0.918]},"o":{"x":[0.174],"y":[0.318]},"t":56,"s":[2.081],"e":[-9.548]},{"i":{"x":[0.518],"y":[0.926]},"o":{"x":[0.467],"y":[-0.048]},"t":72,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.845],"y":[0.92]},"o":{"x":[0.456],"y":[-0.056]},"t":87,"s":[10.446],"e":[2.081]},{"t":101}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.567],"y":[1.045]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-465.971],"e":[-511.971]},{"i":{"x":[0.768],"y":[1.075]},"o":{"x":[0.564],"y":[0.293]},"t":27,"s":[-511.971],"e":[-497.846]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":54,"s":[-497.846],"e":[-501.548]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":69,"s":[-501.548],"e":[-465.971]},{"t":101}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.567],"y":[1.04]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[100.8],"e":[95.3]},{"i":{"x":[0.768],"y":[1.055]},"o":{"x":[0.564],"y":[0.217]},"t":27,"s":[95.3],"e":[96.925]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":54,"s":[96.925],"e":[96.329]},{"i":{"x":[0.478],"y":[1]},"o":{"x":[0.356],"y":[-0.031]},"t":69,"s":[96.329],"e":[100.8]},{"t":101}],"ix":4}},"a":{"a":0,"k":[62.438,198.438,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.377,-0.316],[0,0],[0.317,-0.378],[0,0],[0.378,0.316],[0,0],[-0.317,0.377],[0,0]],"o":[[0,0],[0.377,0.316],[0,0],[-0.317,0.378],[0,0],[-0.378,-0.316],[0,0],[0.317,-0.377]],"v":[[0.351,-3.417],[3.305,-0.938],[3.414,0.318],[0.907,3.307],[-0.35,3.417],[-3.303,0.938],[-3.413,-0.317],[-0.906,-3.307]],"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":[62.422,198.476],"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":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":106,"ty":4,"nm":"세모","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.068]},"t":0,"s":[-17],"e":[-4]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.139]},"t":27.281,"s":[-4],"e":[-19]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.52]},"t":63.676,"s":[-19],"e":[-17]},{"t":99}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.038]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[-291.532],"e":[-274.532]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":23,"s":[-274.532],"e":[-280.532]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":46.55,"s":[-280.532],"e":[-278.032]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":61.535,"s":[-278.032],"e":[-291.532]},{"t":99}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.038]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[51.039],"e":[60.539]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":23,"s":[60.539],"e":[57.039]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":46.55,"s":[57.039],"e":[59.039]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":61.535,"s":[59.039],"e":[51.039]},{"t":99}],"ix":4}},"a":{"a":0,"k":[150.469,171.031,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.003,0.435],[-0.03,5.845],[-0.375,-0.23],[0,0],[0.371,-0.213],[0,0]],"o":[[0.054,-7.316],[0.002,-0.441],[0,0],[0.364,0.225],[0,0],[-0.378,0.216]],"v":[[-6.426,6.889],[-6.338,-6.891],[-5.477,-7.369],[6.065,-0.256],[6.05,0.714],[-5.581,7.383]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[150.527,171.076],"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":[{"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 2","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,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":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 2","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 3","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":107,"ty":4,"nm":"Circle_character2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.515],"y":[0.98]},"o":{"x":[0.174],"y":[0.092]},"t":0,"s":[2.081],"e":[-9.548]},{"i":{"x":[0.518],"y":[0.854]},"o":{"x":[0.467],"y":[-0.095]},"t":7.332,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.668],"y":[0.194]},"o":{"x":[0.456],"y":[-0.072]},"t":62.624,"s":[10.446],"e":[2.081]},{"t":96.1318359375}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":-14.271,"s":[-293.873],"e":[-293.873]},{"i":{"x":[0.488],"y":[1.053]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-293.873],"e":[-266.623]},{"i":{"x":[0.728],"y":[1.04]},"o":{"x":[0.462],"y":[0.124]},"t":24.62,"s":[-266.623],"e":[-277.873]},{"i":{"x":[0.561],"y":[1.159]},"o":{"x":[0.404],"y":[0.098]},"t":48.123,"s":[-277.873],"e":[-272.623]},{"i":{"x":[0.416],"y":[1]},"o":{"x":[0.346],"y":[0.078]},"t":61.554,"s":[-272.623],"e":[-293.873]},{"t":98.484375}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":-14.271,"s":[28.933],"e":[28.933]},{"i":{"x":[0.488],"y":[1.053]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[28.933],"e":[10.683]},{"i":{"x":[0.728],"y":[1.04]},"o":{"x":[0.462],"y":[0.124]},"t":24.62,"s":[10.683],"e":[18.183]},{"i":{"x":[0.561],"y":[1.159]},"o":{"x":[0.404],"y":[0.098]},"t":48.123,"s":[18.183],"e":[14.933]},{"i":{"x":[0.416],"y":[1]},"o":{"x":[0.346],"y":[0.078]},"t":61.554,"s":[14.933],"e":[28.933]},{"t":98.484375}],"ix":4}},"a":{"a":0,"k":[156.062,157.531,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.763],[1.763,0],[0,1.764],[-1.764,0]],"o":[[0,1.764],[-1.764,0],[0,-1.763],[1.763,0]],"v":[[3.193,-0.001],[0,3.193],[-3.193,-0.001],[0,-3.192]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,157.354],"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":180,"st":0,"bm":0},{"ddd":0,"ind":108,"ty":4,"nm":"Circle_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[191],"e":[191]},{"i":{"x":[0.73],"y":[1]},"o":{"x":[0.46],"y":[0]},"t":25,"s":[191],"e":[191]},{"i":{"x":[0.56],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":48,"s":[191],"e":[191]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0]},"t":62,"s":[191],"e":[191]},{"t":98}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.05]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[-13.25],"e":[-22.25]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":25,"s":[-22.25],"e":[-13.25]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":48,"s":[-13.25],"e":[-19.25]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":62,"s":[-19.25],"e":[-13.25]},{"t":98}],"ix":4}},"a":{"a":0,"k":[395.5,144.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.261],[5.26,0],[0,5.26],[-5.261,0]],"o":[[0,5.26],[-5.261,0],[0,-5.261],[5.26,0]],"v":[[9.526,0],[0,9.525],[-9.526,0],[0,-9.525]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[395.222,144.324],"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":180,"st":0,"bm":0},{"ddd":0,"ind":109,"ty":4,"nm":"Circle_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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]],"o":[[0,0],[0,0],[0,0]],"v":[[-18.783,-14.877],[-11.34,14.877],[18.782,14.877]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.204000001795,0.658999992819,0.325,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[437.996,137.01],"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":180,"st":0,"bm":0},{"ddd":0,"ind":110,"ty":4,"nm":"Pinkdot_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96.231,"s":[100],"e":[0]},{"t":98}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":70,"s":[100],"e":[209]},{"t":98}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.017},"t":70,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":98}],"ix":2,"l":2},"a":{"a":0,"k":[436,123.5,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":70,"s":[25,25,100],"e":[200,200,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":76.19,"s":[200,200,100],"e":[200,200,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":91.222,"s":[200,200,100],"e":[25,25,100]},{"t":98}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.09],[2.09,0],[0,2.09],[-2.09,0]],"o":[[0,2.09],[-2.09,0],[0,-2.09],[2.09,0]],"v":[[3.784,0],[0,3.784],[-3.784,0],[0,-3.784]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.972999961703,0.510000011968,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":[435.901,123.423],"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":70,"op":192,"st":12,"bm":0},{"ddd":0,"ind":111,"ty":4,"nm":"Sqaure_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85.231,"s":[100],"e":[0]},{"t":87}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.981]},"o":{"x":[0.13],"y":[0.029]},"t":60,"s":[100],"e":[209]},{"t":87}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.989},"o":{"x":0.13,"y":0.018},"t":60,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":87}],"ix":2,"l":2},"a":{"a":0,"k":[468,95.5,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":60,"s":[25,25,100],"e":[200,200,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":66.19,"s":[200,200,100],"e":[200,200,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":81.222,"s":[200,200,100],"e":[25,25,100]},{"t":87}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.623,1.459],[0,0],[-1.46,-0.624],[0,0],[0.623,-1.46],[0,0],[1.46,0.623],[0,0]],"o":[[0,0],[0.623,-1.459],[0,0],[1.459,0.624],[0,0],[-0.623,1.46],[0,0],[-1.459,-0.623]],"v":[[-10.864,2.115],[-5.983,-9.311],[-2.212,-10.824],[9.35,-5.886],[10.864,-2.114],[5.983,9.311],[2.211,10.825],[-9.35,5.886]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"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":[1,1,1,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[467.936,95.276],"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}],"ip":60,"op":192,"st":12,"bm":0},{"ddd":0,"ind":112,"ty":4,"nm":"Redcircle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92.231,"s":[100],"e":[0]},{"t":94}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":66,"s":[100],"e":[209]},{"t":94}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":66,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":94}],"ix":2,"l":2},"a":{"a":0,"k":[278.5,87,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":66,"s":[25,25,100],"e":[130,130,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":72.19,"s":[130,130,100],"e":[130,130,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.222,"s":[130,130,100],"e":[25,25,100]},{"t":94}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.171,-7.644],[7.644,1.172],[-1.172,7.644],[-7.643,-1.171]],"o":[[-1.171,7.644],[-7.643,-1.171],[1.171,-7.643],[7.644,1.171]],"v":[[13.841,2.12],[-2.121,13.84],[-13.84,-2.122],[2.121,-13.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.263000009574,0.20800000359,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":[278.733,86.771],"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":66,"op":246,"st":66,"bm":0},{"ddd":0,"ind":113,"ty":4,"nm":"Yellowtriangle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.231,"s":[100],"e":[0]},{"t":84}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":56,"s":[100],"e":[209]},{"t":84}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":56,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":84}],"ix":2,"l":2},"a":{"a":0,"k":[455.062,105.5,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":56,"s":[25,25,100],"e":[200,200,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":62.19,"s":[200,200,100],"e":[200,200,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":77.222,"s":[200,200,100],"e":[25,25,100]},{"t":84}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.239,-0.561],[3.199,-7.533],[0.36,0.501],[0,0],[-0.595,0.074],[0,0]],"o":[[-4.023,9.419],[-0.24,0.567],[0,0],[-0.35,-0.488],[0,0],[0.604,-0.075]],"v":[[10.052,-8.616],[2.491,9.133],[1.121,9.285],[-9.94,-6.139],[-9.397,-7.383],[9.228,-9.71]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[454.931,105.475],"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":56,"op":188,"st":8,"bm":0},{"ddd":0,"ind":114,"ty":4,"nm":"Hemicircle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.231,"s":[100],"e":[0]},{"t":76}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":48,"s":[100],"e":[209]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":48,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[479,62.5,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":48,"s":[25,25,100],"e":[200,200,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":54.19,"s":[200,200,100],"e":[200,200,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.222,"s":[200,200,100],"e":[25,25,100]},{"t":76}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.184,-0.564],[6.144,-2.607],[3.071,5.775],[-0.558,0.237]],"o":[[0.546,-0.231],[2.04,6.229],[-6.134,2.603],[-0.284,-0.535],[0,0]],"v":[[9.443,-9.338],[10.811,-8.73],[3.668,6.965],[-12.568,1.225],[-12.069,-0.212]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[479.459,63.014],"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":48,"op":188,"st":8,"bm":0},{"ddd":0,"ind":115,"ty":4,"nm":"Hexagon_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.6,"s":[100],"e":[0]},{"t":76}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":38,"s":[0],"e":[200]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":38,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[175.5,77.5,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":38,"s":[25,25,100],"e":[200,200,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":46.4,"s":[200,200,100],"e":[200,200,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":66.8,"s":[200,200,100],"e":[25,25,100]},{"t":76}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.38,1.121],[0,0],[0.781,0.889],[0,0],[1.16,-0.231],[0,0],[0.38,-1.12],[0,0],[-0.78,-0.89],[0,0],[-1.161,0.231],[0,0]],"o":[[0,0],[0.381,-1.121],[0,0],[-0.78,-0.889],[0,0],[-1.161,0.231],[0,0],[-0.38,1.121],[0,0],[0.78,0.889],[0,0],[1.16,-0.231]],"v":[[8.029,6.638],[10.41,-0.386],[9.762,-3.634],[4.87,-9.209],[1.734,-10.272],[-5.54,-8.822],[-8.029,-6.638],[-10.411,0.386],[-9.764,3.634],[-4.87,9.209],[-1.734,10.272],[5.539,8.823]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[175.614,77.028],"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":38,"op":186,"st":6,"bm":0},{"ddd":0,"ind":116,"ty":4,"nm":"Yellowtriangle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.6,"s":[100],"e":[0]},{"t":73}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":35,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":73}],"ix":2,"l":2},"a":{"a":0,"k":[183.25,63.5,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":35,"s":[25,25,100],"e":[200,200,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":43.4,"s":[200,200,100],"e":[200,200,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":63.8,"s":[200,200,100],"e":[25,25,100]},{"t":73}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.485,-0.258],[-6.52,-3.448],[0.477,-0.284],[0,0],[0.021,0.54],[0,0]],"o":[[8.15,4.333],[0.492,0.259],[0,0],[-0.464,0.276],[0,0],[-0.021,-0.55]],"v":[[-7.4,-9.08],[7.958,-0.934],[7.99,0.307],[-6.704,9.062],[-7.781,8.478],[-8.447,-8.423]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[183.188,63.068],"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":35,"op":195,"st":15,"bm":0},{"ddd":0,"ind":117,"ty":4,"nm":"Greenoval_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.6,"s":[100],"e":[0]},{"t":64}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.871]},"o":{"x":[0.13],"y":[0.03]},"t":26,"s":[-73],"e":[22]},{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.167],"y":[0.213]},"t":42,"s":[22],"e":[101]},{"t":64}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":26,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":64}],"ix":2,"l":2},"a":{"a":0,"k":[213.75,48.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":26,"s":[25,25,100],"e":[200,200,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":34.4,"s":[200,200,100],"e":[200,200,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":54.8,"s":[200,200,100],"e":[25,25,100]},{"t":64}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.14,-0.687],[2.958,-0.355],[0,0],[0.438,3.691],[-0.141,0.691],[-2.954,0.356],[0,0],[-0.443,-3.692]],"o":[[-0.562,2.768],[0,0],[-3.686,0.44],[-0.088,-0.733],[0.561,-2.763],[0,0],[3.69,-0.439],[0.088,0.733]],"v":[[14.611,0.382],[8.812,5.725],[-7.219,7.641],[-14.697,1.758],[-14.609,-0.387],[-8.816,-5.725],[7.214,-7.643],[14.697,-1.759]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.204000001795,0.658999992819,0.325,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":[213.582,47.91],"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":26,"op":186,"st":6,"bm":0},{"ddd":0,"ind":118,"ty":4,"nm":"Pinkdiamond_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55.6,"s":[100],"e":[0]},{"t":58}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":20,"s":[0],"e":[360]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":20,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[243.5,48.062,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":20,"s":[25,25,100],"e":[200,200,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":28.4,"s":[200,200,100],"e":[200,200,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":48.8,"s":[200,200,100],"e":[25,25,100]},{"t":58}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.377,-0.317],[0,0],[0.316,-0.377],[0,0],[0.377,0.317],[0,0],[-0.317,0.377],[0,0]],"o":[[0,0],[0.377,0.317],[0,0],[-0.317,0.378],[0,0],[-0.377,-0.316],[0,0],[0.316,-0.378]],"v":[[0.351,-3.417],[3.305,-0.939],[3.415,0.318],[0.907,3.307],[-0.35,3.417],[-3.303,0.939],[-3.413,-0.318],[-0.906,-3.307]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.972999961703,0.510000011968,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":[243.476,47.91],"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":20,"op":190,"st":10,"bm":0},{"ddd":0,"ind":119,"ty":4,"nm":"Whitepear_character1","parent":121,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[267.5,68.5,0],"ix":2,"l":2},"a":{"a":0,"k":[267.5,68.5,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-6.556,2.086],[0.46,1.009],[1.234,0.629],[2.98,0.257],[1.074,-0.355]],"o":[[-0.074,-0.009],[-0.817,-1.791],[-1.215,-0.619],[-1.756,-0.151],[-0.051,0.395]],"v":[[14.652,3.72],[13.904,0.866],[11.035,-2.875],[4.663,-5.19],[3.738,0.339]],"c":true}],"e":[{"i":[[-6.284,1.601],[0.017,1.383],[1.234,0.629],[2.893,0.547],[-0.12,-0.045]],"o":[[-0.074,-0.009],[0.21,-3.446],[-1.215,-0.619],[-1.123,-0.212],[-0.051,0.395]],"v":[[14.123,6.366],[14.093,3.891],[11.035,-2.875],[5.381,-5.076],[3.938,-5.37]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-6.284,1.601],[0.017,1.383],[1.234,0.629],[2.893,0.547],[-0.12,-0.045]],"o":[[-0.074,-0.009],[0.21,-3.446],[-1.215,-0.619],[-1.123,-0.212],[-0.051,0.395]],"v":[[14.123,6.366],[14.093,3.891],[11.035,-2.875],[5.381,-5.076],[3.938,-5.37]],"c":true}],"e":[{"i":[[-6.148,1.358],[0.076,1.658],[1.234,0.629],[2.875,0.538],[0.477,-0.2]],"o":[[-0.074,-0.009],[0.264,-4.78],[-1.215,-0.619],[-1.428,-0.267],[-0.051,0.395]],"v":[[14.171,7.752],[14.438,5.404],[11.035,-2.875],[5.741,-5.02],[3.536,-2.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[-6.148,1.358],[0.076,1.658],[1.234,0.629],[2.875,0.538],[0.477,-0.2]],"o":[[-0.074,-0.009],[0.264,-4.78],[-1.215,-0.619],[-1.428,-0.267],[-0.051,0.395]],"v":[[14.171,7.752],[14.438,5.404],[11.035,-2.875],[5.741,-5.02],[3.536,-2.818]],"c":true}],"e":[{"i":[[-10.762,-1.697],[-0.426,1.756],[1.234,0.629],[2.857,0.529],[1.074,-0.355]],"o":[[-0.074,-0.009],[1.237,-5.1],[-1.215,-0.619],[-1.733,-0.321],[-0.051,0.395]],"v":[[13.594,9.013],[14.283,6.916],[11.035,-2.875],[6.1,-4.963],[3.133,-0.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-10.762,-1.697],[-0.426,1.756],[1.234,0.629],[2.857,0.529],[1.074,-0.355]],"o":[[-0.074,-0.009],[1.237,-5.1],[-1.215,-0.619],[-1.733,-0.321],[-0.051,0.395]],"v":[[13.594,9.013],[14.283,6.916],[11.035,-2.875],[6.1,-4.963],[3.133,-0.266]],"c":true}],"e":[{"i":[[-7.41,-0.068],[-0.965,2.169],[1.254,1.561],[2.635,0.499],[-0.072,0.101]],"o":[[-0.011,-0.047],[1.833,-4.259],[-0.877,-0.59],[-1.55,-0.293],[-3.384,2.289]],"v":[[11.698,11.513],[13.762,8.458],[12.368,-1.479],[7.569,-4.574],[6.633,-4.766]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[-7.41,-0.068],[-0.965,2.169],[1.254,1.561],[2.635,0.499],[-0.072,0.101]],"o":[[-0.011,-0.047],[1.833,-4.259],[-0.877,-0.59],[-1.55,-0.293],[-3.384,2.289]],"v":[[11.698,11.513],[13.762,8.458],[12.368,-1.479],[7.569,-4.574],[6.633,-4.766]],"c":true}],"e":[{"i":[[-8.109,-0.659],[-1.235,2.375],[1.264,2.028],[2.524,0.484],[1.212,-0.506]],"o":[[0.02,-0.066],[2.132,-3.838],[-0.708,-0.576],[-1.458,-0.279],[-1.832,1.149]],"v":[[10.937,12.013],[13.501,9.229],[13.035,-0.781],[8.304,-4.38],[3.696,-0.36]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[-8.109,-0.659],[-1.235,2.375],[1.264,2.028],[2.524,0.484],[1.212,-0.506]],"o":[[0.02,-0.066],[2.132,-3.838],[-0.708,-0.576],[-1.458,-0.279],[-1.832,1.149]],"v":[[10.937,12.013],[13.501,9.229],[13.035,-0.781],[8.304,-4.38],[3.696,-0.36]],"c":true}],"e":[{"i":[[-7.201,-1.397],[-1.744,2.367],[1.274,2.494],[2.27,0.837],[1.258,-0.556]],"o":[[0.052,-0.085],[2.43,-3.417],[-0.539,-0.562],[-0.205,-0.039],[-2.426,1.401]],"v":[[9.739,13.055],[12.908,9.999],[13.368,-0.083],[8.789,-4.207],[3.55,-0.391]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[-7.201,-1.397],[-1.744,2.367],[1.274,2.494],[2.27,0.837],[1.258,-0.556]],"o":[[0.052,-0.085],[2.43,-3.417],[-0.539,-0.562],[-0.205,-0.039],[-2.426,1.401]],"v":[[9.739,13.055],[12.908,9.999],[13.368,-0.083],[8.789,-4.207],[3.55,-0.391]],"c":true}],"e":[{"i":[[-5.385,-2.872],[-2.762,2.35],[1.294,3.427],[2.137,0.063],[1.35,-0.657]],"o":[[0.115,-0.122],[3.027,-2.576],[-0.201,-0.534],[-1.215,-0.036],[-3.613,1.904]],"v":[[6.406,14.013],[11.72,11.541],[14.035,1.313],[9.759,-3.297],[3.258,-0.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-5.385,-2.872],[-2.762,2.35],[1.294,3.427],[2.137,0.063],[1.35,-0.657]],"o":[[0.115,-0.122],[3.027,-2.576],[-0.201,-0.534],[-1.215,-0.036],[-3.613,1.904]],"v":[[6.406,14.013],[11.72,11.541],[14.035,1.313],[9.759,-3.297],[3.258,-0.453]],"c":true}],"e":[{"i":[[0.013,0.004],[-3.05,2.782],[1.294,3.427],[0.671,0.557],[1.374,-0.861]],"o":[[1.95,1.067],[2.946,-2.666],[-0.188,-0.497],[-1.829,-0.568],[-3.453,2.206]],"v":[[2.219,13.701],[11.72,11.541],[14.035,1.313],[12.498,-1.603],[3.196,1.422]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[0.013,0.004],[-3.05,2.782],[1.294,3.427],[0.671,0.557],[1.374,-0.861]],"o":[[1.95,1.067],[2.946,-2.666],[-0.188,-0.497],[-1.829,-0.568],[-3.453,2.206]],"v":[[2.219,13.701],[11.72,11.541],[14.035,1.313],[12.498,-1.603],[3.196,1.422]],"c":true}],"e":[{"i":[[-0.394,-0.301],[-3.243,3.07],[1.294,3.427],[2.297,-0.278],[1.389,-0.996]],"o":[[3.11,2.226],[2.891,-2.726],[-0.179,-0.473],[-1.7,0.055],[-3.347,2.408]],"v":[[0.344,12.742],[11.72,11.541],[13.91,0.813],[9.408,0.277],[3.154,2.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.394,-0.301],[-3.243,3.07],[1.294,3.427],[2.297,-0.278],[1.389,-0.996]],"o":[[3.11,2.226],[2.891,-2.726],[-0.179,-0.473],[-1.7,0.055],[-3.347,2.408]],"v":[[0.344,12.742],[11.72,11.541],[13.91,0.813],[9.408,0.277],[3.154,2.672]],"c":true}],"e":[{"i":[[-0.597,-0.454],[-3.339,3.214],[1.294,3.427],[3.111,-0.696],[1.397,-1.064]],"o":[[3.69,2.806],[2.864,-2.756],[-0.174,-0.461],[-1.635,0.366],[-3.294,2.509]],"v":[[-0.594,12.263],[11.72,11.541],[14.035,1.313],[7.862,1.216],[3.133,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[-0.597,-0.454],[-3.339,3.214],[1.294,3.427],[3.111,-0.696],[1.397,-1.064]],"o":[[3.69,2.806],[2.864,-2.756],[-0.174,-0.461],[-1.635,0.366],[-3.294,2.509]],"v":[[-0.594,12.263],[11.72,11.541],[14.035,1.313],[7.862,1.216],[3.133,3.297]],"c":true}],"e":[{"i":[[-0.59,-0.463],[-3.314,3.24],[0.814,2.655],[3.111,-0.696],[1.397,-1.064]],"o":[[4.88,3.829],[2.441,-2.386],[-0.061,-0.033],[-1.635,0.366],[-3.294,2.509]],"v":[[-2.156,11.201],[11.72,11.541],[14.41,3.375],[7.862,1.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-0.59,-0.463],[-3.314,3.24],[0.814,2.655],[3.111,-0.696],[1.397,-1.064]],"o":[[4.88,3.829],[2.441,-2.386],[-0.061,-0.033],[-1.635,0.366],[-3.294,2.509]],"v":[[-2.156,11.201],[11.72,11.541],[14.41,3.375],[7.862,1.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.314,3.24],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[2.441,-2.386],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[14.535,5.938],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.068,0.015],[-3.314,3.24],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[2.441,-2.386],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[14.535,5.938],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.494,3.044],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[1.907,-1.661],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[13.91,8.25],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[0.068,0.015],[-3.494,3.044],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[1.907,-1.661],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[13.91,8.25],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.426,3.121],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[0.054,-0.045],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.156,10.951],[11.72,11.541],[12.785,10.5],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[0.068,0.015],[-3.426,3.121],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[0.054,-0.045],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.156,10.951],[11.72,11.541],[12.785,10.5],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-2.613,1.013],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.942,3.042],[0.066,-0.025],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-1.28,11.889],[9.217,13.293],[10.72,12.252],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.068,0.015],[-2.613,1.013],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.942,3.042],[0.066,-0.025],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-1.28,11.889],[9.217,13.293],[10.72,12.252],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-1.175,0.164],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.393,2.155],[0.07,-0.01],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[0.088,12.736],[6.415,14.14],[8.439,13.36],[6.487,3.216],[2.258,3.297]],"c":true}]},{"t":44}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[267.647,68.239],"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":19,"op":45,"st":9,"bm":0},{"ddd":0,"ind":120,"ty":4,"nm":"Redcircle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45.6,"s":[100],"e":[0]},{"t":48}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":10,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":48}],"ix":2,"l":2},"a":{"a":0,"k":[278.5,87,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":10,"s":[25,25,100],"e":[200,200,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":18.4,"s":[200,200,100],"e":[200,200,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":38.8,"s":[200,200,100],"e":[25,25,100]},{"t":48}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.171,-7.644],[7.644,1.172],[-1.172,7.644],[-7.643,-1.171]],"o":[[-1.171,7.644],[-7.643,-1.171],[1.171,-7.643],[7.644,1.171]],"v":[[13.841,2.12],[-2.121,13.84],[-13.84,-2.122],[2.121,-13.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.263000009574,0.20800000359,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":[278.733,86.771],"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":10,"op":190,"st":10,"bm":0},{"ddd":0,"ind":121,"ty":4,"nm":"Bluepear_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49.6,"s":[100],"e":[0]},{"t":52}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":14,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":52}],"ix":2,"l":2},"a":{"a":0,"k":[267.438,68.438,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":14,"s":[25,25,100],"e":[200,200,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.4,"s":[200,200,100],"e":[200,200,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":42.8,"s":[200,200,100],"e":[25,25,100]},{"t":52}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.185,0.414],[0,0],[0,0],[0.728,0.075],[0,0],[1.124,1.764],[0,0],[0,0],[0,0],[0.21,0.193],[2.485,-2.708],[-2.709,-2.485],[-0.227,-0.16],[0,0],[-0.029,-0.014],[0,0],[-0.627,-1.995],[0,0],[-0.303,-0.677],[0,0],[-1.332,-1.013],[-3.339,3.214],[4.016,3.686]],"o":[[0,0],[0,0],[-0.7,-0.244],[0,0],[-2.042,-0.455],[0,0],[-0.015,-0.027],[0,0],[-0.18,-0.212],[-2.708,-2.486],[-2.486,2.708],[0.209,0.193],[0,0],[0,0],[0,0],[1.855,0.969],[0,0],[0.138,0.719],[0,0],[0.628,1.401],[3.69,2.806],[3.99,-3.839],[-0.983,-0.903]],"v":[[8.279,-4.298],[8.279,-4.298],[8.276,-4.299],[6.127,-4.778],[3.82,-5.294],[-1.124,-8.76],[-2.56,-11.016],[-3.189,-12.004],[-3.241,-11.972],[-3.82,-12.583],[-13.224,-12.18],[-12.822,-2.776],[-12.164,-2.252],[-12.191,-2.196],[-11.153,-1.654],[-8.784,-0.416],[-4.908,4.213],[-4.198,6.468],[-3.536,8.569],[-3.535,8.572],[-0.594,12.263],[11.72,11.541],[11.57,-2.326]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[267.647,68.239],"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":14,"op":194,"st":9,"bm":0},{"ddd":0,"ind":122,"ty":4,"nm":"Greyhemicircle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37.6,"s":[100],"e":[0]},{"t":40}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":2,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":40}],"ix":2,"l":2},"a":{"a":0,"k":[288,116,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":2,"s":[25,25,100],"e":[200,200,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":10.4,"s":[200,200,100],"e":[200,200,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":30.8,"s":[200,200,100],"e":[25,25,100]},{"t":40}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.318,0.122],[-1.066,3.691],[-3.693,-0.726],[0.097,-0.335]],"o":[[-0.095,0.328],[-3.523,-1.351],[1.066,-3.684],[0.342,0.067],[0,0]],"v":[[1.209,6.939],[0.441,7.33],[-3.975,-1.561],[4.484,-6.725],[4.944,-5.982]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[286.818,115.984],"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":2,"op":182,"st":2,"bm":0},{"ddd":0,"ind":123,"ty":4,"nm":"Desk_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-27.225,52.04],[27.224,52.04],[27.224,-52.04],[-27.225,-52.04]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[440.046,205.058],"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":180,"st":0,"bm":0},{"ddd":0,"ind":124,"ty":4,"nm":"Bottom line","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.855,256.46],[587.162,256.46]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":125,"ty":1,"nm":"Bkrnd","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[324,160,0],"ix":2,"l":2},"a":{"a":0,"k":[324,160,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":648,"sh":320,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0}],"markers":[{"tm":71,"cm":"1","dr":0},{"tm":78,"cm":"2","dr":0},{"tm":85,"cm":"3","dr":0},{"tm":92,"cm":"4","dr":0},{"tm":112,"cm":"5","dr":0}]} \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/images/all_set.json b/chrome/browser/resources/chromeos/login/images/all_set.json deleted file mode 100644 index 64f6dde..0000000 --- a/chrome/browser/resources/chromeos/login/images/all_set.json +++ /dev/null
@@ -1 +0,0 @@ -{"v":"5.7.7","fr":30,"ip":0,"op":321,"w":346,"h":280,"nm":"12_You'reallset-NoLoop - 346x280","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Master Scale Null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[173,140,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[70,70,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":382,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":" 16","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-39.648,-96.013,0],"ix":2,"l":2},"a":{"a":0,"k":[-54.248,-97.763,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.958,1.833],[-2.887,0.78],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[0.958,-1.833],[3.083,-0.833],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.537,-82.028],[-57.746,-87.32],[-53.329,-95.361],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-62.708,-83.362],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-62.708,-83.362],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":169,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-0.348,2.872],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[0.443,-3.651],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-61.583,-83.369],[-56.851,-95.853],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-1.189,2.637],[-2.214,0],[-1.63,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[1.452,-3.222],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-63.912,-84.216],[-57.746,-95.828],[-52.579,-95.785],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.024,2.798],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[1.558,-0.868],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.683,-95.757],[-53.537,-97.195],[-47.094,-95.603]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-5.75,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-66.954,-93.903],[-61.746,-95.57],[-53.412,-95.57],[-47.282,-95.541]],"c":true}],"e":[{"i":[[0.654,0.645],[0.188,-0.29],[1.625,-4.125],[-2.167,1.917],[-0.977,0],[-4,0],[0,0]],"o":[[-3.755,-3.702],[0,0],[-1.733,4.399],[2.167,-1.917],[2.069,0],[3.194,0],[-0.44,-0.75]],"v":[[-49.157,-97.826],[-61.338,-98.463],[-66.246,-92.528],[-64.329,-90.778],[-61.246,-95.577],[-53.412,-95.57],[-47.282,-95.541]],"c":true}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"mouth ref","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-34.319,-87.372,0],"ix":2,"l":2},"a":{"a":0,"k":[-34.319,-87.372,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0,0],[-1.028,-0.339]],"o":[[0.405,1.004],[0,0]],"v":[[-35.467,-88.447],[-33.171,-86.296]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-36.384,-87.94],[-32.337,-88.122]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-37.759,-87.91],[-33.712,-88.092]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0,0],[-0.912,1.359]],"o":[[0.405,0.863],[0,0]],"v":[[-41.884,-88.702],[-37.837,-88.859]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}],"e":[{"i":[[0,0],[-0.912,1.581]],"o":[[0.405,1.004],[0,0]],"v":[[-41.884,-87.926],[-37.837,-88.109]],"c":false}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"head","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":152,"s":[0],"e":[13.7]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":169,"s":[13.7],"e":[13.7]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":181,"s":[13.7],"e":[-10.3]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":197,"s":[-10.3],"e":[-10.3]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":209,"s":[-10.3],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[0],"e":[0]},{"t":293}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[-39.831,-90.23,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":62,"s":[-41.081,-89.73,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[-41.081,-89.73,0],"e":[-39.831,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":148,"s":[-39.831,-89.73,0],"e":[-39.831,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[-39.831,-89.73,0],"e":[-34.831,-88.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":169,"s":[-34.831,-88.98,0],"e":[-34.831,-88.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-34.831,-88.98,0],"e":[-36.081,-90.23,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-36.081,-90.23,0],"e":[-36.081,-90.23,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-36.081,-90.23,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":223,"s":[-41.081,-89.73,0],"e":[-41.081,-89.73,0],"to":[0,0,0],"ti":[0,0,0]},{"t":293}],"ix":2,"l":2},"a":{"a":0,"k":[-39.831,-90.23,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":[[-3.357,-2.862],[2.862,-3.357],[3.357,2.862],[-2.862,3.357]],"o":[[3.357,2.862],[-2.862,3.357],[-3.357,-2.862],[2.862,-3.357]],"v":[[-34.648,-96.308],[-33.753,-85.047],[-45.014,-84.151],[-45.91,-95.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector 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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"neck","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.665,-71.889,0],"ix":2,"l":2},"a":{"a":0,"k":[-41.665,-71.889,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":169,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.637,-81.885]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":197,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-34.262,-82.073]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34.319,-76.58],[-36.637,-82.573]],"c":false}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"neck base","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-25.477,-48.56,0],"ix":2,"l":2},"a":{"a":0,"k":[-25.477,-48.56,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":[[-12.386,-0.414],[0,0]],"o":[[0,0],[4.627,0.055]],"v":[[-50.677,-76.752],[-32.569,-76.597]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"torso","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.647],"y":[1.029]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[0],"e":[5]},{"i":{"x":[0.598],"y":[0.761]},"o":{"x":[0.409],"y":[0.286]},"t":30,"s":[5],"e":[3.5]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.279],"y":[0.128]},"t":40,"s":[3.5],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[0]},"t":58,"s":[0],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[0],"e":[2.6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":166,"s":[2.6],"e":[2.6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":204,"s":[2.6],"e":[0]},{"t":220}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.647],"y":[1.029]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[-37.244],"e":[-11.844]},{"i":{"x":[0.505],"y":[0.403]},"o":{"x":[0.409],"y":[0.286]},"t":30,"s":[-11.844],"e":[-13.744]},{"i":{"x":[0.398],"y":[1.002]},"o":{"x":[0.626],"y":[0.068]},"t":40,"s":[-13.744],"e":[-51.844]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[1.815]},"t":58,"s":[-51.844],"e":[-51.762]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[-51.762],"e":[-50.274]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":166,"s":[-50.274],"e":[-50.274]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":204,"s":[-50.274],"e":[-51.762]},{"t":220}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.652],"y":[1.074]},"o":{"x":[0.69],"y":[0]},"t":14,"s":[-38.283],"e":[-41.533]},{"i":{"x":[0.636],"y":[0.286]},"o":{"x":[0.512],"y":[0.111]},"t":30,"s":[-41.533],"e":[-39.533]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.186],"y":[-2.628]},"t":40,"s":[-39.533],"e":[-40.033]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.295],"y":[0]},"t":58,"s":[-40.033],"e":[-40.033]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":152,"s":[-40.033],"e":[-40.033]},{"t":220}],"ix":4}},"a":{"a":0,"k":[-37.244,-38.283,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],[0,0],[-0.392,1.882],[-0.003,0.014],[-0.054,1.477],[-0.518,2.462],[1.06,2.282]],"o":[[0,0],[1.922,0],[0.003,-0.014],[0.289,-1.449],[0.091,-2.514],[0.518,-2.462],[0,0]],"v":[[-53.445,-38.283],[-28.387,-38.283],[-24.335,-41.464],[-24.326,-41.508],[-24.179,-45.931],[-21.468,-57.034],[-21.804,-64.441]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"necklace","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-39.271,-60.851,0],"ix":2,"l":2},"a":{"a":0,"k":[-39.271,-60.851,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[{"i":[[0,-1.202],[1.202,0],[0,1.202],[-1.202,0]],"o":[[0,1.202],[-1.202,0],[0,-1.202],[1.202,0]],"v":[[-34.723,-47.081],[-36.899,-44.905],[-39.076,-47.081],[-36.899,-49.258]],"c":true}],"e":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":20,"s":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}],"e":[{"i":[[-0.254,-1.175],[1.175,-0.254],[0.254,1.175],[-1.175,0.254]],"o":[[0.254,1.175],[-1.175,0.254],[-0.254,-1.175],[1.175,-0.254]],"v":[[-28.738,-49.025],[-30.406,-46.437],[-32.993,-48.105],[-31.325,-50.692]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":31,"s":[{"i":[[-0.254,-1.175],[1.175,-0.254],[0.254,1.175],[-1.175,0.254]],"o":[[0.254,1.175],[-1.175,0.254],[-0.254,-1.175],[1.175,-0.254]],"v":[[-28.738,-49.025],[-30.406,-46.437],[-32.993,-48.105],[-31.325,-50.692]],"c":true}],"e":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-1.201],[1.201,0.047],[-0.047,1.201],[-1.201,-0.047]],"o":[[-0.047,1.201],[-1.201,-0.047],[0.047,-1.201],[1.201,0.047]],"v":[[-35.893,-46.905],[-38.152,-44.814],[-40.243,-47.073],[-37.984,-49.164]],"c":true}],"e":[{"i":[[0,-1.202],[1.202,0],[0,1.202],[-1.202,0]],"o":[[0,1.202],[-1.202,0],[0,-1.202],[1.202,0]],"v":[[-34.723,-47.081],[-36.899,-44.905],[-39.076,-47.081],[-36.899,-49.258]],"c":true}]},{"t":46}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[{"i":[[0,0],[-14.35,0],[0,0]],"o":[[0,0],[12.657,0],[0,0]],"v":[[-47.615,-76.797],[-36.899,-48.399],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":20,"s":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.026,3.032],[0,0]],"o":[[0,0],[12.371,-2.674],[0,0]],"v":[[-47.615,-76.797],[-31.144,-49.852],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":31,"s":[{"i":[[0,0],[-14.026,3.032],[0,0]],"o":[[0,0],[12.371,-2.674],[0,0]],"v":[[-47.615,-76.797],[-31.144,-49.852],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,0],[-14.339,-0.556],[0,0]],"o":[[0,0],[12.647,0.49],[0,0]],"v":[[-47.615,-76.797],[-38.017,-48.305],[-34.319,-76.58]],"c":false}],"e":[{"i":[[0,0],[-14.35,0],[0,0]],"o":[[0,0],[12.657,0],[0,0]],"v":[[-47.601,-76.485],[-36.899,-48.399],[-34.319,-76.58]],"c":false}]},{"t":46}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":3,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"right arm","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":12,"s":[0],"e":[-14.9]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":29,"s":[-14.9],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":51,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":55,"s":[0],"e":[2.6]},{"t":69}],"ix":10},"p":{"a":0,"k":[-47.647,-76.613,0],"ix":2,"l":2},"a":{"a":0,"k":[-47.647,-76.613,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-0.603,-0.47],[-0.452,-0.039],[-1.913,0.936],[-1.46,1.551],[-0.364,0.544],[-0.426,1.122]],"o":[[-0.552,0.528],[0.357,0.279],[2.122,0.184],[1.913,-0.936],[0.448,-0.476],[0.668,-0.998],[0,0]],"v":[[-85.811,-3.751],[-85.709,-1.732],[-84.429,-1.336],[-78.243,-2.587],[-73.186,-6.435],[-71.944,-7.952],[-70.417,-11.205]],"c":false}],"e":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}],"e":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[-0.109,-0.739],[-0.293,-0.333],[-1.986,-0.629],[-2.08,0.112],[-0.625,0.139],[-1.06,0.507]],"o":[[-0.747,0.001],[0.065,0.439],[1.378,1.562],[1.986,0.629],[0.639,-0.034],[1.146,-0.255],[0,0]],"v":[[-123.429,-12.438],[-124.72,-10.94],[-124.082,-9.795],[-118.858,-6.505],[-112.681,-5.815],[-110.778,-6.05],[-107.501,-7.322]],"c":false}],"e":[{"i":[[0,0],[-0.603,-0.47],[-0.452,-0.039],[-1.913,0.936],[-1.46,1.551],[-0.364,0.544],[-0.426,1.122]],"o":[[-0.552,0.528],[0.357,0.279],[2.122,0.184],[1.913,-0.936],[0.448,-0.476],[0.668,-0.998],[0,0]],"v":[[-85.811,-3.751],[-85.709,-1.732],[-84.429,-1.336],[-78.243,-2.587],[-73.186,-6.435],[-71.944,-7.952],[-70.417,-11.205]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-1.324,-0.98],[0.247,-0.264],[1.633,-1.219],[0.082,-0.779],[-0.948,0.112],[-1.842,3.608]],"o":[[0.278,1.908],[0.216,0.16],[-1.403,1.501],[-0.573,0.427],[-0.137,1.299],[4.744,-0.56],[0,0]],"v":[[-80.497,-18.554],[-78.185,-13.675],[-80.162,-10.751],[-84.962,-7.022],[-86.484,-5.214],[-84.14,-3.887],[-73.934,-12.125]],"c":false}],"e":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}],"e":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[-0.275,-1.588],[0.354,-0.02],[1.978,0.24],[0.584,-0.496],[-0.747,-0.561],[-3.74,1.311]],"o":[[-1.092,1.538],[0.045,0.259],[-2.007,0.115],[-0.694,-0.084],[-0.974,0.827],[3.736,2.806],[0,0]],"v":[[-109.674,-19.329],[-111.332,-14.314],[-114.705,-13.579],[-120.62,-14.18],[-122.919,-13.928],[-122.155,-11.406],[-109.369,-10.347]],"c":false}],"e":[{"i":[[0,0],[-1.324,-0.98],[0.247,-0.264],[1.633,-1.219],[0.082,-0.779],[-0.948,0.112],[-1.842,3.608]],"o":[[0.278,1.908],[0.216,0.16],[-1.403,1.501],[-0.573,0.427],[-0.137,1.299],[4.744,-0.56],[0,0]],"v":[[-80.497,-18.554],[-78.185,-13.675],[-80.162,-10.751],[-84.962,-7.022],[-86.484,-5.214],[-84.14,-3.887],[-73.934,-12.125]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[-0.803,-3.366],[0.258,-1.825],[5.279,-3.498],[1.518,-0.108],[0.553,1.455]],"o":[[2.279,2.069],[0.427,1.793],[-0.888,6.27],[-1.123,0.744],[-1.344,0.096],[0,0]],"v":[[-70.34,-30.514],[-65.476,-22.239],[-64.924,-15.526],[-73.329,-1.342],[-78.587,0.483],[-82.928,-1.298]],"c":false}],"e":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}],"e":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[1.704,-2.924],[1.415,-1.117],[6.098,1.088],[1.147,0.948],[-0.591,1.403]],"o":[[0.216,3.003],[-0.908,1.557],[-4.862,3.839],[-1.297,-0.231],[-1.016,-0.839],[0,0]],"v":[[-94.411,-20.937],[-96.554,-11.796],[-100.695,-6.672],[-116.221,-2.306],[-121.174,-4.564],[-123.044,-8.755]],"c":false}],"e":[{"i":[[0,0],[-0.803,-3.366],[0.258,-1.825],[5.279,-3.498],[1.518,-0.108],[0.553,1.455]],"o":[[2.279,2.069],[0.427,1.793],[-0.888,6.27],[-1.123,0.744],[-1.344,0.096],[0,0]],"v":[[-70.34,-30.514],[-65.476,-22.239],[-64.924,-15.526],[-73.329,-1.342],[-78.587,0.483],[-82.928,-1.298]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":12,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[4.308,-5.079],[-1.754,16.452],[-34.681,2.044]],"o":[[-7.627,2.556],[3.64,4.694],[0,0],[-7.197,1.148],[1.38,-12.947],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-69.922,-31.144],[-80.497,-18.554],[-104.773,-46.17],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":26,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":32,"s":[{"i":[[0,0],[9.565,-3.696],[0,0],[6.478,-0.687],[-5.22,8.123],[-31.633,-6.402]],"o":[[-7.627,2.556],[-5.081,6.387],[0,0],[-1.896,-9.591],[7.749,-9.734],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-93.689,-21.101],[-109.674,-19.329],[-102.679,-52.684],[-47.615,-76.797]],"c":false}],"e":[{"i":[[0,0],[9.565,-3.696],[0,0],[4.308,-5.079],[-1.754,16.452],[-34.681,2.044]],"o":[[-7.627,2.556],[3.64,4.694],[0,0],[-7.197,1.148],[1.38,-12.947],[0,0]],"v":[[-53.087,-57.21],[-82.231,-47.166],[-69.922,-31.144],[-80.497,-18.554],[-104.773,-46.17],[-47.615,-76.797]],"c":false}]},{"t":51}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector 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}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"torso right","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55.445,-47.081,0],"ix":2,"l":2},"a":{"a":0,"k":[-55.445,-47.081,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],[-1.244,-7.241]],"o":[[1.228,6.912],[0,0]],"v":[[-56.915,-55.939],[-53.975,-38.223]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"hair2","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[-91.931,-82.48,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.167,"y":0.167},"t":62,"s":[-81.722,-64.98,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[-81.722,-64.98,0],"e":[-85.076,-70.728,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":148,"s":[-85.076,-70.728,0],"e":[-85.076,-70.728,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-85.076,-70.728,0],"e":[-81.618,-67.477,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-81.618,-67.477,0],"e":[-81.618,-67.477,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-81.618,-67.477,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":223,"s":[-81.722,-64.98,0],"e":[-81.722,-64.98,0],"to":[0,0,0],"ti":[0,0,0]},{"t":293}],"ix":2,"l":2},"a":{"a":0,"k":[-91.931,-82.48,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,-5.534],[-5.534,0],[0,5.534],[5.534,0]],"o":[[0,5.534],[5.534,0],[0,-5.534],[-5.534,0]],"v":[[-101.951,-82.48],[-91.931,-72.459],[-81.91,-82.48],[-91.931,-92.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"hair1","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":152,"s":[0],"e":[-12]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":169,"s":[-12],"e":[-12]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":181,"s":[-12],"e":[7.9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":197,"s":[7.9],"e":[7.9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":209,"s":[7.9],"e":[0]},{"t":223}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0.188,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0.188,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.333,"y":0.333},"t":117,"s":[-39.753,-99.33,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":152,"s":[-39.753,-99.33,0],"e":[-42.148,-99.389,0],"to":[-0.399,-0.01,0],"ti":[0.399,0.01,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":169,"s":[-42.148,-99.389,0],"e":[-42.148,-99.389,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":181,"s":[-42.148,-99.389,0],"e":[-38.369,-99.211,0],"to":[0.63,0.03,0],"ti":[-0.63,-0.03,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":197,"s":[-38.369,-99.211,0],"e":[-38.369,-99.211,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[-38.369,-99.211,0],"e":[-39.753,-99.33,0],"to":[-0.231,-0.02,0],"ti":[0.231,0.02,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":223,"s":[-39.753,-99.33,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0.188,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[-39.753,-99.33,0],"e":[-39.753,-98.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[-39.753,-98.205,0],"e":[-39.753,-99.33,0],"to":[0,0,0],"ti":[0,0.188,0]},{"t":281}],"ix":2,"l":2},"a":{"a":0,"k":[-39.753,-99.33,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":48,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[2.104,-0.737],[2.141,-0.401],[2.195,-0.452],[3.473,-3.467],[0.523,-2.194],[0.045,-0.26],[-2.892,-2.967],[-5.029,2.118],[-2.554,0.155],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-2.058,0.721],[-2.203,0.413],[-4.691,0.967],[-1.596,1.593],[-0.061,0.257],[-0.735,4.2],[0,0],[1.778,-0.749],[5.6,-0.341],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.302,-95.867],[-59.637,-94.274],[-66.248,-93.058],[-79.205,-87.127],[-82.474,-81.324],[-82.634,-80.549],[-78.801,-69.233],[-70.075,-68.22],[-52.907,-76.944],[-41.626,-86.945],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":77,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":101,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":117,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":134,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":148,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":209,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.878,-1.154],[1.931,-0.949],[2.03,-0.837],[2.689,-3.56],[0.087,-1.894],[-0.026,-0.216],[-2.637,-1.122],[-5.173,1.475],[-2.526,0.376],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.825,1.12],[-2.024,0.995],[-4.338,1.788],[-1.235,1.636],[-0.01,0.222],[0.347,3.274],[0,0],[1.849,-0.526],[2.067,-0.983],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.562,-95.244],[-60.336,-91.183],[-66.552,-88.654],[-76.478,-82.738],[-78.525,-77.325],[-78.449,-76.325],[-74.284,-69.685],[-63.33,-72.294],[-49.269,-76.95],[-46.394,-86.898],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.4,"y":0},"t":223,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":241,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":257,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":265,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":273,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.632,-0.615],[1.768,-1.358],[1.859,-1.068],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-0.861,4.639],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.087,0.787],[-1.711,1.315],[-1.928,1.108],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.378,-2.047],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.874,-98.132],[-39.169,-100.256],[-39.165,-100.274],[-42.079,-100.213],[-46.955,-98.885],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.626,-86.827],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":281,"s":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}],"e":[{"i":[[0.156,0.31],[0.917,0.782],[1.942,0.112],[0,0],[0.769,-0.043],[1.478,-0.443],[1.768,-1.358],[1.848,-1.086],[1.949,-1.024],[2.305,-3.605],[-0.126,-1.748],[-0.061,-0.195],[-2.513,-0.22],[-5.243,1.161],[-2.512,0.485],[-1.049,5.511],[0,0],[-2.149,0],[0,0],[-0.182,0.296]],"o":[[-0.538,-1.067],[-1.506,-1.284],[0,0],[-1.151,-0.105],[-1.543,0.086],[-2.136,0.641],[-1.711,1.315],[-1.993,1.171],[-4.165,2.189],[-1.059,1.656],[0.015,0.204],[0.877,2.822],[0,0],[1.884,-0.417],[0.34,-1.297],[0,0],[0.402,-2.111],[0,0],[0.347,0],[0.182,-0.296]],"v":[[-31.807,-94.283],[-33.999,-97.069],[-39.294,-99.193],[-39.29,-99.211],[-42.391,-99.275],[-47.08,-98.322],[-53.689,-94.94],[-60.678,-89.671],[-66.701,-86.5],[-75.144,-80.592],[-76.595,-75.369],[-76.402,-74.259],[-72.075,-69.905],[-60.032,-74.286],[-47.49,-76.953],[-45.376,-86.952],[-41.198,-89.194],[-36.801,-92.833],[-32.7,-92.833],[-31.848,-93.308]],"c":true}]},{"t":293}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Layer 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":14,"s":[0],"e":[6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[6],"e":[6]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":40,"s":[6],"e":[0]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.652,"y":0.926},"o":{"x":0.69,"y":0},"t":14,"s":[-53.445,-38.283,0],"e":[-29.47,-43.033,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.505,"y":0.403},"o":{"x":0.512,"y":0.57},"t":30,"s":[-29.47,-43.033,0],"e":[-30.97,-40.533,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.398,"y":0.998},"o":{"x":0.626,"y":0.107},"t":40,"s":[-30.97,-40.533,0],"e":[-67.97,-40.533,0],"to":[0,0,0],"ti":[0,0,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[-53.445,-38.283,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.365,0],[0,0],[1.465,0.66],[0.599,0.223],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[0.406,-1.555],[-0.583,-0.263],[-0.599,-0.223],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.554,118.806],[-75.92,118.806],[-77.833,114.938],[-79.659,114.357],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.446,-2.931],[0,0],[0.833,1.312],[1.346,1.393],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[1.795,0.132],[-0.343,-0.54],[-0.444,-0.46],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.866,119.306],[-76.857,122.868],[-76.083,119.313],[-78.721,115.982],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.446,-2.931],[0,0],[0.833,1.312],[1.346,1.393],[0.188,0.611],[-0.193,0.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[1.448,5.166],[0,0],[1.795,0.132],[-0.343,-0.54],[-0.444,-0.46],[-0.17,-0.554],[0.894,-2.529],[0,0]],"v":[[-104.523,86.611],[-114.344,108.556],[-106.601,112.458],[-101.074,102.939],[-99.075,110.07],[-87.866,119.306],[-76.857,122.868],[-76.083,119.313],[-78.721,115.982],[-81.036,113.121],[-80.818,111.429],[-76.81,100.458]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.17,-0.426],[0,0],[1.299,0.852],[1.801,0.714],[0.423,0.479],[0.049,0.577],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.448,4.11],[0,0],[1.689,-0.619],[-0.535,-0.351],[-0.594,-0.236],[-0.383,-0.434],[-0.228,-2.673],[0,0]],"v":[[-96.283,99.875],[-95.721,124.487],[-87.057,124.851],[-85.944,113.901],[-81.184,119.575],[-67.166,123.371],[-55.667,122.081],[-56.426,118.523],[-60.203,116.575],[-63.49,114.922],[-63.99,113.29],[-65.309,100.457]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.17,-0.426],[0,0],[1.299,0.852],[1.801,0.714],[0.423,0.479],[0.049,0.577],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.448,4.11],[0,0],[1.689,-0.619],[-0.535,-0.351],[-0.594,-0.236],[-0.383,-0.434],[-0.228,-2.673],[0,0]],"v":[[-96.283,99.875],[-95.721,124.487],[-87.057,124.851],[-85.944,113.901],[-81.184,119.575],[-67.166,123.371],[-55.667,122.081],[-56.426,118.523],[-60.203,116.575],[-63.49,114.922],[-63.99,113.29],[-65.309,100.457]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-6.185,-0.036],[0,0],[1.351,0.768],[1.842,0.599],[0.452,0.452],[0.085,0.573],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[3.7,3.884],[0,0],[1.647,-0.725],[-0.556,-0.316],[-0.608,-0.198],[-0.41,-0.409],[-0.396,-2.653],[0,0]],"v":[[-85.902,96.957],[-84.291,120.945],[-75.622,120.762],[-75.202,109.763],[-70.094,115.125],[-55.863,118.03],[-44.468,116.016],[-45.451,112.513],[-49.343,110.808],[-52.728,109.365],[-53.329,107.768],[-54.932,96.198]],"c":false}]},{"t":152}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":1,"k":[{"t":44,"s":[100],"h":1},{"t":45,"s":[0],"h":1}],"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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[5.07,-10.693],[3.561,-7.51]],"o":[[-1.152,15.668],[-0.551,4.806],[-2.513,11.564],[-3.561,7.51],[0,0]],"v":[[-35.91,-25.948],[-40.324,20.971],[-42.486,35.314],[-59.582,76.8],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[2.418,-11.585],[1.616,-8.848]],"o":[[-2.845,15.314],[-0.551,4.806],[-2.513,11.564],[-1.603,7.682],[0,0]],"v":[[-38.37,-25.438],[-45.309,18.981],[-47.471,33.325],[-55.944,77.926],[-60.028,100.579]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[1.791,-15.607],[1.027,-4.727],[2.418,-11.585],[1.616,-8.848]],"o":[[-2.845,15.314],[-0.551,4.806],[-2.513,11.564],[-1.603,7.682],[0,0]],"v":[[-38.37,-25.438],[-45.309,18.981],[-47.471,33.325],[-55.944,77.926],[-60.028,100.579]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[1.897,-15.595],[0.55,-5.811],[1.139,-11.779],[1.175,-10.341]],"o":[[-1.259,15.659],[-0.584,4.802],[-1.116,11.781],[-0.993,10.268],[0,0]],"v":[[-38.916,-13.373],[-42.701,22.521],[-43.964,37.481],[-46.864,67.997],[-49.65,96.091]],"c":false}],"e":[{"i":[[0,0],[1.791,-15.607],[0.511,-5.814],[1.059,-11.787],[1.175,-10.341]],"o":[[-1.152,15.668],[-0.551,4.806],[-1.035,11.789],[-0.923,10.275],[0,0]],"v":[[-39.66,-13.448],[-43.199,22.471],[-44.361,37.439],[-47.052,67.975],[-49.65,96.091]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-9.915,-5.049]],"o":[[10.096,5.245],[0,0]],"v":[[-111.052,83.273],[-72.095,102.839]],"c":false}],"e":[{"i":[[0,0],[-11.123,-0.294]],"o":[[11.37,0.393],[0,0]],"v":[[-103.613,99.669],[-60.028,100.579]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[0,0],[-11.123,-0.294]],"o":[[11.37,0.393],[0,0]],"v":[[-103.613,99.669],[-60.028,100.579]],"c":false}],"e":[{"i":[[0,0],[-11.123,-0.224]],"o":[[11.371,0.322],[0,0]],"v":[[-97.512,98.969],[-58.517,99.925]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[-11.123,-0.224]],"o":[[11.371,0.322],[0,0]],"v":[[-97.512,98.969],[-58.517,99.925]],"c":false}],"e":[{"i":[[0,0],[-11.125,0.188]],"o":[[11.376,-0.099],[0,0]],"v":[[-95.984,97.138],[-49.65,96.091]],"c":false}]},{"t":58}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":14,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[2.571,-2.986],[0.601,-10.018]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-6.033,7.006],[0,0]],"v":[[-53.125,-38.25],[-67.168,-21.447],[-77.425,0.496],[-89.723,46.409],[-96.663,56.031],[-111.052,83.273]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[1.037,-3.802],[-1.016,-12.381]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-2.434,8.92],[0,0]],"v":[[-53.125,-38.25],[-66.553,-22.769],[-76.81,-0.826],[-86.714,46.344],[-99.328,68.822],[-103.613,99.669]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":40,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[3.173,-7.127],[8.357,-14.655],[1.037,-3.802],[-1.016,-12.381]],"o":[[-7.062,5.938],[-5.332,9.197],[-5.375,12.074],[-1.958,3.434],[-2.434,8.92],[0,0]],"v":[[-53.125,-38.25],[-66.553,-22.769],[-76.81,-0.826],[-86.714,46.344],[-99.328,68.822],[-103.613,99.669]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.564,-7.625],[4.289,-16.168],[0.959,-3.817],[1.18,-11.367]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.236,15.777],[-2.122,7.499],[-2.289,9.255],[0,0]],"v":[[-53.125,-38.25],[-66.078,-23.013],[-74.41,0.102],[-84.595,41.573],[-91.333,68.744],[-97.494,98.951]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.564,-7.625],[4.289,-16.168],[0.959,-3.817],[1.18,-11.367]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.236,15.777],[-2.122,7.499],[-2.289,9.255],[0,0]],"v":[[-53.125,-38.25],[-66.078,-23.013],[-74.41,0.102],[-84.595,41.573],[-91.333,68.744],[-97.494,98.951]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":58,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[3.943,-3.188],[3.232,-5.348],[1.89,-7.607],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.283,5.888],[-5.545,9.177],[-3.515,14.147],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-51.918,-38.187],[-62.455,-24.437],[-71.976,6.654],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}],"e":[{"i":[[3.824,-3.215],[3.107,-5.36],[1.774,-7.597],[5.936,-15.26],[0.501,-3.909],[-1.366,-9.513]],"o":[[-7.062,5.938],[-5.332,9.197],[-3.3,14.129],[-3.877,9.966],[-1.437,11.219],[0,0]],"v":[[-53.125,-38.25],[-63.293,-24.447],[-72.3,6.621],[-83.848,37.034],[-87.788,65.281],[-95.859,97.013]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":" 8","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.383],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[-2.2],"e":[0]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[-69.003,105.869,0],"e":[-70.503,106.994,0],"to":[-0.208,0,0],"ti":[3.899,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.379,"y":0},"t":47,"s":[-70.503,106.994,0],"e":[-78.571,108.119,0],"to":[-0.121,0,0],"ti":[0.255,0,0]},{"i":{"x":0.21,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[-78.571,108.119,0],"e":[-93.25,107.869,0],"to":[-3.792,0,0],"ti":[0,0,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[-84.25,105.744,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[0.269,-1.808],[0.802,-0.37],[0.555,-0.933],[-0.018,-1.173],[-5.66,-0.006],[-2.778,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.519,5.415],[-0.436,2.931],[-0.802,0.37],[-0.77,1.293],[0.9,0.004],[6.285,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-99.424,92.28],[-100.86,106.854],[-102.371,110.921],[-104.648,112.713],[-105.561,116.594],[-84.154,117.182],[-81.266,106.122],[-84.141,106.184],[-84.66,117.176],[-76.602,117.342],[-75.346,95.453]],"c":false}],"e":[{"i":[[0,0],[0.369,-1.851],[1.097,-0.379],[0.76,-0.955],[-0.024,-1.201],[-6.282,-0.006],[-2.778,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.546,6.093],[-0.598,3],[-1.097,0.379],[-1.054,1.324],[1.232,0.004],[6.975,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-94.052,92.759],[-95.951,106.838],[-99.961,111.016],[-103.079,112.85],[-104.329,116.824],[-90.063,116.84],[-73.999,106.312],[-73.999,106.312],[-73.999,116.827],[-66.132,116.833],[-64.827,92.794]],"c":true}]},{"t":53}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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}],"ip":45,"op":357,"st":50,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Layer 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-15.04,39.857,0],"ix":2,"l":2},"a":{"a":0,"k":[-15.04,39.857,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.69,"y":0},"t":14,"s":[{"i":[[0,0],[-0.716,4.737],[-1.079,4.298],[1.07,4.194],[0.143,5.237]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.054,-4.198],[-1.295,-5.076],[0,0]],"v":[[-41.808,94.965],[-43.267,82.478],[-39.362,67.384],[-39.386,54.532],[-43.649,39.469]],"c":false}],"e":[{"i":[[0,0],[-0.783,4.7],[-1.153,4.321],[0.966,4.409],[0.002,5.293]],"o":[[-1.039,-4.656],[0.724,-4.348],[1.127,-4.221],[-1.161,-5.152],[0,0]],"v":[[-40.919,94.562],[-42.136,81.879],[-38.195,66.949],[-39.023,53.362],[-43.04,34.954]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-0.783,4.7],[-1.153,4.321],[0.966,4.409],[0.002,5.293]],"o":[[-1.039,-4.656],[0.724,-4.348],[1.127,-4.221],[-1.161,-5.152],[0,0]],"v":[[-40.919,94.562],[-42.136,81.879],[-38.195,66.949],[-39.023,53.362],[-43.04,34.954]],"c":false}],"e":[{"i":[[0,0],[-0.903,4.679],[-1.263,4.29],[0.88,4.427],[-0.133,5.292]],"o":[[-0.92,-4.681],[0.835,-4.328],[1.234,-4.191],[-1.029,-5.18],[0,0]],"v":[[-38.555,93.57],[-39.449,80.861],[-35.129,66.035],[-35.611,52.432],[-38.658,33.802]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-0.903,4.679],[-1.263,4.29],[0.88,4.427],[-0.133,5.292]],"o":[[-0.92,-4.681],[0.835,-4.328],[1.234,-4.191],[-1.029,-5.18],[0,0]],"v":[[-38.555,93.57],[-39.449,80.861],[-35.129,66.035],[-35.611,52.432],[-38.658,33.802]],"c":false}],"e":[{"i":[[0,0],[-1.172,4.5],[-1.578,4.441],[0.385,5.578],[-3.336,6.624]],"o":[[-0.774,-4.609],[1.084,-4.162],[1.541,-4.338],[-0.408,-5.569],[0,0]],"v":[[-35.634,92.182],[-35.483,78.435],[-31.271,64.414],[-30.945,48.403],[-27.789,29.751]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[-1.172,4.5],[-1.578,4.441],[0.385,5.578],[-3.336,6.624]],"o":[[-0.774,-4.609],[1.084,-4.162],[1.541,-4.338],[-0.408,-5.569],[0,0]],"v":[[-35.634,92.182],[-35.483,78.435],[-31.271,64.414],[-30.945,48.403],[-27.789,29.751]],"c":false}],"e":[{"i":[[0,0],[-1.24,4.454],[-1.658,4.48],[0.259,5.87],[-0.954,5.675]],"o":[[-0.737,-4.59],[1.147,-4.12],[1.619,-4.376],[-0.25,-5.668],[0,0]],"v":[[-34.892,91.829],[-34.475,77.819],[-30.29,64.003],[-29.759,47.38],[-26.282,30.603]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[-1.24,4.454],[-1.658,4.48],[0.259,5.87],[-0.954,5.675]],"o":[[-0.737,-4.59],[1.147,-4.12],[1.619,-4.376],[-0.25,-5.668],[0,0]],"v":[[-34.892,91.829],[-34.475,77.819],[-30.29,64.003],[-29.759,47.38],[-26.282,30.603]],"c":false}],"e":[{"i":[[0,0],[-1.089,4.536],[-1.544,4.58],[0.441,5.559],[-0.702,5.751]],"o":[[-0.837,-4.612],[1.007,-4.196],[1.508,-4.474],[-0.489,-5.706],[0,0]],"v":[[-34.543,92.78],[-34.668,78.714],[-30.587,64.824],[-30.056,48.798],[-31.252,32.642]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[-1.089,4.536],[-1.544,4.58],[0.441,5.559],[-0.702,5.751]],"o":[[-0.837,-4.612],[1.007,-4.196],[1.508,-4.474],[-0.489,-5.706],[0,0]],"v":[[-34.543,92.78],[-34.668,78.714],[-30.587,64.824],[-30.056,48.798],[-31.252,32.642]],"c":false}],"e":[{"i":[[0,0],[-0.716,4.737],[-1.263,4.827],[0.889,4.791],[-0.083,5.938]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.234,-4.715],[-1.076,-5.799],[0,0]],"v":[[-33.683,95.121],[-35.142,80.916],[-31.315,66.846],[-30.787,52.287],[-34.399,35.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-0.716,4.737],[-1.263,4.827],[0.889,4.791],[-0.083,5.938]],"o":[[-1.084,-4.666],[0.662,-4.381],[1.234,-4.715],[-1.076,-5.799],[0,0]],"v":[[-33.683,95.121],[-35.142,80.916],[-31.315,66.846],[-30.787,52.287],[-34.399,35.062]],"c":false}],"e":[{"i":[[0,0],[-0.711,4.737],[-1.258,4.829],[0.894,4.79],[-0.076,5.938]],"o":[[-1.811,-4.441],[0.657,-4.382],[1.229,-4.717],[-1.082,-5.798],[0,0]],"v":[[-34.564,95.191],[-36.174,80.901],[-32.364,66.751],[-31.851,52.191],[-36.018,34.182]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-0.711,4.737],[-1.258,4.829],[0.894,4.79],[-0.076,5.938]],"o":[[-1.811,-4.441],[0.657,-4.382],[1.229,-4.717],[-1.082,-5.798],[0,0]],"v":[[-34.564,95.191],[-36.174,80.901],[-32.364,66.751],[-31.851,52.191],[-36.018,34.182]],"c":false}],"e":[{"i":[[0,0],[-0.702,4.739],[-1.249,4.831],[0.903,4.789],[-0.065,5.938]],"o":[[-1.796,-3.796],[0.649,-4.383],[1.22,-4.719],[-1.093,-5.796],[0,0]],"v":[[-34.704,95.171],[-36.597,82.176],[-34.317,66.572],[-33.832,52.012],[-38.746,28.796]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[-0.702,4.739],[-1.249,4.831],[0.903,4.789],[-0.065,5.938]],"o":[[-1.796,-3.796],[0.649,-4.383],[1.22,-4.719],[-1.093,-5.796],[0,0]],"v":[[-34.704,95.171],[-36.597,82.176],[-34.317,66.572],[-33.832,52.012],[-38.746,28.796]],"c":false}],"e":[{"i":[[0,0],[1.898,9.128],[0.825,4.904],[1.704,5.653],[1.144,5.806]],"o":[[-2.594,-5.794],[-1.442,-6.935],[-1.109,-6.593],[-2.522,-6.122],[0,0]],"v":[[-41.156,94.512],[-45.648,76.747],[-48.266,58.343],[-53.329,43.347],[-57.955,24.76]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":58,"s":[{"i":[[0,0],[1.898,9.128],[0.825,4.904],[1.704,5.653],[1.144,5.806]],"o":[[-2.594,-5.794],[-1.442,-6.935],[-1.109,-6.593],[-2.522,-6.122],[0,0]],"v":[[-41.156,94.512],[-45.648,76.747],[-48.266,58.343],[-53.329,43.347],[-57.955,24.76]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.4,"y":0},"t":70,"s":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}],"e":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}],"e":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[0.327,4.772],[-0.944,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.294,-4.299],[0.922,-4.725],[-2.235,-8.948],[0,0]],"v":[[-51.946,94.307],[-55.206,81.299],[-52.338,65.636],[-53.14,49.823],[-57.824,24.574]],"c":false}],"e":[{"i":[[0,0],[0.423,4.772],[-1.223,4.838],[1.181,4.728],[-0.033,5.938]],"o":[[-2.304,-4.557],[-0.381,-4.299],[1.194,-4.725],[-2.235,-8.948],[0,0]],"v":[[-52.071,94.307],[-55.494,81.299],[-53.235,65.636],[-54.015,49.073],[-58.324,27.324]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.514,"y":1},"o":{"x":0.839,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.552,-39.1],[6.377,94.902],[-41.808,94.908]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.24,-41.114],[8.252,95.022],[-34.888,91.774]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.24,-41.114],[8.252,95.022],[-34.888,91.774]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.177,-39.151],[8.252,95.059],[-33.683,95.064]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.177,-39.151],[8.252,95.059],[-33.683,95.064]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.651,-39.163],[7.686,95.128],[-34.522,95.134]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.651,-39.163],[7.686,95.128],[-34.522,95.134]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-12.122,-39.185],[6.632,95.147],[-34.584,95.113]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-12.122,-39.185],[6.632,95.147],[-34.584,95.113]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.671,-41.037],[-0.595,94.56],[-40.656,94.566]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":58,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.671,-41.037],[-0.595,94.56],[-40.656,94.566]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.4,"y":0},"t":70,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-51.939,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-51.939,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-50.814,94.25]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.892,-40.463],[-7.011,94.244],[-50.814,94.25]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-39.392,-41.088],[-7.011,94.244],[-52.071,94.25]],"c":false}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.69,"y":0},"t":14,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[1.092,6.093],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.623,94.901],[4.294,108.811],[8.679,112.989],[11.961,114.823],[13.568,118.797],[-0.697,118.813],[-17.705,108.285],[-17.705,108.285],[-16.762,118.8],[-24.628,118.806],[-28.576,94.931]],"c":false}],"e":[{"i":[[0,0],[-0.423,-1.879],[-1.107,-0.446],[-0.787,-1.004],[-0.011,-1.204],[6.27,0.37],[2.513,6.771],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.666],[0.686,3.047],[1.107,0.446],[1.091,1.392],[-1.23,-0.07],[-6.962,-0.411],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.373,94.74],[3.626,108.575],[7.753,113.007],[10.92,115.035],[12.286,119.098],[-1.955,118.26],[-16.966,104.874],[-16.966,104.874],[-18.599,115.231],[-26.402,114.238],[-26.571,92.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":30,"s":[{"i":[[0,0],[-0.423,-1.879],[-1.107,-0.446],[-0.787,-1.004],[-0.011,-1.204],[6.27,0.37],[2.513,6.771],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.666],[0.686,3.047],[1.107,0.446],[1.091,1.392],[-1.23,-0.07],[-6.962,-0.411],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.373,94.74],[3.626,108.575],[7.753,113.007],[10.92,115.035],[12.286,119.098],[-1.955,118.26],[-16.966,104.874],[-16.966,104.874],[-18.599,115.231],[-26.402,114.238],[-26.571,92.846]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-27.701,95.042]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-27.701,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.748,95.113],[2.544,108.867],[6.929,113.044],[10.211,114.879],[11.818,118.853],[-2.447,118.869],[-18.205,108.376],[-18.205,108.376],[-18.512,118.856],[-26.378,118.861],[-28.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.002,95.113],[-1.206,108.867],[3.179,113.044],[6.461,114.879],[8.068,118.853],[-6.197,118.869],[-21.955,108.376],[-21.955,108.376],[-22.262,118.856],[-30.128,118.861],[-33.201,95.042]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":58,"s":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.002,95.113],[-1.206,108.867],[3.179,113.044],[6.461,114.879],[8.068,118.853],[-6.197,118.869],[-21.955,108.376],[-21.955,108.376],[-22.262,118.856],[-30.128,118.861],[-33.201,95.042]],"c":false}],"e":[{"i":[[0,0],[-0.535,-1.851],[-1.131,-0.379],[-0.846,-0.955],[-0.083,-1.201],[6.281,-0.006],[3.352,6.398],[0,0],[0,0],[0,0],[0,0]],"o":[[0.002,6.88],[0.867,3],[1.131,0.379],[1.172,1.324],[-1.232,0.004],[-6.974,0.006],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-11.765,94.243],[-10.969,108.934],[-6.584,113.112],[-3.302,114.947],[-1.695,118.92],[-15.96,118.937],[-31.719,108.444],[-31.719,108.444],[-32.025,118.923],[-39.891,118.929],[-42.965,94.172]],"c":false}]},{"t":70}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":" 7","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.515],"y":[0.929]},"o":{"x":[0.174],"y":[0.273]},"t":0,"s":[0],"e":[-45]},{"i":{"x":[0.518],"y":[0.904]},"o":{"x":[0.467],"y":[-0.063]},"t":32,"s":[-45],"e":[16]},{"i":{"x":[0.515],"y":[0.956]},"o":{"x":[0.456],"y":[-0.025]},"t":68,"s":[16],"e":[-45]},{"i":{"x":[0.01],"y":[1]},"o":{"x":[0.467],"y":[-0.069]},"t":95,"s":[-45],"e":[0]},{"i":{"x":[0.515],"y":[0.939]},"o":{"x":[0.174],"y":[0.236]},"t":124,"s":[0],"e":[-45]},{"i":{"x":[0.518],"y":[0.904]},"o":{"x":[0.467],"y":[-0.063]},"t":168,"s":[-45],"e":[16]},{"i":{"x":[0.515],"y":[0.949]},"o":{"x":[0.456],"y":[-0.029]},"t":225,"s":[16],"e":[-45]},{"i":{"x":[0.845],"y":[1.051]},"o":{"x":[0.467],"y":[-0.069]},"t":274.928,"s":[-45],"e":[0]},{"t":321}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[2.5,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":29,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":124,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":163,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":221,"s":[-191.387,-43.434,0],"e":[-176.387,-43.434,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":271.75,"s":[-176.387,-43.434,0],"e":[-191.387,-43.434,0],"to":[0,0,0],"ti":[2.5,0,0]},{"t":321}],"ix":2,"l":2},"a":{"a":0,"k":[-191.387,-43.434,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":[[-1.895,4.463],[0,0],[-4.463,-1.895],[0,0],[1.895,-4.463],[0,0],[4.463,1.895],[0,0]],"o":[[0,0],[1.895,-4.463],[0,0],[4.463,1.895],[0,0],[-1.895,4.463],[0,0],[-4.463,-1.895]],"v":[[-208.928,-50.867],[-208.928,-50.867],[-197.415,-55.517],[-178.497,-47.515],[-173.846,-36.002],[-173.846,-36.002],[-185.36,-31.352],[-204.278,-39.353]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.901960790157,0.905882358551,0.917647063732,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Group 1","parent":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],"e":[-360]},{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[-360],"e":[-720]},{"t":321}],"ix":10},"p":{"a":0,"k":[181.759,-45.473,0],"ix":2,"l":2},"a":{"a":0,"k":[181.759,-45.473,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-4.648],[4.648,0],[0,4.648],[-4.648,0]],"o":[[0,4.648],[-4.648,0],[0,-4.648],[4.648,0]],"v":[[188.525,-47.623],[180.11,-39.208],[171.694,-47.623],[180.11,-56.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Group 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":124,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174,"s":[-24],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":224,"s":[0],"e":[-24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":273,"s":[-24],"e":[0]},{"t":321}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0.833,0.458,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":61,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":91,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":124,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":220,"s":[189.509,7.428,0],"e":[194.509,10.178,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.333,"y":0},"t":270,"s":[194.509,10.178,0],"e":[189.509,7.428,0],"to":[0,0,0],"ti":[0.833,0.458,0]},{"t":321}],"ix":2,"l":2},"a":{"a":0,"k":[189.509,7.428,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.893,-3.251],[11.285,2.779],[0.492,11.051],[-3.653,-0.9]],"o":[[3.653,0.9],[-5.566,9.559],[-11.285,-2.779],[-0.167,-3.758],[0,0]],"v":[[209.413,1.566],[212.973,9.888],[184.741,21.845],[165.289,-1.854],[172.306,-7.571]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.901960790157,0.905882358551,0.917647063732,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"body cover","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[14.599,1.75,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":152,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-16.5,64],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":166,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":204,"s":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-10.552,62.729],[-38.625,-37.5],[-37.375,-54]],"c":true}],"e":[{"i":[[0.875,2.375],[0,0],[0,0],[0,0],[1.625,4.5],[-1.625,4.5]],"o":[[-0.875,-2.375],[0,0],[0,0],[0,0],[-1.625,-4.5],[1.625,-4.5]],"v":[[-37.375,-68.75],[-79.25,-67.25],[-59,62.75],[-16.5,64],[-38.625,-37.5],[-37.375,-54]],"c":true}]},{"t":218}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.533388983035,0.178523000081,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"finger left","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-13]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[-13],"e":[-26.4]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[-26.4],"e":[-26.4]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[-26.4],"e":[-7.4]},{"t":76}],"ix":10},"p":{"a":0,"k":[30.047,-52.909,0],"ix":2,"l":2},"a":{"a":0,"k":[30.047,-52.909,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],[-3.751,5.292],[0.431,0.639],[0.779,-0.176],[2.473,-2.118]],"o":[[5.885,-2.607],[0.446,-0.629],[-0.432,-0.64],[-3.158,0.713],[0,0]],"v":[[30.047,-52.909],[43.409,-66.225],[43.871,-68.346],[41.599,-69.095],[33.684,-63.249]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":358,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"hexa","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[51.616,-52.909,0],"ix":2,"l":2},"a":{"a":0,"k":[51.616,-52.909,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.818,0.108],[0,0],[0.503,-0.654],[0,0],[-0.315,-0.763],[0,0],[-0.818,-0.108],[0,0],[-0.503,0.654],[0,0],[0.315,0.763],[0,0]],"o":[[0,0],[-0.818,-0.108],[0,0],[-0.503,0.654],[0,0],[0.315,0.763],[0,0],[0.818,0.108],[0,0],[0.503,-0.654],[0,0],[-0.315,-0.763]],"v":[[60.761,-66.702],[46.378,-68.607],[44.243,-67.725],[35.401,-56.222],[35.098,-53.932],[40.639,-40.523],[42.47,-39.116],[56.853,-37.21],[58.988,-38.092],[67.83,-49.595],[68.134,-51.885],[62.593,-65.294]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984313726425,0.737254917622,0.019607843831,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":31,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"left hand","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-13]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[-13],"e":[-32]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[-32],"e":[-32]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[-32],"e":[-22.8]},{"t":76}],"ix":10},"p":{"a":0,"k":[19.691,-62.984,0],"ix":2,"l":2},"a":{"a":0,"k":[19.691,-62.984,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.782,-1.829]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[36.388,-74.129],[43.457,-75.929],[47.901,-71.956]],"c":false}],"e":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}],"e":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-2.436,-0.426],[-0.984,-1.709]],"o":[[2.222,-1.098],[1.935,0.339],[0,0]],"v":[[37.163,-72.201],[44.601,-73.246],[50.334,-69.631]],"c":false}],"e":[{"i":[[0,0],[-2.347,-0.363],[-1.694,-0.76]],"o":[[2.141,-0.934],[1.864,0.288],[0,0]],"v":[[36.82,-71.551],[43.987,-72.44],[48.705,-71.356]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-2.347,-0.363],[-1.694,-0.76]],"o":[[2.141,-0.934],[1.864,0.288],[0,0]],"v":[[36.82,-71.551],[43.987,-72.44],[48.705,-71.356]],"c":false}],"e":[{"i":[[0,0],[-1.913,1.218],[-1.582,0.933]],"o":[[1.853,-1.447],[1.656,-1.054],[0,0]],"v":[[35.926,-71.002],[41.345,-75.046],[45.465,-77.391]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-1.913,1.218],[-1.582,0.933]],"o":[[1.853,-1.447],[1.656,-1.054],[0,0]],"v":[[35.926,-71.002],[41.345,-75.046],[45.465,-77.391]],"c":false}],"e":[{"i":[[0,0],[-2.268,-0.015],[-1.835,-0.074]],"o":[[1.853,-1.447],[1.963,0.013],[0,0]],"v":[[35.926,-71.002],[43.038,-72.289],[47.71,-72.462]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-2.268,-0.015],[-1.835,-0.074]],"o":[[1.853,-1.447],[1.963,0.013],[0,0]],"v":[[35.926,-71.002],[43.038,-72.289],[47.71,-72.462]],"c":false}],"e":[{"i":[[0,0],[-1.551,-1.155],[-0.882,-1.611]],"o":[[1.853,-1.447],[1.575,1.172],[0,0]],"v":[[35.926,-71.002],[41.742,-70.141],[44.91,-66.689]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100],"e":[0]},{"t":38}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-5.248,4.287],[-2.13,0.665],[-1.934,-1.125],[-0.324,-0.627],[0.111,-0.699]],"o":[[5.192,-5.654],[1.737,-1.419],[2.13,-0.665],[0.605,0.352],[0.324,0.627],[0,0]],"v":[[19.691,-62.984],[32.161,-75.058],[38.032,-78.25],[44.517,-77.807],[45.982,-76.405],[46.314,-74.344]],"c":false}],"e":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}],"e":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-5.8,3.504],[-1.936,0.168],[-2.136,-0.667],[-0.559,-0.431],[-0.624,-1.296]],"o":[[5.478,-5.345],[2.168,-1.31],[2.223,-0.193],[0.668,0.209],[1.252,0.966],[0,0]],"v":[[19.691,-62.984],[33.318,-72.909],[40.754,-75.135],[45.606,-74.465],[47.867,-73.214],[50.589,-70.066]],"c":false}],"e":[{"i":[[0,0],[-5.589,2.98],[-1.866,0.143],[-1.853,-0.286],[-1.169,-0.525],[-1.035,-0.43]],"o":[[5.478,-5.345],[2.089,-1.114],[2.142,-0.164],[0.664,0.103],[1.948,0.551],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[40.259,-73.69],[45.022,-73.259],[48.112,-72.533],[52.232,-71.165]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-5.589,2.98],[-1.866,0.143],[-1.853,-0.286],[-1.169,-0.525],[-1.035,-0.43]],"o":[[5.478,-5.345],[2.089,-1.114],[2.142,-0.164],[0.664,0.103],[1.948,0.551],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[40.259,-73.69],[45.022,-73.259],[48.112,-72.533],[52.232,-71.165]],"c":false}],"e":[{"i":[[0,0],[-5.589,2.98],[-1.528,0.898],[-1.657,0.877],[-1.251,0.277],[-1.087,0.273]],"o":[[5.478,-5.345],[2.089,-1.114],[1.853,-1.088],[0.594,-0.315],[1.891,-0.722],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[37.296,-74.394],[41.375,-76.717],[44.287,-77.98],[47.962,-79.96]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-5.589,2.98],[-1.528,0.898],[-1.657,0.877],[-1.251,0.277],[-1.087,0.273]],"o":[[5.478,-5.345],[2.089,-1.114],[1.853,-1.088],[0.594,-0.315],[1.891,-0.722],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[37.296,-74.394],[41.375,-76.717],[44.287,-77.98],[47.962,-79.96]],"c":false}],"e":[{"i":[[0,0],[-4.53,1.806],[-2.126,0.202],[-1.868,-0.162],[-1.608,-0.307],[-1.062,-0.36]],"o":[[5.478,-5.345],[2.199,-0.877],[2.139,-0.203],[0.67,0.058],[1.98,0.42],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[39.043,-73.414],[43.781,-73.428],[48.037,-72.842],[51.509,-72.015]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-4.53,1.806],[-2.126,0.202],[-1.868,-0.162],[-1.608,-0.307],[-1.062,-0.36]],"o":[[5.478,-5.345],[2.199,-0.877],[2.139,-0.203],[0.67,0.058],[1.98,0.42],[0,0]],"v":[[19.691,-62.984],[33.347,-71.975],[39.043,-73.414],[43.781,-73.428],[48.037,-72.842],[51.509,-72.015]],"c":false}],"e":[{"i":[[0,0],[-2.654,0.204],[-1.299,-0.532],[-0.802,-1.388],[-0.318,-1.311],[0.646,-1.254]],"o":[[5.478,-5.345],[1.778,-0.137],[1.913,0.783],[1.168,2.022],[0.1,1.972],[0,0]],"v":[[19.691,-62.984],[36.163,-70.356],[39.65,-70.135],[43.127,-67.345],[44.095,-63.67],[42.974,-60.228]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-0.858,-0.51],[-1.118,-0.301],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[0.895,0.494],[0.889,0.528],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[45.842,-67.462],[48.41,-65.901],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.66,"y":0},"t":22,"s":[{"i":[[0,0],[-0.876,-0.517],[-1.098,-0.295],[-0.238,0.973],[0.466,0.516],[3.852,0.099],[2.652,-1.73]],"o":[[2.283,-2.077],[0.875,0.516],[0.954,0.257],[0.166,-0.679],[-2.607,-2.881],[-3.151,-0.081],[0,0]],"v":[[41.506,-66.826],[47.105,-66.87],[51.353,-64.596],[53.865,-65.454],[53.071,-67.296],[43.415,-73.136],[36.388,-70.738]],"c":false}],"e":[{"i":[[0,0],[-0.979,0.038],[-1.041,0.3],[0.32,0.804],[0.648,0.151],[3.711,0.085],[2.555,-1.472]],"o":[[2.283,-2.077],[0.978,-0.038],[0.905,-0.26],[-0.223,-0.561],[-3.621,-0.842],[-3.036,-0.069],[0,0]],"v":[[37.27,-64.561],[47.553,-67.889],[52.178,-68.243],[53.753,-70.021],[52.143,-70.965],[42.844,-72.346],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-0.979,0.038],[-1.041,0.3],[0.32,0.804],[0.648,0.151],[3.711,0.085],[2.555,-1.472]],"o":[[2.283,-2.077],[0.978,-0.038],[0.905,-0.26],[-0.223,-0.561],[-3.621,-0.842],[-3.036,-0.069],[0,0]],"v":[[37.27,-64.561],[47.553,-67.889],[52.178,-68.243],[53.753,-70.021],[52.143,-70.965],[42.844,-72.346],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.584,0.787],[-0.656,0.862],[0.736,0.454],[0.609,-0.266],[3.027,-2.149],[2.555,-1.472]],"o":[[2.283,-2.077],[0.947,-1.274],[0.57,-0.749],[-0.514,-0.317],[-3.406,1.488],[-2.476,1.758],[0,0]],"v":[[37.27,-64.561],[46.612,-73.922],[49.665,-77.584],[49.866,-79.951],[48.011,-79.747],[40.173,-74.683],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-0.584,0.787],[-0.656,0.862],[0.736,0.454],[0.609,-0.266],[3.027,-2.149],[2.555,-1.472]],"o":[[2.283,-2.077],[0.947,-1.274],[0.57,-0.749],[-0.514,-0.317],[-3.406,1.488],[-2.476,1.758],[0,0]],"v":[[37.27,-64.561],[46.612,-73.922],[49.665,-77.584],[49.866,-79.951],[48.011,-79.747],[40.173,-74.683],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.918,0.344],[-1.019,0.368],[0.372,0.78],[0.656,0.107],[3.709,-0.163],[2.555,-1.472]],"o":[[2.283,-2.077],[1.487,-0.557],[0.886,-0.32],[-0.26,-0.545],[-3.669,-0.598],[-3.034,0.134],[0,0]],"v":[[37.27,-64.561],[46.613,-67.964],[51.164,-69.385],[52.617,-71.264],[50.947,-72.098],[41.617,-72.096],[34.848,-70.555]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-0.918,0.344],[-1.019,0.368],[0.372,0.78],[0.656,0.107],[3.709,-0.163],[2.555,-1.472]],"o":[[2.283,-2.077],[1.487,-0.557],[0.886,-0.32],[-0.26,-0.545],[-3.669,-0.598],[-3.034,0.134],[0,0]],"v":[[37.27,-64.561],[46.613,-67.964],[51.164,-69.385],[52.617,-71.264],[50.947,-72.098],[41.617,-72.096],[34.848,-70.555]],"c":false}],"e":[{"i":[[0,0],[-0.584,-0.694],[1.189,-1.691],[-2.21,1.869],[-2.212,3.492],[1.82,2.49],[2.702,-0.054]],"o":[[0.457,-0.105],[0.387,1.664],[-1.377,1.958],[1.122,-0.949],[1.94,-3.063],[-1.233,-1.687],[0,0]],"v":[[36.202,-63.898],[38.443,-63.231],[33.948,-55.543],[37.716,-53.739],[42.762,-59.745],[42.807,-68.015],[36.684,-70.539]],"c":false}]},{"t":40}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 5","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"left arm 2","parent":26,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[-17]},{"i":{"x":[0.817],"y":[1.014]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[-17],"e":[43.2]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.602],"y":[0.096]},"t":24,"s":[43.2],"e":[12.5]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":32,"s":[12.5],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":46,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[0],"e":[89.4]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[6.191,-49.734,0],"e":[19.291,-31.818,0],"to":[2.183,2.986,0],"ti":[-2.183,-2.986,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[6.191,-49.734,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[6.277,-49.855]],"c":false}],"e":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}],"e":[{"i":[[-10.553,-7.794]],"o":[[0,0]],"v":[[4.807,-48.203]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.249,-0.943],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.255,5.141],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[-1.782,-26.869],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[-2.249,-0.943],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.255,5.141],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[-1.782,-26.869],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.025],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.06,0.103],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[7.855,-25.27],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":24,"s":[{"i":[[-2.438,-0.025],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.06,0.103],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[7.855,-25.27],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.437,0.039],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.345,-0.175],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.395,-24.92],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-2.437,0.039],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[10.345,-0.175],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.395,-24.92],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.418,0.309],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.505,-1.598],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.892,-24.324],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[-2.418,0.309],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.505,-1.598],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[6.892,-24.324],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.429,0.015],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.878,-0.077],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.301,-24.007],[30.047,-52.909],[19.691,-62.984],[4.807,-48.203]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[-2.429,0.015],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[12.878,-0.077],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.301,-24.007],[30.047,-52.909],[19.691,-62.984],[4.807,-48.203]],"c":false}],"e":[{"i":[[-2.409,-0.38],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[13.088,2.062],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[0.874,-25.547],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[-2.409,-0.38],[-6.834,19.321],[5.082,5.232],[4.914,-4.8]],"o":[[13.088,2.062],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[0.874,-25.547],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[-2.438,-0.067],[-1.963,12.344],[5.082,5.232],[4.914,-4.8]],"o":[[13.177,0.363],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[4.384,-25.84],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}],"e":[{"i":[[-1.678,1.769],[-2.931,12.19],[5.082,5.232],[4.914,-4.8]],"o":[[8.229,-8.674],[-4.63,-3.759],[-4.914,4.8],[0,0]],"v":[[10.492,-23.815],[30.047,-52.909],[19.691,-62.984],[6.277,-49.855]],"c":false}]},{"t":76}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Layer 8","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-9.544,-35.853,0],"ix":2,"l":2},"a":{"a":0,"k":[-10.531,-36.411,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-0.354,-2.572],[0,0]],"o":[[1.553,4.061],[0,0],[0,0]],"v":[[-24.785,-47.619],[-20.786,-31.236],[-26.8,-15.645]],"c":false}],"e":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-14.598,-49.016],[-23.691,-32.536]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-14.598,-49.016],[-23.691,-32.536]],"c":false}],"e":[{"i":[[0,0],[-2.608,-2.03],[0,0]],"o":[[2.283,1.422],[0,0],[0,0]],"v":[[-22.795,-53.731],[-15.223,-48.141],[-24.691,-31.786]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-1.096,-1.141],[-1.522,0.762]],"o":[[0,0],[1.096,1.141],[0,0]],"v":[[-29.574,5.465],[-26.503,12.908],[-22.113,14.117]],"c":false}],"e":[{"i":[[0,0],[-1.577,0.133],[-0.366,1.662]],"o":[[0,0],[1.577,-0.133],[0,0]],"v":[[-21.552,-1.257],[-13.835,1.043],[-10.132,-1.606]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-1.577,0.133],[-0.366,1.662]],"o":[[0,0],[1.577,-0.133],[0,0]],"v":[[-21.552,-1.257],[-13.835,1.043],[-10.132,-1.606]],"c":false}],"e":[{"i":[[0,0],[-1.58,-0.086],[-0.592,1.595]],"o":[[0,0],[1.58,0.086],[0,0]],"v":[[-23.263,-2.183],[-15.938,1.16],[-11.905,-0.953]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[-5.425,-4.366],[0.891,-8.821],[10.344,-12.303],[3.907,2.109]],"o":[[0,0],[11.875,9.557],[-0.916,9.067],[-3.906,-2.109],[0,0]],"v":[[-33.451,-77.183],[-20.015,-73.365],[-2.724,-36.251],[-14.152,-7.492],[-25.872,-13.819]],"c":false}],"e":[{"i":[[0,0],[-6.245,-3.082],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.413,6.619],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-19.64,-74.303],[4.54,-50.069],[-12.219,-23.106],[-23.568,-32.44]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[-6.245,-3.082],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.413,6.619],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-19.64,-74.303],[4.54,-50.069],[-12.219,-23.106],[-23.568,-32.44]],"c":false}],"e":[{"i":[[0,0],[-5.998,-3.539],[-1.416,-8.752],[12.513,-10.088],[3.429,2.82]],"o":[[0,0],[13.127,7.744],[1.328,8.21],[-3.429,-2.82],[0,0]],"v":[[-33.451,-77.183],[-20.515,-74.053],[3.29,-49.569],[-13.219,-22.356],[-24.568,-31.69]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[0.628,2.059],[0.62,2.632]],"o":[[-1.512,4.121],[0,0],[-0.62,-2.632]],"v":[[-17.753,14.36],[-24.079,10.045],[-25.784,2.505]],"c":false}],"e":[{"i":[[0,0],[1.995,0.808],[2.436,1.175]],"o":[[2.25,3.77],[0,0],[-2.436,-1.175]],"v":[[-7.198,-4.84],[-14.533,-2.642],[-21.465,-6.065]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[1.995,0.808],[2.436,1.175]],"o":[[2.25,3.77],[0,0],[-2.436,-1.175]],"v":[[-7.198,-4.84],[-14.533,-2.642],[-21.465,-6.065]],"c":false}],"e":[{"i":[[0,0],[1.864,1.076],[2.25,1.5]],"o":[[1.708,4.044],[0,0],[-2.25,-1.5]],"v":[[-8.553,-3.751],[-16.121,-2.587],[-22.513,-6.933]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0,0],[0.283,8.27],[-0.175,1.78],[-0.697,4.923]],"o":[[-1.644,4.68],[0,-5.573],[0.309,-3.152],[0,0]],"v":[[-21.372,3.671],[-16.14,11.39],[-15.68,1.96],[-15.021,-7.536]],"c":false}],"e":[{"i":[[0,0],[6.603,4.987],[-0.662,1.662],[0.996,4.87]],"o":[[2.601,4.224],[-6.701,-3.264],[0.639,-1.605],[0,0]],"v":[[-17.782,-8.758],[-8.49,-7.964],[-15.501,-14.228],[-13.064,-23.316]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":114,"s":[{"i":[[0,0],[6.603,4.987],[-0.662,1.662],[0.996,4.87]],"o":[[2.601,4.224],[-6.701,-3.264],[0.639,-1.605],[0,0]],"v":[[-17.782,-8.758],[-8.49,-7.964],[-15.501,-14.228],[-13.064,-23.316]],"c":false}],"e":[{"i":[[0,0],[5.851,5.85],[-0.662,1.662],[0.996,4.87]],"o":[[1.993,4.543],[-6.186,-4.158],[0.639,-1.605],[0,0]],"v":[[-18.494,-9.092],[-9.401,-7.023],[-15.501,-14.228],[-14.064,-22.566]],"c":false}]},{"t":120}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":102,"op":400,"st":102,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Layer 6","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55.735,-36.137,0],"ix":2,"l":2},"a":{"a":0,"k":[-56.46,-36.387,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[4.827,-6.177]],"o":[[3.434,5.335],[0,0]],"v":[[-4.227,4.087],[-7.54,33.941]],"c":false}],"e":[{"i":[[0,0],[5.926,-5.132]],"o":[[2.343,5.897],[0,0]],"v":[[-12.28,5.968],[-19.124,34.028]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":79,"s":[{"i":[[0,0],[5.926,-5.132]],"o":[[2.343,5.897],[0,0]],"v":[[-12.28,5.968],[-19.124,34.028]],"c":false}],"e":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":85,"s":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}],"e":[{"i":[[0,0],[5.797,-5.276]],"o":[[2.488,5.836],[0,0]],"v":[[-10.659,5.84],[-16.805,34.059]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0,0],[5.797,-5.276]],"o":[[2.488,5.836],[0,0]],"v":[[-10.659,5.84],[-16.805,34.059]],"c":false}],"e":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":99,"s":[{"i":[[0,0],[5.759,-5.318]],"o":[[2.53,5.819],[0,0]],"v":[[-10.19,5.803],[-16.134,34.068]],"c":false}],"e":[{"i":[[0,0],[7.82,0.553]],"o":[[-1.505,7.049],[0,0]],"v":[[-13.497,-21.924],[-22.036,-4.894]],"c":false}]},{"t":105}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-0.708,-6.79],[-1.059,-2.383],[-0.328,-7.542],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.27,2.594],[3.286,7.393],[0,0],[0,0]],"v":[[-34.319,-76.892],[-20.578,-73.99],[-13.434,-58.901],[-11.542,-35.085],[-8.286,-18.143],[-4.047,3.667],[-13.035,6.383]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.087,-7.704],[-0.872,-2.457],[3.857,-6.762],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.364,2.582],[2.639,7.435],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-12.591,-34.451],[-9.828,-17.224],[-12.022,5.589],[-19.21,5.928]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":79,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.087,-7.704],[-0.872,-2.457],[3.857,-6.762],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.364,2.582],[2.639,7.435],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-12.591,-34.451],[-9.828,-17.224],[-12.022,5.589],[-19.21,5.928]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":85,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.277,-7.674],[-0.933,-2.435],[3.688,-6.854],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.428,2.572],[2.822,7.366],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.972,-34.555],[-8.783,-17.403],[-10.412,5.456],[-17.588,5.973]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.277,-7.674],[-0.933,-2.435],[3.688,-6.854],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.428,2.572],[2.822,7.366],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.972,-34.555],[-8.783,-17.403],[-10.412,5.456],[-17.588,5.973]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":99,"s":[{"i":[[0,0],[-4.115,-2.407],[-0.666,-5.452],[-1.333,-7.665],[-0.95,-2.428],[3.639,-6.881],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[0.666,5.452],[0.447,2.569],[2.875,7.347],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-13.934,-58.901],[-11.792,-34.585],[-8.481,-17.455],[-9.945,5.417],[-17.118,5.986]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-4.037,-3.724],[-0.073,-8.921],[1.629,-2.64],[5.296,-3.74],[0,0]],"o":[[4.627,0.055],[4.741,2.774],[4.432,4.088],[0.041,4.96],[-4.144,6.713],[0,0],[0,0]],"v":[[-34.319,-76.877],[-20.578,-73.99],[-7.059,-64.651],[3.77,-46.147],[-0.381,-35.298],[-13.048,-22.01],[-24.125,-31.347]],"c":false}]},{"t":105}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":71,"op":102,"st":71,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"left arm","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0],"e":[8.1]},{"i":{"x":[0.746],"y":[0.982]},"o":{"x":[0.167],"y":[0]},"t":18,"s":[8.1],"e":[-33.9]},{"i":{"x":[0.727],"y":[0.856]},"o":{"x":[0.457],"y":[-0.104]},"t":30,"s":[-33.9],"e":[-29.6]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":32,"s":[-29.6],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":46,"s":[0],"e":[0]},{"i":{"x":[0.524],"y":[1.027]},"o":{"x":[0.4],"y":[0]},"t":60,"s":[0],"e":[43.2]},{"i":{"x":[0.453],"y":[1]},"o":{"x":[0.43],"y":[0.558]},"t":76,"s":[43.2],"e":[41.4]},{"t":84}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":60,"s":[-25.227,-75.935,0],"e":[-17.727,-72.935,0],"to":[1.25,0.5,0],"ti":[-1.25,-0.5,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[-25.227,-75.935,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.689],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.214,-2.23],[-10.553,-7.794]],"o":[[4.67,-0.755],[11.625,6.153],[0,0]],"v":[[-34.176,-75.363],[-20.373,-73.765],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[0,0],[-4.214,-2.23],[-10.553,-7.794]],"o":[[4.67,-0.755],[11.625,6.153],[0,0]],"v":[[-34.176,-75.363],[-20.373,-73.765],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-3.905,-2.647],[-9.137,-8.126]],"o":[[4.538,1.406],[10.708,7.25],[0,0]],"v":[[-32.305,-79.013],[-19.248,-72.297],[5.816,-49.577]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[-3.905,-2.647],[-9.137,-8.126]],"o":[[4.538,1.406],[10.708,7.25],[0,0]],"v":[[-32.305,-79.013],[-19.248,-72.297],[5.816,-49.577]],"c":false}],"e":[{"i":[[0,0],[-3.851,-2.719],[-8.892,-8.184]],"o":[[4.515,1.782],[10.549,7.441],[0,0]],"v":[[-31.992,-79.511],[-19.053,-72.042],[5.343,-49.941]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-3.851,-2.719],[-8.892,-8.184]],"o":[[4.515,1.782],[10.549,7.441],[0,0]],"v":[[-31.992,-79.511],[-19.053,-72.042],[5.343,-49.941]],"c":false}],"e":[{"i":[[0,0],[-3.69,-2.936],[-8.154,-8.357]],"o":[[4.446,2.908],[10.071,8.012],[0,0]],"v":[[-31.323,-80.583],[-18.466,-71.276],[4.305,-49.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[-3.69,-2.936],[-8.154,-8.357]],"o":[[4.446,2.908],[10.071,8.012],[0,0]],"v":[[-31.323,-80.583],[-18.466,-71.276],[4.305,-49.053]],"c":false}],"e":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.436,3.071],[10.002,8.095],[0,0]],"v":[[-31.228,-80.768],[-18.381,-71.166],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.436,3.071],[10.002,8.095],[0,0]],"v":[[-31.228,-80.768],[-18.381,-71.166],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.389,2.674],[10.002,8.095],[0,0]],"v":[[-31.475,-80.228],[-18.381,-71.166],[5.778,-49.676]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-3.667,-2.967],[-9.593,-8.422]],"o":[[4.389,2.674],[10.002,8.095],[0,0]],"v":[[-31.475,-80.228],[-18.381,-71.166],[5.778,-49.676]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.324,-76.705],[-20.578,-73.99],[6.277,-49.855]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.324,-76.705],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.658],[-20.578,-73.99],[6.277,-49.855]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[0,0],[-4.115,-2.407],[-10.553,-7.794]],"o":[[4.627,0.055],[11.353,6.642],[0,0]],"v":[[-34.319,-76.658],[-20.578,-73.99],[6.277,-49.855]],"c":false}],"e":[{"i":[[0,0],[-4.204,-2.452],[-10.958,-8.32]],"o":[[4.621,-0.121],[11.37,6.639],[0,0]],"v":[[-34.534,-76.51],[-20.522,-73.957],[6.806,-49.133]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0,0],[-4.204,-2.452],[-10.958,-8.32]],"o":[[4.621,-0.121],[11.37,6.639],[0,0]],"v":[[-34.534,-76.51],[-20.522,-73.957],[6.806,-49.133]],"c":false}],"e":[{"i":[[0,0],[-4.317,-2.509],[-11.472,-8.987]],"o":[[4.821,-0.75],[11.391,6.634],[0,0]],"v":[[-35.391,-76.195],[-20.673,-74.166],[7.556,-47.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[0,0],[-4.317,-2.509],[-11.472,-8.987]],"o":[[4.821,-0.75],[11.391,6.634],[0,0]],"v":[[-35.391,-76.195],[-20.673,-74.166],[7.556,-47.607]],"c":false}],"e":[{"i":[[0,0],[-4.429,-2.566],[-11.985,-9.654]],"o":[[5.093,-1.105],[11.412,6.63],[0,0]],"v":[[-36.266,-75.941],[-20.824,-74.375],[8.704,-45.73]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[0,0],[-4.429,-2.566],[-11.985,-9.654]],"o":[[5.093,-1.105],[11.412,6.63],[0,0]],"v":[[-36.266,-75.941],[-20.824,-74.375],[8.704,-45.73]],"c":false}],"e":[{"i":[[0,0],[-4.57,-2.573],[-9.876,-5.901]],"o":[[4.966,-1.346],[13.683,7.684],[0,0]],"v":[[-37.149,-75.605],[-20.899,-74.466],[10.86,-42.798]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-4.57,-2.573],[-9.876,-5.901]],"o":[[4.966,-1.346],[13.683,7.684],[0,0]],"v":[[-37.149,-75.605],[-20.899,-74.466],[10.86,-42.798]],"c":false}],"e":[{"i":[[0,0],[-4.711,-2.58],[-7.767,-2.149]],"o":[[4.838,-1.586],[15.954,8.738],[0,0]],"v":[[-37.982,-74.993],[-20.974,-74.558],[13.016,-39.867]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[-4.711,-2.58],[-7.767,-2.149]],"o":[[4.838,-1.586],[15.954,8.738],[0,0]],"v":[[-37.982,-74.993],[-20.974,-74.558],[13.016,-39.867]],"c":false}],"e":[{"i":[[0,0],[-4.57,-3.056],[-6.792,-1.944]],"o":[[6.505,-2.454],[13.909,9.303],[0,0]],"v":[[-38.802,-74.031],[-20.495,-74.297],[14.662,-37.792]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[-4.57,-3.056],[-6.792,-1.944]],"o":[[6.505,-2.454],[13.909,9.303],[0,0]],"v":[[-38.802,-74.031],[-20.495,-74.297],[14.662,-37.792]],"c":false}],"e":[{"i":[[0,0],[-4.817,-3.042],[-9.864,-6.258]],"o":[[5.849,-2.715],[13.133,8.401],[0,0]],"v":[[-38.983,-73.029],[-20.46,-74.298],[15.798,-36.146]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0,0],[-4.817,-3.042],[-9.864,-6.258]],"o":[[5.849,-2.715],[13.133,8.401],[0,0]],"v":[[-38.983,-73.029],[-20.46,-74.298],[15.798,-36.146]],"c":false}],"e":[{"i":[[0,0],[-6.112,-3.559],[-16.01,-14.884]],"o":[[4.538,-3.238],[11.517,6.706],[0,0]],"v":[[-39.279,-70.827],[-20.221,-74.038],[17.284,-34.146]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,0],[-6.112,-3.559],[-16.01,-14.884]],"o":[[4.538,-3.238],[11.517,6.706],[0,0]],"v":[[-39.279,-70.827],[-20.221,-74.038],[17.284,-34.146]],"c":false}],"e":[{"i":[[0,0],[-5.117,-2.939],[-17.667,-17.037]],"o":[[4.446,-3.795],[11.603,6.665],[0,0]],"v":[[-38.948,-69.066],[-20.363,-74.409],[18.26,-33.072]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0,0],[-5.117,-2.939],[-17.667,-17.037]],"o":[[4.446,-3.795],[11.603,6.665],[0,0]],"v":[[-38.948,-69.066],[-20.363,-74.409],[18.26,-33.072]],"c":false}],"e":[{"i":[[0,0],[-5.578,-3.16],[-18.495,-18.113]],"o":[[4.4,-4.073],[11.661,6.617],[0,0]],"v":[[-38.979,-68.457],[-20.137,-74.316],[18.428,-33.092]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0,0],[-5.578,-3.16],[-18.495,-18.113]],"o":[[4.4,-4.073],[11.661,6.617],[0,0]],"v":[[-38.979,-68.457],[-20.137,-74.316],[18.428,-33.092]],"c":false}],"e":[{"i":[[0,0],[-6.04,-3.381],[-19.324,-19.19]],"o":[[4.354,-4.352],[11.719,6.57],[0,0]],"v":[[-39.011,-67.848],[-19.985,-74.413],[18.658,-33.025]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0,0],[-6.04,-3.381],[-19.324,-19.19]],"o":[[4.354,-4.352],[11.719,6.57],[0,0]],"v":[[-39.011,-67.848],[-19.985,-74.413],[18.658,-33.025]],"c":false}],"e":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.633,-4.946],[11.761,6.562],[0,0]],"v":[[-39.247,-67.494],[-20.016,-74.003],[18.99,-32.3]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.633,-4.946],[11.761,6.562],[0,0]],"v":[[-39.247,-67.494],[-20.016,-74.003],[18.99,-32.3]],"c":false}],"e":[{"i":[[0,0],[-6.266,-3.496],[-20.351,-20.524]],"o":[[4.853,-4.779],[11.761,6.562],[0,0]],"v":[[-39.765,-67.703],[-19.787,-73.8],[19.081,-32.386]],"c":false}]},{"t":84}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-3.618,-2.448],[-5.499,-0.272]],"o":[[3.522,3.439],[3.171,2.519],[11.525,-0.559]],"v":[[-19.561,-41.08],[-10.481,-32.836],[5.467,-25.517]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-3.618,-2.448],[-5.499,-0.272]],"o":[[3.522,3.439],[3.171,2.519],[11.525,-0.559]],"v":[[-19.561,-41.08],[-10.481,-32.836],[5.467,-25.517]],"c":false}],"e":[{"i":[[0,0],[-2.536,-2.091],[-6.177,-0.331]],"o":[[2.841,2.771],[3.277,2.799],[11.184,-0.705]],"v":[[-19.553,-41.018],[-12.165,-34.008],[5.632,-25.444]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-2.536,-2.091],[-6.177,-0.331]],"o":[[2.841,2.771],[3.277,2.799],[11.184,-0.705]],"v":[[-19.553,-41.018],[-12.165,-34.008],[5.632,-25.444]],"c":false}],"e":[{"i":[[0,0],[-2.378,-2.039],[-4.817,-1.149]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[2.303,-26.101]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[-2.378,-2.039],[-4.817,-1.149]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[2.303,-26.101]],"c":false}],"e":[{"i":[[0,0],[-2.378,-2.039],[-4.598,-0.986]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[1.987,-26.103]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,0],[-2.378,-2.039],[-4.598,-0.986]],"o":[[2.985,2.482],[3.292,2.839],[11.579,4.779]],"v":[[-19.605,-40.705],[-12.41,-34.178],[1.987,-26.103]],"c":false}],"e":[{"i":[[0,0],[-2.349,-2.03],[-4.314,-2.14]],"o":[[2.968,2.463],[3.295,2.847],[11.651,5.779]],"v":[[-20.204,-41.481],[-12.454,-34.209],[-0.868,-27.092]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[0,0],[-2.349,-2.03],[-4.314,-2.14]],"o":[[2.968,2.463],[3.295,2.847],[11.651,5.779]],"v":[[-20.204,-41.481],[-12.454,-34.209],[-0.868,-27.092]],"c":false}],"e":[{"i":[[0,0],[-3.076,-2.72],[-3.634,-1.935]],"o":[[3.448,2.993],[3.179,2.696],[11.613,5.851]],"v":[[-22.769,-43.719],[-12.751,-34.217],[-3.45,-27.683]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-3.076,-2.72],[-3.634,-1.935]],"o":[[3.448,2.993],[3.179,2.696],[11.613,5.851]],"v":[[-22.769,-43.719],[-12.751,-34.217],[-3.45,-27.683]],"c":false}],"e":[{"i":[[0,0],[-4.011,-3.608],[-2.758,-1.672]],"o":[[4.065,3.675],[3.03,2.502],[11.565,5.943]],"v":[[-26.067,-46.597],[-13.133,-34.226],[-6.075,-28.771]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-4.011,-3.608],[-2.758,-1.672]],"o":[[4.065,3.675],[3.03,2.502],[11.565,5.943]],"v":[[-26.067,-46.597],[-13.133,-34.226],[-6.075,-28.771]],"c":false}],"e":[{"i":[[0,0],[-5.01,-4.557],[-1.823,-1.391]],"o":[[4.725,4.403],[2.871,2.295],[11.513,6.041]],"v":[[-29.594,-49.674],[-13.542,-34.236],[-8.772,-30.251]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-5.01,-4.557],[-1.823,-1.391]],"o":[[4.725,4.403],[2.871,2.295],[11.513,6.041]],"v":[[-29.594,-49.674],[-13.542,-34.236],[-8.772,-30.251]],"c":false}],"e":[{"i":[[0,0],[-5.155,-4.796],[-1.883,-1.741]],"o":[[5.05,4.762],[2.217,2.096],[1.174,1.046]],"v":[[-31.046,-50.48],[-16.384,-36.769],[-10.917,-31.777]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[-5.155,-4.796],[-1.883,-1.741]],"o":[[5.05,4.762],[2.217,2.096],[1.174,1.046]],"v":[[-31.046,-50.48],[-16.384,-36.769],[-10.917,-31.777]],"c":false}],"e":[{"i":[[0,0],[-5.104,-4.684],[-3.308,-2.141]],"o":[[3.648,4.663],[3.339,3.085],[3.449,2.218]],"v":[[-33.089,-51.535],[-21.123,-38.449],[-10.582,-30.507]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-5.104,-4.684],[-3.308,-2.141]],"o":[[3.648,4.663],[3.339,3.085],[3.449,2.218]],"v":[[-33.089,-51.535],[-21.123,-38.449],[-10.582,-30.507]],"c":false}],"e":[{"i":[[0,0],[-7.095,-5.236],[-2.558,-1.472]],"o":[[4.958,6.354],[2.606,1.98],[9.974,5.582]],"v":[[-36.411,-54.009],[-18.154,-35.168],[-9.441,-29.152]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[-7.095,-5.236],[-2.558,-1.472]],"o":[[4.958,6.354],[2.606,1.98],[9.974,5.582]],"v":[[-36.411,-54.009],[-18.154,-35.168],[-9.441,-29.152]],"c":false}],"e":[{"i":[[0,0],[-7.522,-5.355],[-2.398,-1.329]],"o":[[6.481,6.343],[2.448,1.743],[11.375,6.304]],"v":[[-37.124,-54.541],[-15.56,-33.48],[-7.771,-28.499]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[-7.522,-5.355],[-2.398,-1.329]],"o":[[6.481,6.343],[2.448,1.743],[11.375,6.304]],"v":[[-37.124,-54.541],[-15.56,-33.48],[-7.771,-28.499]],"c":false}],"e":[{"i":[[0,0],[-7.307,-5.645],[-4.842,-1.695]],"o":[[6.481,6.343],[4.005,3.094],[12.275,4.297]],"v":[[-36.245,-52.885],[-14.415,-33.128],[-2.281,-26.517]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":32,"s":[{"i":[[0,0],[-7.307,-5.645],[-4.842,-1.695]],"o":[[6.481,6.343],[4.005,3.094],[12.275,4.297]],"v":[[-36.245,-52.885],[-14.415,-33.128],[-2.281,-26.517]],"c":false}],"e":[{"i":[[0,0],[-7.584,-5.196],[-4.218,-1.237]],"o":[[6.481,6.343],[3.653,2.606],[12.474,3.148]],"v":[[-32.958,-50.864],[-11.367,-31.522],[-0.382,-26.192]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-7.584,-5.196],[-4.218,-1.237]],"o":[[6.481,6.343],[3.653,2.606],[12.474,3.148]],"v":[[-32.958,-50.864],[-11.367,-31.522],[-0.382,-26.192]],"c":false}],"e":[{"i":[[0,0],[-7.94,-4.619],[-3.415,-0.649]],"o":[[6.481,6.343],[3.2,1.979],[12.729,1.67]],"v":[[-28.733,-48.265],[-7.427,-29.526],[2.08,-25.842]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[0,0],[-7.94,-4.619],[-3.415,-0.649]],"o":[[6.481,6.343],[3.2,1.979],[12.729,1.67]],"v":[[-28.733,-48.265],[-7.427,-29.526],[2.08,-25.842]],"c":false}],"e":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":46,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":60,"s":[{"i":[[0,0],[-8.323,-3.998],[-2.55,-0.015]],"o":[[6.481,6.343],[2.711,1.302],[13.005,0.078]],"v":[[-24.177,-45.464],[-3.164,-27.744],[4.751,-25.834]],"c":false}],"e":[{"i":[[0,0],[-8.035,-4.491],[-2.916,-0.054]],"o":[[6.481,6.343],[2.649,1.485],[13.002,0.213]],"v":[[-24.177,-45.464],[-5.197,-28.787],[4.303,-25.739]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[-8.035,-4.491],[-2.916,-0.054]],"o":[[6.481,6.343],[2.649,1.485],[13.002,0.213]],"v":[[-24.177,-45.464],[-5.197,-28.787],[4.303,-25.739]],"c":false}],"e":[{"i":[[0,0],[-7.568,-5.29],[-3.508,-0.117]],"o":[[6.481,6.343],[2.547,1.781],[12.998,0.432]],"v":[[-24.177,-45.464],[-8.489,-30.476],[3.58,-25.177]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0,0],[-7.568,-5.29],[-3.508,-0.117]],"o":[[6.481,6.343],[2.547,1.781],[12.998,0.432]],"v":[[-24.177,-45.464],[-8.489,-30.476],[3.58,-25.177]],"c":false}],"e":[{"i":[[0,0],[-7.337,-5.593],[-3.024,-0.171]],"o":[[6.21,6.599],[2.47,1.882],[12.976,0.79]],"v":[[-24.245,-45.447],[-9.2,-29.839],[2.12,-24.392]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[0,0],[-7.337,-5.593],[-3.024,-0.171]],"o":[[6.21,6.599],[2.47,1.882],[12.976,0.79]],"v":[[-24.245,-45.447],[-9.2,-29.839],[2.12,-24.392]],"c":false}],"e":[{"i":[[0,0],[-7.107,-5.895],[-2.54,-0.225]],"o":[[5.938,6.855],[2.392,1.984],[12.955,1.147]],"v":[[-24.312,-45.43],[-9.911,-29.201],[0.69,-23.108]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":64,"s":[{"i":[[0,0],[-7.107,-5.895],[-2.54,-0.225]],"o":[[5.938,6.855],[2.392,1.984],[12.955,1.147]],"v":[[-24.312,-45.43],[-9.911,-29.201],[0.69,-23.108]],"c":false}],"e":[{"i":[[0,0],[-6.943,-6.082],[-2.7,-0.674]],"o":[[5.748,7.01],[2.337,2.047],[12.53,2.949]],"v":[[-24.214,-45.515],[-10.206,-28.602],[-0.016,-21.906]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-6.943,-6.082],[-2.7,-0.674]],"o":[[5.748,7.01],[2.337,2.047],[12.53,2.949]],"v":[[-24.214,-45.515],[-10.206,-28.602],[-0.016,-21.906]],"c":false}],"e":[{"i":[[0,0],[-6.779,-6.27],[-2.859,-1.122]],"o":[[5.559,7.165],[2.282,2.11],[12.106,4.751]],"v":[[-24.116,-45.6],[-10.611,-28.618],[-0.833,-21.32]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":66,"s":[{"i":[[0,0],[-6.779,-6.27],[-2.859,-1.122]],"o":[[5.559,7.165],[2.282,2.11],[12.106,4.751]],"v":[[-24.116,-45.6],[-10.611,-28.618],[-0.833,-21.32]],"c":false}],"e":[{"i":[[0,0],[-6.546,-6.504],[-2.922,-1.171]],"o":[[5.296,7.355],[2.203,2.189],[12.065,4.833]],"v":[[-23.637,-46.238],[-9.979,-29.599],[-1.056,-21.143]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[-6.546,-6.504],[-2.922,-1.171]],"o":[[5.296,7.355],[2.203,2.189],[12.065,4.833]],"v":[[-23.637,-46.238],[-9.979,-29.599],[-1.056,-21.143]],"c":false}],"e":[{"i":[[0,0],[-6.313,-6.738],[-2.492,-0.541]],"o":[[5.033,7.544],[2.125,2.268],[12.709,2.76]],"v":[[-23.158,-46.877],[-10.902,-28.973],[-1.147,-21.6]],"c":false}]},{"t":68}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":" 6","parent":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":31,"s":[-0.151],"e":[99.849]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[99.849],"e":[-44.151]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.447],"y":[0.05]},"t":52,"s":[-44.151],"e":[-73.651]},{"t":61}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[87.558],"e":[78.165]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[78.165],"e":[78.394]},{"i":{"x":[0.919],"y":[-0.443]},"o":{"x":[0.167],"y":[0]},"t":52,"s":[78.394],"e":[81.608]},{"t":61}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[-113.474],"e":[-129.635]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.66],"y":[0]},"t":37,"s":[-129.635],"e":[-54.885]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[-54.885],"e":[-140.688]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":52,"s":[-140.688],"e":[-140.688]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[-140.688],"e":[-108.045]},{"t":61}],"ix":4}},"a":{"a":0,"k":[77.835,-112.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.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413],[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0]],"o":[[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0],[0,0.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413]],"v":[[92.71,-105.499],[92.71,-120.008],[91.555,-122.008],[78.99,-129.263],[76.68,-129.263],[64.115,-122.008],[62.96,-120.008],[62.96,-105.499],[64.115,-103.499],[76.68,-96.244],[78.99,-96.244],[91.555,-103.499]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823529412,0.521568627451,0.956862804936,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":31,"op":62,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":" 5","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-8.267,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[50.735,-15.692,0],"e":[87.646,-23.988,0],"to":[6.152,-1.383,0],"ti":[-3.379,1.573,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[87.646,-23.988,0],"e":[71.006,-25.129,0],"to":[3.379,-1.573,0],"ti":[0.372,7.788,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":44,"s":[71.006,-25.129,0],"e":[85.414,-70.717,0],"to":[-0.372,-7.788,0],"ti":[-2.401,7.598,0]},{"t":55}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-77.267,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":[[3.722,7.328],[0,0],[-7.328,3.722],[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0]],"o":[[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0],[3.722,7.328],[0,0],[-7.328,3.722]],"v":[[64.459,-70.474],[64.459,-70.474],[70.988,-90.481],[71.204,-90.59],[91.211,-84.061],[91.211,-84.061],[84.681,-64.054],[84.465,-63.944]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.972549021244,0.509803950787,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":" 4","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[-326],"e":[-115]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":46,"s":[-115],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[0],"e":[24]},{"t":61}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":0,"s":[40.299,16.694,0],"e":[70.913,-3.83,0],"to":[5.102,-3.421,0],"ti":[-5.102,8.087,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.66,"y":0},"t":46,"s":[70.913,-3.83,0],"e":[70.913,-31.83,0],"to":[5.102,-8.087,0],"ti":[0,4.667,0]},{"t":56}],"ix":2,"l":2},"a":{"a":0,"k":[77.32,-35.798,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.665,-1.528],[-0.581,-0.776],[0,0],[0.705,-2.679],[0.23,-1.529],[-5.535,0.02],[0.376,4.941],[0.368,2.246],[-1.221,2.134],[0,0],[-0.387,0.907],[0.213,2.205],[6.128,0.358],[-0.026,-7.219]],"o":[[0.392,0.9],[0,0],[1.393,2.395],[-0.391,1.484],[-0.803,5.349],[4.864,-0.018],[-0.174,-2.282],[-0.394,-2.405],[0,0],[0.576,-0.78],[0.798,-1.871],[-0.59,-6.11],[-7.319,-0.427],[0.006,1.768]],"v":[[65.772,-40.987],[67.239,-38.466],[68.813,-35.76],[69.886,-27.837],[68.763,-23.333],[77.44,-12.997],[86.192,-22.224],[84.708,-28.878],[85.902,-35.822],[87.456,-38.54],[88.905,-41.075],[89.85,-47.253],[78.076,-58.578],[64.729,-45.963]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":" 3","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.44],"y":[0.88]},"o":{"x":[0.575],"y":[-0.156]},"t":0,"s":[12],"e":[-8.592]},{"i":{"x":[0.507],"y":[1.099]},"o":{"x":[0.557],"y":[-0.122]},"t":22,"s":[-8.592],"e":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.709],"y":[-0.161]},"t":39,"s":[12],"e":[18.8]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[18.8],"e":[-14]},{"t":57}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.44,"y":0.88},"o":{"x":0.575,"y":0.156},"t":0,"s":[67.106,32.567,0],"e":[84.002,28.008,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.507,"y":0.901},"o":{"x":0.557,"y":0.122},"t":22,"s":[84.002,28.008,0],"e":[67.106,32.567,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.709,"y":0.088},"t":39,"s":[67.106,32.567,0],"e":[71.976,35.311,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[71.976,35.311,0],"e":[70.339,21.422,0],"to":[0,0,0],"ti":[0,0,0]},{"t":57}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,20.502,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":[[1.616,-1.616],[0,0],[1.616,1.616],[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0]],"o":[[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0],[1.616,-1.616],[0,0],[1.616,1.616]],"v":[[107.605,23.427],[80.761,50.272],[74.909,50.272],[48.064,23.427],[48.064,17.576],[74.909,-9.269],[80.761,-9.269],[107.605,17.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.658823549747,0.32549020648,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":59,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":" 15","parent":32,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.835,-95.935,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[0,0],[0,0],[-0.139,-0.103],[0,0]],"o":[[0,0],[0.087,0.075],[0,0],[0,0]],"v":[[70.784,-114.454],[70.886,-114.403],[71.012,-114.314],[71.175,-114.215]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.502,-0.017],[0,0]],"o":[[0,0],[0.366,0.364],[0,0],[0,0]],"v":[[70.784,-114.454],[76.151,-109.096],[76.28,-109.108],[76.825,-109.007]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[{"i":[[0,0],[0,0],[-0.502,-0.017],[0,0]],"o":[[0,0],[0.366,0.364],[0,0],[0,0]],"v":[[70.784,-114.454],[76.151,-109.096],[76.28,-109.108],[76.825,-109.007]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[79.255,-108.419]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[79.255,-108.419]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[91.529,-120.775]],"c":false}]},{"t":112}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98,"op":323,"st":59,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":" 9","parent":34,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-5.971],"e":[-2.322]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":67.4,"s":[-2.322],"e":[-0.6]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":76.374,"s":[-0.6],"e":[-3.152]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94.323,"s":[-3.152],"e":[-1.923]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":112.271,"s":[-1.923],"e":[-2.515]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":130.221,"s":[-2.515],"e":[-2.23]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":148.169,"s":[-2.23],"e":[-2.367]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":166.118,"s":[-2.367],"e":[-2.301]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":184.066,"s":[-2.301],"e":[-2.333]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":202.016,"s":[-2.333],"e":[-2.317]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":219.964,"s":[-2.317],"e":[-2.325]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":237.913,"s":[-2.325],"e":[-2.321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":255.861,"s":[-2.321],"e":[-2.323]},{"t":273.810546875}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[80.192,-103.391,0],"e":[78.163,-96.131,0],"to":[-0.338,1.21,0],"ti":[0.309,-0.711,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[78.163,-96.131,0],"e":[78.337,-99.126,0],"to":[-0.309,0.711,0],"ti":[-0.029,0.499,0]},{"t":66}],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413],[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0]],"o":[[0,0],[0,-0.825],[0,0],[-0.715,-0.413],[0,0],[-0.715,0.413],[0,0],[0,0.825],[0,0],[0.715,0.413],[0,0],[0.715,-0.413]],"v":[[92.71,-105.499],[92.71,-120.008],[91.555,-122.008],[78.99,-129.263],[76.68,-129.263],[64.115,-122.008],[62.96,-120.008],[62.96,-105.499],[64.115,-103.499],[76.68,-96.244],[78.99,-96.244],[91.555,-103.499]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823529412,0.521568627451,0.956862804936,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":61,"op":393,"st":6,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":" 17","parent":32,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.471,"ix":10},"p":{"a":0,"k":[77.835,-95.935,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,-95.935,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[91.308,-120.843]],"c":false}],"e":[{"i":[[0,0],[0,0],[-0.422,0.422],[0,0]],"o":[[0,0],[0.422,0.422],[0,0],[0,0]],"v":[[70.784,-114.454],[77.204,-108.035],[78.731,-108.035],[95.027,-124.185]],"c":false}]},{"t":117}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921583587,0.658823529412,0.325490196078,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":112,"op":441,"st":59,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":" 12","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[-32],"e":[1.037]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":70.4,"s":[1.037],"e":[16.63]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79.374,"s":[16.63],"e":[-6.471]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97.323,"s":[-6.471],"e":[4.653]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":115.271,"s":[4.653],"e":[-0.704]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":133.221,"s":[-0.704],"e":[1.875]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":151.169,"s":[1.875],"e":[0.633]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":169.118,"s":[0.633],"e":[1.231]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":187.066,"s":[1.231],"e":[0.943]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":205.016,"s":[0.943],"e":[1.082]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":222.964,"s":[1.082],"e":[1.015]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":240.913,"s":[1.015],"e":[1.047]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":258.861,"s":[1.047],"e":[1.032]},{"t":276.810546875}],"ix":10},"p":{"a":0,"k":[76.074,-72.679,0],"ix":2,"l":2},"a":{"a":0,"k":[78.137,-72.824,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":[[3.722,7.328],[0,0],[-7.328,3.722],[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0]],"o":[[0,0],[-3.722,-7.328],[0,0],[7.328,-3.722],[0,0],[3.722,7.328],[0,0],[-7.328,3.722]],"v":[[64.459,-70.474],[64.459,-70.474],[70.988,-90.481],[71.204,-90.59],[91.211,-84.061],[91.211,-84.061],[84.681,-64.054],[84.465,-63.944]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.972549021244,0.509803950787,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":62,"op":393,"st":6,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":" 11","parent":36,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.212],"y":[0]},"t":21,"s":[0],"e":[38]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[38],"e":[0.61]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":69.4,"s":[0.61],"e":[-17.038]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":78.374,"s":[-17.038],"e":[9.108]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":96.323,"s":[9.108],"e":[-3.482]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":114.271,"s":[-3.482],"e":[2.58]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":132.221,"s":[2.58],"e":[-0.339]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":150.169,"s":[-0.339],"e":[1.067]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":168.118,"s":[1.067],"e":[0.39]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":186.066,"s":[0.39],"e":[0.716]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":204.016,"s":[0.716],"e":[0.559]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":221.964,"s":[0.559],"e":[0.634]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":239.913,"s":[0.634],"e":[0.598]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":257.861,"s":[0.598],"e":[0.615]},{"t":275.810546875}],"ix":10},"p":{"a":0,"k":[77.32,-12.997,0],"ix":2,"l":2},"a":{"a":0,"k":[77.32,-12.997,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.665,-1.528],[-0.581,-0.776],[0,0],[0.705,-2.679],[0.23,-1.529],[-5.535,0.02],[0.376,4.941],[0.368,2.246],[-1.221,2.134],[0,0],[-0.387,0.907],[0.213,2.205],[6.128,0.358],[-0.026,-7.219]],"o":[[0.392,0.9],[0,0],[1.393,2.395],[-0.391,1.484],[-0.803,5.349],[4.864,-0.018],[-0.174,-2.282],[-0.394,-2.405],[0,0],[0.576,-0.78],[0.798,-1.871],[-0.59,-6.11],[-7.319,-0.427],[0.006,1.768]],"v":[[65.772,-40.987],[67.239,-38.466],[68.813,-35.76],[69.886,-27.837],[68.763,-23.333],[77.44,-12.997],[86.192,-22.224],[84.708,-28.878],[85.902,-35.822],[87.456,-38.54],[88.905,-41.075],[89.85,-47.253],[78.076,-58.578],[64.729,-45.963]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":61,"op":393,"st":6,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":" 10","parent":37,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[-14],"e":[0.564]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":68.4,"s":[0.564],"e":[7.438]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":77.374,"s":[7.438],"e":[-2.746]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":95.323,"s":[-2.746],"e":[2.158]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":113.271,"s":[2.158],"e":[-0.203]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":131.221,"s":[-0.203],"e":[0.934]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":149.169,"s":[0.934],"e":[0.386]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":167.118,"s":[0.386],"e":[0.65]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":185.066,"s":[0.65],"e":[0.523]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":203.016,"s":[0.523],"e":[0.584]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":220.964,"s":[0.584],"e":[0.554]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":238.913,"s":[0.554],"e":[0.569]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":256.861,"s":[0.569],"e":[0.562]},{"t":274.810546875}],"ix":10},"p":{"a":0,"k":[77.835,51.484,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,51.484,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":[[1.616,-1.616],[0,0],[1.616,1.616],[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0]],"o":[[0,0],[-1.616,1.616],[0,0],[-1.616,-1.616],[0,0],[1.616,-1.616],[0,0],[1.616,1.616]],"v":[[107.605,23.427],[80.761,50.272],[74.909,50.272],[48.064,23.427],[48.064,17.576],[74.909,-9.269],[80.761,-9.269],[107.605,17.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.658823549747,0.32549020648,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":59,"op":393,"st":6,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":" 2","parent":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.173],"y":[0.074]},"t":5,"s":[15.1],"e":[-4]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[-4],"e":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":61.4,"s":[0],"e":[1.888]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70.374,"s":[1.888],"e":[-0.909]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":88.323,"s":[-0.909],"e":[0.438]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106.271,"s":[0.438],"e":[-0.211]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":124.221,"s":[-0.211],"e":[0.102]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":142.169,"s":[0.102],"e":[-0.049]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":160.118,"s":[-0.049],"e":[0.024]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":178.066,"s":[0.024],"e":[-0.011]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":196.016,"s":[-0.011],"e":[0.005]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":213.964,"s":[0.005],"e":[-0.003]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":231.913,"s":[-0.003],"e":[0.001]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":249.861,"s":[0.001],"e":[-0.001]},{"t":267.810546875}],"ix":10},"p":{"a":0,"k":[78.022,91.237,0],"ix":2,"l":2},"a":{"a":0,"k":[78.022,91.237,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":[[1.749,0],[0,0],[-0.875,-1.515],[0,0],[-0.875,1.515],[0,0]],"o":[[0,0],[-1.749,0],[0,0],[0.875,1.515],[0,0],[0.875,-1.515]],"v":[[96.775,54],[58.895,54],[56.927,57.408],[75.867,90.213],[79.802,90.213],[98.742,57.408]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.98431372549,0.737254901961,0.019607843137,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":387,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[77.835,106.525,0],"ix":2,"l":2},"a":{"a":0,"k":[77.835,106.525,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.002,6.768],[0,0],[-6.768,0.002],[0,0],[-0.002,-6.768],[0,0],[6.768,-0.002],[0,0]],"o":[[0,0],[-0.002,-6.768],[0,0],[6.768,-0.002],[0,0],[0.002,6.768],[0,0],[-6.768,0.002]],"v":[[51.245,106.555],[51.245,106.554],[63.495,94.295],[92.165,94.246],[104.424,106.496],[104.424,106.496],[92.174,118.755],[63.504,118.805]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917647063732,0.262745112181,0.207843139768,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":387,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"ground","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,118.813,0],"ix":2,"l":2},"a":{"a":0,"k":[0,118.813,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-232.588,118.813],[232.588,118.813]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529422283,0.890196084976,0.988235294819,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":383,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":1,"nm":"Bkrnd","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[173,140,0],"ix":2,"l":2},"a":{"a":0,"k":[173,140,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":346,"sh":280,"sc":"#ffffff","ip":0,"op":382,"st":0,"bm":0}],"markers":[{"tm":125,"cm":"1","dr":0},{"tm":321,"cm":"2","dr":0}]}
diff --git a/chrome/browser/resources/chromeos/login/oobe_animation_resources.grdp b/chrome/browser/resources/chromeos/login/oobe_animation_resources.grdp index d52dd32..4686833 100644 --- a/chrome/browser/resources/chromeos/login/oobe_animation_resources.grdp +++ b/chrome/browser/resources/chromeos/login/oobe_animation_resources.grdp
@@ -6,21 +6,10 @@ <include type="BINDATA" name="IDR_OOBE_ARC_APPS_DOWNLOADING_VIDEO" resource_path="res/arc_app_dowsnloading.mp4" file="../../../internal/resources/arc_support/videos/app_downloading.mp4" /> </if> - <!-- Gesture Navigation animations. --> - <include type="BINDATA" compress="gzip" name="IDR_GESTURE_NAVIGATION_GO_HOME_ANIMATION" resource_path="gesture_go_home.json" file="images/gesture_go_home.json" /> - <include type="BINDATA" compress="gzip" name="IDR_GESTURE_NAVIGATION_GO_BACK_ANIMATION" resource_path="gesture_go_back.json" file="images/gesture_go_back.json" /> - <include type="BINDATA" compress="gzip" name="IDR_GESTURE_NAVIGATION_HOTSEAT_OVERVIEW_ANIMATION" resource_path="gesture_hotseat_overview.json" file="images/gesture_hotseat_overview.json" /> - - <!-- Marketing Opt In animations. --> - <include type="BINDATA" compress="gzip" name="IDR_MARKETING_OPT_IN_ALL_SET_ANIMATION" resource_path="all_set.json" file="images/all_set.json" /> - <!-- Multi-device Setup animation. --> <include type="BINDATA" compress="gzip" name="IDR_MULTIDEVICE_SETUP_ANIMATION_DARK" resource_path="multidevice_setup_dark.json" file="images/multidevice_setup_dark.json" /> <include type="BINDATA" compress="gzip" name="IDR_MULTIDEVICE_SETUP_ANIMATION_LIGHT" resource_path="multidevice_setup_light.json" file="images/multidevice_setup_light.json" /> - <!-- Apps downloading animation. --> - <include type="BINDATA" compress="gzip" name="IDR_APPS_DOWNLOADING_ANIMATION" resource_path="downloading_apps.json" file="images/downloading_apps.json" /> - <!-- Loading step animation. --> <include type="BINDATA" compress="gzip" name="IDR_LOGIN_SPINNER_ANIMATION" resource_path="spinner.json" file="images/spinner.json" /> </grit-part>
diff --git a/chrome/browser/resources/chromeos/login/screens/common/app_downloading.html b/chrome/browser/resources/chromeos/login/screens/common/app_downloading.html index e7973cd..220bd3f8 100644 --- a/chrome/browser/resources/chromeos/login/screens/common/app_downloading.html +++ b/chrome/browser/resources/chromeos/login/screens/common/app_downloading.html
@@ -41,7 +41,7 @@ <div id="video-container" slot="content" class="content-centered"> <if expr="chromeos and _google_chrome"> <oobe-cr-lottie id="downloadingApps" - animation-url="downloading_apps.json"> + animation-url="animations/downloading_apps.json"> </oobe-cr-lottie> </if> </div>
diff --git a/chrome/browser/resources/chromeos/login/screens/common/gesture_navigation.html b/chrome/browser/resources/chromeos/login/screens/common/gesture_navigation.html index 2ca697d..d831d441 100644 --- a/chrome/browser/resources/chromeos/login/screens/common/gesture_navigation.html +++ b/chrome/browser/resources/chromeos/login/screens/common/gesture_navigation.html
@@ -98,8 +98,8 @@ [[i18nDynamic(locale, 'gestureNavigationHomeDescription')]] </p> <div slot="content" class="content-centered gesture-animation-container"> - <oobe-cr-lottie animation-url="gesture_go_home.json" - class="gesture-animation"> + <oobe-cr-lottie class="gesture-animation" + animation-url="animations/gesture_go_home.json"> </div> <div slot="back-navigation"> <oobe-back-button on-click="onBack_" @@ -122,8 +122,8 @@ [[i18nDynamic(locale, 'gestureNavigationOverviewDescription')]] </p> <div slot="content" class="content-centered gesture-animation-container"> - <oobe-cr-lottie animation-url="gesture_hotseat_overview.json" - class="gesture-animation"> + <oobe-cr-lottie class="gesture-animation" + animation-url="animations/gesture_hotseat_overview.json"> </oobe-cr-lottie> </div> <div slot="back-navigation"> @@ -146,8 +146,8 @@ [[i18nDynamic(locale, 'gestureNavigationBackDescription')]] </p> <div slot="content" class="content-centered gesture-animation-container"> - <oobe-cr-lottie animation-url="gesture_go_back.json" - class="gesture-animation"> + <oobe-cr-lottie animation-url="animations/gesture_go_back.json" + class="gesture-animation"> </oobe-cr-lottie> </div> <div slot="back-navigation">
diff --git a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html index 9f7f40f..03867c0 100644 --- a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html +++ b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html
@@ -142,7 +142,7 @@ <!-- Animation --> <div class="marketing-animation-content"> <oobe-cr-lottie id="animation" - animation-url="all_set.json" singleLoop="true"> + animation-url="animations/all_set.json" singleLoop="true"> </oobe-cr-lottie> </div> </div>
diff --git a/chrome/browser/resources/chromeos/login/screens/oobe/welcome_dialog.html b/chrome/browser/resources/chromeos/login/screens/oobe/welcome_dialog.html index c347857..d2f8568 100644 --- a/chrome/browser/resources/chromeos/login/screens/oobe/welcome_dialog.html +++ b/chrome/browser/resources/chromeos/login/screens/oobe/welcome_dialog.html
@@ -202,7 +202,7 @@ </div> <div id="welcomeAnimationSlot"> <oobe-cr-lottie id="welcomeAnimation" hidden="[[isMeet_]]" - animation-url="/welcome_screen_animation.json"> + animation-url="animations/welcome_screen_animation.json"> </oobe-cr-lottie> <img src="/images/cfm/welcome.svg" class="oobe-illustration" id="remoraWelcomeImage" hidden="[[!isMeet_]]" aria-hidden="true">
diff --git a/chrome/browser/resources/settings/site_settings/website_usage_browser_proxy.ts b/chrome/browser/resources/settings/site_settings/website_usage_browser_proxy.ts index 47b9355..536f4bfd 100644 --- a/chrome/browser/resources/settings/site_settings/website_usage_browser_proxy.ts +++ b/chrome/browser/resources/settings/site_settings/website_usage_browser_proxy.ts
@@ -13,7 +13,7 @@ } clearUsage(origin: string) { - chrome.send('clearUsage', [origin]); + chrome.send('clearUnpartitionedUsage', [origin]); } static getInstance(): WebsiteUsageBrowserProxy {
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_win.cc index 8d39351e2..ee826522 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_win.cc
@@ -203,7 +203,7 @@ // static bool PostCleanupSettingsResetter::IsEnabled() { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) return true; #else return false;
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index 71a69cc..ea42841 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -19,6 +19,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" @@ -97,7 +98,7 @@ #include "chrome/browser/ui/views/frame/browser_view.h" #endif -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/password_manager/android/password_checkup_launcher_helper.h" #include "chrome/browser/safe_browsing/android/password_reuse_controller_android.h" #include "chrome/browser/safe_browsing/android/safe_browsing_referring_app_bridge_android.h" @@ -304,7 +305,7 @@ // The following code is disabled on Android. RefreshTokenIsAvailable cannot be // used in unit tests, because it needs to interact with system accounts. // Considering avoid running it during unit tests. See: crbug.com/1009957. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // This code is shared by the normal ctor and testing ctor. sync_password_hash_ = GetSyncPasswordHashFromPrefs(); @@ -422,7 +423,7 @@ if (web_contents->IsFullscreen()) web_contents->ExitFullscreen(true); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) (new PasswordReuseControllerAndroid( web_contents, this, password_type, base::BindOnce(&ChromePasswordProtectionService::OnUserAction, @@ -430,14 +431,14 @@ outcome, verdict_type, verdict_token, WarningUIType::MODAL_DIALOG))) ->ShowDialog(); -#else // !defined(OS_ANDROID) +#else // !BUILDFLAG(IS_ANDROID) ShowPasswordReuseModalWarningDialog( web_contents, this, password_type, base::BindOnce(&ChromePasswordProtectionService::OnUserAction, base::Unretained(this), web_contents, password_type, outcome, verdict_type, verdict_token, WarningUIType::MODAL_DIALOG)); -#endif // defined(OS_ANDROID) +#endif // BUILDFLAG(IS_ANDROID) LogWarningAction(WarningUIType::MODAL_DIALOG, WarningAction::SHOWN, password_type); @@ -890,7 +891,7 @@ observer.OnGaiaPasswordChanged(); // Disabled on Android, because enterprise reporting extension is not supported. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // Only report if the current password changed is the primary account and it's // not a Gmail account or if the current password changed is a content area // account and it's not a Gmail account. @@ -1026,7 +1027,7 @@ OpenUrl(web_contents, GetDefaultChangePasswordURL(), content::Referrer(), /*in_new_tab=*/true); } else { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) if (base::FeatureList::IsEnabled( safe_browsing:: kSafeBrowsingPasswordCheckIntegrationForSavedPasswordsAndroid)) { @@ -1162,7 +1163,7 @@ } // Disabled on Android, because enterprise reporting extension is not supported. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) void ChromePasswordProtectionService::MaybeReportPasswordReuseDetected( PasswordProtectionRequest* request, const std::string& username, @@ -1430,7 +1431,7 @@ // Only saved password and GAIA password reuse warnings are shown to users on // Android, so other types of password reuse events should be gated by Safe // Browsing extended reporting. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) if (password_type.account_type() == ReusedPasswordAccountType::SAVED_PASSWORD || IsSyncingGMAILPasswordWithSignedInProtectionEnabled(password_type)) { @@ -1741,7 +1742,7 @@ } } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) LoginReputationClientRequest::ReferringAppInfo ChromePasswordProtectionService::GetReferringAppInfo( content::WebContents* web_contents) {
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.h b/chrome/browser/safe_browsing/chrome_password_protection_service.h index 391fd19..a37311c 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.h +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -56,7 +56,7 @@ using password_manager::metrics_util::PasswordType; using url::Origin; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // Shows the desktop platforms specific password reuse modal dialog. // Implemented in password_reuse_modal_warning_dialog. void ShowPasswordReuseModalWarningDialog( @@ -187,7 +187,7 @@ // The following functions are disabled on Android, because enterprise reporting // extension is not supported. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // If the browser is not incognito and the user is reusing their enterprise // password or is a GSuite user, triggers // safeBrowsingPrivate.OnPolicySpecifiedPasswordReuseDetected. @@ -240,7 +240,7 @@ const std::vector<password_manager::MatchingReusedCredential>& matching_reused_credentials) override; -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) LoginReputationClientRequest::ReferringAppInfo GetReferringAppInfo( content::WebContents* web_contents) override; #endif @@ -400,7 +400,7 @@ FRIEND_TEST_ALL_PREFIXES( ChromePasswordProtectionServiceWithProtectionForSignedInUsersEnabledTest, VerifyUserPopulationForSyncPasswordEntryPing); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) FRIEND_TEST_ALL_PREFIXES( ChromePasswordProtectionServiceWithProtectionForSignedInUsersDisabledTest, VerifyUserPopulationForSyncPasswordEntryPing);
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc index 7af9a9a2..6c868744 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
@@ -62,7 +62,7 @@ // All tests related to extension is disabled on Android, because enterprise // reporting extension is not supported. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/safe_browsing/test_extension_event_observer.h" #include "chrome/common/extensions/api/safe_browsing_private.h" @@ -82,7 +82,7 @@ using ::testing::Return; using ::testing::WithArg; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) namespace OnPolicySpecifiedPasswordReuseDetected = extensions::api:: safe_browsing_private::OnPolicySpecifiedPasswordReuseDetected; namespace OnPolicySpecifiedPasswordChanged = @@ -114,7 +114,7 @@ const char kTestEmail[] = "foo@example.com"; const char kUserName[] = "username"; const char kRedirectURL[] = "http://redirect.com"; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) const char kPasswordReuseURL[] = "http://login.example.com/"; const char kTestGmail[] = "foo@gmail.com"; #endif @@ -279,7 +279,7 @@ browser_sync::UserEventServiceFactory::GetInstance() ->SetTestingFactoryAndUse(browser_context(), GetFakeUserEventServiceFactory())); -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) test_event_router_ = extensions::CreateAndUseTestEventRouter(browser_context()); extensions::SafeBrowsingPrivateEventRouterFactory::GetInstance() @@ -424,7 +424,7 @@ account_password_store_; // Owned by KeyedServiceFactory. raw_ptr<syncer::FakeUserEventService> fake_user_event_service_; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) raw_ptr<extensions::TestEventRouter> test_event_router_; #endif std::unique_ptr<VerdictCacheManager> cache_manager_; @@ -574,7 +574,7 @@ reused_password_type)); } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) TEST_F( ChromePasswordProtectionServiceWithProtectionForSignedInUsersDisabledTest, VerifyUserPopulationForSyncPasswordEntryPing) { @@ -841,7 +841,7 @@ // The following tests are disabled on Android, because password capture events // are not enabled on Android. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // Check that the PasswordCapturedEvent timer is set for 1 min if password // hash is saved and no timer pref is set yet. TEST_F(ChromePasswordProtectionServiceTest, @@ -1182,7 +1182,7 @@ // The following tests are disabled on Android, because enterprise reporting // extension is not supported. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) TEST_F(ChromePasswordProtectionServiceTest, VerifyOnPolicySpecifiedPasswordChangedEvent) { TestExtensionEventObserver event_observer(test_event_router_);
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/file_analysis_request_unittest.cc b/chrome/browser/safe_browsing/cloud_content_scanning/file_analysis_request_unittest.cc index 2b0fd494..82a216db 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/file_analysis_request_unittest.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/file_analysis_request_unittest.cc
@@ -215,7 +215,7 @@ } // Disabled due to flakiness on Mac https://crbug.com/1229051 -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) #define MAYBE_LargeFiles DISABLED_LargeFiles #else #define MAYBE_LargeFiles LargeFiles
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h index c424c14..8347da0 100644 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h
@@ -33,7 +33,7 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) #include "chrome/common/safe_browsing/disk_image_type_sniffer_mac.h" #include "chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h" #endif
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc index da11913..58e21a2c 100644 --- a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
@@ -1621,7 +1621,7 @@ CheckClientDownloadReportCorruptArchive(ZIP); } -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) TEST_F(DownloadProtectionServiceTest, CheckClientDownloadReportCorruptDmg) { CheckClientDownloadReportCorruptArchive(DMG); } @@ -1929,14 +1929,14 @@ #endif // OS_MAC TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) std::string download_file_path("ftp://www.google.com/bla.dmg"); #else std::string download_file_path("ftp://www.google.com/bla.exe"); #endif // OS_MAC NiceMockDownloadItem item; -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) PrepareBasicDownloadItem( &item, {"http://www.google.com/", download_file_path}, // url_chain "http://www.google.com/", // referrer @@ -1957,7 +1957,7 @@ EXPECT_CALL(*sb_service_->mock_database_manager(), MatchDownloadAllowlistUrl(_)) .WillRepeatedly(Return(false)); -#if !defined(OS_MAC) +#if !BUILDFLAG(IS_MAC) EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)) .WillOnce(SetCertificateContents("dummy cert data")); EXPECT_CALL(*binary_feature_extractor_.get(), @@ -1992,7 +1992,7 @@ ClientDownloadRequest::DOWNLOAD_URL, download_file_path, referrer_.spec())); ASSERT_TRUE(request->has_signature()); -#if !defined(OS_MAC) +#if !BUILDFLAG(IS_MAC) ASSERT_EQ(1, request->signature().certificate_chain_size()); const ClientDownloadRequest_CertificateChain& chain = request->signature().certificate_chain(0); @@ -2009,14 +2009,14 @@ // Similar to above, but with an unsigned binary. TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequestNoSignature) { -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) std::string download_file_path("ftp://www.google.com/bla.dmg"); #else std::string download_file_path("ftp://www.google.com/bla.exe"); #endif // OS_MAC NiceMockDownloadItem item; -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) PrepareBasicDownloadItem( &item, {"http://www.google.com/", download_file_path}, // url_chain "http://www.google.com/", // referrer @@ -2036,7 +2036,7 @@ EXPECT_CALL(*sb_service_->mock_database_manager(), MatchDownloadAllowlistUrl(_)) .WillRepeatedly(Return(false)); -#if !defined(OS_MAC) +#if !BUILDFLAG(IS_MAC) EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)); EXPECT_CALL(*binary_feature_extractor_.get(), ExtractImageFeatures( @@ -3302,7 +3302,7 @@ MatchDownloadAllowlistUrl(_)) .WillRepeatedly(Return(false)); -#if !defined(OS_LINUX) && !defined(OS_WIN) +#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_WIN) EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)); EXPECT_CALL(*binary_feature_extractor_.get(), ExtractImageFeatures(
diff --git a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc index b050fec..0434b8b 100644 --- a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc +++ b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc
@@ -183,7 +183,7 @@ request_->set_archive_directory_count(results.directory_count); request_->mutable_document_summary()->CopyFrom(results.document_summary); -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) if (!results.disk_image_signature.empty()) { request_->set_udif_code_signature(results.disk_image_signature.data(), results.disk_image_signature.size());
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc index 4f568910..ee38d72 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc
@@ -11,6 +11,7 @@ #include "base/task/post_task.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" +#include "build/build_config.h" #include "chrome/browser/file_util_service.h" #include "chrome/common/safe_browsing/archive_analyzer_results.h" #include "chrome/common/safe_browsing/document_analyzer_results.h" @@ -19,7 +20,7 @@ #include "components/safe_browsing/core/common/features.h" #include "content/public/browser/browser_thread.h" -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) #include "chrome/browser/safe_browsing/download_protection/document_analysis_service.h" #endif @@ -96,18 +97,18 @@ StartExtractZipFeatures(); } else if (inspection_type == DownloadFileType::RAR) { StartExtractRarFeatures(); -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) } else if (inspection_type == DownloadFileType::DMG) { StartExtractDmgFeatures(); #endif -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) } else if (base::FeatureList::IsEnabled( safe_browsing::kClientSideDetectionDocumentScanning) && inspection_type == DownloadFileType::OFFICE_DOCUMENT) { StartExtractDocumentFeatures(); #endif } else { -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) // Checks for existence of "koly" signature even if file doesn't have // archive-type extension, then calls ExtractFileOrDmgFeatures() with // result. @@ -227,7 +228,7 @@ std::move(callback_).Run(std::move(results_)); } -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) // This is called for .DMGs and other files that can be parsed by // SandboxedDMGAnalyzer. void FileAnalyzer::StartExtractDmgFeatures() { @@ -282,9 +283,9 @@ std::move(callback_).Run(std::move(results_)); } -#endif // defined(OS_MAC) +#endif // BUILDFLAG(IS_MAC) -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) void FileAnalyzer::StartExtractDocumentFeatures() { DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.h b/chrome/browser/safe_browsing/download_protection/file_analyzer.h index bc9fedb7..152e448 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer.h +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.h
@@ -16,11 +16,11 @@ #include "components/safe_browsing/core/common/proto/csd.pb.h" #include "third_party/protobuf/src/google/protobuf/repeated_field.h" -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) #include "chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h" #endif -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) #include "chrome/common/safe_browsing/disk_image_type_sniffer_mac.h" #include "chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h" #endif @@ -67,7 +67,7 @@ // For executables, information about the file headers. ClientDownloadRequest::ImageHeaders image_headers; -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) // For DMG files, the signature of the DMG. std::vector<uint8_t> disk_image_signature; @@ -104,14 +104,14 @@ void StartExtractRarFeatures(); void OnRarAnalysisFinished(const ArchiveAnalyzerResults& archive_results); -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) void StartExtractDmgFeatures(); void ExtractFileOrDmgFeatures(bool download_file_has_koly_signature); void OnDmgAnalysisFinished( const safe_browsing::ArchiveAnalyzerResults& archive_results); #endif -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) void StartExtractDocumentFeatures(); void OnDocumentAnalysisFinished( const DocumentAnalyzerResults& document_results); @@ -127,11 +127,11 @@ scoped_refptr<SandboxedRarAnalyzer> rar_analyzer_; -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) scoped_refptr<SandboxedDMGAnalyzer> dmg_analyzer_; #endif -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) scoped_refptr<SandboxedDocumentAnalyzer> document_analyzer_; base::TimeTicks document_analysis_start_time_; #endif
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc index d1f95f8..2c283bf 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc
@@ -16,7 +16,7 @@ #include "chrome/services/file_util/document_analysis_service.h" #include "chrome/test/base/in_process_browser_test.h" -#if defined(OS_LINUX) || defined(OS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) #include "chrome/browser/safe_browsing/download_protection/document_analysis_service.h" #include "chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h" #endif
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer_unittest.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer_unittest.cc index 06fdd0bd..b414e4af 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer_unittest.cc
@@ -242,7 +242,7 @@ // Since we only inspect contents of DMGs on OS X, we only get // MAC_ARCHIVE_FAILED_PARSING on OS X. -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) TEST_F(FileAnalyzerTest, TypeInvalidDmg) { scoped_refptr<MockBinaryFeatureExtractor> extractor = new testing::StrictMock<MockBinaryFeatureExtractor>(); @@ -631,7 +631,7 @@ EXPECT_EQ(result_.image_headers.pe_headers().file_header(), "image header"); } -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) TEST_F(FileAnalyzerTest, ExtractsSignatureForDmg) { scoped_refptr<MockBinaryFeatureExtractor> extractor =
diff --git a/chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.cc b/chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.cc index 911f612..7ae97c1d 100644 --- a/chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.cc +++ b/chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.cc
@@ -46,7 +46,7 @@ } void RegisterBinaryIntegrityAnalysis() { -#if defined(OS_WIN) || defined(OS_MAC) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) scoped_refptr<SafeBrowsingService> safe_browsing_service( g_browser_process->safe_browsing_service());
diff --git a/chrome/browser/safe_browsing/incident_reporting/environment_data_collection.cc b/chrome/browser/safe_browsing/incident_reporting/environment_data_collection.cc index 874a32a..5c0d837 100644 --- a/chrome/browser/safe_browsing/incident_reporting/environment_data_collection.cc +++ b/chrome/browser/safe_browsing/incident_reporting/environment_data_collection.cc
@@ -89,7 +89,7 @@ CollectProcessData(data->mutable_process()); } -#if !defined(OS_WIN) +#if !BUILDFLAG(IS_WIN) void CollectPlatformProcessData( ClientIncidentReport_EnvironmentData_Process* process) { // Empty implementation for platforms that do not (yet) have their own
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc index 134e3f5..6bd2bda1 100644 --- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc +++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
@@ -708,8 +708,8 @@ environment_collection_pending_ = false; // Process::Current().CreationTime() is missing on some platforms. -#if defined(OS_MAC) || defined(OS_WIN) || defined(OS_LINUX) || \ - defined(OS_CHROMEOS) +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS) base::TimeDelta uptime = first_incident_time_ - base::Process::Current().CreationTime(); environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc index 68af3c8..fbb02e7 100644 --- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc +++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service_unittest.cc
@@ -42,7 +42,7 @@ #include "extensions/browser/quota_service.h" #include "testing/gtest/include/gtest/gtest.h" -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) #include "base/test/test_reg_util_win.h" #endif @@ -204,7 +204,7 @@ void SetUp() override { testing::Test::SetUp(); -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) // Redirect HKCU so that the platform state store used by the test doesn't // collide with existing Chrome installs or other tests running in parallel. ASSERT_NO_FATAL_FAILURE( @@ -583,7 +583,7 @@ receiver->AddIncidentForProcess(MakeTestIncident(nullptr)); } -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) registry_util::RegistryOverrideManager registry_override_manager_; #endif
diff --git a/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc b/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc index c0670cb..f0329e8 100644 --- a/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc +++ b/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc
@@ -62,11 +62,11 @@ "Update logic below"); // Platform-specific types are relevant only for their own platforms. -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) if (download_type == ClientDownloadRequest::MAC_EXECUTABLE || download_type == ClientDownloadRequest::MAC_ARCHIVE_FAILED_PARSING) return true; -#elif defined(OS_ANDROID) +#elif BUILDFLAG(IS_ANDROID) if (download_type == ClientDownloadRequest::ANDROID_APK) return true; #endif
diff --git a/chrome/browser/safe_browsing/incident_reporting/last_download_finder_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/last_download_finder_unittest.cc index 18762d3..af7f84d 100644 --- a/chrome/browser/safe_browsing/incident_reporting/last_download_finder_unittest.cc +++ b/chrome/browser/safe_browsing/incident_reporting/last_download_finder_unittest.cc
@@ -79,17 +79,17 @@ return nullptr; } -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) static const base::FilePath::CharType kBinaryFileName[] = FILE_PATH_LITERAL("spam.exe"); static const base::FilePath::CharType kBinaryFileNameForOtherOS[] = FILE_PATH_LITERAL("spam.dmg"); -#elif defined(OS_MAC) +#elif BUILDFLAG(IS_MAC) static const base::FilePath::CharType kBinaryFileName[] = FILE_PATH_LITERAL("spam.dmg"); static const base::FilePath::CharType kBinaryFileNameForOtherOS[] = FILE_PATH_LITERAL("spam.apk"); -#elif defined(OS_ANDROID) +#elif BUILDFLAG(IS_ANDROID) static const base::FilePath::CharType kBinaryFileName[] = FILE_PATH_LITERAL("spam.apk"); static const base::FilePath::CharType kBinaryFileNameForOtherOS[] = @@ -370,7 +370,7 @@ EXPECT_TRUE(last_non_binary_download); } -#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_ANDROID) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) // Tests that nothing happens if the binary is an executable for a different OS. TEST_F(LastDownloadFinderTest, DownloadForDifferentOs) { // Create a profile with a history service that is opted-in.
diff --git a/chrome/browser/safe_browsing/incident_reporting/platform_state_store.h b/chrome/browser/safe_browsing/incident_reporting/platform_state_store.h index 67a2b53..f30b054 100644 --- a/chrome/browser/safe_browsing/incident_reporting/platform_state_store.h +++ b/chrome/browser/safe_browsing/incident_reporting/platform_state_store.h
@@ -17,7 +17,7 @@ // Certain platforms provide their own storage of protobuf-serialized prune // state. On platforms where it is not supported, Load() and Store() are noops. -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) // Store the state in the registry on Windows. #define USE_PLATFORM_STATE_STORE #endif
diff --git a/chrome/browser/safe_browsing/incident_reporting/state_store_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/state_store_unittest.cc index a449d48..be0de1c 100644 --- a/chrome/browser/safe_browsing/incident_reporting/state_store_unittest.cc +++ b/chrome/browser/safe_browsing/incident_reporting/state_store_unittest.cc
@@ -28,13 +28,13 @@ #include "extensions/browser/quota_service.h" #include "testing/gtest/include/gtest/gtest.h" -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) #include "base/test/test_reg_util_win.h" #endif namespace safe_browsing { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) // A base test fixture that redirects HKCU for testing the platform state store // backed by the Windows registry to prevent interference with existing Chrome
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc index adc7ae90..c4637b04 100644 --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -964,7 +964,7 @@ ->GetLastCommittedURL()); } -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) #define MAYBE_IframeOptInAndReportThreatDetails \ DISABLED_IframeOptInAndReportThreatDetails #else @@ -1262,7 +1262,7 @@ EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); } -#if (defined(OS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) +#if (BUILDFLAG(IS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) // TODO(crbug.com/1132307): Address flaky timeout. #define MAYBE_LearnMore DISABLED_LearnMore #else @@ -1480,7 +1480,7 @@ AssertNoInterstitial(true); } -#if (defined(OS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) +#if (BUILDFLAG(IS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) // TODO(crbug.com/1132307): Address flay failure. #define MAYBE_VerifyHitReportSentOnSBERAndNotIncognito \ DISABLED_VerifyHitReportSentOnSBERAndNotIncognito @@ -1828,7 +1828,7 @@ } // Check back and forward work correctly after clicking through an interstitial. -#if (defined(OS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) +#if (BUILDFLAG(IS_MAC) && !defined(NDEBUG)) || defined(MEMORY_SANITIZER) // TODO(crbug.com/1132307): Address flay failure. #define MAYBE_NavigatingBackAndForth DISABLED_NavigatingBackAndForth #else
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc index 411050af..2164e5d1 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
@@ -65,11 +65,11 @@ #include "services/network/public/cpp/features.h" #include "services/preferences/public/mojom/tracked_preference_validation_delegate.mojom.h" -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) #include "chrome/install_static/install_util.h" #endif -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/safe_browsing/android/safe_browsing_referring_app_bridge_android.h" #endif @@ -233,7 +233,7 @@ browser_context); } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) LoginReputationClientRequest::ReferringAppInfo SafeBrowsingService::GetReferringAppInfo(content::WebContents* web_contents) { return safe_browsing::GetReferringAppInfo(web_contents); @@ -298,7 +298,7 @@ // On Windows, get the safe browsing client name from the browser // distribution classes in installer util. These classes don't yet have // an analog on non-Windows builds so just keep the name specified here. -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) client_name = install_static::GetSafeBrowsingName(); #else #if BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -308,11 +308,11 @@ #endif // Mark client string to allow server to differentiate mobile. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) client_name.append("-a"); #endif -#endif // defined(OS_WIN) +#endif // BUILDFLAG(IS_WIN) return client_name; }
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.h b/chrome/browser/safe_browsing/safe_browsing_service.h index d55a9fd..f730e45e 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.h +++ b/chrome/browser/safe_browsing/safe_browsing_service.h
@@ -143,7 +143,7 @@ ReferrerChainProvider* GetReferrerChainProviderFromBrowserContext( content::BrowserContext* browser_context) override; -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) LoginReputationClientRequest::ReferringAppInfo GetReferringAppInfo( content::WebContents* web_contents) override; #endif
diff --git a/chrome/browser/safe_browsing/services_delegate.h b/chrome/browser/safe_browsing/services_delegate.h index 4319b319..04440bd 100644 --- a/chrome/browser/safe_browsing/services_delegate.h +++ b/chrome/browser/safe_browsing/services_delegate.h
@@ -30,7 +30,7 @@ namespace safe_browsing { -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) class DownloadProtectionService; #endif class IncidentReportingService; @@ -52,7 +52,7 @@ class ServicesCreator { public: virtual bool CanCreateDatabaseManager() = 0; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) virtual bool CanCreateDownloadProtectionService() = 0; #endif virtual bool CanCreateIncidentReportingService() = 0; @@ -60,7 +60,7 @@ // Caller takes ownership of the returned object. Cannot use std::unique_ptr // because services may not be implemented for some build configs. virtual SafeBrowsingDatabaseManager* CreateDatabaseManager() = 0; -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) virtual DownloadProtectionService* CreateDownloadProtectionService() = 0; #endif virtual IncidentReportingService* CreateIncidentReportingService() = 0; @@ -104,7 +104,7 @@ content::DownloadManager* download_manager) = 0; // Returns nullptr for any service that is not available. -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) virtual DownloadProtectionService* GetDownloadService() = 0; #endif
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_unittest.cc b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_unittest.cc index 964671b..b96117e 100644 --- a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_unittest.cc +++ b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_unittest.cc
@@ -85,14 +85,14 @@ init_params.pref_file.clear(); InitializeExtensionService(init_params); -#if !defined(OS_WIN) +#if !BUILDFLAG(IS_WIN) // In production code, the settings reset prompt profile preferences are // registered on Windows only. We explicitly register the prefs on // non-Windows systems so that we can continue testing the model on more // than just Windows. SettingsResetPromptPrefsManager::RegisterProfilePrefs( testing_pref_service()->registry()); -#endif // !defined(OS_WIN) +#endif // !BUILDFLAG(IS_WIN) profile_->CreateWebDataService(); TemplateURLServiceFactory::GetInstance()->SetTestingFactory(
diff --git a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc index 0da5979d..6e119564 100644 --- a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc +++ b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.h" +#include "build/build_config.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/browser_finder.h" @@ -13,7 +14,7 @@ #include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/storage_partition.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/ui/android/tab_model/tab_model.h" #include "chrome/browser/ui/android/tab_model/tab_model_list.h" #else @@ -24,7 +25,7 @@ namespace { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) content::WebContents* GetWebContentsForProfile(Profile* profile) { for (const TabModel* tab_model : TabModelList::models()) { if (tab_model->GetProfile() != profile) @@ -71,7 +72,7 @@ } void ChromeTailoredSecurityService::ShowSyncNotification(bool is_enabled) { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) content::WebContents* web_contents = GetWebContentsForProfile(profile_); if (!web_contents) return; @@ -93,7 +94,7 @@ #endif } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) void ChromeTailoredSecurityService::MessageDismissed() { message_.reset(); }
diff --git a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.h b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.h index 90971ece..7dcfc4c6 100644 --- a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.h +++ b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.h
@@ -8,7 +8,7 @@ #include "build/build_config.h" #include "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/safe_browsing/tailored_security/consented_message_android.h" #endif @@ -30,7 +30,7 @@ private: void ShowSyncNotification(bool is_enabled); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) void MessageDismissed(); std::unique_ptr<TailoredSecurityConsentedModalAndroid> message_;
diff --git a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc index f8adb40..3b1886a1 100644 --- a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc +++ b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.h" +#include "build/build_config.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/tailored_security/notification_handler_desktop.h" #include "chrome/browser/safe_browsing/tailored_security/tailored_security_service_factory.h" @@ -14,7 +15,7 @@ #include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/render_widget_host_view.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/safe_browsing/tailored_security/unconsented_message_android.h" #else #include "chrome/browser/ui/views/safe_browsing/tailored_security_unconsented_modal.h" @@ -84,18 +85,18 @@ if (base::Time::Now() - previous_update <= base::Minutes(kThresholdForInFlowNotificationMinutes)) { -#if defined(OS_ANDROID) - message_ = std::make_unique<TailoredSecurityUnconsentedMessageAndroid>( - web_contents(), - base::BindOnce(&TailoredSecurityUrlObserver::MessageDismissed, - // Unretained is safe because |this| owns |message_|. - base::Unretained(this)), - /*is_in_flow=*/true); +#if BUILDFLAG(IS_ANDROID) + message_ = std::make_unique<TailoredSecurityUnconsentedMessageAndroid>( + web_contents(), + base::BindOnce(&TailoredSecurityUrlObserver::MessageDismissed, + // Unretained is safe because |this| owns |message_|. + base::Unretained(this)), + /*is_in_flow=*/true); #else TailoredSecurityUnconsentedModal::ShowForWebContents(web_contents()); #endif } else { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) message_ = std::make_unique<TailoredSecurityUnconsentedMessageAndroid>( web_contents(), base::BindOnce(&TailoredSecurityUrlObserver::MessageDismissed, @@ -147,7 +148,7 @@ last_url_ = url; } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) void TailoredSecurityUrlObserver::MessageDismissed() { message_.reset(); }
diff --git a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.h b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.h index 86ed8a70..2331aa9f 100644 --- a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.h +++ b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.h
@@ -10,7 +10,7 @@ #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/safe_browsing/tailored_security/unconsented_message_android.h" #endif @@ -56,7 +56,7 @@ friend class content::WebContentsUserData<TailoredSecurityUrlObserver>; -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) void MessageDismissed(); std::unique_ptr<TailoredSecurityUnconsentedMessageAndroid> message_;
diff --git a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc index de2fcd3..ea4a5bce 100644 --- a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc +++ b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc
@@ -29,7 +29,7 @@ #include "content/public/browser/web_contents.h" #include "services/network/public/cpp/features.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/android/tab_android.h" #endif @@ -66,7 +66,7 @@ ui_manager->StartDisplayingBlockingPage(resource); return; } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) // Don't delay the interstitial for Chrome Custom Tabs. auto* tab_android = TabAndroid::FromWebContents(web_contents); if (tab_android && tab_android->IsCustomTab()) {
diff --git a/chrome/browser/safe_browsing/user_interaction_observer.cc b/chrome/browser/safe_browsing/user_interaction_observer.cc index cfe984f..252e4ceb 100644 --- a/chrome/browser/safe_browsing/user_interaction_observer.cc +++ b/chrome/browser/safe_browsing/user_interaction_observer.cc
@@ -42,9 +42,9 @@ const char kDelayedWarningsTimeOnPageWithElisionDisabledHistogram[] = "SafeBrowsing.DelayedWarnings.TimeOnPage_UrlElisionDisabled"; +WEB_CONTENTS_USER_DATA_KEY_IMPL(SafeBrowsingUserInteractionObserver); + namespace { -const char kWebContentsUserDataKey[] = - "web_contents_safe_browsing_user_interaction_observer"; bool IsUrlElisionDisabled(Profile* profile, const char* suspicious_site_reporter_extension_id) { @@ -74,8 +74,9 @@ const security_interstitials::UnsafeResource& resource, bool is_main_frame, scoped_refptr<SafeBrowsingUIManager> ui_manager) - : content::WebContentsObserver(web_contents), - web_contents_(web_contents), + : content::WebContentsUserData<SafeBrowsingUserInteractionObserver>( + *web_contents), + content::WebContentsObserver(web_contents), resource_(resource), ui_manager_(ui_manager), creation_time_(base::Time::Now()), @@ -112,10 +113,12 @@ if (permission_request_manager) { permission_request_manager->RemoveObserver(this); } - web_contents_->GetMainFrame() + web_contents() + ->GetMainFrame() ->GetRenderWidgetHost() ->RemoveKeyPressEventCallback(key_press_callback_); - web_contents_->GetMainFrame() + web_contents() + ->GetMainFrame() ->GetRenderWidgetHost() ->RemoveMouseEventCallback(mouse_event_callback_); } @@ -130,21 +133,12 @@ // create an observer if there isn't one. // TODO(crbug.com/1057157): The observer should observe all unsafe resources // instead of the first one only. - if (FromWebContents(web_contents)) { - return; - } DCHECK(!web_contents->IsPortal()); - auto observer = std::make_unique<SafeBrowsingUserInteractionObserver>( - web_contents, resource, is_main_frame, ui_manager); - web_contents->SetUserData(kWebContentsUserDataKey, std::move(observer)); -} - -// static -SafeBrowsingUserInteractionObserver* -SafeBrowsingUserInteractionObserver::FromWebContents( - content::WebContents* web_contents) { - return static_cast<SafeBrowsingUserInteractionObserver*>( - web_contents->GetUserData(kWebContentsUserDataKey)); + content::WebContentsUserData< + SafeBrowsingUserInteractionObserver>::CreateForWebContents(web_contents, + resource, + is_main_frame, + ui_manager); } void SafeBrowsingUserInteractionObserver::RenderFrameHostChanged( @@ -220,7 +214,7 @@ base::UmaHistogramLongTimes(kDelayedWarningsTimeOnPageHistogram, time_on_page); } - web_contents()->RemoveUserData(kWebContentsUserDataKey); + web_contents()->RemoveUserData(UserDataKey()); // DO NOT add code past this point. |this| is destroyed. } @@ -379,7 +373,7 @@ void SafeBrowsingUserInteractionObserver::CleanUp() { content::RenderWidgetHost* widget = - web_contents_->GetMainFrame()->GetRenderWidgetHost(); + web_contents()->GetMainFrame()->GetRenderWidgetHost(); widget->RemoveKeyPressEventCallback(key_press_callback_); widget->RemoveMouseEventCallback(mouse_event_callback_); }
diff --git a/chrome/browser/safe_browsing/user_interaction_observer.h b/chrome/browser/safe_browsing/user_interaction_observer.h index e08f0452..95eddb9 100644 --- a/chrome/browser/safe_browsing/user_interaction_observer.h +++ b/chrome/browser/safe_browsing/user_interaction_observer.h
@@ -12,6 +12,7 @@ #include "components/security_interstitials/core/unsafe_resource.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/browser/web_contents_user_data.h" namespace blink { class WebMouseEvent; @@ -72,7 +73,7 @@ // due to the Delayed Warnings experiment. Deleted once the interstitial is // shown, or the tab is closed or navigated away. class SafeBrowsingUserInteractionObserver - : public base::SupportsUserData::Data, + : public content::WebContentsUserData<SafeBrowsingUserInteractionObserver>, public content::WebContentsObserver, public permissions::PermissionRequestManager::Observer { public: @@ -87,15 +88,6 @@ bool is_main_frame, scoped_refptr<SafeBrowsingUIManager> ui_manager); - static SafeBrowsingUserInteractionObserver* FromWebContents( - content::WebContents* web_contents); - - // See CreateForWebContents() for parameters. These need to be public. - SafeBrowsingUserInteractionObserver( - content::WebContents* web_contents, - const security_interstitials::UnsafeResource& resource, - bool is_main_frame, - scoped_refptr<SafeBrowsingUIManager> ui_manager); ~SafeBrowsingUserInteractionObserver() override; // content::WebContentsObserver methods: @@ -129,6 +121,17 @@ base::Time GetCreationTimeForTesting() const; private: + friend class content::WebContentsUserData< + SafeBrowsingUserInteractionObserver>; + WEB_CONTENTS_USER_DATA_KEY_DECL(); + + // See CreateForWebContents() for parameters. + SafeBrowsingUserInteractionObserver( + content::WebContents* web_contents, + const security_interstitials::UnsafeResource& resource, + bool is_main_frame, + scoped_refptr<SafeBrowsingUIManager> ui_manager); + void RecordUMA(DelayedWarningEvent event); bool HandleKeyPress(const content::NativeWebKeyboardEvent& event); @@ -141,7 +144,6 @@ content::RenderWidgetHost::KeyPressEventCallback key_press_callback_; content::RenderWidgetHost::MouseEventCallback mouse_event_callback_; - raw_ptr<content::WebContents> web_contents_; security_interstitials::UnsafeResource resource_; scoped_refptr<SafeBrowsingUIManager> ui_manager_; bool interstitial_shown_ = false;
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/scroll_capture/ScrollCaptureCallbackRenderTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/scroll_capture/ScrollCaptureCallbackRenderTest.java index cd22c08..b37cd26 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/scroll_capture/ScrollCaptureCallbackRenderTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/scroll_capture/ScrollCaptureCallbackRenderTest.java
@@ -4,7 +4,14 @@ package org.chromium.chrome.browser.share.scroll_capture; +import static org.hamcrest.Matchers.both; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.lessThan; + import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.SurfaceTexture; import android.os.CancellationSignal; @@ -29,8 +36,9 @@ import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Criteria; +import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.FlakyTest; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.tab.Tab; @@ -39,7 +47,6 @@ import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.chrome.test.util.browser.Features; import org.chromium.content_public.browser.RenderCoordinates; -import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.test.util.RenderTestRule; import org.chromium.url.GURL; @@ -63,7 +70,10 @@ new BlankCTATabInitialStateRule(sActivityTestRule, false); @Rule - public RenderTestRule mRenderTestRule = RenderTestRule.Builder.withPublicCorpus().build(); + public RenderTestRule mRenderTestRule = RenderTestRule.Builder.withPublicCorpus() + .setRevision(2) + .setDescription("new test html") + .build(); private ScrollCaptureCallbackDelegate mCallback; private Tab mTab; @@ -76,12 +86,24 @@ // TODO(https://crbug.com/1254801): create a page that checkboards in a gradient or // something more complex to generate better test images. GURL url = new GURL(sActivityTestRule.getTestServer().getURL( - "/chrome/test/data/android/very_long_google.html")); + "/chrome/test/data/android/share/checkerboard.html")); sActivityTestRule.loadUrl(url.getSpec()); mCallback = new ScrollCaptureCallbackDelegate( new ScrollCaptureCallbackDelegate.EntryManagerWrapper()); mTab = sActivityTestRule.getActivity().getActivityTab(); mCallback.setCurrentTab(mTab); + // Wait for the script to execute. + CriteriaHelper.pollUiThread(() -> { + String title = mTab.getWebContents().getTitle(); + Criteria.checkThat("Render failed.", title, is("rendered")); + }); + // Wait for the renderer to actually paint everything. + CriteriaHelper.pollUiThread(() -> { + RenderCoordinates renderCoordinates = + RenderCoordinates.fromWebContents(mTab.getWebContents()); + Criteria.checkThat("Drawing failed.", renderCoordinates.getContentHeightPixInt(), + is(greaterThan(10000))); + }); } @Test @@ -100,16 +122,22 @@ @Test @LargeTest @Feature({"RenderTest"}) - @FlakyTest(message = "https://crbug.com/1269583") public void testCaptureBottom() throws Exception { - WebContents webContents = mTab.getWebContents(); - RenderCoordinates renderCoordinates = RenderCoordinates.fromWebContents(webContents); + RenderCoordinates renderCoordinates = + RenderCoordinates.fromWebContents(mTab.getWebContents()); // Drive a scroll to the bottom of the page. - TestThreadUtils.runOnUiThreadBlocking(() -> { - webContents.getEventForwarder().scrollBy(0, - renderCoordinates.getContentHeightPixInt() - - renderCoordinates.getLastFrameViewportHeightPixInt()); + final int offset = renderCoordinates.getContentHeightPixInt() + - renderCoordinates.getLastFrameViewportHeightPixInt(); + TestThreadUtils.runOnUiThreadBlocking( + () -> { mTab.getWebContents().getEventForwarder().scrollBy(0, offset); }); + // Wait for the scroll. + CriteriaHelper.pollUiThread(() -> { + RenderCoordinates scrolledCoordinates = + RenderCoordinates.fromWebContents(mTab.getWebContents()); + Criteria.checkThat("Scroll didn't occur.", scrolledCoordinates.getScrollYPixInt(), + is(both(greaterThan(offset - 5)).and(lessThan(offset + 5)))); }); + View view = mTab.getView(); Size size = new Size(view.getWidth(), view.getHeight()); @@ -199,12 +227,21 @@ */ private boolean captureViewport(CancellationSignal signal, Surface surface, Size initialSize, CallbackHelper surfaceChanged, String tag, int index) throws Exception { - final int callCount = surfaceChanged.getCallCount(); + int callCount = surfaceChanged.getCallCount(); CallbackHelper bitmapReady = new CallbackHelper(); Callback<Rect> consume = r -> { mCapturedRect = r; bitmapReady.notifyCalled(); }; + // Clear any old content from the surface. + Canvas canvas = + surface.lockCanvas(new Rect(0, 0, initialSize.getWidth(), initialSize.getHeight())); + canvas.drawColor(0, PorterDuff.Mode.CLEAR); + surface.unlockCanvasAndPost(canvas); + surfaceChanged.waitForCallback(callCount, 1); + + // Capture the content in the right location. + callCount = surfaceChanged.getCallCount(); final int offset = index * initialSize.getHeight(); TestThreadUtils.runOnUiThreadBlocking(() -> { Rect captureArea =
diff --git a/chrome/browser/sharing_hub/sharing_hub_features.cc b/chrome/browser/sharing_hub/sharing_hub_features.cc index fe0aa58..aefc67b 100644 --- a/chrome/browser/sharing_hub/sharing_hub_features.cc +++ b/chrome/browser/sharing_hub/sharing_hub_features.cc
@@ -37,7 +37,12 @@ } // namespace bool SharingHubOmniboxEnabled(content::BrowserContext* context) { - return !SharingHubDisabledByPolicy(context); + Profile* profile = Profile::FromBrowserContext(context); + if (!profile) + return false; + + return !SharingHubDisabledByPolicy(context) && + !profile->IsIncognitoProfile() && !profile->IsGuestSession(); } bool DesktopScreenshotsFeatureEnabled(content::BrowserContext* context) {
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc index 45ec0382..bb2f7606 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -482,9 +482,8 @@ profile_manager->GenerateNextProfileDirectoryPath(); base::RunLoop loop; Profile* other_profile = nullptr; - ProfileManager::CreateCallback callback = base::BindLambdaForTesting( - [&other_profile, &loop](Profile* profile, Profile::CreateStatus status) { - DCHECK_EQ(status, Profile::CREATE_STATUS_INITIALIZED); + base::OnceCallback<void(Profile*)> callback = + base::BindLambdaForTesting([&other_profile, &loop](Profile* profile) { other_profile = profile; loop.Quit(); }); @@ -1149,9 +1148,8 @@ profile_manager->GenerateNextProfileDirectoryPath(); base::RunLoop loop; Profile* other_profile = nullptr; - ProfileManager::CreateCallback callback = base::BindLambdaForTesting( - [&other_profile, &loop](Profile* profile, Profile::CreateStatus status) { - DCHECK_EQ(status, Profile::CREATE_STATUS_INITIALIZED); + base::OnceCallback<void(Profile*)> callback = + base::BindLambdaForTesting([&other_profile, &loop](Profile* profile) { other_profile = profile; loop.Quit(); });
diff --git a/chrome/browser/signin/signin_util_win.cc b/chrome/browser/signin/signin_util_win.cc index 0ffc61d..21f0fdc 100644 --- a/chrome/browser/signin/signin_util_win.cc +++ b/chrome/browser/signin/signin_util_win.cc
@@ -72,8 +72,7 @@ // already available or is delayed until a browser can first be opened. void FinishImportCredentialsFromProvider(const CoreAccountId& account_id, Browser* browser, - Profile* profile, - Profile::CreateStatus status) { + Profile* profile) { // DiceTurnSyncOnHelper deletes itself once done. if (GetDiceTurnSyncOnHelperDelegateForTestingStorage()->get()) { new DiceTurnSyncOnHelper( @@ -125,15 +124,14 @@ if (turn_on_sync) { Browser* browser = chrome::FindLastActiveWithProfile(profile); if (browser) { - FinishImportCredentialsFromProvider(account_id, browser, profile, - Profile::CREATE_STATUS_CREATED); + FinishImportCredentialsFromProvider(account_id, browser, profile); } else { // If no active browser exists yet, this profile is in the process of // being created. Wait for the browser to be created before finishing the // sign in. This object deletes itself when done. new profiles::BrowserAddedForProfileObserver( - profile, base::BindRepeating(&FinishImportCredentialsFromProvider, - account_id, nullptr)); + profile, base::BindOnce(&FinishImportCredentialsFromProvider, + account_id, nullptr, profile)); } }
diff --git a/chrome/browser/signin/signin_util_win_browsertest.cc b/chrome/browser/signin/signin_util_win_browsertest.cc index 87832ab..3eea128 100644 --- a/chrome/browser/signin/signin_util_win_browsertest.cc +++ b/chrome/browser/signin/signin_util_win_browsertest.cc
@@ -510,7 +510,7 @@ // loop is terminated by UnblockOnProfileInitialized. run_loop.Run(); - profiles::SwitchToProfile(path, false, ProfileManager::CreateCallback()); + profiles::SwitchToProfile(path, false); } struct ExistingWinBrowserProfilesSigninUtilTestParams {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index da98635..436aedb 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2896,6 +2896,7 @@ "//ash/assistant/util", "//ash/components/account_manager", "//ash/components/arc", + "//ash/components/arc/video_accelerator:protected_native_pixmap_query_client", "//ash/components/audio", "//ash/components/disks", "//ash/components/drivefs",
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_book_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_book_round.xml index 234d29d..60011611 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_book_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_book_round.xml
@@ -5,15 +5,12 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="37" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,1L18,1C27.9411,1 36,9.0589 36,19L36,19C36,28.9411 27.9411,37 18,37L18,37C8.0589,37 0,28.9411 0,19L0,19C-0,9.0589 8.0589,1 18,1Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M24,9L12,9C10.9,9 10,9.9 10,11L10,27C10,28.1 10.9,29 12,29L24,29C25.1,29 26,28.1 26,27L26,11C26,9.9 25.1,9 24,9Z" /> <path android:fillColor="@macro/default_control_color_active" android:fillType="nonZero" android:pathData="M24,27l-12,0l0,-16l2,0l0,8l2.5,-1.5l2.5,1.5l0,-8l5,0z" /> </vector> -
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_equals_sign_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_equals_sign_round.xml index 061d4f5..4e03751 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_equals_sign_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_equals_sign_round.xml
@@ -5,12 +5,10 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="36" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,0L18,0C27.9411,-0 36,8.0589 36,18L36,18C36,27.9411 27.9411,36 18,36L18,36C8.0589,36 0,27.9411 0,18L0,18C-0,8.0589 8.0589,0 18,0Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M10,14L26,14L26,17L10,17L10,14ZM10,19L26,19L26,22L10,22L10,19Z" /> </vector>
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_event_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_event_round.xml index 439ce17b..f825033 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_event_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_event_round.xml
@@ -4,16 +4,14 @@ found in the LICENSE file. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="36" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,0L18,0C27.9411,-0 36,8.0589 36,18L36,18C36,27.9411 27.9411,36 18,36L18,36C8.0589,36 0,27.9411 0,18L0,18C-0,8.0589 8.0589,0 18,0Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M25,10L24,10L24,8L22,8L22,10L14,10L14,8L12,8L12,10L11,10C9.89,10 9.01,10.9 9.01,12L9,26C9,27.1 9.89,28 11,28L25,28C26.1,28 27,27.1 27,26L27,12C27,10.9 26.1,10 25,10Z" /> <path android:fillColor="@macro/default_control_color_active" android:fillType="nonZero" android:pathData="M25,26l-14,0l0,-10l14,0z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M20.5,19L20.5,19C19.12,19 18,20.12 18,21.5L18,21.5C18,22.88 19.12,24 20.5,24L20.5,24C21.88,24 23,22.88 23,21.5L23,21.5C23,20.12 21.88,19 20.5,19Z" /> </vector>
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_loop_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_loop_round.xml index 7e494f1..798af8a 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_loop_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_loop_round.xml
@@ -5,12 +5,10 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="36" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,0L18,0C27.9411,-0 36,8.0589 36,18L36,18C36,27.9411 27.9411,36 18,36L18,36C8.0589,36 0,27.9411 0,18L0,18C-0,8.0589 8.0589,0 18,0Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M18,12L18,15L22,11L18,7L18,10C13.58,10 10,13.58 10,18C10,19.57 10.46,21.03 11.24,22.26L12.7,20.8C12.25,19.97 12,19.01 12,18C12,14.69 14.69,12 18,12ZM24.76,13.74L23.3,15.2C23.74,16.04 24,16.99 24,18C24,21.31 21.31,24 18,24L18,21L14,25L18,29L18,26C22.42,26 26,22.42 26,18C26,16.43 25.54,14.97 24.76,13.74Z" /> </vector>
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_swap_vert_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_swap_vert_round.xml index 5825eac..de4fc68 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_swap_vert_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_swap_vert_round.xml
@@ -5,12 +5,10 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="36" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,0L18,0C27.9411,-0 36,8.0589 36,18L36,18C36,27.9411 27.9411,36 18,36L18,36C8.0589,36 0,27.9411 0,18L0,18C-0,8.0589 8.0589,0 18,0Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M22,23.01L22,16L20,16L20,23.01L17,23.01L21,27L25,23.01L22,23.01ZM15,9L11,12.99L14,12.99L14,20L16,20L16,12.99L19,12.99L15,9Z" /> </vector>
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_wb_sunny_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_wb_sunny_round.xml index 3332d67d..3cb32c3 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/ic_wb_sunny_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/ic_wb_sunny_round.xml
@@ -5,12 +5,10 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:height="24dp" android:viewportHeight="36" android:viewportWidth="36" android:width="24dp"> <path android:fillColor="@macro/default_control_color_active" android:fillType="evenOdd" android:pathData="M18,0L18,0C27.9411,-0 36,8.0589 36,18L36,18C36,27.9411 27.9411,36 18,36L18,36C8.0589,36 0,27.9411 0,18L0,18C-0,8.0589 8.0589,0 18,0Z" /> - <path android:fillColor="?attr/default_icon_color_inverse" android:fillType="nonZero" + <path android:fillColor="@macro/default_icon_color_inverse" android:fillType="nonZero" android:pathData="M12.76,11.29L10.96,9.5L9.55,10.91L11.34,12.7L12.76,11.29ZM10,16.95L7,16.95L7,18.95L10,18.95L10,16.95ZM19,7L17,7L17,9.95L19,9.95L19,7ZM26.45,10.91L25.04,9.5L23.25,11.29L24.66,12.7L26.45,10.91ZM23.24,24.61L25.03,26.41L26.44,25L24.64,23.21L23.24,24.61ZM26,16.95L26,18.95L29,18.95L29,16.95L26,16.95ZM18,11.95C14.69,11.95 12,14.64 12,17.95C12,21.26 14.69,23.95 18,23.95C21.31,23.95 24,21.26 24,17.95C24,14.64 21.31,11.95 18,11.95ZM17,28.9L19,28.9L19,25.95L17,25.95L17,28.9ZM9.55,24.99L10.96,26.4L12.75,24.6L11.34,23.19L9.55,24.99Z" /> </vector>
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable/logo_translate_round.xml b/chrome/browser/ui/android/omnibox/java/res/drawable/logo_translate_round.xml index 2536081..a468d1f 100644 --- a/chrome/browser/ui/android/omnibox/java/res/drawable/logo_translate_round.xml +++ b/chrome/browser/ui/android/omnibox/java/res/drawable/logo_translate_round.xml
@@ -5,24 +5,21 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt" - xmlns:tools="http://schemas.android.com/tools" android:width="36dp" android:height="36dp" android:viewportWidth="36.0" - android:viewportHeight="36.0" - tools:targetApi="21"> + android:viewportHeight="36.0"> <path android:pathData="M18,0L18,0C27.94,-0 36,8.06 36,18L36,18C36,27.94 27.94,36 18,36L18,36C8.06,36 0,27.94 0,18L0,18C-0,8.06 8.06,0 18,0Z" android:fillColor="@macro/default_control_color_active" /> <path android:pathData="M18.87,21.07L16.33,18.56L16.36,18.53C18.1,16.59 19.34,14.36 20.07,12L23,12L23,10L16,10L16,8L14,8L14,10L7,10L7,11.99L18.17,11.99C17.5,13.92 16.44,15.75 15,17.35C14.07,16.32 13.3,15.19 12.69,14L10.69,14C11.42,15.63 12.42,17.17 13.67,18.56L8.58,23.58L10,25L15,20L18.11,23.11L18.87,21.07Z" - android:fillColor="?attr/default_icon_color_inverse" + android:fillColor="@macro/default_icon_color_inverse" /> <path android:pathData="M24.5,16l-2,0l-4.5,12l2,0l1.12,-3l4.75,0l1.13,3l2,0z" - android:fillColor="?attr/default_icon_color_inverse" + android:fillColor="@macro/default_icon_color_inverse" /> <path android:pathData="M21.88,23l1.62,-4.33l1.62,4.33z"
diff --git a/chrome/browser/ui/app_list/app_list_sort_unittest.cc b/chrome/browser/ui/app_list/app_list_sort_unittest.cc index d207216..a1a97da 100644 --- a/chrome/browser/ui/app_list/app_list_sort_unittest.cc +++ b/chrome/browser/ui/app_list/app_list_sort_unittest.cc
@@ -72,6 +72,42 @@ std::unique_ptr<test::TestAppListController> app_list_controller_; }; +// Verifies that sorting by app names is case insensitive. +TEST_F(TemporaryAppListSortTest, SortIsCaseInsensitive) { + RemoveAllExistingItems(); + + // Add three apps. + const std::string kItemId1 = CreateNextAppId(GenerateId("app_id1")); + scoped_refptr<extensions::Extension> app1 = + MakeApp("aaa", kItemId1, extensions::Extension::NO_FLAGS); + InstallExtension(app1.get()); + + const std::string kItemId2 = CreateNextAppId(GenerateId("app_id2")); + scoped_refptr<extensions::Extension> app2 = + MakeApp("BBB", kItemId2, extensions::Extension::NO_FLAGS); + InstallExtension(app2.get()); + + const std::string kItemId3 = CreateNextAppId(GenerateId("app_id3")); + scoped_refptr<extensions::Extension> app3 = + MakeApp("ccc", kItemId3, extensions::Extension::NO_FLAGS); + InstallExtension(app3.get()); + + // Verify the default status. Note that when the order is kCustom, a new app + // should be placed at the front. + EXPECT_EQ(ash::AppListSortOrder::kCustom, GetSortOrderFromPrefs()); + EXPECT_EQ(GetOrderedItemIdsFromModelUpdater(), + std::vector<std::string>({kItemId3, kItemId2, kItemId1})); + + // Sort apps with name alphabetical order. + GetChromeModelUpdater()->RequestAppListSort( + ash::AppListSortOrder::kNameAlphabetical); + + // The app positions stored in the model updater change, where the order of + // app names is case insensitive. + EXPECT_EQ(GetOrderedItemIdsFromModelUpdater(), + std::vector<std::string>({kItemId1, kItemId2, kItemId3})); +} + // Verifies sorting works as expected when the app list is under temporary sort. TEST_F(TemporaryAppListSortTest, SortUponTemporaryOrder) { RemoveAllExistingItems();
diff --git a/chrome/browser/ui/app_list/reorder/app_list_reorder_core.cc b/chrome/browser/ui/app_list/reorder/app_list_reorder_core.cc index bc2a347..40ca3f5 100644 --- a/chrome/browser/ui/app_list/reorder/app_list_reorder_core.cc +++ b/chrome/browser/ui/app_list/reorder/app_list_reorder_core.cc
@@ -38,6 +38,29 @@ } } +template <typename T> +void SortItems(std::vector<T>* items, ash::AppListSortOrder order); + +template <> +void SortItems(std::vector<SyncItemWrapper<std::u16string>>* items, + ash::AppListSortOrder order) { + UErrorCode error = U_ZERO_ERROR; + std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); + if (U_FAILURE(error)) + collator.reset(); + + StringWrapperComparator comparator(IsIncreasingOrder(order), collator.get()); + std::sort(items->begin(), items->end(), comparator); +} + +template <> +void SortItems(std::vector<SyncItemWrapper<ash::IconColor>>* items, + ash::AppListSortOrder order) { + DCHECK(IsIncreasingOrder(order)); + IconColorWrapperComparator comparator; + std::sort(items->begin(), items->end(), comparator); +} + // Sorts `wrappers` based on `order` and returns the longest subsequence in // increasing ordinal order (a.k.a the longest increasing subsequence or // "LIS"). Each element in LIS is an index of an element in `wrappers`. @@ -46,26 +69,7 @@ ash::AppListSortOrder order, std::vector<reorder::SyncItemWrapper<T>>* wrappers) { DCHECK(!wrappers->empty()); - std::sort(wrappers->begin(), wrappers->end(), - [order](const reorder::SyncItemWrapper<T>& wrapper1, - const reorder::SyncItemWrapper<T>& wrapper2) { - // Always put folders in front. - // TODO(https://crbug.com/1261673): remove this code block when - // `SyncItemWrapper` comparison operators take item type into - // consideration. - // TODO(crbug.com/1270898): Color sort should place folders at the - // end of the app list. - if (wrapper1.is_folder != wrapper2.is_folder) - return wrapper1.is_folder; - - bool comp = false; - if (IsIncreasingOrder(order)) { - comp = wrapper1 < wrapper2; - } else { - comp = wrapper1 > wrapper2; - } - return comp; - }); + SortItems(wrappers, order); // The remaining code is needed to find the longest increasing subsequence // (LIS) through dynamic programming. Denote the LIS ending with the j-th @@ -320,7 +324,7 @@ auto lower_bound = std::lower_bound( first_non_folder_iter, sorted_subsequence.cend(), new_item_key_attribute, [&is_increasing](const reorder::SyncItemWrapper<T>& item, - const std::string& val) { + const std::u16string& val) { return is_increasing ? item.key_attribute < val : item.key_attribute > val; }); @@ -452,15 +456,15 @@ DCHECK(order == ash::AppListSortOrder::kNameAlphabetical || order == ash::AppListSortOrder::kNameReverseAlphabetical); - std::vector<reorder::SyncItemWrapper<std::string>> local_item_wrappers = - reorder::GenerateWrappersFromAppListItems<std::string>(local_items); + std::vector<reorder::SyncItemWrapper<std::u16string>> local_item_wrappers = + reorder::GenerateWrappersFromAppListItems<std::u16string>(local_items); if (local_item_wrappers.empty()) { *target_position = syncer::StringOrdinal::CreateInitialOrdinal(); return true; } - std::vector<reorder::SyncItemWrapper<std::string>> sorted_subsequence; + std::vector<reorder::SyncItemWrapper<std::u16string>> sorted_subsequence; float entropy; CalculateEntropyAndGetSortedSubsequence(order, &local_item_wrappers, &entropy, &sorted_subsequence); @@ -470,15 +474,18 @@ return false; } + // Use std::u16string for string comparison. + std::u16string item_name_utf16 = base::UTF8ToUTF16(new_item.name()); + syncer::StringOrdinal prev_neighbor; syncer::StringOrdinal next_neighbor; - CalculateNeighbors(order, new_item.name(), sorted_subsequence, &prev_neighbor, + CalculateNeighbors(order, item_name_utf16, sorted_subsequence, &prev_neighbor, &next_neighbor); if (global_items) { AdjustNeighborsInGlobalScope( - order, reorder::SyncItemWrapper<std::string>(new_item), - reorder::GenerateWrappersFromSyncItems<std::string>(*global_items), + order, reorder::SyncItemWrapper<std::u16string>(new_item), + reorder::GenerateWrappersFromSyncItems<std::u16string>(*global_items), &prev_neighbor, &next_neighbor); } @@ -496,8 +503,8 @@ switch (order) { case ash::AppListSortOrder::kNameAlphabetical: case ash::AppListSortOrder::kNameReverseAlphabetical: { - std::vector<reorder::SyncItemWrapper<std::string>> wrappers = - reorder::GenerateWrappersFromSyncItems<std::string>(sync_item_map); + std::vector<reorder::SyncItemWrapper<std::u16string>> wrappers = + reorder::GenerateWrappersFromSyncItems<std::u16string>(sync_item_map); return GenerateReorderParamsImpl(order, &wrappers); } case ash::AppListSortOrder::kColor: { @@ -518,8 +525,8 @@ switch (order) { case ash::AppListSortOrder::kNameAlphabetical: case ash::AppListSortOrder::kNameReverseAlphabetical: { - std::vector<reorder::SyncItemWrapper<std::string>> wrappers = - reorder::GenerateWrappersFromAppListItems<std::string>( + std::vector<reorder::SyncItemWrapper<std::u16string>> wrappers = + reorder::GenerateWrappersFromAppListItems<std::u16string>( app_list_items); return GenerateReorderParamsImpl(order, &wrappers); } @@ -593,13 +600,14 @@ return 0.f; case ash::AppListSortOrder::kNameAlphabetical: case ash::AppListSortOrder::kNameReverseAlphabetical: - std::vector<reorder::SyncItemWrapper<std::string>> local_item_wrappers = - reorder::GenerateWrappersFromAppListItems<std::string>( - model_updater->GetItems()); + std::vector<reorder::SyncItemWrapper<std::u16string>> + local_item_wrappers = + reorder::GenerateWrappersFromAppListItems<std::u16string>( + model_updater->GetItems()); float entropy = 0.f; CalculateEntropyAndGetSortedSubsequence( order, &local_item_wrappers, &entropy, - static_cast<std::vector<reorder::SyncItemWrapper<std::string>>*>( + static_cast<std::vector<reorder::SyncItemWrapper<std::u16string>>*>( nullptr)); return entropy; }
diff --git a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.cc b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.cc index 4b99252..c409f4ca 100644 --- a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.cc +++ b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.cc
@@ -39,23 +39,25 @@ ReorderParam::~ReorderParam() = default; -// SyncItemWrapper<std::string> ------------------------------------------------ +// SyncItemWrapper<std::u16string> --------------------------------------------- template <> -SyncItemWrapper<std::string>::SyncItemWrapper( +SyncItemWrapper<std::u16string>::SyncItemWrapper( const AppListSyncableService::SyncItem& sync_item) : id(sync_item.item_id), item_ordinal(sync_item.item_ordinal), - is_folder(sync_item.item_type == sync_pb::AppListSpecifics::TYPE_FOLDER), - key_attribute(sync_item.item_name) {} + is_folder(sync_item.item_type == sync_pb::AppListSpecifics::TYPE_FOLDER) { + key_attribute = base::UTF8ToUTF16(sync_item.item_name); +} template <> -SyncItemWrapper<std::string>::SyncItemWrapper( +SyncItemWrapper<std::u16string>::SyncItemWrapper( const ChromeAppListItem& app_list_item) : id(app_list_item.id()), item_ordinal(app_list_item.position()), - is_folder(app_list_item.is_folder()), - key_attribute(app_list_item.name()) {} + is_folder(app_list_item.is_folder()) { + key_attribute = base::UTF8ToUTF16(app_list_item.name()); +} // SyncItemWrapper<ash::IconColor> --------------------------------------------- @@ -75,6 +77,49 @@ is_folder(app_list_item.is_folder()), key_attribute(app_list_item.icon_color()) {} +// IconColorWrapperComparator ------------------------------------------------- + +IconColorWrapperComparator::IconColorWrapperComparator() = default; + +bool IconColorWrapperComparator::operator()( + const reorder::SyncItemWrapper<ash::IconColor>& lhs, + const reorder::SyncItemWrapper<ash::IconColor>& rhs) const { + // Folders are placed at the bottom of the app list in color sort. + if (lhs.is_folder != rhs.is_folder) + return rhs.is_folder; + return lhs.key_attribute < rhs.key_attribute; +} + +// StringWrapperComparator ---------------------------------------------------- + +StringWrapperComparator::StringWrapperComparator(bool increasing, + icu::Collator* collator) + : increasing_(increasing), collator_(collator) {} + +bool StringWrapperComparator::operator()( + const reorder::SyncItemWrapper<std::u16string>& lhs, + const reorder::SyncItemWrapper<std::u16string>& rhs) const { + // Folders are placed in the front of the app list in app name sort. + if (lhs.is_folder != rhs.is_folder) + return lhs.is_folder; + + // If the collator is not created successfully, compare the string values + // using operators. + if (!collator_) { + if (increasing_) + return lhs.key_attribute < rhs.key_attribute; + + return lhs.key_attribute > rhs.key_attribute; + } + + UCollationResult result = base::i18n::CompareString16WithCollator( + *collator_, lhs.key_attribute, rhs.key_attribute); + if (increasing_) + return result == UCOL_LESS; + + return result == UCOL_GREATER; +} + // Color Sort Utilities ------------------------------------------------------- sync_pb::AppListSpecifics::ColorGroup CalculateBackgroundColorGroup(
diff --git a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h index c0d584b..bff6697f 100644 --- a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h +++ b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h
@@ -9,9 +9,12 @@ #include <vector> #include "ash/public/cpp/app_list/app_list_types.h" +#include "base/i18n/string_compare.h" +#include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/app_list/app_list_syncable_service.h" #include "chrome/browser/ui/app_list/chrome_app_list_item.h" #include "components/sync/model/string_ordinal.h" +#include "third_party/icu/source/i18n/unicode/coll.h" namespace app_list { namespace reorder { @@ -47,14 +50,29 @@ T key_attribute; }; -template <typename T> -bool operator<(const SyncItemWrapper<T>& lhs, const SyncItemWrapper<T>& rhs) { - return lhs.key_attribute < rhs.key_attribute; -} -template <typename T> -bool operator>(const SyncItemWrapper<T>& lhs, const SyncItemWrapper<T>& rhs) { - return lhs.key_attribute > rhs.key_attribute; -} +// A comparator class used to compare ash::IconColor wrapper. +class IconColorWrapperComparator { + public: + IconColorWrapperComparator(); + + // Returns true if lhs precedes rhs. + bool operator()(const reorder::SyncItemWrapper<ash::IconColor>& lhs, + const reorder::SyncItemWrapper<ash::IconColor>& rhs) const; +}; + +// A comparator class used to compare std::u16string wrapper. +class StringWrapperComparator { + public: + StringWrapperComparator(bool increasing, icu::Collator* collator); + + // Returns true if lhs precedes rhs. + bool operator()(const reorder::SyncItemWrapper<std::u16string>& lhs, + const reorder::SyncItemWrapper<std::u16string>& rhs) const; + + private: + const bool increasing_; + icu::Collator* const collator_; +}; // Gets a list of wrappers based on the mappings from ids to sync items. template <typename T> @@ -87,13 +105,13 @@ return wrappers; } -// SyncItemWrapper<std::string> ------------------------------------------------ +// SyncItemWrapper<std::u16string> --------------------------------------------- template <> -SyncItemWrapper<std::string>::SyncItemWrapper( +SyncItemWrapper<std::u16string>::SyncItemWrapper( const AppListSyncableService::SyncItem& sync_item); template <> -SyncItemWrapper<std::string>::SyncItemWrapper( +SyncItemWrapper<std::u16string>::SyncItemWrapper( const ChromeAppListItem& app_list_item); // SyncItemWrapper<ash::IconColor> ---------------------------------------------
diff --git a/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.cc b/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.cc index ab37be4..bdb95c3 100644 --- a/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.cc +++ b/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.cc
@@ -329,7 +329,8 @@ } void ChromeDesksTemplatesDelegate::LaunchAppsFromTemplate( - std::unique_ptr<ash::DeskTemplate> desk_template) { + std::unique_ptr<ash::DeskTemplate> desk_template, + base::TimeDelta delay) { const auto& launch_list = desk_template->desk_restore_data()->app_id_to_launch_list(); std::vector<std::string> unavailable_apps = @@ -337,7 +338,8 @@ // Show app unavailable toast. if (!unavailable_apps.empty()) ShowUnavailableAppToast(unavailable_apps); - DesksTemplatesClient::Get()->LaunchAppsFromTemplate(std::move(desk_template)); + DesksTemplatesClient::Get()->LaunchAppsFromTemplate(std::move(desk_template), + delay); } // Returns true if `window` is supported in desk templates feature.
diff --git a/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.h b/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.h index 1082f4b..6521c8c 100644 --- a/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.h +++ b/chrome/browser/ui/ash/desks_templates/chrome_desks_templates_delegate.h
@@ -44,8 +44,8 @@ const std::string& app_id, int desired_icon_size, base::OnceCallback<void(const gfx::ImageSkia&)> callback) const override; - void LaunchAppsFromTemplate( - std::unique_ptr<ash::DeskTemplate> desk_template) override; + void LaunchAppsFromTemplate(std::unique_ptr<ash::DeskTemplate> desk_template, + base::TimeDelta delay) override; bool IsWindowSupportedForDeskTemplate(aura::Window* window) const override; };
diff --git a/chrome/browser/ui/ash/desks_templates/desks_templates_client.cc b/chrome/browser/ui/ash/desks_templates/desks_templates_client.cc index bdd5bb827..ab8afaa 100644 --- a/chrome/browser/ui/ash/desks_templates/desks_templates_client.cc +++ b/chrome/browser/ui/ash/desks_templates/desks_templates_client.cc
@@ -200,7 +200,8 @@ } void DesksTemplatesClient::LaunchAppsFromTemplate( - std::unique_ptr<ash::DeskTemplate> desk_template) { + std::unique_ptr<ash::DeskTemplate> desk_template, + base::TimeDelta delay) { DCHECK(desk_template); const app_restore::RestoreData* restore_data = desk_template->desk_restore_data(); @@ -209,6 +210,7 @@ MaybeCreateAppLaunchHandler(); DCHECK(app_launch_handler_); + app_launch_handler_->set_delay(delay); app_launch_handler_->SetRestoreDataAndLaunch(restore_data->Clone()); RecordLaunchFromTemplateHistogram(); @@ -340,7 +342,7 @@ return; } - LaunchAppsFromTemplate(std::move(desk_template)); + LaunchAppsFromTemplate(std::move(desk_template), base::TimeDelta()); std::move(callback).Run(std::string("")); }
diff --git a/chrome/browser/ui/ash/desks_templates/desks_templates_client.h b/chrome/browser/ui/ash/desks_templates/desks_templates_client.h index 2069f40..32d6a978 100644 --- a/chrome/browser/ui/ash/desks_templates/desks_templates_client.h +++ b/chrome/browser/ui/ash/desks_templates/desks_templates_client.h
@@ -103,7 +103,8 @@ // Uses `app_launch_handler_` to launch apps from the restore data found in // `desk_template`. - void LaunchAppsFromTemplate(std::unique_ptr<ash::DeskTemplate> desk_template); + void LaunchAppsFromTemplate(std::unique_ptr<ash::DeskTemplate> desk_template, + base::TimeDelta delay); // Returns either the local desk storage backend or Chrome sync desk storage // backend depending on the feature flag DeskTemplateSync.
diff --git a/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.cc b/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.cc index ac707bc..f0ab7ab 100644 --- a/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.cc +++ b/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.cc
@@ -76,6 +76,11 @@ out_properties_container.SetProperty(aura::client::kAppType, static_cast<int>(ash::AppType::ARC_APP)); + out_properties_container.SetProperty( + exo::kProtectedNativePixmapQueryDelegate, + reinterpret_cast<exo::ProtectedNativePixmapQueryDelegate*>( + &protected_native_pixmap_query_client_)); + if (task_id.has_value()) out_properties_container.SetProperty(app_restore::kWindowIdKey, *task_id);
diff --git a/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.h b/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.h index 4934bab..100d834 100644 --- a/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.h +++ b/chrome/browser/ui/ash/shelf/app_service/exo_app_type_resolver.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_UI_ASH_SHELF_APP_SERVICE_EXO_APP_TYPE_RESOLVER_H_ #define CHROME_BROWSER_UI_ASH_SHELF_APP_SERVICE_EXO_APP_TYPE_RESOLVER_H_ +#include "ash/components/arc/video_accelerator/protected_native_pixmap_query_client.h" #include "components/exo/wm_helper.h" // This class populates the window property to identify the type of application @@ -20,6 +21,9 @@ void PopulateProperties( const Params& params, ui::PropertyHandler& out_properties_container) override; + + private: + arc::ProtectedNativePixmapQueryClient protected_native_pixmap_query_client_; }; #endif // CHROME_BROWSER_UI_ASH_SHELF_APP_SERVICE_EXO_APP_TYPE_RESOLVER_H_
diff --git a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc index 3a1e95d3b..d5f6223f 100644 --- a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc +++ b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc
@@ -140,10 +140,9 @@ } bool SharingHubBubbleController::ShouldOfferOmniboxIcon() { +#if BUILDFLAG(IS_CHROMEOS_ASH) if (GetProfile()->IsIncognitoProfile() || GetProfile()->IsGuestSession()) return false; - -#if BUILDFLAG(IS_CHROMEOS_ASH) return base::FeatureList::IsEnabled(features::kChromeOSSharingHub); #else return SharingHubOmniboxEnabled(GetWebContents().GetBrowserContext());
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc index 87fbdd5..d48117d 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -4347,17 +4347,11 @@ // Checks that it's possible to open a profile after startup. // Regression test for https://crbug.com/1278549 - base::test::TestFuture<Profile*, Profile::CreateStatus> future; - ProfileManager::CreateCallback created_callback = base::BindLambdaForTesting( - [&future](Profile* profile, Profile::CreateStatus status) { - future.GetCallback().Run(profile, status); - }); + base::test::TestFuture<Profile*> future; profiles::SwitchToProfile(GetDefaultProfileDir(), - /*always_create=*/false, created_callback); + /*always_create=*/false, future.GetCallback()); Profile* profile = future.Get<0>(); - Profile::CreateStatus status = future.Get<1>(); EXPECT_NE(profile, nullptr); - EXPECT_EQ(status, Profile::CREATE_STATUS_INITIALIZED); EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); // Checks that it's possible to open the profile picker.
diff --git a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc index 67fcd11..c8f8b45 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc
@@ -69,7 +69,7 @@ // terminated by UnblockOnProfileCreation when the profile is created. run_loop.Run(); - profiles::SwitchToProfile(path, false, ProfileManager::CreateCallback()); + profiles::SwitchToProfile(path, false); } void CheckBrowserWindows(const std::vector<std::string>& expected_basepaths) {
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc index 0865e3da..22bf2e2 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
@@ -6,6 +6,7 @@ #include "chrome/browser/ui/bookmarks/bookmark_drag_drop.h" #include "base/bind.h" +#include "base/memory/weak_ptr.h" #include "base/no_destructor.h" #include "base/scoped_observation.h" #include "base/strings/string_number_conversions.h" @@ -185,7 +186,7 @@ DoBookmarkDragCallback do_drag_callback) : model_(BookmarkModelFactory::GetForBrowserContext(profile)), count_(params.nodes.size()), - web_contents_(params.web_contents), + web_contents_(params.web_contents->GetWeakPtr()), source_(params.source), start_point_(params.start_point), do_drag_callback_(std::move(do_drag_callback)), @@ -226,30 +227,33 @@ void OnBookmarkIconLoaded(const BookmarkNode* drag_node, const ui::ImageModel& icon) { - auto* widget = - views::Widget::GetWidgetForNativeView(web_contents_->GetNativeView()); - const ui::ColorProvider* color_provider = - widget ? widget->GetColorProvider() : nullptr; - gfx::ImageSkia drag_image( - std::make_unique<BookmarkDragImageSource>( - drag_node->GetTitle(), - // It's not clear if the "generator without color provider" case can - // occur, but if it can, better to wrongly show the default favicon - // than to crash. - (icon.IsEmpty() || (icon.IsImageGenerator() && !color_provider)) - ? *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( - IDR_DEFAULT_FAVICON) - : views::GetImageSkiaFromImageModel(icon, color_provider), - count_), - BookmarkDragImageSource::kBookmarkDragImageSize); + if (web_contents_) { + auto* widget = + views::Widget::GetWidgetForNativeView(web_contents_->GetNativeView()); + const ui::ColorProvider* color_provider = + widget ? widget->GetColorProvider() : nullptr; + gfx::ImageSkia drag_image( + std::make_unique<BookmarkDragImageSource>( + drag_node->GetTitle(), + // It's not clear if the "generator without color provider" case + // can occur, but if it can, better to wrongly show the default + // favicon than to crash. + (icon.IsEmpty() || (icon.IsImageGenerator() && !color_provider)) + ? *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( + IDR_DEFAULT_FAVICON) + : views::GetImageSkiaFromImageModel(icon, color_provider), + count_), + BookmarkDragImageSource::kBookmarkDragImageSize); - drag_data_->provider().SetDragImage( - drag_image, gfx::Vector2d(BookmarkDragImageSource::kDragImageOffsetX, - BookmarkDragImageSource::kDragImageOffsetY)); + drag_data_->provider().SetDragImage( + drag_image, + gfx::Vector2d(BookmarkDragImageSource::kDragImageOffsetX, + BookmarkDragImageSource::kDragImageOffsetY)); - std::move(do_drag_callback_) - .Run(std::move(drag_data_), web_contents_->GetNativeView(), source_, - start_point_, operation_); + std::move(do_drag_callback_) + .Run(std::move(drag_data_), web_contents_->GetNativeView(), source_, + start_point_, operation_); + } delete this; } @@ -279,7 +283,7 @@ int64_t drag_node_id_ = -1; int count_; - raw_ptr<content::WebContents> web_contents_; + base::WeakPtr<content::WebContents> web_contents_; ui::mojom::DragEventSource source_; const gfx::Point start_point_; int operation_;
diff --git a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc index 8bce67ca..e01bf86 100644 --- a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc +++ b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
@@ -191,7 +191,13 @@ active_drag_event_->set_root_location_f(event_root_location); delegate->OnDragUpdated(*active_drag_event_); - delegate->OnPerformDrop(*active_drag_event_, std::move(os_exchange_data_)); + auto drop_cb = delegate->GetDropCallback(*active_drag_event_); + // 'drop_cb' should have a value because WebContentsViewAura + // (DragDropDelegate) doesn't return NullCallback. + DCHECK(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(*active_drag_event_, std::move(os_exchange_data_), + output_drag_op); return true; }
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index bf3f3f73..0e6df679 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -261,7 +261,7 @@ if (!perform_menu_actions()) return; DCHECK(profiles::IsGuestModeEnabled()); - profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); + profiles::SwitchToGuestProfile(); } void ProfileMenuView::OnExitProfileButtonClicked() { @@ -381,8 +381,7 @@ if (!perform_menu_actions()) return; Hide(); - profiles::SwitchToProfile(profile_path, /*always_create=*/false, - ProfileManager::CreateCallback()); + profiles::SwitchToProfile(profile_path, /*always_create=*/false); } void ProfileMenuView::OnAddNewProfileButtonClicked() {
diff --git a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc index cd8badb6..c4506a2 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc
@@ -420,8 +420,7 @@ void ProfilePickerSignedInFlowController::OnBrowserOpened( BrowserOpenedCallback finish_flow_callback, - Profile* profile, - Profile::CreateStatus profile_create_status) { + Profile* profile) { TRACE_EVENT1("browser", "ProfilePickerSignedInFlowController::OnBrowserOpened", "profile_path", profile_->GetPath().AsUTF8Unsafe());
diff --git a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.h b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.h index 5662627..e8449fd7 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.h +++ b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.h
@@ -116,8 +116,7 @@ // Internal callback to finish the last steps of the signed-in creation // flow. void OnBrowserOpened(BrowserOpenedCallback finish_flow_callback, - Profile* profile, - Profile::CreateStatus profile_create_status); + Profile* profile); content::WebContents* contents() const { return contents_.get(); }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc b/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc index 69abd08b..0af26c4 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc
@@ -169,7 +169,7 @@ IN_PROC_BROWSER_TEST_F(ToolbarViewTest, MAYBE_ExtensionsToolbarContainerForGuest) { // Verify guest browser does not have an extensions toolbar container. - profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); + profiles::SwitchToGuestProfile(); ui_test_utils::WaitForBrowserToOpen(); Profile* guest = g_browser_process->profile_manager()->GetProfileByPath( ProfileManager::GetGuestProfilePath());
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc index d8191760..007fe39 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc
@@ -17,6 +17,14 @@ helper_.CheckAppNotInList("SiteA"); } +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, ManifestUpdateScope) { + helper_.InstallOmniboxIcon("SiteAFoo"); + helper_.ClosePwa(); + helper_.ManifestUpdateScopeSiteAFooTo("SiteA"); + helper_.NavigateBrowser("SiteA"); + helper_.CheckLaunchIconShown(); +} + // Automated tests: // TODO(crbug.com/1279704): Test is consistently failing on Mac and Win7.
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc index 7c927e8..50ec7be 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -59,6 +59,8 @@ #include "chrome/test/base/ui_test_utils.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/webapps/browser/installable/installable_metrics.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_web_ui.h" #include "extensions/browser/extension_dialog_auto_confirm.h" @@ -101,12 +103,38 @@ namespace { -const base::flat_map<std::string, std::string> g_site_mode_to_path = { - {"SiteA", "site_a"}, - {"SiteB", "site_b"}, - {"SiteC", "site_c"}, - {"SiteAFoo", "site_a/foo"}, - {"SiteABar", "site_a/bar"}}; +// Flushes the shortcuts tasks, which seem to sometimes still hang around after +// our tasks are done. +// TODO(crbug.com/1273568): Investigate the true source of flakiness instead of +// papering over it here. +void FlushShortcutTasks() { + // Execute the UI thread task runner before and after the shortcut task runner + // to ensure that tasks get to the shortcut runner, and then any scheduled + // replies on the UI thread get run. + { + base::RunLoop loop; + content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE, loop.QuitClosure()); + loop.Run(); + } + { + base::RunLoop loop; + internals::GetShortcutIOTaskRunner()->PostTask(FROM_HERE, + loop.QuitClosure()); + loop.Run(); + } + { + base::RunLoop loop; + content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE, loop.QuitClosure()); + loop.Run(); + } +} + +const base::flat_map<std::string, std::string> + g_site_mode_to_relative_scope_url = {{"SiteA", "site_a"}, + {"SiteB", "site_b"}, + {"SiteC", "site_c"}, + {"SiteAFoo", "site_a/foo"}, + {"SiteABar", "site_a/bar"}}; #if !defined(OS_CHROMEOS) class TestAppLauncherHandler : public AppLauncherHandler { @@ -409,7 +437,9 @@ run_loop.Run(); } } - content::RunAllTasksUntilIdle(); + // TODO(crbug.com/1273568): Investigate the true source of flakiness instead + // of papering over it here. + FlushShortcutTasks(); } // TODO(crbug.com/1273568): Investigate the true source of flakiness instead of // papering over it here. @@ -670,12 +700,31 @@ void WebAppIntegrationTestDriver::ManifestUpdateDisplayMinimal( const std::string& site_mode) { BeforeStateChangeAction(); - // TODO(dmurph): Create a map of supported manifest updates keyed on site - // mode. - ASSERT_EQ("SiteA", site_mode); - ForceUpdateManifestContents( - site_mode, - GetAppURLForManifest(site_mode, blink::mojom::DisplayMode::kMinimalUi)); + ASSERT_EQ("SiteA", site_mode) << "Only site mode of 'SiteA' is supported"; + auto scope_url_path = + g_site_mode_to_relative_scope_url.find(site_mode)->second; + std::string str_template = + "/web_apps/%s/basic.html?manifest=manifest_minimal_ui.json"; + GURL url = embedded_test_server()->GetURL( + base::StringPrintf(str_template.c_str(), scope_url_path.c_str())); + ForceUpdateManifestContents(site_mode, url); + AfterStateChangeAction(); +} + +void WebAppIntegrationTestDriver::ManifestUpdateScopeSiteAFooTo( + const std::string& scope_mode) { + BeforeStateChangeAction(); + // The `scope_mode` would be changing the scope set in the manifest file. For + // simplicity, right now only SiteA is supported, so that is just hardcoded in + // manifest_scope_site_a.json, which is specified in the URL. + ASSERT_EQ("SiteA", scope_mode) << "Only scope mode of 'SiteA' is supported"; + auto scope_url_path = + g_site_mode_to_relative_scope_url.find("SiteAFoo")->second; + std::string str_template = + "/web_apps/%s/basic.html?manifest=manifest_scope_site_a.json"; + GURL url = embedded_test_server()->GetURL( + base::StringPrintf(str_template.c_str(), scope_url_path.c_str())); + ForceUpdateManifestContents("SiteAFoo", url); AfterStateChangeAction(); } @@ -1112,7 +1161,8 @@ DCHECK_EQ(1ul, delegate_->GetAllProfiles().size()) << "Manifest update waiting only supported on single profile tests."; bool is_waiting = app_ids_with_pending_manifest_updates_.erase(app_id); - ASSERT_TRUE(is_waiting) << "Received manifest update that was unexpected"; + ASSERT_TRUE(is_waiting) << "Received manifest update that was unexpected " + << old_name; if (waiting_for_update_id_ && app_id == waiting_for_update_id_.value()) { DCHECK(waiting_for_update_run_loop_); waiting_for_update_run_loop_->Quit(); @@ -1157,12 +1207,7 @@ } } #endif - content::RunAllTasksUntilIdle(); - base::RunLoop run_loop; - internals::GetShortcutIOTaskRunner()->PostTask( - FROM_HERE, base::BindLambdaForTesting([&] { run_loop.Quit(); })); - run_loop.Run(); - content::RunAllTasksUntilIdle(); + FlushShortcutTasks(); after_state_change_action_state_ = ConstructStateSnapshot(); MaybeWaitForManifestUpdates(); } @@ -1181,8 +1226,9 @@ } GURL WebAppIntegrationTestDriver::GetAppStartURL(const std::string& site_mode) { - DCHECK(g_site_mode_to_path.contains(site_mode)); - auto scope_url_path = g_site_mode_to_path.find(site_mode)->second; + DCHECK(g_site_mode_to_relative_scope_url.contains(site_mode)); + auto scope_url_path = + g_site_mode_to_relative_scope_url.find(site_mode)->second; return embedded_test_server()->GetURL( base::StringPrintf("/web_apps/%s/basic.html", scope_url_path.c_str())); } @@ -1274,19 +1320,6 @@ return std::make_unique<StateSnapshot>(std::move(profile_state_map)); } -GURL WebAppIntegrationTestDriver::GetAppURLForManifest( - const std::string& site_mode, - DisplayMode display_mode) { - DCHECK(g_site_mode_to_path.contains(site_mode)); - auto scope_url_path = g_site_mode_to_path.find(site_mode)->second; - std::string str_template = "/web_apps/%s/basic.html"; - if (display_mode == blink::mojom::DisplayMode::kMinimalUi) { - str_template += "?manifest=manifest_minimal_ui.json"; - } - return embedded_test_server()->GetURL( - base::StringPrintf(str_template.c_str(), scope_url_path.c_str())); -} - content::WebContents* WebAppIntegrationTestDriver::GetCurrentTab( Browser* browser) { return browser->tab_strip_model()->GetActiveWebContents(); @@ -1298,8 +1331,9 @@ GURL WebAppIntegrationTestDriver::GetScopeForSiteMode( const std::string& site_mode) { - DCHECK(g_site_mode_to_path.contains(site_mode)); - auto scope_url_path = g_site_mode_to_path.find(site_mode)->second; + DCHECK(g_site_mode_to_relative_scope_url.contains(site_mode)); + auto scope_url_path = + g_site_mode_to_relative_scope_url.find(site_mode)->second; return embedded_test_server()->GetURL( base::StringPrintf("/web_apps/%s/", scope_url_path.c_str())); } @@ -1395,12 +1429,12 @@ ASSERT_TRUE(app_state.has_value()); auto app_id = app_state->id; active_app_id_ = app_id; + app_ids_with_pending_manifest_updates_.insert(app_id); // Manifest updates must occur as the first navigation after a webapp is // installed, otherwise the throttle is tripped. ASSERT_FALSE(provider()->manifest_update_manager().IsUpdateConsumed(app_id)); NavigateTabbedBrowserToSite(app_url_with_manifest_param); - app_ids_with_pending_manifest_updates_.insert(app_id); } void WebAppIntegrationTestDriver::MaybeWaitForManifestUpdates() {
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h index 743271d..7aa15ea 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
@@ -158,6 +158,7 @@ void NavigateNotfoundUrl(); void NavigateTabbedBrowserToSite(const GURL& url); void ManifestUpdateDisplayMinimal(const std::string& site_mode); + void ManifestUpdateScopeSiteAFooTo(const std::string& scope_mode); void SetOpenInTab(const std::string& site_mode); void SetOpenInWindow(const std::string& site_mode); void SwitchProfileClients(const std::string& client_mode); @@ -213,8 +214,6 @@ std::unique_ptr<StateSnapshot> ConstructStateSnapshot(); - GURL GetAppURLForManifest(const std::string& site_mode, - DisplayMode display_mode); content::WebContents* GetCurrentTab(Browser* browser); GURL GetInScopeURL(const std::string& site_mode); GURL GetScopeForSiteMode(const std::string& site_mode);
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc index 877f940..6b94a0d 100644 --- a/chrome/browser/ui/web_applications/web_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -66,6 +66,7 @@ #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/browser/web_applications/web_application_info.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" @@ -1911,6 +1912,7 @@ } } #elif defined(OS_MAC) + std::vector<GURL> test_file_urls; for (auto extension : expected_extensions) { const base::FilePath test_file_path = shortcut_override->chrome_apps_folder.GetPath().AppendASCII("test." + @@ -1918,11 +1920,34 @@ const base::File test_file(test_file_path, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); const GURL test_file_url = net::FilePathToFileURL(test_file_path); + test_file_urls.push_back(test_file_url); EXPECT_EQ(u"Manifest with file handlers", shell_integration::GetApplicationNameForProtocol(test_file_url)) << "The default app to open the file is wrong. " << "File extension: " + extension; } + + // Simulate the user permanently denying file handling permission. Regression + // test for crbug.com/1269387 + base::RunLoop run_loop_remove_file_handlers; + PersistFileHandlersUserChoice(browser()->profile(), app_id, /*allowed=*/false, + run_loop_remove_file_handlers.QuitClosure()); + run_loop_remove_file_handlers.Run(); + + for (const auto& test_file_url : test_file_urls) { + // The system update is asynchronous (i.e. + // `LSCopyDefaultApplicationURLForURL()` won't immediately return the + // updated value), so unfortunately we must poll. If the unregistration of + // the file handlers failed, the test will time out. + while (u"Manifest with file handlers" == + shell_integration::GetApplicationNameForProtocol(test_file_url)) { + base::RunLoop delay_loop; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, delay_loop.QuitClosure(), base::Milliseconds(100)); + delay_loop.Run(); + } + } + ASSERT_TRUE(shortcut_override->chrome_apps_folder.Delete()); #endif
diff --git a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc index 5cb271f..1c1deea 100644 --- a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc +++ b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc
@@ -386,9 +386,12 @@ retval.Set("gpo", std::move(gpo_dict)); auto ieem_dict = RuleSetToDict(*service->sitelist()->GetIeemSitelist()); retval.Set("ieem", std::move(ieem_dict)); - auto external_dict = + auto external_sitelist_dict = RuleSetToDict(*service->sitelist()->GetExternalSitelist()); - retval.Set("external", std::move(external_dict)); + retval.Set("external_sitelist", std::move(external_sitelist_dict)); + auto external_greylist_dict = + RuleSetToDict(*service->sitelist()->GetExternalGreylist()); + retval.Set("external_greylist", std::move(external_greylist_dict)); ResolveJavascriptCallback(args->GetList()[0], retval); }
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 6e50c9b..fab668d 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -229,24 +229,6 @@ network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';"); } -void AddGestureNavigationResources(content::WebUIDataSource* source) { - source->AddResourcePath("gesture_go_home.json", - IDR_GESTURE_NAVIGATION_GO_HOME_ANIMATION); - source->AddResourcePath("gesture_go_back.json", - IDR_GESTURE_NAVIGATION_GO_BACK_ANIMATION); - source->AddResourcePath("gesture_hotseat_overview.json", - IDR_GESTURE_NAVIGATION_HOTSEAT_OVERVIEW_ANIMATION); - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';"); -} - -void AddMarketingOptInResources(content::WebUIDataSource* source) { - source->AddResourcePath("all_set.json", - IDR_MARKETING_OPT_IN_ALL_SET_ANIMATION); - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';"); -} - void AddMultiDeviceSetupResources(content::WebUIDataSource* source) { source->AddResourcePath("multidevice_setup_light.json", IDR_MULTIDEVICE_SETUP_ANIMATION_LIGHT); @@ -256,11 +238,6 @@ network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';"); } -void AddAppDownloadingResources(content::WebUIDataSource* source) { - source->AddResourcePath("downloading_apps.json", - IDR_APPS_DOWNLOADING_ANIMATION); -} - void AddDebuggerResources(content::WebUIDataSource* source) { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); bool enable_debugger = @@ -364,10 +341,7 @@ AddSyncConsentResources(source); AddArcScreensResources(source); AddAssistantScreensResources(source); - AddGestureNavigationResources(source); - AddMarketingOptInResources(source); AddMultiDeviceSetupResources(source); - AddAppDownloadingResources(source); AddDebuggerResources(source); AddTestAPIResources(source); @@ -719,8 +693,6 @@ IDR_OOBE_COMPONENTS_OOBE_CUSTOM_VARS_CSS_M_JS); } - source->AddResourcePath("welcome_screen_animation.json", - IDR_LOGIN_WELCOME_SCREEN_ANIMATION); source->AddResourcePath("spinner.json", IDR_LOGIN_SPINNER_ANIMATION); source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';");
diff --git a/chrome/browser/ui/webui/chromeos/smb_shares/OWNERS b/chrome/browser/ui/webui/chromeos/smb_shares/OWNERS index 5189b388..73220a8 100644 --- a/chrome/browser/ui/webui/chromeos/smb_shares/OWNERS +++ b/chrome/browser/ui/webui/chromeos/smb_shares/OWNERS
@@ -1 +1 @@ -khorimoto@chromium.org +file://ui/file_manager/OWNERS
diff --git a/chrome/browser/ui/webui/nearby_internals/quick_pair/quick_pair_handler.cc b/chrome/browser/ui/webui/nearby_internals/quick_pair/quick_pair_handler.cc index 98d267c..bfe10cd 100644 --- a/chrome/browser/ui/webui/nearby_internals/quick_pair/quick_pair_handler.cc +++ b/chrome/browser/ui/webui/nearby_internals/quick_pair/quick_pair_handler.cc
@@ -3874,7 +3874,7 @@ void QuickPairHandler::OnImageDecodedFastPairPairing(gfx::Image image) { fast_pair_notification_controller_->ShowPairingNotification( - kTestDeviceName, image, base::DoNothing(), base::DoNothing()); + kTestDeviceName, image, base::DoNothing()); } void QuickPairHandler::NotifyFastPairAssociateAccountKey(
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index e231cb04..6ea0dc3 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -346,19 +346,18 @@ // TODO(https://crbug.com/1205147): In case of reauth, wait until cookies // are set before opening a browser window. profiles::OpenBrowserWindowForProfile( - base::BindRepeating( + base::BindOnce( &InlineSigninHelper::OnClientOAuthSuccessAndBrowserOpened, base::Unretained(this), result), true, false, true, profile_, create_status_); } else { - OnClientOAuthSuccessAndBrowserOpened(result, profile_, create_status_); + OnClientOAuthSuccessAndBrowserOpened(result, profile_); } } void InlineSigninHelper::OnClientOAuthSuccessAndBrowserOpened( const ClientOAuthResult& result, - Profile* /*profile*/, - Profile::CreateStatus /*status*/) { + Profile* /*profile*/) { HandlerSigninReason reason = GetHandlerSigninReason(current_url_); if (reason == HandlerSigninReason::kFetchLstOnly) { // Constants are only available on Windows for the Google Credential
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h index 36606581..0447df3 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
@@ -160,8 +160,7 @@ override; void OnClientOAuthSuccessAndBrowserOpened(const ClientOAuthResult& result, - Profile* profile, - Profile::CreateStatus status); + Profile* profile); // Callback invoked once the user has responded to the signin confirmation UI. // If confirmed is false, the signin is aborted.
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index 26d60334..8651d82 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -546,8 +546,8 @@ } profiles::SwitchToProfile( *profile_path, /*always_create=*/false, - base::BindRepeating(&ProfilePickerHandler::OnSwitchToProfileComplete, - weak_factory_.GetWeakPtr(), false, open_settings)); + base::BindOnce(&ProfilePickerHandler::OnSwitchToProfileComplete, + weak_factory_.GetWeakPtr(), false, open_settings)); } void ProfilePickerHandler::HandleLaunchGuestProfile( @@ -555,8 +555,8 @@ // TODO(crbug.com/1063856): Add check |IsGuestModeEnabled| once policy // checking has been added to the UI. profiles::SwitchToGuestProfile( - base::BindRepeating(&ProfilePickerHandler::OnSwitchToProfileComplete, - weak_factory_.GetWeakPtr(), false, false)); + base::BindOnce(&ProfilePickerHandler::OnSwitchToProfileComplete, + weak_factory_.GetWeakPtr(), false, false)); } void ProfilePickerHandler::HandleAskOnStartupChanged( @@ -703,8 +703,8 @@ // flow. profiles::SwitchToProfile( *profile_path, /*always_create=*/false, - base::BindRepeating(&ProfilePickerHandler::OnSwitchToProfileComplete, - weak_factory_.GetWeakPtr(), false, false)); + base::BindOnce(&ProfilePickerHandler::OnSwitchToProfileComplete, + weak_factory_.GetWeakPtr(), false, false)); } void ProfilePickerHandler::HandleCancelProfileSwitch( @@ -766,8 +766,8 @@ RecordNewProfileSpec(profile_color, create_shortcut); // Launch profile and close the picker. profiles::OpenBrowserWindowForProfile( - base::BindRepeating(&ProfilePickerHandler::OnSwitchToProfileComplete, - weak_factory_.GetWeakPtr(), true, false), + base::BindOnce(&ProfilePickerHandler::OnSwitchToProfileComplete, + weak_factory_.GetWeakPtr(), true, false), false, // Don't create a window if one already exists. true, // Create a first run window. false, // There is no need to unblock all extensions because we only open @@ -931,14 +931,11 @@ FireWebUIListener("load-signin-finished", base::Value(success)); } -void ProfilePickerHandler::OnSwitchToProfileComplete( - bool new_profile, - bool open_settings, - Profile* profile, - Profile::CreateStatus profile_create_status) { - TRACE_EVENT2("browser", "ProfilePickerHandler::OnSwitchToProfileComplete", - "profile_path", profile->GetPath().AsUTF8Unsafe(), - "create_status", profile_create_status); +void ProfilePickerHandler::OnSwitchToProfileComplete(bool new_profile, + bool open_settings, + Profile* profile) { + TRACE_EVENT1("browser", "ProfilePickerHandler::OnSwitchToProfileComplete", + "profile_path", profile->GetPath().AsUTF8Unsafe()); Browser* browser = chrome::FindAnyBrowser(profile, false); DCHECK(browser); DCHECK(browser->window());
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.h b/chrome/browser/ui/webui/signin/profile_picker_handler.h index f2e2c8d..85a4a25 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.h +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.h
@@ -103,8 +103,7 @@ profiles::ProfileCategoryStats result); void OnSwitchToProfileComplete(bool new_profile, bool open_settings, - Profile* profile, - Profile::CreateStatus profile_create_status); + Profile* profile); void OnProfileCreated(absl::optional<SkColor> profile_color, bool create_shortcut, Profile* profile,
diff --git a/chrome/browser/ui/webui/signin/signin_error_handler.cc b/chrome/browser/ui/webui/signin/signin_error_handler.cc index 1458db0b..c8fd992 100644 --- a/chrome/browser/ui/webui/signin/signin_error_handler.cc +++ b/chrome/browser/ui/webui/signin/signin_error_handler.cc
@@ -65,8 +65,7 @@ // Switch to the existing duplicate profile. Do not create a new window when // any existing ones can be reused. - profiles::SwitchToProfile(path_switching_to, false, - ProfileManager::CreateCallback()); + profiles::SwitchToProfile(path_switching_to, false); } void SigninErrorHandler::HandleConfirm(const base::ListValue* args) {
diff --git a/chrome/browser/web_applications/os_integration_manager.cc b/chrome/browser/web_applications/os_integration_manager.cc index 754742e..7991b01 100644 --- a/chrome/browser/web_applications/os_integration_manager.cc +++ b/chrome/browser/web_applications/os_integration_manager.cc
@@ -287,8 +287,7 @@ UpdateFileHandlers(app_id, file_handlers_need_os_update, base::BindOnce(barrier->CreateBarrierCallbackForType( - OsHookType::kFileHandlers), - Result::kOk)); + OsHookType::kFileHandlers))); UpdateShortcuts(app_id, old_name, base::BindOnce(barrier->CreateBarrierCallbackForType( OsHookType::kShortcuts), @@ -626,19 +625,13 @@ void OsIntegrationManager::UpdateFileHandlers( const AppId& app_id, FileHandlerUpdateAction file_handlers_need_os_update, - base::OnceClosure finished_callback) { + ResultCallback finished_callback) { if (!IsFileHandlingAPIAvailable(app_id) || file_handlers_need_os_update == FileHandlerUpdateAction::kNoUpdate) { - std::move(finished_callback).Run(); + std::move(finished_callback).Run(Result::kOk); return; } - // Convert `finished_callback` to a format that takes a Result. - auto finished_callback_with_Result = - base::BindOnce([](base::OnceClosure finished_callback, - Result result) { std::move(finished_callback).Run(); }, - std::move(finished_callback)); - ResultCallback callback_after_removal; if (file_handlers_need_os_update == FileHandlerUpdateAction::kUpdate) { callback_after_removal = base::BindOnce( @@ -655,11 +648,10 @@ os_integration_manager->RegisterFileHandlers( app_id, std::move(finished_callback)); }, - weak_ptr_factory_.GetWeakPtr(), app_id, - std::move(finished_callback_with_Result)); + weak_ptr_factory_.GetWeakPtr(), app_id, std::move(finished_callback)); } else { DCHECK_EQ(file_handlers_need_os_update, FileHandlerUpdateAction::kRemove); - callback_after_removal = std::move(finished_callback_with_Result); + callback_after_removal = std::move(finished_callback); } // Update file handlers via complete uninstallation, then potential
diff --git a/chrome/browser/web_applications/os_integration_manager.h b/chrome/browser/web_applications/os_integration_manager.h index 7654a8c..0ceec322 100644 --- a/chrome/browser/web_applications/os_integration_manager.h +++ b/chrome/browser/web_applications/os_integration_manager.h
@@ -190,7 +190,7 @@ virtual void UpdateFileHandlers( const AppId& app_id, FileHandlerUpdateAction file_handlers_need_os_update, - base::OnceClosure finished_callback); + ResultCallback finished_callback); // Updates protocol handler registrations with the OS. // If `force_shortcut_updates_if_needed` is true, then also update the @@ -199,6 +199,10 @@ bool force_shortcut_updates_if_needed, base::OnceClosure callback); + virtual void UpdateShortcuts(const AppId& app_id, + base::StringPiece old_name, + base::OnceClosure callback); + // AppRegistrarObserver: void OnWebAppProfileWillBeDeleted(const AppId& app_id) override; @@ -270,9 +274,6 @@ virtual void UnregisterWebAppOsUninstallation(const AppId& app_id); // Update: - virtual void UpdateShortcuts(const AppId& app_id, - base::StringPiece old_name, - base::OnceClosure callback); virtual void UpdateShortcutsMenu(const AppId& app_id, const WebAppInstallInfo& web_app_info);
diff --git a/chrome/browser/web_applications/test/mock_os_integration_manager.h b/chrome/browser/web_applications/test/mock_os_integration_manager.h index d66da836..d24fd50 100644 --- a/chrome/browser/web_applications/test/mock_os_integration_manager.h +++ b/chrome/browser/web_applications/test/mock_os_integration_manager.h
@@ -113,7 +113,7 @@ UpdateFileHandlers, (const AppId& app_id, FileHandlerUpdateAction file_handlers_need_os_update, - base::OnceClosure finished_callback), + ResultCallback finished_callback), (override)); MOCK_METHOD(void, UpdateShortcuts,
diff --git a/chrome/browser/web_applications/web_app_icon_manager.cc b/chrome/browser/web_applications/web_app_icon_manager.cc index 3705b96..2fce05b 100644 --- a/chrome/browser/web_applications/web_app_icon_manager.cc +++ b/chrome/browser/web_applications/web_app_icon_manager.cc
@@ -43,7 +43,7 @@ // If we weren't generating multithreaded errors we would just append the errors // to WebAppIconManager::error_log() directly. template <typename T> -struct Result { +struct TypedResult { T value = T(); std::vector<std::string> error_log; @@ -62,11 +62,11 @@ } // This is not a method on WebAppIconManager to avoid having to expose -// Result<T> beyond this cc file. +// TypedResult<T> beyond this cc file. template <typename T> void LogErrorsCallCallback(base::WeakPtr<WebAppIconManager> manager, base::OnceCallback<void(T)> callback, - Result<T> result) { + TypedResult<T> result) { if (!manager) return; @@ -87,16 +87,6 @@ SquareSizePx size; }; -Result<bool> CreateDirectory(scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& path) { - if (!utils->CreateDirectory(path)) { - return {.error_log = {CreateError( - {"Could not create directory: ", path.AsUTF8Unsafe()})}}; - } - - return {.value = true}; -} - // This is a private implementation detail of WebAppIconManager, where and how // to store icon files. // `app_manifest_resources_directory` is the path to the app-specific @@ -161,257 +151,6 @@ return base::NumberToString(base::PersistentHash(url.spec())); } -Result<bool> WriteIcon(scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& icons_dir, - const SkBitmap& bitmap) { - DCHECK_NE(bitmap.colorType(), kUnknown_SkColorType); - DCHECK_EQ(bitmap.width(), bitmap.height()); - base::FilePath icon_file = - icons_dir.AppendASCII(base::StringPrintf("%i.png", bitmap.width())); - - std::vector<unsigned char> image_data; - const bool discard_transparency = false; - if (!gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, discard_transparency, - &image_data)) { - return {.error_log = {CreateError({"Could not encode icon data for file ", - icon_file.AsUTF8Unsafe()})}}; - } - - const char* image_data_ptr = reinterpret_cast<const char*>(&image_data[0]); - int size = base::checked_cast<int>(image_data.size()); - if (utils->WriteFile(icon_file, image_data_ptr, size) != size) { - return {.error_log = {CreateError( - {"Could not write icon file: ", icon_file.AsUTF8Unsafe()})}}; - } - - return {.value = true}; -} - -Result<bool> WriteProductIcons(scoped_refptr<FileUtilsWrapper> utils, - const IconBitmaps& icon_bitmaps, - const base::FilePath& base_dir) { - for (IconPurpose purpose : kIconPurposes) { - base::FilePath icons_dir = GetProductIconsDirectory(base_dir, purpose); - - auto create_result = CreateDirectory(utils, icons_dir); - if (create_result.HasErrors()) - return create_result; - - for (const std::pair<const SquareSizePx, SkBitmap>& icon_bitmap : - icon_bitmaps.GetBitmapsForPurpose(purpose)) { - Result<bool> write_result = - WriteIcon(utils, icons_dir, icon_bitmap.second); - if (write_result.HasErrors()) - return write_result; - } - } - - return {.value = true}; -} - -// Writes shortcuts menu icons files to the Shortcut Icons directory. Creates a -// new directory per shortcut item using its index in the vector. -Result<bool> WriteShortcutsMenuIcons( - scoped_refptr<FileUtilsWrapper> utils, - const ShortcutsMenuIconBitmaps& shortcuts_menu_icon_bitmaps, - const base::FilePath& app_manifest_resources_directory) { - for (IconPurpose purpose : kIconPurposes) { - const base::FilePath shortcuts_menu_icons_dir = - app_manifest_resources_directory.Append( - GetAppShortcutsMenuIconsRelativeDirectory(purpose)); - auto create_result = CreateDirectory(utils, shortcuts_menu_icons_dir); - if (create_result.HasErrors()) - return create_result; - - int shortcut_index = -1; - for (const IconBitmaps& icon_bitmaps : shortcuts_menu_icon_bitmaps) { - ++shortcut_index; - const std::map<SquareSizePx, SkBitmap>& bitmaps = - icon_bitmaps.GetBitmapsForPurpose(purpose); - if (bitmaps.empty()) - continue; - - const base::FilePath shortcuts_menu_icon_dir = - shortcuts_menu_icons_dir.AppendASCII( - base::NumberToString(shortcut_index)); - create_result = CreateDirectory(utils, shortcuts_menu_icon_dir); - if (create_result.HasErrors()) - return create_result; - - for (const std::pair<const SquareSizePx, SkBitmap>& icon_bitmap : - bitmaps) { - Result<bool> write_result = - WriteIcon(utils, shortcuts_menu_icon_dir, icon_bitmap.second); - if (write_result.HasErrors()) - return write_result; - } - } - } - return {.value = true}; -} - -Result<bool> WriteOtherIcons( - scoped_refptr<FileUtilsWrapper> utils, - const IconsMap& other_icons, - const base::FilePath& app_manifest_resources_directory) { - const base::FilePath general_icons_dir = - app_manifest_resources_directory.Append(GetOtherIconsRelativeDirectory()); - auto create_result = CreateDirectory(utils, general_icons_dir); - if (create_result.HasErrors()) - return create_result; - - for (const std::pair<const GURL, std::vector<SkBitmap>>& entry : - other_icons) { - const base::FilePath subdir = - general_icons_dir.AppendASCII(GetDirectoryNameForUrl(entry.first)); - create_result = CreateDirectory(utils, subdir); - if (create_result.HasErrors()) - return create_result; - - const std::vector<SkBitmap>& icon_bitmaps = entry.second; - for (const SkBitmap& icon_bitmap : icon_bitmaps) { - Result<bool> write_result = WriteIcon(utils, subdir, icon_bitmap); - if (write_result.HasErrors()) - return write_result; - } - } - return {.value = true}; -} - -// Performs blocking I/O. Returns true if no errors occurred. This is used for -// several kinds of icon data. The passed callbacks allow for varying the -// implementation based on data type. `write_icons_callback` writes the icons -// data under the passed base directory. `subdir_for_icons` is a relative -// FilePath representing a directory which holds all the data written by -// `write_icons_callback`. The path is relative to the app's manifest resources -// directory. -Result<bool> WriteIconsDataBlocking( - scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const AppId& app_id, - const base::RepeatingCallback<Result<bool>(const base::FilePath& path)>& - write_icons_callback, - const base::FilePath& subdir_for_icons) { - DCHECK(!subdir_for_icons.IsAbsolute()); - // Create the temp directory under the web apps root. - // This guarantees it is on the same file system as the WebApp's eventual - // install target. - base::FilePath temp_dir = GetWebAppsTempDirectory(web_apps_directory); - Result<bool> create_result = CreateDirectory(utils, temp_dir); - if (create_result.HasErrors()) - return create_result; - - base::ScopedTempDir app_temp_dir; - if (!app_temp_dir.CreateUniqueTempDirUnderPath(temp_dir)) { - return { - .error_log = {CreateError({"Could not create temp directory under: ", - temp_dir.AsUTF8Unsafe()})}}; - } - - base::FilePath manifest_resources_directory = - GetManifestResourcesDirectory(web_apps_directory); - create_result = CreateDirectory(utils, manifest_resources_directory); - if (create_result.HasErrors()) - return create_result; - - Result<bool> write_result = write_icons_callback.Run(app_temp_dir.GetPath()); - if (write_result.HasErrors()) - return write_result; - - base::FilePath app_dir = - GetManifestResourcesDirectoryForApp(web_apps_directory, app_id); - base::FilePath final_icons_dir = app_dir.Append(subdir_for_icons); - // Create app_dir if it doesn't already exist. We'll need this for - // WriteShortcutsMenuIconsData unittests. - if (final_icons_dir != app_dir) { - create_result = CreateDirectory(utils, app_dir); - if (create_result.HasErrors()) - return create_result; - } - - // Delete the destination. Needed for update. Ignore the result. - utils->DeleteFileRecursively(final_icons_dir); - - base::FilePath temp_icons_dir = - app_temp_dir.GetPath().Append(subdir_for_icons); - // Commit: move whole icons data dir to final destination in one mv - // operation. - if (!utils->Move(temp_icons_dir, final_icons_dir)) { - return {.error_log = { - CreateError({"Could not move: ", temp_icons_dir.AsUTF8Unsafe(), - " to: ", final_icons_dir.AsUTF8Unsafe()})}}; - } - - return {.value = true}; -} - -Result<bool> WriteProductIconsDataBlocking( - scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const AppId& app_id, - const IconBitmaps& icon_bitmaps) { - auto write_icons_callback = - base::BindRepeating(&WriteProductIcons, utils, icon_bitmaps); - // Place product icons directly in the app's directory. - base::FilePath subdir_for_icons; - return WriteIconsDataBlocking(utils, web_apps_directory, app_id, - write_icons_callback, subdir_for_icons); -} - -Result<bool> WriteShortcutsMenuIconsDataBlocking( - scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const AppId& app_id, - const ShortcutsMenuIconBitmaps& shortcuts_menu_icon_bitmaps) { - auto write_icons_callback = base::BindRepeating( - &WriteShortcutsMenuIcons, utils, shortcuts_menu_icon_bitmaps); - base::FilePath subdir_for_icons = - GetAppShortcutsMenuIconsRelativeDirectory(IconPurpose::ANY); - - return WriteIconsDataBlocking(utils, web_apps_directory, app_id, - write_icons_callback, subdir_for_icons); -} - -Result<bool> WriteOtherIconsDataBlocking( - scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const AppId& app_id, - const IconsMap& other_icons) { - auto write_icons_callback = - base::BindRepeating(&WriteOtherIcons, utils, other_icons); - base::FilePath subdir_for_icons = GetOtherIconsRelativeDirectory(); - - return WriteIconsDataBlocking(utils, web_apps_directory, app_id, - write_icons_callback, subdir_for_icons); -} - -Result<bool> WriteDataBlocking( - scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const AppId& app_id, - const IconBitmaps& icon_bitmaps, - const ShortcutsMenuIconBitmaps& shortcuts_menu_icon_bitmaps, - const IconsMap& other_icons) { - auto result = WriteProductIconsDataBlocking(utils, web_apps_directory, app_id, - icon_bitmaps); - if (result.HasErrors()) - return result; - - if (!shortcuts_menu_icon_bitmaps.empty()) { - result = WriteShortcutsMenuIconsDataBlocking( - utils, web_apps_directory, app_id, shortcuts_menu_icon_bitmaps); - if (result.HasErrors()) - return result; - } - - if (!other_icons.empty()) { - result = WriteOtherIconsDataBlocking(utils, web_apps_directory, app_id, - other_icons); - } - - return result; -} - // Performs blocking I/O. May be called on another thread. // Returns true if no errors occurred. bool DeleteDataBlocking(scoped_refptr<FileUtilsWrapper> utils, @@ -455,9 +194,9 @@ // Performs blocking I/O. May be called on another thread. // Returns empty SkBitmap if any errors occurred. -Result<SkBitmap> ReadIconBlocking(scoped_refptr<FileUtilsWrapper> utils, - const base::FilePath& web_apps_directory, - const IconId& icon_id) { +TypedResult<SkBitmap> ReadIconBlocking(scoped_refptr<FileUtilsWrapper> utils, + const base::FilePath& web_apps_directory, + const IconId& icon_id) { base::FilePath icon_file = GetIconFileName(web_apps_directory, icon_id); auto icon_data = base::MakeRefCounted<base::RefCountedString>(); @@ -467,7 +206,7 @@ {"Could not read icon file: ", icon_file.AsUTF8Unsafe()})}}; } - Result<SkBitmap> result; + TypedResult<SkBitmap> result; if (!gfx::PNGCodec::Decode(icon_data->front(), icon_data->size(), &result.value)) { @@ -480,7 +219,7 @@ // Performs blocking I/O. May be called on another thread. // Returns empty SkBitmap if any errors occurred. -Result<SkBitmap> ReadShortcutsMenuIconBlocking( +TypedResult<SkBitmap> ReadShortcutsMenuIconBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const AppId& app_id, @@ -497,7 +236,7 @@ {"Could not read icon file: ", icon_file.AsUTF8Unsafe()})}}; } - Result<SkBitmap> result; + TypedResult<SkBitmap> result; if (!gfx::PNGCodec::Decode( reinterpret_cast<const unsigned char*>(icon_data.c_str()), @@ -511,14 +250,14 @@ // Performs blocking I/O. May be called on another thread. // Returns empty map if any errors occurred. -Result<std::map<SquareSizePx, SkBitmap>> ReadIconAndResizeBlocking( +TypedResult<std::map<SquareSizePx, SkBitmap>> ReadIconAndResizeBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const IconId& icon_id, SquareSizePx target_icon_size_px) { - Result<std::map<SquareSizePx, SkBitmap>> result; + TypedResult<std::map<SquareSizePx, SkBitmap>> result; - Result<SkBitmap> read_result = + TypedResult<SkBitmap> read_result = ReadIconBlocking(utils, web_apps_directory, icon_id); if (read_result.HasErrors()) return {.error_log = std::move(read_result.error_log)}; @@ -539,17 +278,17 @@ } // Performs blocking I/O. May be called on another thread. -Result<std::map<SquareSizePx, SkBitmap>> ReadIconsBlocking( +TypedResult<std::map<SquareSizePx, SkBitmap>> ReadIconsBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const AppId& app_id, IconPurpose purpose, const std::vector<SquareSizePx>& icon_sizes) { - Result<std::map<SquareSizePx, SkBitmap>> result; + TypedResult<std::map<SquareSizePx, SkBitmap>> result; for (SquareSizePx icon_size_px : icon_sizes) { IconId icon_id(app_id, purpose, icon_size_px); - Result<SkBitmap> read_result = + TypedResult<SkBitmap> read_result = ReadIconBlocking(utils, web_apps_directory, icon_id); read_result.DepositErrorLog(result.error_log); if (!read_result.value.empty()) @@ -559,16 +298,16 @@ return result; } -Result<IconBitmaps> ReadAllIconsBlocking( +TypedResult<IconBitmaps> ReadAllIconsBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const AppId& app_id, const std::map<IconPurpose, std::vector<SquareSizePx>>& icon_purposes_to_sizes) { - Result<IconBitmaps> result; + TypedResult<IconBitmaps> result; for (const auto& purpose_sizes : icon_purposes_to_sizes) { - Result<std::map<SquareSizePx, SkBitmap>> read_result = + TypedResult<std::map<SquareSizePx, SkBitmap>> read_result = ReadIconsBlocking(utils, web_apps_directory, app_id, purpose_sizes.first, purpose_sizes.second); read_result.DepositErrorLog(result.error_log); @@ -580,12 +319,12 @@ } // Performs blocking I/O. May be called on another thread. -Result<ShortcutsMenuIconBitmaps> ReadShortcutsMenuIconsBlocking( +TypedResult<ShortcutsMenuIconBitmaps> ReadShortcutsMenuIconsBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const AppId& app_id, const std::vector<IconSizes>& shortcuts_menu_icons_sizes) { - Result<ShortcutsMenuIconBitmaps> results; + TypedResult<ShortcutsMenuIconBitmaps> results; int curr_index = 0; for (const auto& icon_sizes : shortcuts_menu_icons_sizes) { IconBitmaps result; @@ -594,7 +333,7 @@ std::map<SquareSizePx, SkBitmap> bitmaps; for (SquareSizePx icon_size_px : icon_sizes.GetSizesForPurpose(purpose)) { - Result<SkBitmap> read_result = + TypedResult<SkBitmap> read_result = ReadShortcutsMenuIconBlocking(utils, web_apps_directory, app_id, purpose, curr_index, icon_size_px); read_result.DepositErrorLog(results.error_log); @@ -616,7 +355,7 @@ // Performs blocking I/O. May be called on another thread. // Returns empty vector if any errors occurred. -Result<std::vector<uint8_t>> ReadCompressedIconBlocking( +TypedResult<std::vector<uint8_t>> ReadCompressedIconBlocking( scoped_refptr<FileUtilsWrapper> utils, const base::FilePath& web_apps_directory, const IconId& icon_id) { @@ -690,6 +429,269 @@ std::move(callback).Run(std::move(data)); } +// A utility that manages writing icons to disk for a single app. Should only be +// used on an I/O thread. +class WriteIconsJob { + public: + static TypedResult<bool> WriteIconsBlocking( + scoped_refptr<FileUtilsWrapper> utils, + base::FilePath&& web_apps_directory, + AppId&& app_id, + IconBitmaps&& icon_bitmaps, + ShortcutsMenuIconBitmaps&& shortcuts_menu_icon_bitmaps, + IconsMap&& other_icons) { + WriteIconsJob job(std::move(utils), std::move(web_apps_directory), + std::move(app_id), std::move(icon_bitmaps), + std::move(shortcuts_menu_icon_bitmaps), + std::move(other_icons)); + return job.Execute(); + } + + WriteIconsJob(const WriteIconsJob& other) = delete; + WriteIconsJob& operator=(const WriteIconsJob& other) = delete; + + private: + WriteIconsJob(scoped_refptr<FileUtilsWrapper> utils, + base::FilePath&& web_apps_directory, + AppId&& app_id, + IconBitmaps&& icon_bitmaps, + ShortcutsMenuIconBitmaps&& shortcuts_menu_icon_bitmaps, + IconsMap&& other_icons) + : utils_(utils), + web_apps_directory_(std::move(web_apps_directory)), + app_id_(std::move(app_id)), + icon_bitmaps_(std::move(icon_bitmaps)), + shortcuts_menu_icon_bitmaps_(std::move(shortcuts_menu_icon_bitmaps)), + other_icons_(std::move(other_icons)) {} + ~WriteIconsJob() = default; + + TypedResult<bool> Execute() { + // Write product icons directly in the app's directory. + auto result = AtomicallyWriteIcons( + base::BindRepeating(&WriteIconsJob::WriteProductIcons, + base::Unretained(this)), + /*subdir_for_icons=*/{}); + if (result.HasErrors()) + return result; + + if (!shortcuts_menu_icon_bitmaps_.empty()) { + result = AtomicallyWriteIcons( + base::BindRepeating(&WriteIconsJob::WriteShortcutsMenuIcons, + base::Unretained(this)), + /*subdir_for_icons=*/GetAppShortcutsMenuIconsRelativeDirectory( + IconPurpose::ANY)); + + if (result.HasErrors()) + return result; + } + + if (!other_icons_.empty()) { + result = AtomicallyWriteIcons( + base::BindRepeating(&WriteIconsJob::WriteOtherIcons, + base::Unretained(this)), + /*subdir_for_icons=*/ + GetOtherIconsRelativeDirectory()); + } + + return result; + } + + // Manages writing a set of icons to a particular location on disk, making a + // best-effort to make it all-or-nothing. Returns true if no errors occurred. + // This is used for several kinds of icon data. The passed callbacks allow for + // varying the implementation based on data type. `write_icons_callback` is + // expected to write the icons data under the passed base directory. + // `subdir_for_icons` is a relative FilePath representing a directory which + // holds all the data written by `write_icons_callback`. The path is relative + // to the app's manifest resources directory. + TypedResult<bool> AtomicallyWriteIcons( + const base::RepeatingCallback< + TypedResult<bool>(const base::FilePath& path)>& write_icons_callback, + const base::FilePath& subdir_for_icons) { + DCHECK(!subdir_for_icons.IsAbsolute()); + // Create the temp directory under the web apps root. + // This guarantees it is on the same file system as the WebApp's eventual + // install target. + base::FilePath temp_dir = GetWebAppsTempDirectory(web_apps_directory_); + TypedResult<bool> create_result = CreateDirectory(temp_dir); + if (create_result.HasErrors()) + return create_result; + + base::ScopedTempDir app_temp_dir; + if (!app_temp_dir.CreateUniqueTempDirUnderPath(temp_dir)) { + return { + .error_log = {CreateError({"Could not create temp directory under: ", + temp_dir.AsUTF8Unsafe()})}}; + } + + base::FilePath manifest_resources_directory = + GetManifestResourcesDirectory(web_apps_directory_); + create_result = CreateDirectory(manifest_resources_directory); + if (create_result.HasErrors()) + return create_result; + + TypedResult<bool> write_result = + write_icons_callback.Run(app_temp_dir.GetPath()); + if (write_result.HasErrors()) + return write_result; + + base::FilePath app_dir = + GetManifestResourcesDirectoryForApp(web_apps_directory_, app_id_); + base::FilePath final_icons_dir = app_dir.Append(subdir_for_icons); + // Create app_dir if it doesn't already exist. We'll need this for + // WriteShortcutsMenuIconsData unittests. + if (final_icons_dir != app_dir) { + create_result = CreateDirectory(app_dir); + if (create_result.HasErrors()) + return create_result; + } + + // Delete the destination. Needed for update. Ignore the result. + utils_->DeleteFileRecursively(final_icons_dir); + + base::FilePath temp_icons_dir = + app_temp_dir.GetPath().Append(subdir_for_icons); + // Commit: move whole icons data dir to final destination in one mv + // operation. + if (!utils_->Move(temp_icons_dir, final_icons_dir)) { + return {.error_log = {CreateError( + {"Could not move: ", temp_icons_dir.AsUTF8Unsafe(), + " to: ", final_icons_dir.AsUTF8Unsafe()})}}; + } + + return {.value = true}; + } + + TypedResult<bool> WriteProductIcons(const base::FilePath& base_dir) { + for (IconPurpose purpose : kIconPurposes) { + base::FilePath icons_dir = GetProductIconsDirectory(base_dir, purpose); + + auto create_result = CreateDirectory(icons_dir); + if (create_result.HasErrors()) + return create_result; + + for (const std::pair<const SquareSizePx, SkBitmap>& icon_bitmap : + icon_bitmaps_.GetBitmapsForPurpose(purpose)) { + TypedResult<bool> write_result = + EncodeAndWriteIcon(icons_dir, icon_bitmap.second); + if (write_result.HasErrors()) + return write_result; + } + } + + return {.value = true}; + } + + // Writes shortcuts menu icons files to the Shortcut Icons directory. Creates + // a new directory per shortcut item using its index in the vector. + TypedResult<bool> WriteShortcutsMenuIcons( + const base::FilePath& app_manifest_resources_directory) { + for (IconPurpose purpose : kIconPurposes) { + const base::FilePath shortcuts_menu_icons_dir = + app_manifest_resources_directory.Append( + GetAppShortcutsMenuIconsRelativeDirectory(purpose)); + auto create_result = CreateDirectory(shortcuts_menu_icons_dir); + if (create_result.HasErrors()) + return create_result; + + int shortcut_index = -1; + for (const IconBitmaps& icon_bitmaps : shortcuts_menu_icon_bitmaps_) { + ++shortcut_index; + const std::map<SquareSizePx, SkBitmap>& bitmaps = + icon_bitmaps.GetBitmapsForPurpose(purpose); + if (bitmaps.empty()) + continue; + + const base::FilePath shortcuts_menu_icon_dir = + shortcuts_menu_icons_dir.AppendASCII( + base::NumberToString(shortcut_index)); + create_result = CreateDirectory(shortcuts_menu_icon_dir); + if (create_result.HasErrors()) + return create_result; + + for (const std::pair<const SquareSizePx, SkBitmap>& icon_bitmap : + bitmaps) { + TypedResult<bool> write_result = + EncodeAndWriteIcon(shortcuts_menu_icon_dir, icon_bitmap.second); + if (write_result.HasErrors()) + return write_result; + } + } + } + return {.value = true}; + } + + TypedResult<bool> WriteOtherIcons( + const base::FilePath& app_manifest_resources_directory) { + const base::FilePath general_icons_dir = + app_manifest_resources_directory.Append( + GetOtherIconsRelativeDirectory()); + auto create_result = CreateDirectory(general_icons_dir); + if (create_result.HasErrors()) + return create_result; + + for (const std::pair<const GURL, std::vector<SkBitmap>>& entry : + other_icons_) { + const base::FilePath subdir = + general_icons_dir.AppendASCII(GetDirectoryNameForUrl(entry.first)); + create_result = CreateDirectory(subdir); + if (create_result.HasErrors()) + return create_result; + + const std::vector<SkBitmap>& icon_bitmaps = entry.second; + for (const SkBitmap& icon_bitmap : icon_bitmaps) { + TypedResult<bool> write_result = + EncodeAndWriteIcon(subdir, icon_bitmap); + if (write_result.HasErrors()) + return write_result; + } + } + return {.value = true}; + } + + TypedResult<bool> CreateDirectory(const base::FilePath& path) { + if (!utils_->CreateDirectory(path)) { + return {.error_log = {CreateError( + {"Could not create directory: ", path.AsUTF8Unsafe()})}}; + } + + return {.value = true}; + } + + // Encodes `bitmap` as a PNG and writes to the given directory. + TypedResult<bool> EncodeAndWriteIcon(const base::FilePath& icons_dir, + const SkBitmap& bitmap) { + DCHECK_NE(bitmap.colorType(), kUnknown_SkColorType); + DCHECK_EQ(bitmap.width(), bitmap.height()); + base::FilePath icon_file = + icons_dir.AppendASCII(base::StringPrintf("%i.png", bitmap.width())); + + std::vector<unsigned char> image_data; + const bool discard_transparency = false; + if (!gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, discard_transparency, + &image_data)) { + return {.error_log = {CreateError({"Could not encode icon data for file ", + icon_file.AsUTF8Unsafe()})}}; + } + + const char* image_data_ptr = reinterpret_cast<const char*>(&image_data[0]); + int size = base::checked_cast<int>(image_data.size()); + if (utils_->WriteFile(icon_file, image_data_ptr, size) != size) { + return {.error_log = {CreateError( + {"Could not write icon file: ", icon_file.AsUTF8Unsafe()})}}; + } + + return {.value = true}; + } + + scoped_refptr<FileUtilsWrapper> utils_; + base::FilePath web_apps_directory_; + AppId app_id_; + IconBitmaps icon_bitmaps_; + ShortcutsMenuIconBitmaps shortcuts_menu_icon_bitmaps_; + IconsMap other_icons_; +}; + } // namespace WebAppIconManager::WebAppIconManager(Profile* profile, @@ -713,10 +715,10 @@ base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, kTaskTraits, - base::BindOnce(WriteDataBlocking, utils_, web_apps_directory_, - std::move(app_id), std::move(icon_bitmaps), - std::move(shortcuts_menu_icon_bitmaps), - std::move(other_icons_map)), + base::BindOnce( + &WriteIconsJob::WriteIconsBlocking, utils_, web_apps_directory_, + std::move(app_id), std::move(icon_bitmaps), + std::move(shortcuts_menu_icon_bitmaps), std::move(other_icons_map)), base::BindOnce(&LogErrorsCallCallback<bool>, weak_ptr_factory_.GetWeakPtr(), std::move(callback))); }
diff --git a/chrome/browser/web_applications/web_app_utils.cc b/chrome/browser/web_applications/web_app_utils.cc index 430c4fc..1beac8b 100644 --- a/chrome/browser/web_applications/web_app_utils.cc +++ b/chrome/browser/web_applications/web_app_utils.cc
@@ -304,9 +304,28 @@ if (allowed) { std::move(update_finished_callback).Run(); } else { +#if defined(OS_MAC) + // On Mac, the file handlers are encoded in the app shortcut. First + // unregister the file handlers (verifying that it finishes synchronously), + // then update the shortcut. + Result unregister_file_handlers_result = Result::kError; provider->os_integration_manager().UpdateFileHandlers( app_id, FileHandlerUpdateAction::kRemove, - std::move(update_finished_callback)); + base::BindOnce( + [](Result* result_out, Result actual_result) { + *result_out = actual_result; + }, + &unregister_file_handlers_result)); + DCHECK_EQ(Result::kOk, unregister_file_handlers_result); + provider->os_integration_manager().UpdateShortcuts( + app_id, /*old_name=*/{}, std::move(update_finished_callback)); +#else + provider->os_integration_manager().UpdateFileHandlers( + app_id, FileHandlerUpdateAction::kRemove, + base::BindOnce([](base::OnceClosure closure, + Result ignored) { std::move(closure).Run(); }, + std::move(update_finished_callback))); +#endif } }
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index fd59a2d..3c115f0 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1641815658-9fcc1c6e86dfdb3c51856011bd5393eb3b079029.profdata +chrome-mac-main-1641837549-99cb88add958b46efe7c3d53cd9d661085911744.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 426cec97..be4531f 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1641826617-d0c055df873d1faff22f6a40c005486a81730562.profdata +chrome-win32-main-1641837549-361f98ecb6281f2e7bebc4bd82add6a2f74c5cd0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 202ee01..0ccc3f96 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1641826617-a3414858ff3187ad1b8fa668983c76c8e5075daa.profdata +chrome-win64-main-1641837549-7817fc87157570aa369eb47c2891f1931937f6d3.profdata
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl index c58183c..8fa3fb9 100644 --- a/chrome/common/extensions/api/autotest_private.idl +++ b/chrome/common/extensions/api/autotest_private.idl
@@ -554,6 +554,25 @@ }; callback WindowBoundsCallback = void (SetWindowBoundsResult result); + // Collected DisplaySmoothness data between startSmoothnessTracking and + // stopSmoothnessTracking calls. + dictionary DisplaySmoothnessData { + // Number of frames expected to be shown for this animation. + long framesExpected; + // Number of frames actually shown for this animation. + long framesProduced; + // Number of janks during this animation. A jank is counted when the current + // frame latency is larger than previous ones. + long jankCount; + // Display throughput percentage at fixed intervals. + long[] throughput; + }; + + // Callback invoked to report the smoothness after StopSmoothnessTracking is + // called. + callback StopSmoothnessTrackingCallback = void + (DisplaySmoothnessData data); + // Collected ui::ThroughputTracker data for one animation. It is based on // cc::FrameSequenceMetrics::ThroughputData. dictionary ThroughputTrackerAnimationData { @@ -566,11 +585,6 @@ long jankCount; }; - // Callback invoked to report the smoothness after StopSmoothnessTracking is - // called. - callback StopSmoothnessTrackingCallback = void - (ThroughputTrackerAnimationData data); - // Callback invoked to report the collection ui::ThroughputTracker data // after stopThroughputTrackerDataCollection is called. callback StopThroughputTrackerDataCollectionCallback = void @@ -1173,9 +1187,11 @@ // Starts smoothness tracking for a display. If the display id is not // specified, the primary display is used. Otherwise, the display specified - // by the display id is used. + // by the display id is used. If `throughputIntervalMs` is not specified, + // default 5 seconds interval is used to collect throughput data. [supportsPromises] static void startSmoothnessTracking( optional DOMString displayId, + optional long throughputIntervalMs, VoidCallback callback); // Stops smoothness tracking for a display and report the smoothness. If
diff --git a/chrome/common/extensions/api/web_authentication_proxy.idl b/chrome/common/extensions/api/web_authentication_proxy.idl index 6b04381..0b4dd53 100644 --- a/chrome/common/extensions/api/web_authentication_proxy.idl +++ b/chrome/common/extensions/api/web_authentication_proxy.idl
@@ -3,8 +3,8 @@ // found in the LICENSE file. // The webAuthenticationProxy API lets remote desktop software running on a -// remote host intercept Web Authentication API requests in order to handle -// them on a local client. +// remote host intercept Web Authentication API (WebAuthn) requests in order to +// handle them on a local client. namespace webAuthenticationProxy { // An object representing a // PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() call. @@ -13,10 +13,29 @@ long requestId; }; + // An object representing a WebAuthn navigator.credentials.create() call. + dictionary CreateRequest { + // An opaque identifier for the request. + long requestId; + + // An JSON serialized representation of the + // PublicKeyCredentialCreationOptions passed to + // navigator.credentials.create(). + // + // TODO(crbug.com/1231802): Reference deserialization method or document + // format. + DOMString requestDetailsJson; + }; + // This interface defines Events that fire when any website makes a WebAuthn - // API request. Regular processing of WebAuthn requests in the local Chrome + // request. Regular processing of WebAuthn requests in the local Chrome // instance is disabled when these events are subscribed to. interface Events { + // Fires when a WebAuthn navigator.credentials.create() call occurs. The + // extension must supply a response by calling + // completeCreateCredentialRequest() with the given requestId. + static void onCreateRequest(CreateRequest requestInfo); + // Fires when a // PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() call // occurs. The extension must supply a response by calling @@ -27,12 +46,37 @@ callback ErrorCallback = void(optional DOMString error); callback VoidCallback = void(); + dictionary CreateResponseDetails { + // The requestId of the `CreateRequest`. + long requestId; + + // The `name` property of the `DOMException`, if any, yielded by the remote + // request. + DOMString? errorName; + + // A JSON serialized representation of the `PublicKeyCredential` + // (https://w3c.github.io/webauthn/#publickeycredential), if any, yielded + // by the remote request. + // + // TODO(crbug.com/1231802): Reference serialization method or document + // format. + DOMString? responseJson; + }; + dictionary IsUvpaaResponseDetails { long requestId; boolean isUvpaa; }; interface Functions { + // Reports the result of a navigator.credentials.create() call. The + // extension must call this for every onCreateRequest event it has + // received; but not if onRequestCanceled has been called for that + // particular requestId. + [supportsPromises] static void completeCreateRequest( + CreateResponseDetails details, + VoidCallback callback); + // Reports the result of a // PublicKeyCredential.isUserVerifyingPlatformAuthenticator() call. The // extension must call this for every onIsUvpaaRequest event it has @@ -62,10 +106,9 @@ // Removes this extension from being the active Web Authentication API // request proxy. // - // This method is typically called when the extension - // detects that a remote desktop session was terminated. Once this method - // returns without error, regular processing of WebAuthn requests - // continues. + // This method is typically called when the extension detects that a remote + // desktop session was terminated. Once this method returns without error, + // regular processing of WebAuthn requests continues. [supportsPromises] static void detach(ErrorCallback callback); }; };
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index a9ccbe54..cd3dcca 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3901,7 +3901,6 @@ if (is_mac || is_win || (is_linux || is_chromeos_lacros)) { sources += [ # Tests for non mobile and non CrOS (includes Linux, Win, Mac). - "../browser/browser_switcher/ieem_sitelist_parser_browsertest.cc", "../browser/extensions/api/image_writer_private/image_writer_utility_client_browsertest.cc", "../browser/profiles/profile_statistics_browsertest.cc", ] @@ -7913,6 +7912,7 @@ "../browser/browser_switcher/browser_switcher_navigation_throttle_unittest.cc", "../browser/browser_switcher/browser_switcher_prefs_unittest.cc", "../browser/browser_switcher/browser_switcher_sitelist_unittest.cc", + "../browser/browser_switcher/ieem_sitelist_parser_unittest.cc", "../browser/browser_switcher/mock_alternative_browser_driver.cc", "../browser/browser_switcher/mock_alternative_browser_driver.h", ]
diff --git a/chrome/test/data/android/share/checkerboard.html b/chrome/test/data/android/share/checkerboard.html new file mode 100644 index 0000000..885c71e --- /dev/null +++ b/chrome/test/data/android/share/checkerboard.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> + +<header> +<title>Not rendered</title> +</header> + +<body style="margin: 0;"> + <h1>Top of Document</h1> + <canvas width="1000" height="10000"></canvas> + <h1>Bottom of Document</h1> +</body> + +<script> +// Render a red and blue checkerboard this ensures the render test checks for +// any stretching or misalignment. +const canvas = document.querySelector('canvas'); +const context = canvas.getContext('2d'); + +context.fillStyle = 'rgba(255, 0, 0, 1.0)'; +for(let i = 0; i < canvas.width; i += 400) { + for(let j = 0; j < canvas.height; j += 400) { + context.fillRect(i, j, 200, 200); + } +} +context.fillStyle = 'rgba(0, 0, 255, 1.0)'; +for(let i = 200; i < canvas.width; i += 400) { + for(let j = 200; j < canvas.height; j += 400) { + context.fillRect(i, j, 200, 200); + } +} + +// Indicate the content is now rendered for capture. +document.title = 'rendered'; +</script> +</html> +
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js index ee0a60f..e73e9c4 100644 --- a/chrome/test/data/extensions/api_test/autotest_private/test.js +++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -926,6 +926,19 @@ }); }); }, + function startSmoothnessTrackingExplicitThroughputInterval() { + chrome.autotestPrivate.startSmoothnessTracking(100, async function() { + chrome.test.assertNoLastError(); + + await sleep(200); + + chrome.autotestPrivate.stopSmoothnessTracking(function(data) { + chrome.test.assertNoLastError(); + chrome.test.assertTrue(data.hasOwnProperty('throughput')); + chrome.test.succeed(); + }); + }); + }, function startSmoothnessTrackingExplicitDisplay() { const badDisplay = '-1'; chrome.autotestPrivate.startSmoothnessTracking(badDisplay, function() {
diff --git a/chrome/test/data/extensions/api_test/web_authentication_proxy/main/test.js b/chrome/test/data/extensions/api_test/web_authentication_proxy/main/test.js index c9c1e248..474cdf0f 100644 --- a/chrome/test/data/extensions/api_test/web_authentication_proxy/main/test.js +++ b/chrome/test/data/extensions/api_test/web_authentication_proxy/main/test.js
@@ -2,9 +2,36 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +const ERROR_INVALID_SENDER = 'Error: Invalid sender'; const ERROR_ATTACH = 'Error: Another extension is already attached'; const ERROR_DETACH = 'Error: This extension is not currently attached'; +// A dummy JSON-encoded PublicKeyCredential for completeCreateRequest(). The +// credential ID is base64url('test') = 'dGVzdA'. +const MAKE_CREDENTIAL_RESPONSE_JSON = `{ + "id": "dGVzdA", + "rawId": "dGVzdA", + "type": "public-key", + "authenticatorAttachment": "cross-platform", + "response": { + "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjE5FMp0DogaNHK9_e7CulU5rDmJZdF8y9IKfdQ8FAR-cJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQKnIoE6PUxtEEyfXqdBqSnQ6yPhGtof1L50MYa1JOtmfS5XD0Q7BzH-yYKi1D-BrdMMquwW8DBfzxAtUatWsSFGlAQIDJiABIVggqInVFbKi0k_Qd2WH9kK4hZnhXPjhWlRqTtQxoyros1IiWCCo9UskSZuzG14q_dREih7thij6Kj-YvwSd86USfrV5fA", + "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiZEdWemRBIiwib3JpZ2luIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsImNyb3NzT3JpZ2luIjpmYWxzZX0", + "transports": ["usb"] + } +}`; + +function completeCreateRequest(requestId, optErrorName) { + let response = { + requestId: requestId, + }; + if (optErrorName) { + response.errorName = optErrorName; + } else { + response.responseJson = MAKE_CREDENTIAL_RESPONSE_JSON; + } + return chrome.webAuthenticationProxy.completeCreateRequest(response); +} + let availableTests = [ async function attachDetach() { await chrome.webAuthenticationProxy.attach(); @@ -59,18 +86,60 @@ chrome.test.succeed(); }, async function isUvpaaResolvesOnDetach() { - let isUvpaaEventReceived = false; chrome.webAuthenticationProxy.onIsUvpaaRequest.addListener( - (requestInfo) => { - isUvpaaEventReceived = true; - chrome.webAuthenticationProxy.detach(); + async (request) => { + await chrome.webAuthenticationProxy.detach(); + await chrome.test.assertPromiseRejects( + chrome.webAuthenticationProxy.completeIsUvpaaRequest( + {requestId: request.requestId, isUvpaa: true}), + ERROR_INVALID_SENDER); + chrome.test.assertNoLastError(); + chrome.test.succeed(); }); await chrome.webAuthenticationProxy.attach(); - await chrome.test.sendMessage('ready'); - // The browser side signaled that the isUvpaa request has resolved. - chrome.test.assertTrue(isUvpaaEventReceived); - chrome.test.succeed(); + chrome.test.sendMessage('ready'); + }, + async function makeCredential() { + chrome.webAuthenticationProxy.onCreateRequest.addListener( + async (request) => { + await completeCreateRequest(request.requestId); + chrome.test.assertNoLastError(); + chrome.test.succeed(); + }); + await chrome.webAuthenticationProxy.attach(); + chrome.test.sendMessage('ready'); + }, + async function makeCredentialError() { + let nextError; + chrome.webAuthenticationProxy.onCreateRequest.addListener( + async (request) => { + chrome.test.assertTrue(nextError.length > 0); + // The C++ side verifies that the passed in errorName matches the + // error that the WebAuthn client-side JS receives. + await completeCreateRequest(request.requestId, nextError); + chrome.test.assertNoLastError(); + nextError = await chrome.test.sendMessage('nextError'); + if (!nextError) { + chrome.test.succeed(); + } + }); + await chrome.webAuthenticationProxy.attach(); + chrome.test.sendMessage('ready'); + // The C++ side passes error names to be used in completeCreateRequest(). + nextError = await chrome.test.sendMessage('nextError'); + }, + async function makeCredentialResolvesOnDetach() { + chrome.webAuthenticationProxy.onCreateRequest.addListener( + async (request) => { + await chrome.webAuthenticationProxy.detach(); + await chrome.test.assertPromiseRejects( + completeCreateRequest(request.requestId), ERROR_INVALID_SENDER); + chrome.test.assertNoLastError(); + chrome.test.succeed(); + }); + await chrome.webAuthenticationProxy.attach(); + chrome.test.sendMessage('ready'); }, ];
diff --git a/chrome/test/data/web_apps/site_a/bar/basic.html b/chrome/test/data/web_apps/site_a/bar/basic.html index 5b55dae..8f27ef8 100644 --- a/chrome/test/data/web_apps/site_a/bar/basic.html +++ b/chrome/test/data/web_apps/site_a/bar/basic.html
@@ -10,7 +10,7 @@ addManifestLinkTag(); </script> </head> -<body onload="startWorker('service_worker.js')"> +<body onload="startWorker('../service_worker.js', { scope: '/web_apps/site_a/' })"> <h1>Site A Bar</h1> Service worker returns a response object if it's offline, so the page supports the offline environment.
diff --git a/chrome/test/data/web_apps/site_a/bar/service_worker.js b/chrome/test/data/web_apps/site_a/bar/service_worker.js deleted file mode 100644 index df04e70..0000000 --- a/chrome/test/data/web_apps/site_a/bar/service_worker.js +++ /dev/null
@@ -1,11 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -'use strict'; - -self.addEventListener('fetch', event => { - event.respondWith(fetch(event.request).catch(_ => { - return new Response('Offline test.'); - })); -});
diff --git a/chrome/test/data/web_apps/site_a/basic.html b/chrome/test/data/web_apps/site_a/basic.html index cba3977..7510717 100644 --- a/chrome/test/data/web_apps/site_a/basic.html +++ b/chrome/test/data/web_apps/site_a/basic.html
@@ -10,7 +10,7 @@ addManifestLinkTag(); </script> </head> -<body onload="startWorker('service_worker.js')"> +<body onload="startWorker('/web_apps/service_worker.js', { scope: '/web_apps/site_a/' })"> <h1>Site A</h1> Service worker returns a response object if it's offline, so the page supports the offline environment.
diff --git a/chrome/test/data/web_apps/site_a/foo/basic.html b/chrome/test/data/web_apps/site_a/foo/basic.html index d2ea4de..9bf0137 100644 --- a/chrome/test/data/web_apps/site_a/foo/basic.html +++ b/chrome/test/data/web_apps/site_a/foo/basic.html
@@ -10,7 +10,7 @@ addManifestLinkTag(); </script> </head> -<body onload="startWorker('service_worker.js')"> +<body onload="startWorker('../service_worker.js', { scope: '/web_apps/site_a/' })"> <h1>Site A Foo</h1> Service worker returns a response object if it's offline, so the page supports the offline environment.
diff --git a/chrome/test/data/web_apps/site_a/foo/manifest_minimal_ui.json b/chrome/test/data/web_apps/site_a/foo/manifest_minimal_ui.json new file mode 100644 index 0000000..289beb4 --- /dev/null +++ b/chrome/test/data/web_apps/site_a/foo/manifest_minimal_ui.json
@@ -0,0 +1,18 @@ +{ + "name": "Site A", + "icons": [ + { + "src": "basic-48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "basic-192.png", + "sizes": "192x192", + "type": "image/png" + } + ], + "start_url": "/web_apps/site_a/foo/basic.html", + "scope": "/web_apps/site_a/foo/", + "display": "minimal-ui" +}
diff --git a/chrome/test/data/web_apps/site_a/foo/manifest_scope_site_a.json b/chrome/test/data/web_apps/site_a/foo/manifest_scope_site_a.json new file mode 100644 index 0000000..5fd5b31 --- /dev/null +++ b/chrome/test/data/web_apps/site_a/foo/manifest_scope_site_a.json
@@ -0,0 +1,18 @@ +{ + "name": "Site A Foo", + "icons": [ + { + "src": "basic-48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "basic-192.png", + "sizes": "192x192", + "type": "image/png" + } + ], + "start_url": "/web_apps/site_a/foo/basic.html", + "scope": "/web_apps/site_a/", + "display": "standalone" +}
diff --git a/chrome/test/data/web_apps/site_a/foo/service_worker.js b/chrome/test/data/web_apps/site_a/foo/service_worker.js deleted file mode 100644 index df04e70..0000000 --- a/chrome/test/data/web_apps/site_a/foo/service_worker.js +++ /dev/null
@@ -1,11 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -'use strict'; - -self.addEventListener('fetch', event => { - event.respondWith(fetch(event.request).catch(_ => { - return new Response('Offline test.'); - })); -});
diff --git a/chrome/test/data/web_apps/test_utils.js b/chrome/test/data/web_apps/test_utils.js index 6b47fd64..e7a13bb3 100644 --- a/chrome/test/data/web_apps/test_utils.js +++ b/chrome/test/data/web_apps/test_utils.js
@@ -16,6 +16,6 @@ document.head.append(linkTag); } -function startWorker(worker) { - navigator.serviceWorker.register(worker); +function startWorker(worker, options) { + navigator.serviceWorker.register(worker, options); }
diff --git a/chrome/updater/mac/keystone/ksadmin.mm b/chrome/updater/mac/keystone/ksadmin.mm index 8009361..6b2ec453 100644 --- a/chrome/updater/mac/keystone/ksadmin.mm +++ b/chrome/updater/mac/keystone/ksadmin.mm
@@ -76,12 +76,18 @@ for (int i = 1; i < argc; ++i) { std::string arg(argv[i]); bool new_key = last_arg.empty(); - for (const std::string& prefix : {"--", "-"}) { - if (base::StartsWith(arg, prefix)) { - new_key = true; - arg = arg.substr(prefix.length()); - break; + if (base::StartsWith(arg, "--")) { + new_key = true; + arg = arg.substr(2); + } else if (base::StartsWith(arg, "-")) { + // Multiple short options could be combined together. For example, + // command `ksadmin -pP com.google.Chrome` should print Chrome ticket. + // Split the option substring into switches character by character. + for (const char ch : arg.substr(1)) { + last_arg = ch; + result[last_arg] = ""; } + continue; } if (new_key) { result[last_arg] = "";
diff --git a/chromeos/ui/frame/caption_buttons/frame_back_button.cc b/chromeos/ui/frame/caption_buttons/frame_back_button.cc index ef378e55..c0d8f6af 100644 --- a/chromeos/ui/frame/caption_buttons/frame_back_button.cc +++ b/chromeos/ui/frame/caption_buttons/frame_back_button.cc
@@ -4,7 +4,8 @@ #include "chromeos/ui/frame/caption_buttons/frame_back_button.h" -#include "base/ignore_result.h" +#include <tuple> + #include "chromeos/ui/vector_icons/vector_icons.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" @@ -36,10 +37,10 @@ aura::Window* root_window = GetWidget()->GetNativeWindow()->GetRootWindow(); ui::KeyEvent press_key_event(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, ui::EF_NONE); - ignore_result(root_window->GetHost()->SendEventToSink(&press_key_event)); + std::ignore = root_window->GetHost()->SendEventToSink(&press_key_event); ui::KeyEvent release_key_event(ui::ET_KEY_RELEASED, ui::VKEY_BROWSER_BACK, ui::EF_NONE); - ignore_result(root_window->GetHost()->SendEventToSink(&release_key_event)); + std::ignore = root_window->GetHost()->SendEventToSink(&release_key_event); } } // namespace chromeos
diff --git a/chromeos/ui/frame/caption_buttons/frame_caption_button_container_view.cc b/chromeos/ui/frame/caption_buttons/frame_caption_button_container_view.cc index 9479f1e..9c76b62 100644 --- a/chromeos/ui/frame/caption_buttons/frame_caption_button_container_view.cc +++ b/chromeos/ui/frame/caption_buttons/frame_caption_button_container_view.cc
@@ -6,9 +6,9 @@ #include <cmath> #include <map> +#include <tuple> #include "base/cxx17_backports.h" -#include "base/ignore_result.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "chromeos/ui/base/tablet_state.h" @@ -487,12 +487,12 @@ // Send up event as well as down event as ARC++ clients expect this sequence. aura::Window* root_window = GetWidget()->GetNativeWindow()->GetRootWindow(); ui::KeyEvent press_key_event(ui::ET_KEY_PRESSED, ui::VKEY_APPS, ui::EF_NONE); - ignore_result(root_window->GetHost()->GetEventSink()->OnEventFromSource( - &press_key_event)); + std::ignore = root_window->GetHost()->GetEventSink()->OnEventFromSource( + &press_key_event); ui::KeyEvent release_key_event(ui::ET_KEY_RELEASED, ui::VKEY_APPS, ui::EF_NONE); - ignore_result(root_window->GetHost()->GetEventSink()->OnEventFromSource( - &release_key_event)); + std::ignore = root_window->GetHost()->GetEventSink()->OnEventFromSource( + &release_key_event); // TODO(oshima): Add metrics }
diff --git a/components/app_restore/restore_data.cc b/components/app_restore/restore_data.cc index 3b7ca26..f02e3c8 100644 --- a/components/app_restore/restore_data.cc +++ b/components/app_restore/restore_data.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "base/i18n/number_formatting.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" #include "components/app_restore/app_launch_info.h" @@ -244,6 +245,19 @@ return data_it->second.get(); } +std::string RestoreData::ToString() const { + if (app_id_to_launch_list_.empty()) + return "empty"; + + std::string result = "( "; + for (const auto& entry : app_id_to_launch_list_) { + result += base::StringPrintf( + "(App ID: %s, Count: %s)", entry.first.c_str(), + base::UTF16ToUTF8(base::FormatNumber(entry.second.size())).c_str()); + } + return result + " )"; +} + AppRestoreData* RestoreData::GetAppRestoreDataMutable(const std::string& app_id, int window_id) { return const_cast<AppRestoreData*>(GetAppRestoreData(app_id, window_id));
diff --git a/components/app_restore/restore_data.h b/components/app_restore/restore_data.h index fa3bb24..0310df8 100644 --- a/components/app_restore/restore_data.h +++ b/components/app_restore/restore_data.h
@@ -169,6 +169,8 @@ const AppRestoreData* GetAppRestoreData(const std::string& app_id, int window_id) const; + std::string ToString() const; + const AppIdToLaunchList& app_id_to_launch_list() const { return app_id_to_launch_list_; }
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc index 675612c..322a2ab6 100644 --- a/components/autofill/core/browser/form_parsing/form_field.cc +++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -38,19 +38,6 @@ namespace autofill { -// There's an implicit precedence determined by the values assigned here. Email -// is currently the most important followed by Phone, Travel, Address, -// Credit Card, Price, Name, Merchant promo code, and Search. -const float FormField::kBaseEmailParserScore = 1.4f; -const float FormField::kBasePhoneParserScore = 1.3f; -const float FormField::kBaseTravelParserScore = 1.2f; -const float FormField::kBaseAddressParserScore = 1.1f; -const float FormField::kBaseCreditCardParserScore = 1.0f; -const float FormField::kBasePriceParserScore = 0.95f; -const float FormField::kBaseNameParserScore = 0.9f; -const float FormField::kBaseMerchantPromoCodeParserScore = 0.85f; -const float FormField::kBaseSearchParserScore = 0.8f; - // static FieldCandidatesMap FormField::ParseFormFields( const std::vector<std::unique_ptr<AutofillField>>& fields, @@ -166,36 +153,20 @@ } // static -bool FormField::ParseFieldWithLegacyPattern(AutofillScanner* scanner, - base::StringPiece16 pattern, - AutofillField** match, - const RegExLogging& logging) { - return ParseFieldSpecificsWithLegacyPattern( - scanner, pattern, kDefaultMatchParams, match, logging); -} - -bool FormField::ParseField(AutofillScanner* scanner, - const std::vector<MatchingPattern>& patterns, - AutofillField** match, - const RegExLogging& logging) { - return ParseFieldSpecifics(scanner, patterns, match, logging); -} - bool FormField::ParseField(AutofillScanner* scanner, base::StringPiece16 pattern, const std::vector<MatchingPattern>& patterns, AutofillField** match, const RegExLogging& logging) { - return base::FeatureList::IsEnabled(features::kAutofillParsingPatternProvider) - ? ParseField(scanner, patterns, match, logging) - : ParseFieldWithLegacyPattern(scanner, pattern, match, logging); + return ParseFieldSpecifics(scanner, pattern, kDefaultMatchParams, patterns, + match, logging); } +// static bool FormField::ParseFieldSpecificsWithLegacyPattern( AutofillScanner* scanner, base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, + MatchParams match_type, AutofillField** match, const RegExLogging& logging) { if (scanner->IsEnd()) @@ -204,14 +175,15 @@ const AutofillField* field = scanner->Cursor(); if (!MatchesFormControlType(field->form_control_type, - match_field_input_types)) + match_type.field_types)) { return false; + } - return MatchAndAdvance(scanner, pattern, match_field_attributes, - match_field_input_types, match, logging); + return MatchAndAdvance(scanner, pattern, match_type, match, logging); } -bool FormField::ParseFieldSpecifics( +// static +bool FormField::ParseFieldSpecificsWithNewPatterns( AutofillScanner* scanner, const std::vector<MatchingPattern>& patterns, AutofillField** match, @@ -227,48 +199,36 @@ continue; } - // For each of the two match field attributes, MATCH_NAME and MATCH_LABEL, + // For each of the two match field attributes, kName and kLabel, // that are active for the current pattern, test if it matches the negative // pattern. If yes, remove it from the attributes that are considered for // positive matching. - DenseSet<MatchAttribute> match_field_attributes = - pattern.match_field_attributes; + MatchParams match_type(pattern.match_field_attributes, + pattern.match_field_input_types); if (!pattern.negative_pattern.empty()) { for (MatchAttribute attribute : pattern.match_field_attributes) { - if (FormField::Match(field, pattern.negative_pattern, {attribute}, - pattern.match_field_input_types, logging)) { - match_field_attributes.erase(attribute); + if (FormField::Match(field, pattern.negative_pattern, + MatchParams({attribute}, match_type.field_types), + logging)) { + match_type.attributes.erase(attribute); } } } - if (pattern.match_field_attributes.empty()) + if (match_type.attributes.empty()) continue; // Apply the positive matching against all remaining match field attributes. if (!pattern.positive_pattern.empty() && - MatchAndAdvance(scanner, pattern.positive_pattern, - match_field_attributes, pattern.match_field_input_types, - match, logging)) { + MatchAndAdvance(scanner, pattern.positive_pattern, match_type, match, + logging)) { return true; } } return false; } -// static -bool FormField::ParseFieldSpecificsWithLegacyPattern( - AutofillScanner* scanner, - base::StringPiece16 pattern, - const MatchParams& match_type, - AutofillField** match, - const RegExLogging& logging) { - return ParseFieldSpecificsWithLegacyPattern( - scanner, pattern, match_type.attributes, match_type.field_types, match, - logging); -} - bool FormField::ParseFieldSpecifics( AutofillScanner* scanner, base::StringPiece16 pattern, @@ -276,12 +236,11 @@ const std::vector<MatchingPattern>& patterns, AutofillField** match, const RegExLogging& logging) { - if (base::FeatureList::IsEnabled(features::kAutofillParsingPatternProvider)) { - return ParseFieldSpecifics(scanner, patterns, match, logging); - } else { - return ParseFieldSpecificsWithLegacyPattern(scanner, pattern, match_type, - match, logging); - } + return base::FeatureList::IsEnabled(features::kAutofillParsingPatternProvider) + ? ParseFieldSpecificsWithNewPatterns(scanner, patterns, match, + logging) + : ParseFieldSpecificsWithLegacyPattern(scanner, pattern, + match_type, match, logging); } // static @@ -326,16 +285,14 @@ return processed_fields; } -bool FormField::MatchAndAdvance( - AutofillScanner* scanner, - base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, - AutofillField** match, - const RegExLogging& logging) { +// static +bool FormField::MatchAndAdvance(AutofillScanner* scanner, + base::StringPiece16 pattern, + MatchParams match_type, + AutofillField** match, + const RegExLogging& logging) { AutofillField* field = scanner->Cursor(); - if (FormField::Match(field, pattern, match_field_attributes, - match_field_input_types, logging)) { + if (FormField::Match(field, pattern, match_type, logging)) { if (match) *match = field; scanner->Advance(); @@ -345,20 +302,9 @@ return false; } -// static -bool FormField::MatchAndAdvance(AutofillScanner* scanner, - base::StringPiece16 pattern, - const MatchParams& match_type, - AutofillField** match, - const RegExLogging& logging) { - return MatchAndAdvance(scanner, pattern, match_type.attributes, - match_type.field_types, match, logging); -} - bool FormField::Match(const AutofillField* field, base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, + MatchParams match_type, const RegExLogging& logging) { bool found_match = false; base::StringPiece match_type_string; @@ -374,12 +320,12 @@ const std::u16string& name = field->parseable_name(); - if (match_field_attributes.contains(MatchAttribute::kLabel) && + if (match_type.attributes.contains(MatchAttribute::kLabel) && MatchesPattern(label, pattern, &match)) { found_match = true; match_type_string = "Match in label"; value = label; - } else if (match_field_attributes.contains(MatchAttribute::kName) && + } else if (match_type.attributes.contains(MatchAttribute::kName) && MatchesPattern(name, pattern, &match)) { found_match = true; match_type_string = "Match in name"; @@ -403,15 +349,6 @@ } // static -bool FormField::Match(const AutofillField* field, - base::StringPiece16 pattern, - const MatchParams& match_type, - const RegExLogging& logging) { - return Match(field, pattern, match_type.attributes, match_type.field_types, - logging); -} - -// static void FormField::ParseFormFieldsPass(ParseFunction parse, const std::vector<AutofillField*>& fields, FieldCandidatesMap* field_candidates, @@ -431,9 +368,9 @@ } } -bool FormField::MatchesFormControlType( - const std::string& type, - const DenseSet<MatchFieldType>& match_type) { +// static +bool FormField::MatchesFormControlType(base::StringPiece type, + DenseSet<MatchFieldType> match_type) { if (match_type.contains(MatchFieldType::kText) && type == "text") return true;
diff --git a/components/autofill/core/browser/form_parsing/form_field.h b/components/autofill/core/browser/form_parsing/form_field.h index 791ee74..d4a3836 100644 --- a/components/autofill/core/browser/form_parsing/form_field.h +++ b/components/autofill/core/browser/form_parsing/form_field.h
@@ -23,8 +23,8 @@ class AutofillScanner; class LogManager; -// This helper struct allows passing information into ParseField / -// ParseFieldSpecifics that can be used to create a log entry in +// This helper struct allows passing information into ParseField() and +// ParseFieldSpecifics() that can be used to create a log entry in // chrome://autofill-internals explaining which regular expressions // were matched by local heuristics. struct RegExLogging { @@ -32,7 +32,7 @@ const char* regex_name = ""; }; -// Represents a logical form field in a web form. Classes that implement this +// Represents a logical form field in a web form. Classes that implement this // interface can identify themselves as a particular type of form field, e.g. // name, phone number, or address field. class FormField { @@ -69,30 +69,24 @@ protected: // Initial values assigned to FieldCandidates by their corresponding parsers. - static const float kBaseEmailParserScore; - static const float kBasePhoneParserScore; - static const float kBaseTravelParserScore; - static const float kBaseAddressParserScore; - static const float kBaseCreditCardParserScore; - static const float kBasePriceParserScore; - static const float kBaseNameParserScore; - static const float kBaseMerchantPromoCodeParserScore; - static const float kBaseSearchParserScore; + // There's an implicit precedence determined by the values assigned here. + // Email is currently the most important followed by Phone, Travel, Address, + // Credit Card, Price, Name, Merchant promo code, and Search. + static constexpr float kBaseEmailParserScore = 1.4f; + static constexpr float kBasePhoneParserScore = 1.3f; + static constexpr float kBaseTravelParserScore = 1.2f; + static constexpr float kBaseAddressParserScore = 1.1f; + static constexpr float kBaseCreditCardParserScore = 1.0f; + static constexpr float kBasePriceParserScore = 0.95f; + static constexpr float kBaseNameParserScore = 0.9f; + static constexpr float kBaseMerchantPromoCodeParserScore = 0.85f; + static constexpr float kBaseSearchParserScore = 0.8f; // Only derived classes may instantiate. FormField() = default; // Attempts to parse a form field with the given pattern. Returns true on // success and fills |match| with a pointer to the field. - static bool ParseFieldWithLegacyPattern(AutofillScanner* scanner, - base::StringPiece16 pattern, - AutofillField** match, - const RegExLogging& logging = {}); - - static bool ParseField(AutofillScanner* scanner, - const std::vector<MatchingPattern>& patterns, - AutofillField** match, - const RegExLogging& logging = {}); static bool ParseField(AutofillScanner* scanner, base::StringPiece16 pattern, @@ -100,33 +94,6 @@ AutofillField** match, const RegExLogging& logging = {}); - // Parses the stream of fields in |scanner| with regular expression |pattern| - // as specified in the |match_type| bit field (see |MatchType|). If |match| - // is non-NULL and the pattern matches, |match| will be set to the matched - // field, and the scanner would advance by one step. A |true| result is - // returned in the case of a successful match, false otherwise. - static bool ParseFieldSpecificsWithLegacyPattern( - AutofillScanner* scanner, - base::StringPiece16 pattern, - const MatchParams& match_type, - AutofillField** match, - const RegExLogging& logging = {}); - - static bool ParseFieldSpecifics(AutofillScanner* scanner, - const std::vector<MatchingPattern>& patterns, - AutofillField** match, - const RegExLogging& logging = {}); - - // The same as ParseFieldSpecifics but with splitted match_types into - // MatchAttribute and MatchFieldType. - static bool ParseFieldSpecificsWithLegacyPattern( - AutofillScanner* scanner, - base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, - AutofillField** match, - const RegExLogging& logging = {}); - static bool ParseFieldSpecifics(AutofillScanner* scanner, base::StringPiece16 pattern, const MatchParams& match_type, @@ -147,9 +114,8 @@ FieldCandidatesMap* field_candidates); // Returns true iff |type| matches |match_type|. - static bool MatchesFormControlType( - const std::string& type, - const DenseSet<MatchFieldType>& match_type); + static bool MatchesFormControlType(base::StringPiece type, + DenseSet<MatchFieldType> match_type); // Derived classes must implement this interface to supply field type // information. |ParseFormFields| coordinates the parsing and extraction @@ -169,6 +135,24 @@ const LanguageCode& page_language, LogManager* log_manager); + static bool ParseFieldSpecificsWithNewPatterns( + AutofillScanner* scanner, + const std::vector<MatchingPattern>& patterns, + AutofillField** match, + const RegExLogging& logging = {}); + + // Parses the stream of fields in |scanner| with regular expression |pattern| + // as specified in |match_type|. If |match| is non-NULL and the pattern + // matches, |match| will be set to the matched field, and the scanner would + // advance by one step. A |true| result is returned in the case of a + // successful match, false otherwise. + static bool ParseFieldSpecificsWithLegacyPattern( + AutofillScanner* scanner, + base::StringPiece16 pattern, + MatchParams match_type, + AutofillField** match, + const RegExLogging& logging = {}); + // Removes checkable fields and returns fields to be processed for field // detection. static std::vector<AutofillField*> RemoveCheckableFields( @@ -180,33 +164,15 @@ // otherwise. static bool MatchAndAdvance(AutofillScanner* scanner, base::StringPiece16 pattern, - const MatchParams& match_type, + MatchParams match_type, AutofillField** match, const RegExLogging& logging = {}); - // The same as MatchAndAdvance but with splitted match_types into - // MatchAttribute and MatchFieldType. - static bool MatchAndAdvance( - AutofillScanner* scanner, - base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, - AutofillField** match, - const RegExLogging& logging = {}); - // Matches the regular expression |pattern| against the components of - // |field| as specified in the |match_type| bit field (see |MatchType|). + // |field| as specified in |match_type|. static bool Match(const AutofillField* field, base::StringPiece16 pattern, - const MatchParams& match_type, - const RegExLogging& logging = {}); - - // The same as Match but with splitted match_types into MatchAttribute - // and MatchFieldType. - static bool Match(const AutofillField* field, - base::StringPiece16 pattern, - const DenseSet<MatchAttribute>& match_field_attributes, - const DenseSet<MatchFieldType>& match_field_input_types, + MatchParams match_type, const RegExLogging& logging = {}); // Perform a "pass" over the |fields| where each pass uses the supplied
diff --git a/components/autofill/core/browser/form_parsing/form_field_unittest.cc b/components/autofill/core/browser/form_parsing/form_field_unittest.cc index ad544683..7355e2c 100644 --- a/components/autofill/core/browser/form_parsing/form_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
@@ -34,112 +34,85 @@ } // namespace TEST(FormFieldTest, Match) { + constexpr MatchParams kMatchLabel{{MatchAttribute::kLabel}, {}}; + AutofillField field; // Empty strings match. - EXPECT_TRUE(FormField::Match(&field, std::u16string(), - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, std::u16string(), kMatchLabel)); // Empty pattern matches non-empty string. SetFieldLabels(&field, u"a"); - EXPECT_TRUE(FormField::Match(&field, std::u16string(), - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, std::u16string(), kMatchLabel)); // Strictly empty pattern matches empty string. SetFieldLabels(&field, u""); - EXPECT_TRUE(FormField::Match(&field, u"^$", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"^$", kMatchLabel)); // Strictly empty pattern does not match non-empty string. SetFieldLabels(&field, u"a"); - EXPECT_FALSE(FormField::Match(&field, u"^$", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"^$", kMatchLabel)); // Non-empty pattern doesn't match empty string. SetFieldLabels(&field, u""); - EXPECT_FALSE(FormField::Match(&field, u"a", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"a", kMatchLabel)); // Beginning of line. SetFieldLabels(&field, u"head_tail"); - EXPECT_TRUE(FormField::Match(&field, u"^head", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_FALSE(FormField::Match(&field, u"^tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"^head", kMatchLabel)); + EXPECT_FALSE(FormField::Match(&field, u"^tail", kMatchLabel)); // End of line. SetFieldLabels(&field, u"head_tail"); - EXPECT_FALSE(FormField::Match(&field, u"head$", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_TRUE(FormField::Match(&field, u"tail$", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"head$", kMatchLabel)); + EXPECT_TRUE(FormField::Match(&field, u"tail$", kMatchLabel)); // Exact. SetFieldLabels(&field, u"head_tail"); - EXPECT_FALSE(FormField::Match(&field, u"^head$", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_FALSE(FormField::Match(&field, u"^tail$", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_TRUE(FormField::Match(&field, u"^head_tail$", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"^head$", kMatchLabel)); + EXPECT_FALSE(FormField::Match(&field, u"^tail$", kMatchLabel)); + EXPECT_TRUE(FormField::Match(&field, u"^head_tail$", kMatchLabel)); // Escaped dots. SetFieldLabels(&field, u"m.i."); // Note: This pattern is misleading as the "." characters are wild cards. - EXPECT_TRUE(FormField::Match(&field, u"m.i.", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_TRUE(FormField::Match(&field, u"m\\.i\\.", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"m.i.", kMatchLabel)); + EXPECT_TRUE(FormField::Match(&field, u"m\\.i\\.", kMatchLabel)); SetFieldLabels(&field, u"mXiX"); - EXPECT_TRUE(FormField::Match(&field, u"m.i.", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_FALSE(FormField::Match(&field, u"m\\.i\\.", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"m.i.", kMatchLabel)); + EXPECT_FALSE(FormField::Match(&field, u"m\\.i\\.", kMatchLabel)); // Repetition. SetFieldLabels(&field, u"headtail"); - EXPECT_TRUE(FormField::Match(&field, u"head.*tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head.*tail", kMatchLabel)); SetFieldLabels(&field, u"headXtail"); - EXPECT_TRUE(FormField::Match(&field, u"head.*tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head.*tail", kMatchLabel)); SetFieldLabels(&field, u"headXXXtail"); - EXPECT_TRUE(FormField::Match(&field, u"head.*tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head.*tail", kMatchLabel)); SetFieldLabels(&field, u"headtail"); - EXPECT_FALSE(FormField::Match(&field, u"head.+tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"head.+tail", kMatchLabel)); SetFieldLabels(&field, u"headXtail"); - EXPECT_TRUE(FormField::Match(&field, u"head.+tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head.+tail", kMatchLabel)); SetFieldLabels(&field, u"headXXXtail"); - EXPECT_TRUE(FormField::Match(&field, u"head.+tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head.+tail", kMatchLabel)); // Alternation. SetFieldLabels(&field, u"head_tail"); - EXPECT_TRUE(FormField::Match(&field, u"head|other", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_TRUE(FormField::Match(&field, u"tail|other", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_FALSE(FormField::Match(&field, u"bad|good", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head|other", kMatchLabel)); + EXPECT_TRUE(FormField::Match(&field, u"tail|other", kMatchLabel)); + EXPECT_FALSE(FormField::Match(&field, u"bad|good", kMatchLabel)); // Case sensitivity. SetFieldLabels(&field, u"xxxHeAd_tAiLxxx"); - EXPECT_TRUE(FormField::Match(&field, u"head_tail", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"head_tail", kMatchLabel)); // Word boundaries. SetFieldLabels(&field, u"contains word:"); - EXPECT_TRUE(FormField::Match(&field, u"\\bword\\b", - MatchParams({MatchAttribute::kLabel}, {}))); - EXPECT_FALSE(FormField::Match(&field, u"\\bcon\\b", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_TRUE(FormField::Match(&field, u"\\bword\\b", kMatchLabel)); + EXPECT_FALSE(FormField::Match(&field, u"\\bcon\\b", kMatchLabel)); // Make sure the circumflex in 'crêpe' is not treated as a word boundary. field.label = u"crêpe"; - EXPECT_FALSE(FormField::Match(&field, u"\\bcr\\b", - MatchParams({MatchAttribute::kLabel}, {}))); + EXPECT_FALSE(FormField::Match(&field, u"\\bcr\\b", kMatchLabel)); } // Test that we ignore checkable elements.
diff --git a/components/autofill/core/browser/form_parsing/name_field.cc b/components/autofill/core/browser/form_parsing/name_field.cc index 9658cd4cb5..f1df1c6 100644 --- a/components/autofill/core/browser/form_parsing/name_field.cc +++ b/components/autofill/core/browser/form_parsing/name_field.cc
@@ -228,9 +228,9 @@ while (!scanner->IsEnd()) { // Skip over address label fields, which can have misleading names // e.g. "title" or "name". - if (ParseFieldSpecifics(scanner, kAddressNameIgnoredRe, kDefaultMatchParams, - address_name_ignored_patterns, nullptr, - {log_manager, "kAddressNameIgnoredRe"})) { + if (ParseField(scanner, kAddressNameIgnoredRe, + address_name_ignored_patterns, nullptr, + {log_manager, "kAddressNameIgnoredRe"})) { continue; } @@ -437,9 +437,9 @@ while (!scanner->IsEnd()) { // Skip over address label fields, which can have misleading names // e.g. "title" or "name". - if (ParseFieldSpecifics(scanner, kAddressNameIgnoredRe, kDefaultMatchParams, - address_name_ignored_patterns, nullptr, - {log_manager, "kAddressNameIgnoredRe"})) { + if (ParseField(scanner, kAddressNameIgnoredRe, + address_name_ignored_patterns, nullptr, + {log_manager, "kAddressNameIgnoredRe"})) { continue; }
diff --git a/components/browser_ui/styles/android/java/res/drawable/checkmark_blue.xml b/components/browser_ui/styles/android/java/res/drawable/checkmark_blue.xml index acde5c6..11f350c 100644 --- a/components/browser_ui/styles/android/java/res/drawable/checkmark_blue.xml +++ b/components/browser_ui/styles/android/java/res/drawable/checkmark_blue.xml
@@ -1,7 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:width="20dp" android:height="20dp" android:viewportWidth="24" @@ -11,7 +9,7 @@ android:fillColor="@color/black_alpha_20" android:pathData="M12,14m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"/> <path - android:fillColor="@color/default_icon_color_inverse" + android:fillColor="@macro/default_icon_color_inverse" android:pathData="M4 6H20v12H4z" /> <path android:fillColor="@macro/default_icon_color_accent1"
diff --git a/components/browser_ui/styles/android/java/res/values-night/themes.xml b/components/browser_ui/styles/android/java/res/values-night/themes.xml index 9f7f451..8a2e85e9 100644 --- a/components/browser_ui/styles/android/java/res/values-night/themes.xml +++ b/components/browser_ui/styles/android/java/res/values-night/themes.xml
@@ -39,7 +39,6 @@ <!-- Custom semantic names --> <!-- Common icon colors for drawables. --> - <item name="default_icon_color_inverse">@color/default_icon_color_dark</item> <item name="default_icon_color_secondary">@color/default_icon_color_secondary_light</item> <item name="default_icon_color_disabled">@color/default_icon_color_disabled_light</item> <item name="default_icon_color_disabled_inverse">@color/default_icon_color_disabled_dark</item>
diff --git a/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml b/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml index b7f3f279..15cc99e 100644 --- a/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml +++ b/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml
@@ -11,6 +11,8 @@ <macro name="default_control_color_normal">?attr/colorOnSurfaceVariant</macro> <macro name="default_icon_color">?attr/colorOnSurface</macro> <macro name="default_icon_color_accent1">?attr/colorPrimary</macro> + <macro name="default_icon_color_inverse">?attr/colorOnSurfaceInverse</macro> + <macro name="default_icon_color_on_accent1">?attr/colorOnPrimary</macro> <macro name="default_text_color">?attr/colorOnSurface</macro> <macro name="default_text_color_accent1">?attr/colorPrimary</macro> <macro name="default_text_color_on_accent1">?attr/colorOnPrimary</macro> @@ -25,6 +27,8 @@ <macro name="default_control_color_normal">@color/default_control_color_normal_baseline</macro> <macro name="default_icon_color">@color/default_icon_color_baseline</macro> <macro name="default_icon_color_accent1">@color/default_icon_color_accent1_baseline</macro> + <macro name="default_icon_color_inverse">@color/default_icon_color_inverse_baseline</macro> + <macro name="default_icon_color_on_accent1">@color/default_icon_color_on_accent1_baseline</macro> <macro name="default_text_color">@color/default_text_color_baseline</macro> <macro name="default_text_color_accent1">@color/default_text_color_blue_baseline</macro> <macro name="default_text_color_on_accent1">@color/default_text_color_on_accent1_baseline</macro>
diff --git a/components/browser_ui/styles/android/java/res/values/themes.xml b/components/browser_ui/styles/android/java/res/values/themes.xml index d26cfa40..a3378fc1 100644 --- a/components/browser_ui/styles/android/java/res/values/themes.xml +++ b/components/browser_ui/styles/android/java/res/values/themes.xml
@@ -59,7 +59,6 @@ <item name="default_bg_color_dynamic">?attr/colorSurface</item> <item name="divider_line_bg_color_dynamic">?attr/colorSurfaceVariant</item> <!-- Common icon colors for drawables. --> - <item name="default_icon_color_inverse">@color/default_icon_color_light</item> <item name="default_icon_color_secondary">@color/default_icon_color_secondary_dark</item> <item name="default_icon_color_disabled">@color/default_icon_color_disabled_dark</item> <item name="default_icon_color_disabled_inverse">@color/default_icon_color_disabled_light</item> @@ -122,7 +121,6 @@ <item name="default_bg_color_dynamic">?attr/colorSurface</item> <item name="divider_line_bg_color_dynamic">?attr/colorSurfaceVariant</item> <!-- Common icon colors for drawables. --> - <item name="default_icon_color_inverse">@color/default_icon_color_light</item> <item name="default_icon_color_secondary">@color/default_icon_color_secondary_dark</item> <item name="default_icon_color_disabled">@color/default_icon_color_disabled_dark</item> <item name="default_icon_color_disabled_inverse">@color/default_icon_color_disabled_light</item>
diff --git a/components/browser_ui/styles/android/java/src/org/chromium/components/browser_ui/styles/SemanticColorUtils.java b/components/browser_ui/styles/android/java/src/org/chromium/components/browser_ui/styles/SemanticColorUtils.java index cd2245a..e50f5418 100644 --- a/components/browser_ui/styles/android/java/src/org/chromium/components/browser_ui/styles/SemanticColorUtils.java +++ b/components/browser_ui/styles/android/java/src/org/chromium/components/browser_ui/styles/SemanticColorUtils.java
@@ -61,6 +61,12 @@ return resolve(R.attr.colorOnSurface, R.color.default_icon_color_baseline, context); } + /** Returns the semantic color value that corresponds to default_icon_color_inverse. */ + public static @ColorInt int getDefaultIconColorInverse(Context context) { + return resolve( + R.attr.colorOnSurfaceInverse, R.color.default_icon_color_inverse_baseline, context); + } + /** Returns the semantic color value that corresponds to default_icon_color_accent1. */ public static @ColorInt int getDefaultIconColorAccent1(Context context) { return resolve(R.attr.colorPrimary, R.color.default_icon_color_accent1_baseline, context);
diff --git a/components/browser_ui/widget/android/java/res/drawable/ic_offline_pin_blue_white.xml b/components/browser_ui/widget/android/java/res/drawable/ic_offline_pin_blue_white.xml index 0f12c09d..7d6c01b 100644 --- a/components/browser_ui/widget/android/java/res/drawable/ic_offline_pin_blue_white.xml +++ b/components/browser_ui/widget/android/java/res/drawable/ic_offline_pin_blue_white.xml
@@ -6,19 +6,17 @@ <!-- Note: hand-tweaked for foreground and background colors, not canonical icon. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> <path - android:fillColor="@color/default_icon_color_inverse" + android:fillColor="@macro/default_icon_color_on_accent1" android:pathData="M20,12 a8,8 0 1,1 0,-0.0001" /> <path android:fillColor="@macro/default_icon_color_accent1" android:pathData="M12,2 C6.5,2,2,6.5,2,12 C2,17.5,6.5,22,12,22 C17.5,22,22,17.5,22,12 C22,6.5,17.5,2,12,2 Z M17,18 L7,18 L7,16 L17,16 L17,18 Z M10.3,14 L7,10.7 L8.4,9.3 L10.3,11.2 L15.6,5.9 L17,7.3 L10.3,14 Z" /> -</vector> \ No newline at end of file +</vector>
diff --git a/components/browser_ui/widget/android/java/res/layout/textbubble_text_with_image.xml b/components/browser_ui/widget/android/java/res/layout/textbubble_text_with_image.xml index 92301c9c..d6ef450 100644 --- a/components/browser_ui/widget/android/java/res/layout/textbubble_text_with_image.xml +++ b/components/browser_ui/widget/android/java/res/layout/textbubble_text_with_image.xml
@@ -26,7 +26,7 @@ android:layout_marginEnd="8dp" tools:ignore="ContentDescription" android:scaleType="centerInside" - app:tint="@color/default_icon_color_inverse" /> + app:tint="@macro/default_icon_color_inverse" /> <!-- The FrameLayout is to center the smaller LoadingView in the same space as the icon, as well as for providing a contentDescription for the LoadingView. --> @@ -41,7 +41,7 @@ android:layout_width="16sp" android:layout_height="16sp" android:layout_gravity="center" - android:indeterminateTint="@color/default_icon_color_inverse" /> + android:indeterminateTint="@macro/default_icon_color_inverse" /> </FrameLayout> <TextView
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableItemView.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableItemView.java index d0049ce..4fa6c8de 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableItemView.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableItemView.java
@@ -17,11 +17,11 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; -import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.AppCompatImageButton; import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat; import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.R; import org.chromium.components.browser_ui.widget.TintedDrawable; @@ -103,8 +103,8 @@ */ public SelectableItemView(Context context, AttributeSet attrs) { super(context, attrs); - mStartIconSelectedColorList = AppCompatResources.getColorStateList( - getContext(), R.color.default_icon_color_inverse); + mStartIconSelectedColorList = + ColorStateList.valueOf(SemanticColorUtils.getDefaultIconColorInverse(context)); mDefaultLevel = getResources().getInteger(R.integer.list_item_level_default); mSelectedLevel = getResources().getInteger(R.integer.list_item_level_selected); mCheckDrawable = AnimatedVectorDrawableCompat.create( @@ -231,10 +231,15 @@ public static void applyModernIconStyle( ImageView imageView, Drawable defaultIcon, boolean isSelected) { imageView.setBackgroundResource(R.drawable.list_item_icon_modern_bg); - imageView.setImageDrawable( - isSelected ? TintedDrawable.constructTintedDrawable(imageView.getContext(), - R.drawable.ic_check_googblue_24dp, R.color.default_icon_color_inverse) - : defaultIcon); + Drawable drawable; + if (isSelected) { + drawable = TintedDrawable.constructTintedDrawable( + imageView.getContext(), R.drawable.ic_check_googblue_24dp); + drawable.setTint(SemanticColorUtils.getDefaultIconColorInverse(imageView.getContext())); + } else { + drawable = defaultIcon; + } + imageView.setImageDrawable(drawable); imageView.getBackground().setLevel(isSelected ? imageView.getResources().getInteger(R.integer.list_item_level_selected) : imageView.getResources().getInteger(R.integer.list_item_level_default));
diff --git a/components/cronet/stale_host_resolver.cc b/components/cronet/stale_host_resolver.cc index a5f9aba..7b967952 100644 --- a/components/cronet/stale_host_resolver.cc +++ b/components/cronet/stale_host_resolver.cc
@@ -5,6 +5,7 @@ #include "components/cronet/stale_host_resolver.h" #include <memory> +#include <set> #include <string> #include <utility> #include <vector> @@ -53,8 +54,7 @@ const override; const absl::optional<std::vector<net::HostPortPair>>& GetHostnameResults() const override; - const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const override; + const std::set<std::string>* GetDnsAliasResults() const override; net::ResolveErrorInfo GetResolveErrorInfo() const override; const absl::optional<net::HostCache::EntryStaleness>& GetStaleInfo() const override; @@ -220,7 +220,7 @@ return cache_request_->GetHostnameResults(); } -const absl::optional<std::vector<std::string>>& +const std::set<std::string>* StaleHostResolver::RequestImpl::GetDnsAliasResults() const { if (network_request_) return network_request_->GetDnsAliasResults();
diff --git a/components/exo/BUILD.gn b/components/exo/BUILD.gn index 7fc9e3cf..cdd01b9 100644 --- a/components/exo/BUILD.gn +++ b/components/exo/BUILD.gn
@@ -61,6 +61,7 @@ "pointer.h", "pointer_constraint_delegate.h", "pointer_delegate.h", + "protected_native_pixmap_query_delegate.h", "seat.cc", "seat.h", "seat_observer.h",
diff --git a/components/exo/DEPS b/components/exo/DEPS index bc329d7..a52a362 100644 --- a/components/exo/DEPS +++ b/components/exo/DEPS
@@ -11,6 +11,7 @@ "+components/viz/host", "+device/gamepad", "+gpu", + "+media/media_buildflags.h", "+mojo/core/embedder/embedder.h", "+mojo/public/cpp", "+net/base",
diff --git a/components/exo/buffer.cc b/components/exo/buffer.cc index 9d3dcb6..6a54207 100644 --- a/components/exo/buffer.cc +++ b/components/exo/buffer.cc
@@ -37,6 +37,11 @@ #include "ui/gfx/gpu_fence_handle.h" #include "ui/gfx/gpu_memory_buffer.h" +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) +#include "base/files/scoped_file.h" +#include "base/posix/eintr_wrapper.h" +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + namespace exo { namespace { @@ -409,6 +414,7 @@ std::unique_ptr<gfx::GpuFence> acquire_fence, bool secure_output_only, viz::TransferableResource* resource, + ProtectedNativePixmapQueryDelegate* protected_native_pixmap_query, PerCommitExplicitReleaseCallback per_commit_explicit_release_callback) { TRACE_EVENT1("exo", "Buffer::ProduceTransferableResource", "buffer_id", static_cast<const void*>(gfx_buffer())); @@ -465,6 +471,27 @@ release_contents_callback_.Reset( base::BindOnce(&Buffer::ReleaseContents, base::Unretained(this))); +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // Check if this buffer needs HW protection. This can only happen if we + // require a secure output. + if (secure_output_only && + protected_buffer_state_ == ProtectedBufferState::UNKNOWN && + gpu_memory_buffer_ && protected_native_pixmap_query) { + gfx::GpuMemoryBufferHandle gmb_handle = gpu_memory_buffer_->CloneHandle(); + if (!gmb_handle.native_pixmap_handle.planes.empty()) { + base::ScopedFD pixmap_handle(HANDLE_EINTR( + dup(gmb_handle.native_pixmap_handle.planes[0].fd.get()))); + if (pixmap_handle.is_valid()) { + protected_buffer_state_ = ProtectedBufferState::QUERYING; + protected_native_pixmap_query->IsProtectedNativePixmapHandle( + std::move(pixmap_handle), + base::BindOnce(&Buffer::OnIsProtectedNativePixmapHandle, + AsWeakPtr())); + } + } + } +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // Zero-copy means using the contents texture directly. if (use_zero_copy_) { // This binds the latest contents of this buffer to |contents_texture|. @@ -550,6 +577,15 @@ return SkColors::kBlack; } +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) +bool Buffer::NeedsHardwareProtection() { + // We don't indicate protection is needed in the UNKNOWN state because we have + // not seen a pixmap yet that could be protected. + return protected_buffer_state_ == ProtectedBufferState::PROTECTED || + protected_buffer_state_ == ProtectedBufferState::QUERYING; +} +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + //////////////////////////////////////////////////////////////////////////////// // Buffer, private: @@ -629,6 +665,13 @@ buffer_releases_.erase(iter); } +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) +void Buffer::OnIsProtectedNativePixmapHandle(bool is_protected) { + protected_buffer_state_ = is_protected ? ProtectedBufferState::PROTECTED + : ProtectedBufferState::UNPROTECTED; +} +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + SolidColorBuffer::SolidColorBuffer(const SkColor4f& color, const gfx::Size& size) : Buffer(nullptr), color_(color), size_(size) {} @@ -640,6 +683,7 @@ std::unique_ptr<gfx::GpuFence> acquire_fence, bool secure_output_only, viz::TransferableResource* resource, + ProtectedNativePixmapQueryDelegate* protected_native_pixmap_query, PerCommitExplicitReleaseCallback per_commit_explicit_release_callback) { std::move(per_commit_explicit_release_callback) .Run(/*release_fence=*/gfx::GpuFenceHandle());
diff --git a/components/exo/buffer.h b/components/exo/buffer.h index b68a75b..43efbfa 100644 --- a/components/exo/buffer.h +++ b/components/exo/buffer.h
@@ -12,7 +12,9 @@ #include "base/containers/flat_map.h" #include "base/files/file_descriptor_watcher_posix.h" #include "base/memory/weak_ptr.h" +#include "components/exo/protected_native_pixmap_query_delegate.h" #include "components/viz/common/resources/transferable_resource.h" +#include "media/media_buildflags.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/gpu_fence.h" @@ -62,6 +64,7 @@ std::unique_ptr<gfx::GpuFence> acquire_fence, bool secure_output_only, viz::TransferableResource* resource, + ProtectedNativePixmapQueryDelegate* protected_native_pixmap_query, PerCommitExplicitReleaseCallback per_commit_explicit_release_callback); // This should be called when the buffer is attached to a Surface. @@ -79,6 +82,13 @@ // The default color to be used should transferable resource production fail. virtual SkColor4f GetColor() const; +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // Returns true if the underlying buffer is hardware protected. This should + // only be checked if the corresponding surface requires secure output, + // otherwise it will yield false positives. + bool NeedsHardwareProtection(); +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // Set the amount of time to wait for buffer release. void set_wait_for_release_delay_for_testing( base::TimeDelta wait_for_release_delay) { @@ -108,6 +118,13 @@ base::OnceClosure buffer_release_callback; }; +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // For ARC protected content support this tracks the state of the + // asynchronous query to determine if the GMB is using a protected buffer or + // not. + enum class ProtectedBufferState { UNKNOWN, QUERYING, PROTECTED, UNPROTECTED }; +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // This should be called when buffer is released and will notify the // client that buffer has been released. void Release(); @@ -135,6 +152,10 @@ void FenceSignalled(uint64_t commit_id); +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + void OnIsProtectedNativePixmapHandle(bool is_protected); +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + // The GPU memory buffer that contains the contents of this buffer. std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_; @@ -187,6 +208,10 @@ // Even if we send explicit synchronization release information, Wayland // protocol requires us to send regular buffer release events. base::flat_map<uint64_t, BufferRelease> buffer_releases_; + +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + ProtectedBufferState protected_buffer_state_ = ProtectedBufferState::UNKNOWN; +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) }; class SolidColorBuffer : public Buffer { @@ -203,6 +228,7 @@ std::unique_ptr<gfx::GpuFence> acquire_fence, bool secure_output_only, viz::TransferableResource* resource, + ProtectedNativePixmapQueryDelegate* protected_native_pixmap_query, PerCommitExplicitReleaseCallback per_commit_explicit_release_callback) override;
diff --git a/components/exo/buffer_unittest.cc b/components/exo/buffer_unittest.cc index f90379a6..745a70f7 100644 --- a/components/exo/buffer_unittest.cc +++ b/components/exo/buffer_unittest.cc
@@ -70,7 +70,7 @@ // Produce a transferable resource for the contents of the buffer. int release_resource_count = 0; bool rv = buffer->ProduceTransferableResource( - frame_sink_holder->resource_manager(), nullptr, false, &resource, + frame_sink_holder->resource_manager(), nullptr, false, &resource, nullptr, base::BindOnce(&ExplicitRelease, base::Unretained(&release_resource_count))); ASSERT_TRUE(rv); @@ -106,7 +106,7 @@ // Acquire a texture transferable resource for the contents of the buffer. viz::TransferableResource resource; bool rv = buffer->ProduceTransferableResource( - frame_sink_holder->resource_manager(), nullptr, false, &resource, + frame_sink_holder->resource_manager(), nullptr, false, &resource, nullptr, base::DoNothing()); ASSERT_TRUE(rv); @@ -133,7 +133,7 @@ viz::TransferableResource new_resource; rv = buffer->ProduceTransferableResource( frame_sink_holder->resource_manager(), nullptr, false, &new_resource, - base::DoNothing()); + nullptr, base::DoNothing()); ASSERT_TRUE(rv); buffer->OnDetach(); @@ -160,7 +160,7 @@ // Acquire a texture transferable resource for the contents of the buffer. viz::TransferableResource resource; bool rv = buffer->ProduceTransferableResource( - frame_sink_holder->resource_manager(), nullptr, false, &resource, + frame_sink_holder->resource_manager(), nullptr, false, &resource, nullptr, base::DoNothing()); ASSERT_TRUE(rv); @@ -195,7 +195,7 @@ // Produce a transferable resource for the contents of the buffer. int release_resource_count = 0; bool rv = buffer->ProduceTransferableResource( - frame_sink_holder->resource_manager(), nullptr, false, &resource, + frame_sink_holder->resource_manager(), nullptr, false, &resource, nullptr, base::BindOnce(&ExplicitRelease, base::Unretained(&release_resource_count))); ASSERT_TRUE(rv); @@ -252,7 +252,7 @@ // Produce a transferable resource for the contents of the buffer. int release_resource_count = 0; bool rv = buffer->ProduceTransferableResource( - frame_sink_holder->resource_manager(), nullptr, false, &resource, + frame_sink_holder->resource_manager(), nullptr, false, &resource, nullptr, base::BindOnce(&ExplicitRelease, base::Unretained(&release_resource_count))); ASSERT_TRUE(rv);
diff --git a/components/exo/drag_drop_operation.cc b/components/exo/drag_drop_operation.cc index 3be11c1..2b76a162 100644 --- a/components/exo/drag_drop_operation.cc +++ b/components/exo/drag_drop_operation.cc
@@ -296,8 +296,13 @@ void DragDropOperation::OnWebCustomDataRead(const std::string& mime_type, const std::vector<uint8_t>& data) { DCHECK(os_exchange_data_); +#if 0 base::Pickle pickle; pickle.WriteBytes(data.data(), data.size()); +#else + LOG(WARNING) << "!!!!!" << __FUNCTION__ << " " << mime_type; + base::Pickle pickle(reinterpret_cast<const char*>(data.data()), data.size()); +#endif os_exchange_data_->SetPickledData( ui::ClipboardFormatType::WebCustomDataType(), pickle); mime_type_ = mime_type;
diff --git a/components/exo/extended_drag_source.cc b/components/exo/extended_drag_source.cc index 9b192fa12..f3271554 100644 --- a/components/exo/extended_drag_source.cc +++ b/components/exo/extended_drag_source.cc
@@ -16,6 +16,7 @@ #include "base/notreached.h" #include "components/exo/data_source.h" #include "components/exo/surface.h" +#include "components/exo/wm_helper.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" @@ -322,7 +323,18 @@ // it's about to be mapped. Calculate and set its position based on // |drag_offset_| and |pointer_location_| before starting the actual drag. auto screen_location = CalculateOrigin(toplevel); - toplevel->SetBounds({screen_location, toplevel->bounds().size()}); + + auto toplevel_bounds = + gfx::Rect({screen_location, toplevel->bounds().size()}); + toplevel->SetBounds(toplevel_bounds); + + if (WMHelper::GetInstance()->InTabletMode()) { + // The bounds that is stored in ash::kRestoreBoundsOverrideKey will be used + // by DragDetails to calculate the detached window bounds during dragging + // when detaching in tablet mode to ensure the detached window is correctly + // placed under the pointer/finger. + toplevel->SetProperty(ash::kRestoreBoundsOverrideKey, toplevel_bounds); + } DVLOG(1) << "Dragged window mapped. toplevel=" << toplevel << " origin=" << screen_location.ToString();
diff --git a/components/exo/extended_drag_source_unittest.cc b/components/exo/extended_drag_source_unittest.cc index 371bfd6..ca9bd99 100644 --- a/components/exo/extended_drag_source_unittest.cc +++ b/components/exo/extended_drag_source_unittest.cc
@@ -7,8 +7,10 @@ #include <memory> #include <string> +#include "ash/constants/app_types.h" #include "ash/drag_drop/drag_drop_controller.h" #include "ash/drag_drop/toplevel_window_drag_delegate.h" +#include "ash/public/cpp/tablet_mode.h" #include "ash/public/cpp/window_properties.h" #include "ash/shell.h" #include "ash/wm/toplevel_window_event_handler.h" @@ -27,6 +29,7 @@ #include "components/exo/test/shell_surface_builder.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/aura/client/aura_constants.h" #include "ui/aura/client/drag_drop_client.h" #include "ui/aura/client/drag_drop_delegate.h" #include "ui/aura/window_tree_host.h" @@ -184,6 +187,15 @@ TestDataSourceDelegate* data_source_delegate_ = nullptr; }; +// Enables or disables tablet mode and waits for the transition to finish. +void SetTabletModeEnabled(bool enabled) { + // This does not use ShellTestApi or TabletModeControllerTestApi because those + // are implemented in test-only files. + ash::TabletMode::Waiter waiter(enabled); + ash::Shell::Get()->tablet_mode_controller()->SetEnabledForTest(enabled); + waiter.Wait(); +} + } // namespace TEST_F(ExtendedDragSourceTest, DestroySource) { @@ -261,6 +273,9 @@ dragged_window_ = surface_window_->GetToplevelWindow(); dragged_window_->AddObserver(this); surface_window_->RemoveObserver(this); + + dragged_window_->SetProperty(aura::client::kAppType, + static_cast<int>(ash::AppType::LACROS)); } MOCK_METHOD(void, OnWindowVisibilityChanging, @@ -322,6 +337,7 @@ EXPECT_FALSE(toplevel_handler->is_drag_in_progress()); EXPECT_TRUE(toplevel_window->GetProperty(ash::kIsDraggingTabsKey)); }))); + EXPECT_CALL(checker, OnWindowVisibilityChanged(_, _)) .Times(1) .WillOnce(InvokeWithoutArgs([]() { @@ -349,7 +365,83 @@ EXPECT_EQ(gfx::Point(140, 140), window->GetBoundsInScreen().origin()); } -TEST_F(ExtendedDragSourceTest, DragSurfaceNotMappedYetWithTouch) { +TEST_F(ExtendedDragSourceTest, DragSurfaceNotMappedYet_TabletMode) { + SetTabletModeEnabled(true); + + // Create and Map the drag origin surface + auto surface = std::make_unique<Surface>(); + auto shell_surface = std::make_unique<ShellSurface>(surface.get()); + auto buffer = CreateBuffer({32, 32}); + surface->Attach(buffer.get()); + surface->Commit(); + + // Creates a mouse-pressed event before starting the drag session. + ui::test::EventGenerator generator(GetContext(), gfx::Point(10, 10)); + generator.PressLeftButton(); + + // Start the DND + extended-drag session. + StartExtendedDragSession(shell_surface->GetWidget()->GetNativeWindow(), + gfx::Point(0, 0), ui::DragDropTypes::DRAG_MOVE, + ui::mojom::DragEventSource::kMouse); + + // Create a new surface to emulate a "detachment" process. + auto detached_surface = std::make_unique<Surface>(); + auto detached_shell_surface = + std::make_unique<ShellSurface>(detached_surface.get()); + + // Set |surface| as the dragged surface while it's still unmapped/invisible. + // This can be used to implement tab detaching in Chrome's tab drag use case, + // for example. Extended drag source will monitor surface mapping and it's + // expected to position it correctly using the provided drag offset here + // relative to the current pointer location. + extended_drag_source_->Drag(detached_surface.get(), gfx::Vector2d(10, 10)); + EXPECT_FALSE(extended_drag_source_->GetDraggedWindowForTesting()); + EXPECT_TRUE(extended_drag_source_->GetDragOffsetForTesting().has_value()); + EXPECT_EQ(gfx::Vector2d(10, 10), + *extended_drag_source_->GetDragOffsetForTesting()); + + // Ensure drag 'n drop starts after + // ExtendedDragSource::OnDraggedWindowVisibilityChanged() + aura::Window* toplevel_window; + WindowObserverHookChecker checker(detached_surface->window()); + EXPECT_CALL(checker, OnWindowVisibilityChanging(_, _)) + .Times(1) + .WillOnce(DoAll( + SaveArg<0>(&toplevel_window), InvokeWithoutArgs([&]() { + auto* toplevel_handler = + ash::Shell::Get()->toplevel_window_event_handler(); + EXPECT_FALSE(toplevel_handler->is_drag_in_progress()); + EXPECT_TRUE(toplevel_window->GetProperty(ash::kIsDraggingTabsKey)); + }))); + EXPECT_CALL(checker, OnWindowVisibilityChanged(_, _)) + .Times(1) + .WillOnce(DoAll( + SaveArg<0>(&toplevel_window), InvokeWithoutArgs([&]() { + auto* toplevel_handler = + ash::Shell::Get()->toplevel_window_event_handler(); + EXPECT_TRUE(toplevel_handler->is_drag_in_progress()); + gfx::Rect* override_bounds = + toplevel_window->GetProperty(ash::kRestoreBoundsOverrideKey); + EXPECT_TRUE(override_bounds && !override_bounds->IsEmpty()); + EXPECT_EQ(*override_bounds, toplevel_window->bounds()); + }))); + + // Map the |detached_surface|. + auto detached_buffer = CreateBuffer({50, 50}); + detached_surface->Attach(detached_buffer.get()); + detached_surface->Commit(); + + // Ensure the toplevel window for the dragged surface set above, is correctly + // detected, after it's mapped. + aura::Window* window = detached_shell_surface->GetWidget()->GetNativeWindow(); + EXPECT_TRUE(extended_drag_source_->GetDraggedWindowForTesting()); + EXPECT_EQ(window, extended_drag_source_->GetDraggedWindowForTesting()); + + generator.ReleaseLeftButton(); + SetTabletModeEnabled(false); +} + +TEST_F(ExtendedDragSourceTest, DragSurfaceNotMappedYet_Touch) { // Create and Map the drag origin surface auto surface = std::make_unique<Surface>(); auto shell_surface = std::make_unique<ShellSurface>(surface.get());
diff --git a/components/exo/protected_native_pixmap_query_delegate.h b/components/exo/protected_native_pixmap_query_delegate.h new file mode 100644 index 0000000..78c8ee5 --- /dev/null +++ b/components/exo/protected_native_pixmap_query_delegate.h
@@ -0,0 +1,28 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_PROTECTED_NATIVE_PIXMAP_QUERY_DELEGATE_H_ +#define COMPONENTS_EXO_PROTECTED_NATIVE_PIXMAP_QUERY_DELEGATE_H_ + +#include "base/callback_forward.h" +#include "base/files/scoped_file.h" + +namespace exo { +// Interface for querying if a GMB handle is associated with a protected native +// pixmap. This is needed for platforms with HW protected video so we set the +// properties on the quad correctly. +class ProtectedNativePixmapQueryDelegate { + public: + virtual ~ProtectedNativePixmapQueryDelegate() = default; + + using IsProtectedNativePixmapHandleCallback = base::OnceCallback<void(bool)>; + // Queries the GPU process for whether or not the passed in handle is + // associated with protected native pixmap. Invokes the callback + // asynchronously with the result. + virtual void IsProtectedNativePixmapHandle( + base::ScopedFD handle, + IsProtectedNativePixmapHandleCallback callback) = 0; +}; +} // namespace exo +#endif // COMPONENTS_EXO_PROTECTED_NATIVE_PIXMAP_QUERY_DELEGATE_H_ \ No newline at end of file
diff --git a/components/exo/surface.cc b/components/exo/surface.cc index aa9b336..a70c1f37 100644 --- a/components/exo/surface.cc +++ b/components/exo/surface.cc
@@ -23,6 +23,7 @@ #include "components/exo/shell_surface_util.h" #include "components/exo/surface_delegate.h" #include "components/exo/surface_observer.h" +#include "components/exo/window_properties.h" #include "components/exo/wm_helper.h" #include "components/viz/common/quads/compositor_render_pass.h" #include "components/viz/common/quads/shared_quad_state.h" @@ -30,6 +31,7 @@ #include "components/viz/common/quads/surface_draw_quad.h" #include "components/viz/common/quads/texture_draw_quad.h" #include "components/viz/common/resources/resource_id.h" +#include "media/media_buildflags.h" #include "third_party/khronos/GLES2/gl2.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkPath.h" @@ -1196,6 +1198,8 @@ resource_manager, std::move(state_.acquire_fence), state_.basic_state.only_visible_on_secure_output, ¤t_resource_, + window_->GetToplevelWindow()->GetProperty( + kProtectedNativePixmapQueryDelegate), std::move(state_.per_commit_explicit_release_callback_))) { current_resource_has_alpha_ = FormatHasAlpha(state_.buffer.buffer()->GetFormat()); @@ -1455,6 +1459,14 @@ break; } +#if BUILDFLAG(USE_ARC_PROTECTED_MEDIA) + if (state_.basic_state.only_visible_on_secure_output && + state_.buffer.buffer() && + state_.buffer.buffer()->NeedsHardwareProtection()) { + texture_quad->protected_video_type = + gfx::ProtectedVideoType::kHardwareProtected; + } +#endif // BUILDFLAG(USE_ARC_PROTECTED_MEDIA) frame->resource_list.push_back(current_resource_); if (!damage_rect.IsEmpty()) {
diff --git a/components/exo/window_properties.cc b/components/exo/window_properties.cc index 0043acf..212e29f 100644 --- a/components/exo/window_properties.cc +++ b/components/exo/window_properties.cc
@@ -4,10 +4,16 @@ #include "components/exo/window_properties.h" +DEFINE_UI_CLASS_PROPERTY_TYPE(exo::ProtectedNativePixmapQueryDelegate*) + namespace exo { DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(std::string, kApplicationIdKey, nullptr) DEFINE_UI_CLASS_PROPERTY_KEY(bool, kRestoreOrMaximizeExitsFullscreen, false) +DEFINE_UI_CLASS_PROPERTY_KEY(ProtectedNativePixmapQueryDelegate*, + kProtectedNativePixmapQueryDelegate, + nullptr) + } // namespace exo
diff --git a/components/exo/window_properties.h b/components/exo/window_properties.h index 8119b68..fc626f2 100644 --- a/components/exo/window_properties.h +++ b/components/exo/window_properties.h
@@ -7,6 +7,7 @@ #include <string> +#include "components/exo/protected_native_pixmap_query_delegate.h" #include "ui/base/class_property.h" namespace exo { @@ -20,6 +21,10 @@ // Currently only set to true for Lacros windows. extern const ui::ClassProperty<bool>* const kRestoreOrMaximizeExitsFullscreen; +// Provides access to a delegate for determining if a native pixmap corresponds +// to a HW protected buffer. +extern const ui::ClassProperty<ProtectedNativePixmapQueryDelegate*>* const + kProtectedNativePixmapQueryDelegate; } // namespace exo #endif // COMPONENTS_EXO_WINDOW_PROPERTIES_H_
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManager.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManager.java index ae4cf0e..be6a2ef0 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManager.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManager.java
@@ -84,6 +84,10 @@ mMessages.put(messageKey, messageState); MessageState candidate = getNextMessage(); + if (candidate != null) { + Log.w(TAG, "Currently displaying message with ID %s and key %s.", + candidate.handler.getMessageIdentifier(), candidate.messageKey); + } updateCurrentDisplayedMessage(true, candidate); if (candidate == messageState) { @@ -123,6 +127,8 @@ // Remove the scope from the map if the messageQueue is empty. List<MessageState> messageQueue = mMessageQueues.get(scopeKey); messageQueue.remove(messageState); + Log.w(TAG, "Removed message with ID %s and key %s from the message queue.", + messageState.handler.getMessageIdentifier(), messageState.messageKey); if (messageQueue.isEmpty()) { mMessageQueues.remove(scopeKey); mScopeChangeController.lastMessageDismissed(scopeKey); @@ -190,6 +196,12 @@ if (mCurrentDisplayedMessage == null) { return; } + Log.w(TAG, + "MessageStateHandler#shouldShow for message with ID %s and key %s in " + + "MessageQueueManager#updateCurrentDisplayedMessage " + + "returned %s.", + candidate.handler.getMessageIdentifier(), candidate.messageKey, + candidate.handler.shouldShow()); mCurrentDisplayedMessage.handler.show(); mLastShownMessage = mCurrentDisplayedMessage; }); @@ -245,8 +257,10 @@ if (isActive == null || !isActive) continue; for (MessageState candidate : queue) { boolean shouldShow = candidate.handler.shouldShow(); - Log.d(TAG, "MessageStateHandler#shouldShow for message ID %s returned %s.", - candidate.handler.getMessageIdentifier(), shouldShow); + Log.w(TAG, + "MessageStateHandler#shouldShow for message with ID %s and key %s in " + + "MessageQueueManager#getNextMessage returned %s.", + candidate.handler.getMessageIdentifier(), candidate.messageKey, shouldShow); if (shouldShow && (nextMessage == null || (candidate.highPriority && !nextMessage.highPriority)
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManagerTest.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManagerTest.java index 122b8499..7931c643 100644 --- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManagerTest.java +++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageQueueManagerTest.java
@@ -175,7 +175,7 @@ queueManager.setDelegate(mEmptyDelegate); MessageStateHandler m1 = Mockito.spy(new EmptyMessageStateHandler()); - when(m1.shouldShow()).thenReturn(true, true, false); + when(m1.shouldShow()).thenReturn(true, true, true, false); // m1#shouldShow will be invoked and will return true. queueManager.enqueueMessage(m1, m1, SCOPE_INSTANCE_ID, false); @@ -190,7 +190,7 @@ messageState = queueManager.getNextMessage(); Assert.assertNull("Next message candidate should be null.", messageState); - verify(m1, times(3)).shouldShow(); + verify(m1, times(4)).shouldShow(); queueManager.dismissMessage(m1, DismissReason.TIMER); verify(m1).hide(anyBoolean(), any());
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index db2dbb7..48c9a25 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -746,14 +746,6 @@ /*is_certainly_browser_timestamp=*/false); if (committed_load_) { - bool is_non_user_initiated_client_redirect = - !IsNavigationUserInitiated(newly_committed_navigation) && - (newly_committed_navigation->GetPageTransition() & - ui::PAGE_TRANSITION_CLIENT_REDIRECT) != 0; - if (is_non_user_initiated_client_redirect) { - committed_load_->NotifyClientRedirectTo(newly_committed_navigation); - } - // Ensure that any pending update gets dispatched. committed_load_->metrics_update_dispatcher()->FlushPendingTimingUpdates(); }
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index 545296cb..edd349d 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -808,9 +808,6 @@ GURL(kDefaultTestUrl2), subframe); SimulateTimingUpdateWithoutFiringDispatchTimer(subframe_timing, subframe); - histogram_tester_.ExpectTotalCount( - page_load_metrics::internal::kHistogramOutOfOrderTiming, 1); - EXPECT_TRUE(GetMostRecentTimer()->IsRunning()); ASSERT_EQ(0, CountUpdatedTimingReported()); @@ -859,12 +856,6 @@ ASSERT_EQ(2, CountUpdatedTimingReported()); EXPECT_LT(updated_first_paint, initial_first_paint); - histogram_tester_.ExpectTotalCount( - page_load_metrics::internal::kHistogramOutOfOrderTimingBuffered, 1); - histogram_tester_.ExpectBucketCount( - page_load_metrics::internal::kHistogramOutOfOrderTimingBuffered, - (initial_first_paint - updated_first_paint).InMilliseconds(), 1); - CheckNoErrorEvents(); }
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc index e94f12e..2ba0be0 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
@@ -27,10 +27,6 @@ const char kPageLoadTimingStatus[] = "PageLoad.Internal.PageLoadTimingStatus"; const char kPageLoadTimingDispatchStatus[] = "PageLoad.Internal.PageLoadTimingStatus.AtTimingCallbackDispatch"; -const char kHistogramOutOfOrderTiming[] = - "PageLoad.Internal.OutOfOrderInterFrameTiming"; -const char kHistogramOutOfOrderTimingBuffered[] = - "PageLoad.Internal.OutOfOrderInterFrameTiming.AfterBuffering"; } // namespace internal @@ -237,19 +233,6 @@ return internal::VALID; } -// If the updated value has an earlier time than the current value, log so we -// can keep track of how often this happens. -void LogIfOutOfOrderTiming(const absl::optional<base::TimeDelta>& current, - const absl::optional<base::TimeDelta>& update) { - if (!current || !update) - return; - - if (update < current) { - PAGE_LOAD_HISTOGRAM(internal::kHistogramOutOfOrderTimingBuffered, - current.value() - update.value()); - } -} - // PageLoadTimingMerger merges timing values received from different frames // together. class PageLoadTimingMerger { @@ -318,8 +301,6 @@ // to happen occasionally, as inter-frame updates can arrive out of order. // Record a histogram to track how frequently it happens, along with the // magnitude of the delta. - PAGE_LOAD_HISTOGRAM(internal::kHistogramOutOfOrderTiming, - inout_existing_value->value() - candidate_new_value); } else { // We only want to set this for new updates. If there's already a value, // then the window during which we buffer updates is over. We'll still @@ -884,15 +865,6 @@ if (current_merged_page_timing_->Equals(*pending_merged_page_timing_)) return; - LogIfOutOfOrderTiming(current_merged_page_timing_->paint_timing->first_paint, - pending_merged_page_timing_->paint_timing->first_paint); - LogIfOutOfOrderTiming( - current_merged_page_timing_->paint_timing->first_image_paint, - pending_merged_page_timing_->paint_timing->first_image_paint); - LogIfOutOfOrderTiming( - current_merged_page_timing_->paint_timing->first_contentful_paint, - pending_merged_page_timing_->paint_timing->first_contentful_paint); - current_merged_page_timing_ = pending_merged_page_timing_->Clone(); internal::PageLoadTimingStatus status =
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h index 0cabcbba..5e587fa 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h
@@ -97,8 +97,6 @@ }; extern const char kPageLoadTimingStatus[]; -extern const char kHistogramOutOfOrderTiming[]; -extern const char kHistogramOutOfOrderTimingBuffered[]; } // namespace internal
diff --git a/components/page_load_metrics/browser/page_load_tracker.cc b/components/page_load_metrics/browser/page_load_tracker.cc index c8f308ece..a96e788 100644 --- a/components/page_load_metrics/browser/page_load_tracker.cc +++ b/components/page_load_metrics/browser/page_load_tracker.cc
@@ -62,15 +62,10 @@ "PageLoad.Internal.ProvisionalAbortChainSize.SameURL"; const char kAbortChainSizeNoCommit[] = "PageLoad.Internal.ProvisionalAbortChainSize.NoCommit"; -const char kClientRedirectFirstPaintToNavigation[] = - "PageLoad.Internal.ClientRedirect.FirstPaintToNavigation"; -const char kClientRedirectWithoutPaint[] = - "PageLoad.Internal.ClientRedirect.NavigationWithoutPaint"; const char kPageLoadCompletedAfterAppBackground[] = "PageLoad.Internal.PageLoadCompleted.AfterAppBackground"; const char kPageLoadStartedInForeground[] = "PageLoad.Internal.NavigationStartedInForeground"; -const char kPageLoadPrerender[] = "PageLoad.Internal.Prerender"; const char kPageLoadPrerender2Event[] = "PageLoad.Internal.Prerender2.Event"; } // namespace internal @@ -270,9 +265,6 @@ UMA_HISTOGRAM_BOOLEAN(internal::kPageLoadStartedInForeground, started_in_foreground_); - if (embedder_interface_->IsNoStatePrefetch( - navigation_handle->GetWebContents())) - UMA_HISTOGRAM_BOOLEAN(internal::kPageLoadPrerender, true); } PageLoadTracker::~PageLoadTracker() { @@ -544,23 +536,6 @@ metrics_update_dispatcher_.timing()); } -void PageLoadTracker::NotifyClientRedirectTo( - content::NavigationHandle* destination) { - if (metrics_update_dispatcher_.timing().paint_timing->first_paint) { - base::TimeTicks first_paint_time = - navigation_start() + - metrics_update_dispatcher_.timing().paint_timing->first_paint.value(); - base::TimeDelta first_paint_to_navigation; - if (destination->NavigationStart() > first_paint_time) - first_paint_to_navigation = - destination->NavigationStart() - first_paint_time; - PAGE_LOAD_HISTOGRAM(internal::kClientRedirectFirstPaintToNavigation, - first_paint_to_navigation); - } else { - UMA_HISTOGRAM_BOOLEAN(internal::kClientRedirectWithoutPaint, true); - } -} - void PageLoadTracker::OnLoadedResource( const ExtraRequestCompleteInfo& extra_request_complete_info) { for (const auto& observer : observers_) {
diff --git a/components/page_load_metrics/browser/page_load_tracker.h b/components/page_load_metrics/browser/page_load_tracker.h index 41921e1..aa08b5c0 100644 --- a/components/page_load_metrics/browser/page_load_tracker.h +++ b/components/page_load_metrics/browser/page_load_tracker.h
@@ -293,8 +293,6 @@ visibility_tracker_ = tracker; } - void NotifyClientRedirectTo(content::NavigationHandle* destination); - void OnLoadedResource( const ExtraRequestCompleteInfo& extra_request_complete_info);
diff --git a/components/permissions/android/res/color/item_chooser_row_icon_color.xml b/components/permissions/android/res/color/item_chooser_row_icon_color.xml index d29d0b80..d27af039 100644 --- a/components/permissions/android/res/color/item_chooser_row_icon_color.xml +++ b/components/permissions/android/res/color/item_chooser_row_icon_color.xml
@@ -4,7 +4,7 @@ found in the LICENSE file. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:color="@color/default_icon_color_inverse" android:state_selected="true"/> + <item android:color="@macro/default_icon_color_inverse" android:state_selected="true"/> <item android:alpha="@dimen/default_disabled_alpha" android:state_enabled="false" android:color="@macro/default_icon_color" /> <item android:color="@macro/default_icon_color"/>
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 53b4387b..2f0479e 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -869,12 +869,18 @@ void ResizeForPrinting(); void RestoreSize(); void CopySelection(const WebPreferences& preferences); + void ComputeScalingAndPrintParams(blink::WebLocalFrame* frame, + mojom::PrintParamsPtr& print_params, + bool is_pdf, + bool ignore_css_margins, + bool fit_to_page); FrameReference frame_; FrameReference original_frame_; blink::WebNavigationControl* navigation_control_ = nullptr; blink::WebNode node_to_print_; bool owns_web_view_ = false; + mojom::PrintParamsPtr selection_only_print_params_; blink::WebPrintParams web_print_params_; gfx::Size prev_view_size_; uint32_t expected_pages_count_ = 0; @@ -902,21 +908,18 @@ mojom::PrintParamsPtr print_params = params.Clone(); bool source_is_pdf = IsPrintingNodeOrPdfFrame(frame, node_to_print_); - if (!should_print_selection_only_) { + if (should_print_selection_only_) { + // Save the parameters for use in `CopySelection()`. + selection_only_print_params_ = std::move(print_params); + + // Printing selection not an option for PDF. + DCHECK(!source_is_pdf); + } else { bool fit_to_page = ignore_css_margins && IsPrintScalingOptionFitToPage(*print_params); - ComputeWebKitPrintParamsInDesiredDpi(params, source_is_pdf, - &web_print_params_); - frame->PrintBegin(web_print_params_, node_to_print_); - double scale_factor = PrintRenderFrameHelper::GetScaleFactor( - print_params->scale_factor, source_is_pdf); - print_params = - CalculatePrintParamsForCss(frame, 0, *print_params, ignore_css_margins, - fit_to_page, &scale_factor); - frame->PrintEnd(); + ComputeScalingAndPrintParams(frame, print_params, source_is_pdf, + ignore_css_margins, fit_to_page); } - ComputeWebKitPrintParamsInDesiredDpi(*print_params, source_is_pdf, - &web_print_params_); } PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() { @@ -975,9 +978,11 @@ void PrepareFrameAndViewForPrint::CopySelection( const WebPreferences& preferences) { ResizeForPrinting(); - frame()->PrintBegin(web_print_params_, node_to_print_); + ComputeScalingAndPrintParams(frame(), selection_only_print_params_, + /*is_pdf=*/false, + /*ignore_css_margins=*/false, + /*fit_to_page=*/false); std::string html = frame()->SelectionAsMarkup().Utf8(); - frame()->PrintEnd(); RestoreSize(); // Create a new WebView with the same settings as the current display one. @@ -1038,6 +1043,25 @@ /*extra_data=*/nullptr); } +void PrepareFrameAndViewForPrint::ComputeScalingAndPrintParams( + blink::WebLocalFrame* frame, + mojom::PrintParamsPtr& print_params, + bool is_pdf, + bool ignore_css_margins, + bool fit_to_page) { + ComputeWebKitPrintParamsInDesiredDpi(*print_params, is_pdf, + &web_print_params_); + frame->PrintBegin(web_print_params_, node_to_print_); + double scale_factor = PrintRenderFrameHelper::GetScaleFactor( + print_params->scale_factor, is_pdf); + print_params = CalculatePrintParamsForCss(frame, /*page_index=*/0, + *print_params, ignore_css_margins, + fit_to_page, &scale_factor); + frame->PrintEnd(); + ComputeWebKitPrintParamsInDesiredDpi(*print_params, is_pdf, + &web_print_params_); +} + void PrepareFrameAndViewForPrint::DidStopLoading() { DCHECK(!on_ready_.is_null()); // Don't call callback here, because it can delete |this| and WebView that is
diff --git a/components/printing/test/print_render_frame_helper_browsertest.cc b/components/printing/test/print_render_frame_helper_browsertest.cc index 4d1d51e..f2541f4 100644 --- a/components/printing/test/print_render_frame_helper_browsertest.cc +++ b/components/printing/test/print_render_frame_helper_browsertest.cc
@@ -1628,11 +1628,11 @@ OnPrintPreview(); + constexpr int kExpectedPageCount = 3; EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); - VerifyDidPreviewPage(true, 0); - // TODO(crbug.com/1023416): The preview should contain 3 pages, like the - // PrintPreviewForManyLinesOfTextWithScaling test case. - VerifyPreviewPageCount(1); + for (int i = 0; i < kExpectedPageCount; ++i) + VerifyDidPreviewPage(true, i); + VerifyPreviewPageCount(kExpectedPageCount); VerifyPrintPreviewCancelled(false); VerifyPrintPreviewFailed(false); VerifyPrintPreviewGenerated(true);
diff --git a/components/subresource_redirect/subresource_redirect_test_util.h b/components/subresource_redirect/subresource_redirect_test_util.h index 713197fe..8a36b11 100644 --- a/components/subresource_redirect/subresource_redirect_test_util.h +++ b/components/subresource_redirect/subresource_redirect_test_util.h
@@ -6,6 +6,7 @@ #define COMPONENTS_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_TEST_UTIL_H_ #include <string> +#include <vector> namespace subresource_redirect {
diff --git a/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java index 93e0888..9cdb0a5ef 100644 --- a/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java +++ b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
@@ -80,9 +80,7 @@ .getServerConnection(VariationsSeedFetcher.VariationsPlatform.ANDROID, sRestrict, sMilestone, sChannel); mPrefs = ContextUtils.getAppSharedPreferences(); - - RecordHistogram.forgetHistogramForTesting( - VariationsSeedFetcher.SEED_FETCH_RESULT_HISTOGRAM); + ShadowRecordHistogram.reset(); } @After
diff --git a/components/variations/service/variations_field_trial_creator_unittest.cc b/components/variations/service/variations_field_trial_creator_unittest.cc index fc3eda4..0b7288c2 100644 --- a/components/variations/service/variations_field_trial_creator_unittest.cc +++ b/components/variations/service/variations_field_trial_creator_unittest.cc
@@ -174,7 +174,7 @@ } }; -// TODO(crbug.com/1167566): Remove when fake VariationsServiceClient created. +// TODO(crbug/1167566): Remove when fake VariationsServiceClient created. class TestVariationsServiceClient : public VariationsServiceClient { public: TestVariationsServiceClient() = default; @@ -404,6 +404,16 @@ : public FieldTrialCreatorSafeModeExperimentTest, public ::testing::WithParamInterface<StartupVisibilityTestParams> {}; +struct ChannelTestParams { + const std::string test_name; + version_info::Channel channel; + bool should_experiment_be_active; +}; + +class SafeModeExperimentTestByChannel + : public FieldTrialCreatorSafeModeExperimentTest, + public ::testing::WithParamInterface<ChannelTestParams> {}; + // Verify that unexpired seeds are used. TEST_F(FieldTrialCreatorTest, SetUpFieldTrials_ValidSeed_NotExpired) { DisableTestingConfig(); @@ -678,7 +688,7 @@ } // Verify that Chrome applies the regular variations seed when Chrome should run -// in variations safe mode but the safe seed is empty. +// in Variations Safe Mode but the safe seed is empty. TEST_F(FieldTrialCreatorTest, SetUpFieldTrials_EmptySafeSeed_UsesRegularSeed) { DisableTestingConfig(); @@ -717,7 +727,7 @@ } // Verify that Chrome does not apply a variations seed when Chrome should run in -// variations safe mode and a safe seed cannot be loaded. +// Variations Safe Mode and a safe seed cannot be loaded. TEST_F(FieldTrialCreatorTest, SetUpFieldTrials_CorruptedSafeSeed_DoesNotUseSeed) { DisableTestingConfig(); @@ -966,7 +976,7 @@ TEST_P(FieldTrialCreatorTestWithStartupVisibility, SkipExperimentInBackgroundSessions) { - // Ensure that variations safe mode is not triggered. + // Ensure that Variations Safe Mode is not triggered. NiceMock<MockSafeSeedManager> safe_seed_manager(local_state()); ON_CALL(safe_seed_manager, ShouldRunInSafeMode()) .WillByDefault(Return(false)); @@ -993,54 +1003,65 @@ base::FeatureList::ClearInstanceForTesting(); } -// TODO(b/184937096): Update this test if and when the extended variations safe -// mode experiment is rolled out to beta or stable. -TEST_F(FieldTrialCreatorSafeModeExperimentTest, - DisableExperimentOnSelectChannels) { - // Ensure that variations safe mode is not triggered. +INSTANTIATE_TEST_SUITE_P( + All, + SafeModeExperimentTestByChannel, + ::testing::Values( + ChannelTestParams{.test_name = "Unknown", + .channel = version_info::Channel::UNKNOWN, + .should_experiment_be_active = true}, + ChannelTestParams{.test_name = "Canary", + .channel = version_info::Channel::CANARY, + .should_experiment_be_active = true}, + ChannelTestParams{.test_name = "Dev", + .channel = version_info::Channel::DEV, + .should_experiment_be_active = true}, + ChannelTestParams{.test_name = "Beta", + .channel = version_info::Channel::BETA, + .should_experiment_be_active = true}, + ChannelTestParams{.test_name = "Stable", + .channel = version_info::Channel::STABLE, + .should_experiment_be_active = false}), + [](const ::testing::TestParamInfo<ChannelTestParams>& params) { + return params.param.test_name; + }); + +// Verify that the Extended Variations Safe Mode experiment is active on +// pre-stable channels and disabled on stable. +// +// TODO(crbug/1269139): Update this test as the Extended Variations Safe Mode +// experiment is rolled out. +TEST_P(SafeModeExperimentTestByChannel, FieldTrialActivationIsValid) { + // Ensure that Variations Safe Mode is not triggered. NiceMock<MockSafeSeedManager> safe_seed_manager(local_state()); ON_CALL(safe_seed_manager, ShouldRunInSafeMode()) .WillByDefault(Return(false)); -// For desktop and iOS, the Extended Variations Safe Mode experiment is enabled -// on pre-stable channels; for Android Chrome, on canary and dev. -#if defined(OS_ANDROID) - std::vector<version_info::Channel> channels = {version_info::Channel::BETA, - version_info::Channel::STABLE}; -#else - std::vector<version_info::Channel> channels = {version_info::Channel::STABLE}; -#endif // defined(OS_ANDROID) + ChannelTestParams params = GetParam(); + NiceMock<MockVariationsServiceClient> variations_service_client; + ON_CALL(variations_service_client, GetChannel()) + .WillByDefault(Return(params.channel)); - for (const version_info::Channel channel : channels) { - NiceMock<MockVariationsServiceClient> variations_service_client; - ON_CALL(variations_service_client, GetChannel()) - .WillByDefault(Return(channel)); + TestVariationsFieldTrialCreator field_trial_creator( + local_state(), &variations_service_client, &safe_seed_manager, + params.channel, user_data_dir_path()); - TestVariationsFieldTrialCreator field_trial_creator( - local_state(), &variations_service_client, &safe_seed_manager, channel); - - base::HistogramTester histogram_tester; - ASSERT_TRUE(field_trial_creator.SetUpFieldTrials()); - - // Verify that the experiment is not active. - EXPECT_FALSE(base::FieldTrialList::IsTrialActive(kExtendedSafeModeTrial)); - - // Check metrics. - histogram_tester.ExpectTotalCount( - "Variations.ExtendedSafeMode.WritePrefsTime", 0); - - base::FeatureList::ClearInstanceForTesting(); - } + ASSERT_TRUE(field_trial_creator.SetUpFieldTrials()); + // Verify that the experiment is (or is not) active. + EXPECT_EQ(params.should_experiment_be_active, + base::FieldTrialList::IsTrialActive(kExtendedSafeModeTrial)); + EXPECT_EQ(params.should_experiment_be_active, + field_trial_creator.was_maybe_extend_variations_safe_mode_called()); } TEST_F(FieldTrialCreatorSafeModeExperimentTest, - EnableExperimentOnCanary_ControlGroup) { + ControlGroupDoesNotWriteBeaconFile) { NiceMock<MockVariationsServiceClient> variations_service_client; - version_info::Channel channel = version_info::Channel::CANARY; + version_info::Channel channel = version_info::Channel::BETA; ON_CALL(variations_service_client, GetChannel()) .WillByDefault(Return(channel)); - // Ensure that variations safe mode is not triggered. + // Ensure that Variations Safe Mode is not triggered. NiceMock<MockSafeSeedManager> safe_seed_manager(local_state()); ON_CALL(safe_seed_manager, ShouldRunInSafeMode()) .WillByDefault(Return(false)); @@ -1050,7 +1071,8 @@ // desired group. int active_group = SetUpExtendedSafeModeExperiment(kControlGroup); TestVariationsFieldTrialCreator field_trial_creator( - local_state(), &variations_service_client, &safe_seed_manager, channel); + local_state(), &variations_service_client, &safe_seed_manager, channel, + user_data_dir_path()); base::HistogramTester histogram_tester; ASSERT_TRUE(field_trial_creator.SetUpFieldTrials()); @@ -1065,19 +1087,19 @@ histogram_tester.ExpectTotalCount( "Variations.ExtendedSafeMode.WritePrefsTime", 1); - // Verify that the Variations Safe Mode file does not exist. + // Verify that the beacon file does not exist. EXPECT_FALSE(base::PathExists( user_data_dir_path().Append(variations::kVariationsFilename))); } TEST_F(FieldTrialCreatorSafeModeExperimentTest, - EnableExperimentOnDev_SignalAndWriteViaFileUtilGroup) { + ExperimentGroupWritesBeaconFile) { NiceMock<MockVariationsServiceClient> variations_service_client; - version_info::Channel channel = version_info::Channel::DEV; + version_info::Channel channel = version_info::Channel::BETA; ON_CALL(variations_service_client, GetChannel()) .WillByDefault(Return(channel)); - // Ensure that variations safe mode is not triggered. + // Ensure that Variations Safe Mode is not triggered. NiceMock<MockSafeSeedManager> safe_seed_manager(local_state()); ON_CALL(safe_seed_manager, ShouldRunInSafeMode()) .WillByDefault(Return(false));
diff --git a/components/viz/service/display_embedder/compositor_gpu_thread.cc b/components/viz/service/display_embedder/compositor_gpu_thread.cc index e0a0b542..a09dd98 100644 --- a/components/viz/service/display_embedder/compositor_gpu_thread.cc +++ b/components/viz/service/display_embedder/compositor_gpu_thread.cc
@@ -152,7 +152,8 @@ #endif /*metal_context_provider=*/nullptr, /*dawn_context_provider=*/nullptr, - /*peak_memory_monitor=*/weak_ptr_factory_.GetWeakPtr()); + /*peak_memory_monitor=*/weak_ptr_factory_.GetWeakPtr(), + /*created_on_compositor_gpu_thread=*/true); const auto& workarounds = gpu_channel_manager_->gpu_driver_bug_workarounds(); auto gles2_feature_info = base::MakeRefCounted<gpu::gles2::FeatureInfo>(
diff --git a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc index 49d90169..5adf9c0 100644 --- a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc +++ b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
@@ -84,7 +84,7 @@ return mojom::WebUIAttributionReport::New( report.report_id(), report.source().ConversionDestination().Serialize(), report.ReportURL(), - /*trigger_time=*/report.conversion_time().ToJsTime(), + /*trigger_time=*/report.trigger_time().ToJsTime(), /*report_time=*/report.report_time().ToJsTime(), report.priority(), report.ReportBody(/*pretty_print=*/true), /*attributed_truthfully=*/report.source().attribution_logic() ==
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.cc b/content/browser/attribution_reporting/attribution_manager_impl.cc index 8500138a..14c773d 100644 --- a/content/browser/attribution_reporting/attribution_manager_impl.cc +++ b/content/browser/attribution_reporting/attribution_manager_impl.cc
@@ -108,14 +108,14 @@ // a long time while a conversion report is pending. Revisit this range if it // is non-ideal for real world data. base::Time original_report_time = - ComputeReportTime(report.source(), report.conversion_time()); + ComputeReportTime(report.source(), report.trigger_time()); base::TimeDelta time_since_original_report_time = now - original_report_time; base::UmaHistogramCustomTimes( "Conversions.ExtraReportDelay2", time_since_original_report_time, base::Seconds(1), base::Days(24), /*buckets=*/100); base::TimeDelta time_from_conversion_to_report_send = - report.report_time() - report.conversion_time(); + report.report_time() - report.trigger_time(); UMA_HISTOGRAM_COUNTS_1000("Conversions.TimeFromConversionToReportSend", time_from_conversion_to_report_send.InHours()); }
diff --git a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc index 17e6f71..8b0e4b73 100644 --- a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc +++ b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
@@ -262,7 +262,7 @@ EventAttributionReport expected_report = ReportBuilder(impression) .SetTriggerData(conversion.trigger_data()) - .SetConversionTime(base::Time::Now()) + .SetTriggerTime(base::Time::Now()) .SetReportTime(base::Time::Now() + kFirstReportingWindow) .Build();
diff --git a/content/browser/attribution_reporting/attribution_storage_delegate_impl_unittest.cc b/content/browser/attribution_reporting/attribution_storage_delegate_impl_unittest.cc index 0499d565..d631bd7 100644 --- a/content/browser/attribution_reporting/attribution_storage_delegate_impl_unittest.cc +++ b/content/browser/attribution_reporting/attribution_storage_delegate_impl_unittest.cc
@@ -18,7 +18,7 @@ constexpr base::TimeDelta kDefaultExpiry = base::Days(30); EventAttributionReport GetReport(base::Time impression_time, - base::Time conversion_time, + base::Time trigger_time, base::TimeDelta expiry = kDefaultExpiry, StorableSource::SourceType source_type = StorableSource::SourceType::kNavigation) { @@ -26,7 +26,7 @@ .SetExpiry(expiry) .SetSourceType(source_type) .Build()) - .SetConversionTime(conversion_time) + .SetTriggerTime(trigger_time) .Build(); } @@ -35,22 +35,21 @@ TEST(AttributionStorageDelegateImplTest, ImmediateConversion_FirstWindowUsed) { base::Time impression_time = base::Time::Now(); const EventAttributionReport report = - GetReport(impression_time, /*conversion_time=*/impression_time); + GetReport(impression_time, /*trigger_time=*/impression_time); EXPECT_EQ(impression_time + base::Days(2), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, ConversionImmediatelyBeforeWindow_NextWindowUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = - impression_time + base::Days(2) - base::Minutes(1); + base::Time trigger_time = impression_time + base::Days(2) - base::Minutes(1); const EventAttributionReport report = - GetReport(impression_time, conversion_time); + GetReport(impression_time, trigger_time); EXPECT_EQ(impression_time + base::Days(7), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, @@ -59,83 +58,79 @@ // The deadline for a window is 1 hour before the window. Use a time just // before the deadline. - base::Time conversion_time = - impression_time + base::Days(2) - base::Minutes(61); + base::Time trigger_time = impression_time + base::Days(2) - base::Minutes(61); const EventAttributionReport report = - GetReport(impression_time, conversion_time); + GetReport(impression_time, trigger_time); EXPECT_EQ(impression_time + base::Days(2), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, ImpressionExpiryBeforeTwoDayWindow_TwoDayWindowUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = impression_time + base::Hours(1); + base::Time trigger_time = impression_time + base::Hours(1); // Set the impression to expire before the two day window. - const EventAttributionReport report = - GetReport(impression_time, conversion_time, - /*expiry=*/base::Hours(2)); + const EventAttributionReport report = GetReport(impression_time, trigger_time, + /*expiry=*/base::Hours(2)); EXPECT_EQ(impression_time + base::Days(2), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, ImpressionExpiryBeforeSevenDayWindow_ExpiryWindowUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = impression_time + base::Days(3); + base::Time trigger_time = impression_time + base::Days(3); // Set the impression to expire before the two day window. - const EventAttributionReport report = - GetReport(impression_time, conversion_time, - /*expiry=*/base::Days(4)); + const EventAttributionReport report = GetReport(impression_time, trigger_time, + /*expiry=*/base::Days(4)); // The expiry window is reported one hour after expiry time. EXPECT_EQ(impression_time + base::Days(4) + base::Hours(1), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, ImpressionExpiryAfterSevenDayWindow_ExpiryWindowUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = impression_time + base::Days(7); + base::Time trigger_time = impression_time + base::Days(7); // Set the impression to expire before the two day window. - const EventAttributionReport report = - GetReport(impression_time, conversion_time, - /*expiry=*/base::Days(9)); + const EventAttributionReport report = GetReport(impression_time, trigger_time, + /*expiry=*/base::Days(9)); // The expiry window is reported one hour after expiry time. EXPECT_EQ(impression_time + base::Days(9) + base::Hours(1), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, SourceTypeEvent_ExpiryLessThanTwoDays_TwoDaysUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = impression_time + base::Days(3); + base::Time trigger_time = impression_time + base::Days(3); const EventAttributionReport report = - GetReport(impression_time, conversion_time, + GetReport(impression_time, trigger_time, /*expiry=*/base::Days(1), StorableSource::SourceType::kEvent); EXPECT_EQ(impression_time + base::Days(2) + base::Hours(1), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, SourceTypeEvent_ExpiryGreaterThanTwoDays_ExpiryUsed) { base::Time impression_time = base::Time::Now(); - base::Time conversion_time = impression_time + base::Days(3); + base::Time trigger_time = impression_time + base::Days(3); const EventAttributionReport report = - GetReport(impression_time, conversion_time, + GetReport(impression_time, trigger_time, /*expiry=*/base::Days(4), StorableSource::SourceType::kEvent); EXPECT_EQ(impression_time + base::Days(4) + base::Hours(1), AttributionStorageDelegateImpl().GetReportTime( - report.source(), report.conversion_time())); + report.source(), report.trigger_time())); } TEST(AttributionStorageDelegateImplTest, NewReportID_IsValidGUID) {
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc index 389845a..5db1ed37 100644 --- a/content/browser/attribution_reporting/attribution_storage_sql.cc +++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -458,12 +458,12 @@ uint64_t event_source_trigger_data = delegate_->GetFakeEventSourceTriggerData(); - const base::Time conversion_time = source.impression_time(); + const base::Time trigger_time = source.impression_time(); const base::Time report_time = - delegate_->GetReportTime(source, conversion_time); + delegate_->GetReportTime(source, trigger_time); EventAttributionReport report(source, event_source_trigger_data, - /*conversion_time=*/conversion_time, + /*trigger_time=*/trigger_time, /*report_time=*/report_time, /*priority=*/0, /*external_report_id=*/ @@ -660,7 +660,7 @@ /*trigger_time=*/current_time); EventAttributionReport report(std::move(source_to_attribute->source), trigger_data, - /*conversion_time=*/current_time, + /*trigger_time=*/current_time, /*report_time=*/report_time, trigger.priority(), /*external_report_id=*/delegate_->NewReportID(), /*report_id=*/absl::nullopt); @@ -800,7 +800,7 @@ db_->GetCachedStatement(SQL_FROM_HERE, kStoreReportSql)); store_report_statement.BindInt64(0, *source_id); store_report_statement.BindInt64(1, SerializeUint64(report.trigger_data())); - store_report_statement.BindTime(2, report.conversion_time()); + store_report_statement.BindTime(2, report.trigger_time()); store_report_statement.BindTime(3, report.report_time()); store_report_statement.BindInt64(4, report.priority()); store_report_statement.BindString( @@ -815,7 +815,7 @@ absl::optional<EventAttributionReport> ReadReportFromStatement( sql::Statement& statement) { uint64_t trigger_data = DeserializeUint64(statement.ColumnInt64(0)); - base::Time conversion_time = statement.ColumnTime(1); + base::Time trigger_time = statement.ColumnTime(1); base::Time report_time = statement.ColumnTime(2); EventAttributionReport::Id conversion_id(statement.ColumnInt64(3)); int64_t conversion_priority = statement.ColumnInt64(4); @@ -856,9 +856,9 @@ expiry_time, *source_type, attribution_source_priority, *attribution_logic, source_id); - EventAttributionReport report( - std::move(source), trigger_data, conversion_time, report_time, - conversion_priority, std::move(external_report_id), conversion_id); + EventAttributionReport report(std::move(source), trigger_data, trigger_time, + report_time, conversion_priority, + std::move(external_report_id), conversion_id); report.set_failed_send_attempts(failed_send_attempts); return report; }
diff --git a/content/browser/attribution_reporting/attribution_storage_unittest.cc b/content/browser/attribution_reporting/attribution_storage_unittest.cc index 309ed01..f1a2d237 100644 --- a/content/browser/attribution_reporting/attribution_storage_unittest.cc +++ b/content/browser/attribution_reporting/attribution_storage_unittest.cc
@@ -83,7 +83,7 @@ const StorableTrigger& conversion) { return ReportBuilder(impression) .SetTriggerData(conversion.trigger_data()) - .SetConversionTime(base::Time::Now()) + .SetTriggerTime(base::Time::Now()) .SetReportTime(impression.impression_time() + base::Milliseconds(kReportTime)) .SetPriority(conversion.priority()) @@ -1150,7 +1150,7 @@ const EventAttributionReport expected_report = ReportBuilder(impression) .SetTriggerData(7) - .SetConversionTime(base::Time::Now()) + .SetTriggerTime(base::Time::Now()) .SetReportTime(base::Time::Now() + base::Milliseconds(kReportTime)) .Build();
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc index 747684c..33ff921 100644 --- a/content/browser/attribution_reporting/attribution_test_utils.cc +++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -293,8 +293,8 @@ return *this; } -ReportBuilder& ReportBuilder::SetConversionTime(base::Time time) { - conversion_time_ = time; +ReportBuilder& ReportBuilder::SetTriggerTime(base::Time time) { + trigger_time_ = time; return *this; } @@ -321,7 +321,7 @@ } EventAttributionReport ReportBuilder::Build() const { - return EventAttributionReport(source_, trigger_data_, conversion_time_, + return EventAttributionReport(source_, trigger_data_, trigger_time_, report_time_, priority_, external_report_id_, report_id_); } @@ -347,8 +347,8 @@ const EventAttributionReport& b) { const auto tie = [](const EventAttributionReport& conversion) { return std::make_tuple(conversion.source(), conversion.trigger_data(), - conversion.conversion_time(), - conversion.report_time(), conversion.priority(), + conversion.trigger_time(), conversion.report_time(), + conversion.priority(), conversion.external_report_id(), conversion.failed_send_attempts()); }; @@ -502,7 +502,7 @@ const EventAttributionReport& report) { return out << "{source=" << report.source() << ",trigger_data=" << report.trigger_data() - << ",conversion_time=" << report.conversion_time() + << ",trigger_time=" << report.trigger_time() << ",report_time=" << report.report_time() << ",priority=" << report.priority() << ",external_report_id=" << report.external_report_id()
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h index 4ef2d5e8..65caab3 100644 --- a/content/browser/attribution_reporting/attribution_test_utils.h +++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -308,7 +308,7 @@ ReportBuilder& SetTriggerData(uint64_t trigger_data) WARN_UNUSED_RESULT; - ReportBuilder& SetConversionTime(base::Time time) WARN_UNUSED_RESULT; + ReportBuilder& SetTriggerTime(base::Time time) WARN_UNUSED_RESULT; ReportBuilder& SetReportTime(base::Time time) WARN_UNUSED_RESULT; @@ -325,7 +325,7 @@ private: StorableSource source_; uint64_t trigger_data_ = 0; - base::Time conversion_time_; + base::Time trigger_time_; base::Time report_time_; int64_t priority_ = 0; base::GUID external_report_id_;
diff --git a/content/browser/attribution_reporting/attribution_utils.cc b/content/browser/attribution_reporting/attribution_utils.cc index 2757cf19..19de5fc1 100644 --- a/content/browser/attribution_reporting/attribution_utils.cc +++ b/content/browser/attribution_reporting/attribution_utils.cc
@@ -13,7 +13,7 @@ namespace content { base::Time ComputeReportTime(const StorableSource& impression, - base::Time conversion_time) { + base::Time trigger_time) { base::TimeDelta expiry_deadline = impression.expiry_time() - impression.impression_time(); @@ -53,12 +53,12 @@ base::TimeDelta deadline_to_use = expiry_deadline; - // Given a conversion that happened at `conversion_time`, find the first + // Given a conversion that happened at `trigger_time`, find the first // applicable reporting window this conversion should be reported at. for (base::TimeDelta early_deadline : early_deadlines) { // If this window is valid for the conversion, use it. - // |conversion_time| is roughly ~now. - if (impression.impression_time() + early_deadline >= conversion_time && + // |trigger_time| is roughly ~now. + if (impression.impression_time() + early_deadline >= trigger_time && early_deadline < deadline_to_use) { deadline_to_use = early_deadline; break;
diff --git a/content/browser/attribution_reporting/attribution_utils.h b/content/browser/attribution_reporting/attribution_utils.h index ae8f4a3..8220b06 100644 --- a/content/browser/attribution_reporting/attribution_utils.h +++ b/content/browser/attribution_reporting/attribution_utils.h
@@ -18,7 +18,7 @@ // Calculates the report time for a conversion associated with a given // impression. base::Time ComputeReportTime(const StorableSource& impression, - base::Time conversion_time) WARN_UNUSED_RESULT; + base::Time trigger_time) WARN_UNUSED_RESULT; } // namespace content #endif // CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_UTILS_H_
diff --git a/content/browser/attribution_reporting/event_attribution_report.cc b/content/browser/attribution_reporting/event_attribution_report.cc index 49ec269..255192a 100644 --- a/content/browser/attribution_reporting/event_attribution_report.cc +++ b/content/browser/attribution_reporting/event_attribution_report.cc
@@ -18,14 +18,14 @@ EventAttributionReport::EventAttributionReport(StorableSource source, uint64_t trigger_data, - base::Time conversion_time, + base::Time trigger_time, base::Time report_time, int64_t priority, base::GUID external_report_id, absl::optional<Id> report_id) : source_(std::move(source)), trigger_data_(trigger_data), - conversion_time_(conversion_time), + trigger_time_(trigger_time), report_time_(report_time), priority_(priority), external_report_id_(std::move(external_report_id)),
diff --git a/content/browser/attribution_reporting/event_attribution_report.h b/content/browser/attribution_reporting/event_attribution_report.h index 4e86eb5..40a7465 100644 --- a/content/browser/attribution_reporting/event_attribution_report.h +++ b/content/browser/attribution_reporting/event_attribution_report.h
@@ -31,7 +31,7 @@ // The conversion_id may not be set for a conversion report. EventAttributionReport(StorableSource source, uint64_t trigger_data, - base::Time conversion_time, + base::Time trigger_time, base::Time report_time, int64_t priority, base::GUID external_report_id, @@ -52,7 +52,7 @@ uint64_t trigger_data() const { return trigger_data_; } - base::Time conversion_time() const { return conversion_time_; } + base::Time trigger_time() const { return trigger_time_; } base::Time report_time() const { return report_time_; } @@ -78,8 +78,8 @@ // the source type, this contains the associated data in the trigger redirect. uint64_t trigger_data_; - // The time the conversion occurred. - base::Time conversion_time_; + // The time the trigger occurred. + base::Time trigger_time_; // The time this conversion report should be sent. base::Time report_time_;
diff --git a/content/browser/attribution_reporting/rate_limit_table.cc b/content/browser/attribution_reporting/rate_limit_table.cc index 4aa47108..54efcee3 100644 --- a/content/browser/attribution_reporting/rate_limit_table.cc +++ b/content/browser/attribution_reporting/rate_limit_table.cc
@@ -125,7 +125,7 @@ SerializeOrigin(report.source().impression_origin()), report.source().ConversionDestination().Serialize(), SerializeOrigin(report.source().conversion_origin()), - report.conversion_time(), + report.trigger_time(), // Rate limits for the event-level API do not have a bucket. /*bucket=*/"", // By supplying 1 here, rate limits for the event-level API act
diff --git a/content/browser/attribution_reporting/rate_limit_table_unittest.cc b/content/browser/attribution_reporting/rate_limit_table_unittest.cc index 7611996..2e20746 100644 --- a/content/browser/attribution_reporting/rate_limit_table_unittest.cc +++ b/content/browser/attribution_reporting/rate_limit_table_unittest.cc
@@ -50,7 +50,7 @@ .SetImpressionId(impression_id) .SetSourceType(source_type) .Build()) - .SetConversionTime(base::Time::Now()) + .SetTriggerTime(base::Time::Now()) .SetReportTime(base::Time::Now()) .Build(); }
diff --git a/content/browser/devtools/devtools_http_handler.cc b/content/browser/devtools/devtools_http_handler.cc index 0983278..ec6be2f 100644 --- a/content/browser/devtools/devtools_http_handler.cc +++ b/content/browser/devtools/devtools_http_handler.cc
@@ -50,11 +50,11 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "v8/include/v8-version-string.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "base/android/build_info.h" #endif -#if !defined(OS_ANDROID) && !defined(OS_FUCHSIA) +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA) extern const int kCcompressedProtocolJSON; #endif @@ -292,7 +292,7 @@ } } } else { -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // Android uses UNIX domain sockets which don't have an IP address. LOG(ERROR) << "Cannot start http server for devtools."; #endif @@ -584,7 +584,7 @@ version.SetString( kTargetWebSocketDebuggerUrlField, base::StringPrintf("ws://%s%s", host.c_str(), browser_guid_.c_str())); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) version.SetString( "Android-Package", base::android::BuildInfo::GetInstance()->host_package_name()); @@ -659,7 +659,7 @@ } void DevToolsHttpHandler::DecompressAndSendJsonProtocol(int connection_id) { -#if defined(OS_ANDROID) || defined(OS_FUCHSIA) +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) NOTREACHED(); #else scoped_refptr<base::RefCountedMemory> bytes = @@ -674,7 +674,7 @@ FROM_HERE, base::BindOnce(&ServerWrapper::SendResponse, base::Unretained(server_wrapper_.get()), connection_id, response)); -#endif // defined(OS_ANDROID) || defined(OS_FUCHSIA) +#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) } void DevToolsHttpHandler::RespondToJsonList( @@ -703,7 +703,7 @@ void DevToolsHttpHandler::OnFrontendResourceRequest( int connection_id, const std::string& path) { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) Send404(connection_id); #else Send200(connection_id,
diff --git a/content/browser/devtools/devtools_pipe_handler.cc b/content/browser/devtools/devtools_pipe_handler.cc index ca03e0b8..2bedaf0 100644 --- a/content/browser/devtools/devtools_pipe_handler.cc +++ b/content/browser/devtools/devtools_pipe_handler.cc
@@ -6,7 +6,7 @@ #include "base/task/thread_pool.h" #include "build/build_config.h" -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) #include <io.h> #include <windows.h> #else @@ -100,7 +100,7 @@ int read_fd) : PipeIOBase("DevToolsPipeHandlerReadThread"), devtools_handler_(std::move(devtools_handler)) { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) read_handle_ = reinterpret_cast<HANDLE>(_get_osfhandle(read_fd)); #else read_fd_ = read_fd; @@ -116,7 +116,7 @@ void ClosePipe() override { // Concurrently discard the pipe handles to successfully join threads. -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) // Cancel pending synchronous read. CancelIoEx(read_handle_, nullptr); CloseHandle(read_handle_); @@ -130,7 +130,7 @@ size_t ReadBytes(void* buffer, size_t size, bool exact_size) { size_t bytes_read = 0; while (bytes_read < size) { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) DWORD size_read = 0; bool had_error = !ReadFile(read_handle_, static_cast<char*>(buffer) + bytes_read, @@ -173,7 +173,7 @@ } base::WeakPtr<DevToolsPipeHandler> devtools_handler_; -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) HANDLE read_handle_; #else int read_fd_; @@ -184,7 +184,7 @@ public: explicit PipeWriterBase(int write_fd) : PipeIOBase("DevToolsPipeHandlerWriteThread") { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) write_handle_ = reinterpret_cast<HANDLE>(_get_osfhandle(write_fd)); #else write_fd_ = write_fd; @@ -201,7 +201,7 @@ protected: void ClosePipe() override { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) CloseHandle(write_handle_); #else shutdown(write_fd_, SHUT_RDWR); @@ -216,7 +216,7 @@ size_t length = size - total_written; if (length > kWritePacketSize) length = kWritePacketSize; -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) DWORD bytes_written = 0; bool had_error = !WriteFile(write_handle_, bytes + total_written, @@ -237,7 +237,7 @@ } private: -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) HANDLE write_handle_; #else int write_fd_;
diff --git a/content/browser/devtools/devtools_trust_token_browsertest.cc b/content/browser/devtools/devtools_trust_token_browsertest.cc index 58a553ae4..6dbd73f 100644 --- a/content/browser/devtools/devtools_trust_token_browsertest.cc +++ b/content/browser/devtools/devtools_trust_token_browsertest.cc
@@ -121,7 +121,7 @@ base::test::ScopedFeatureList features_; }; -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) // After a successful platform-provided issuance operation (which involves an // IPC to a system-local provider, not an HTTP request to a server), the // request's outcome should show as a cache hit in the network panel. @@ -175,7 +175,7 @@ WaitForNotification("Network.loadingFinished", true); WaitForNotification("Network.trustTokenOperationDone", true); } -#endif // defined(OS_ANDROID) +#endif // BUILDFLAG(IS_ANDROID) namespace {
diff --git a/content/browser/devtools/protocol/browser_handler.cc b/content/browser/devtools/protocol/browser_handler.cc index f005c44..1aef190e 100644 --- a/content/browser/devtools/protocol/browser_handler.cc +++ b/content/browser/devtools/protocol/browser_handler.cc
@@ -548,7 +548,7 @@ // contains kEnableAutomation. if (command_line->HasSwitch(switches::kEnableAutomation)) { for (const auto& arg : command_line->argv()) { -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) (*arguments)->emplace_back(base::WideToUTF8(arg)); #else (*arguments)->emplace_back(arg);
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc index 52ab754..319697b9 100644 --- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc +++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -73,7 +73,7 @@ #include "ui/gfx/geometry/skia_conversions.h" #include "ui/snapshot/snapshot.h" -#if defined(OS_POSIX) +#if BUILDFLAG(IS_POSIX) #include "base/task/deferred_sequenced_task_runner.h" #include "base/tracing/perfetto_task_runner.h" #include "services/tracing/perfetto/system_test_utils.h" @@ -453,7 +453,7 @@ encoding, from_surface, clip, clip_scale, capture_beyond_viewport); gfx::Rect matching_mask(gfx::SkIRectToRect(expected_bitmap.bounds())); -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) // Mask out the corners, which may be drawn differently on Mac because of // rounded corners. matching_mask.Inset(4, 4, 4, 4); @@ -539,7 +539,7 @@ } private: -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) void SetUp() override { EnablePixelOutput(); DevToolsProtocolTest::SetUp(); @@ -593,7 +593,7 @@ // TODO(crbug.com/1147911) Android Lollipop has a problem with capturing // screenshot. // TODO(crbug.com/1156767) Flaky on linux-lacros-tester-rel -#if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH) || \ +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH) || \ BUILDFLAG(IS_CHROMEOS_LACROS) #define MAYBE_CaptureScreenshotBeyondViewport_InnerScrollbarsAreShown \ DISABLED_CaptureScreenshotBeyondViewport_InnerScrollbarsAreShown @@ -640,7 +640,7 @@ } // ChromeOS and Android don't support software compositing. -#if !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) class NoGPUCaptureScreenshotTest : public CaptureScreenshotTest { void SetUpCommandLine(base::CommandLine* command_line) override { @@ -695,7 +695,7 @@ EXPECT_GT(static_cast<int>(SkColorGetB(bottom_left)), 128); } -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) // Setting frame size (through RWHV) is not supported on Android. // This test seems to be very flaky on all platforms: https://crbug.com/801173 @@ -791,7 +791,7 @@ expected_bitmap.eraseColor(SK_ColorTRANSPARENT); CaptureScreenshotAndCompareTo(expected_bitmap, ScreenshotEncoding::PNG, true); -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) float device_scale_factor = display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor(); @@ -806,7 +806,7 @@ CaptureScreenshotAndCompareTo(expected_bitmap, ScreenshotEncoding::PNG, true, device_scale_factor); SendCommand("Emulation.clearDeviceMetricsOverride", nullptr); -#endif // !defined(OS_ANDROID) +#endif // !BUILDFLAG(IS_ANDROID) { // Override background to a semi-transparent color. @@ -823,7 +823,7 @@ expected_bitmap.eraseColor(SkColorSetARGB(16, 255, 0, 0)); CaptureScreenshotAndCompareTo(expected_bitmap, ScreenshotEncoding::PNG, true); -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) // Check that device emulation does not affect the transparency. params = std::make_unique<base::DictionaryValue>(); params->SetIntKey("width", view_size.width()); @@ -835,10 +835,10 @@ CaptureScreenshotAndCompareTo(expected_bitmap, ScreenshotEncoding::PNG, true, device_scale_factor); SendCommand("Emulation.clearDeviceMetricsOverride", nullptr); -#endif // !defined(OS_ANDROID) +#endif // !BUILDFLAG(IS_ANDROID) } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) // Disabled, see http://crbug.com/469947. IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, DISABLED_SynthesizePinchGesture) { GURL test_url = GetTestUrl("devtools", "synthetic_gesture_tests.html"); @@ -898,7 +898,7 @@ // than 0. ASSERT_GT(EvalJs(shell(), "document.body.scrollTop").ExtractInt(), 0); } -#endif // defined(OS_ANDROID) +#endif // BUILDFLAG(IS_ANDROID) IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, PageCrash) { ASSERT_TRUE(embedded_test_server()->Start()); @@ -1073,7 +1073,7 @@ } // TODO(crbug.com/1280746): Flaky on MacOS. -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) #define MAYBE_CrossSiteNavigation DISABLED_CrossSiteNavigation #else #define MAYBE_CrossSiteNavigation CrossSiteNavigation @@ -1167,7 +1167,7 @@ WaitForNotification("Inspector.targetReloadedAfterCrash", true); } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_InspectorTargetCrashedReload DISABLED_InspectorTargetCrashedReload #else #define MAYBE_InspectorTargetCrashedReload InspectorTargetCrashedReload @@ -2042,7 +2042,7 @@ }; // Setting frame size (through RWHV) is not supported on Android. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_DeviceSize DISABLED_DeviceSize #else #define MAYBE_DeviceSize DeviceSize @@ -2078,7 +2078,7 @@ } // Setting frame size (through RWHV) is not supported on Android. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_RenderKillDoesNotCrashBrowser \ DISABLED_RenderKillDoesNotCrashBrowser #else @@ -2221,7 +2221,7 @@ } // Download tests are flaky on Android: https://crbug.com/7546 -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) namespace { static DownloadManagerImpl* DownloadManagerForShell(Shell* shell) { @@ -2740,7 +2740,7 @@ ASSERT_EQ(command_result, nullptr); } -#if defined(OS_POSIX) +#if BUILDFLAG(IS_POSIX) class PosixSystemTracingDevToolsProtocolTest : public SystemTracingDevToolsProtocolTest { public: @@ -2838,7 +2838,7 @@ }; // No system consumer support on Android to reduce Chrome binary size. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_TracingWithFakeSystemBackend DISABLED_TracingWithFakeSystemBackend #else #define MAYBE_TracingWithFakeSystemBackend TracingWithFakeSystemBackend @@ -2865,7 +2865,7 @@ }; // No system consumer support on Android to reduce Chrome binary size. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_SystemConsumerForbidden DISABLED_SystemConsumerForbidden #else #define MAYBE_SystemConsumerForbidden SystemConsumerForbidden @@ -2875,6 +2875,6 @@ base::DictionaryValue* command_result = StartSystemTrace(); ASSERT_EQ(command_result, nullptr); } -#endif // defined(OS_POSIX) +#endif // BUILDFLAG(IS_POSIX) } // namespace content
diff --git a/content/browser/devtools/protocol/emulation_handler.cc b/content/browser/devtools/protocol/emulation_handler.cc index d2ea131..30f279f 100644 --- a/content/browser/devtools/protocol/emulation_handler.cc +++ b/content/browser/devtools/protocol/emulation_handler.cc
@@ -184,7 +184,7 @@ } Response EmulationHandler::CanEmulate(bool* result) { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) *result = false; #else *result = true; @@ -193,7 +193,7 @@ host_->GetRenderWidgetHost()->auto_resize_enabled()) *result = false; } -#endif // defined(OS_ANDROID) +#endif // BUILDFLAG(IS_ANDROID) return Response::Success(); }
diff --git a/content/browser/devtools/protocol/native_input_event_builder.h b/content/browser/devtools/protocol/native_input_event_builder.h index 81c5493..3787d419 100644 --- a/content/browser/devtools/protocol/native_input_event_builder.h +++ b/content/browser/devtools/protocol/native_input_event_builder.h
@@ -13,7 +13,7 @@ class NativeInputEventBuilder { public: -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) // This returned object has a retain count of 1. static gfx::NativeEvent CreateEvent(const NativeWebKeyboardEvent& event); #else
diff --git a/content/browser/devtools/protocol/system_info_handler.cc b/content/browser/devtools/protocol/system_info_handler.cc index 2a7b6b7..47c028acc 100644 --- a/content/browser/devtools/protocol/system_info_handler.cc +++ b/content/browser/devtools/protocol/system_info_handler.cc
@@ -49,8 +49,8 @@ // 1046598, and 1153667. // Windows builds need more time -- see Issue 873112 and 1004472. // Mac builds need more time - see Issue angleproject:6182. -#if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(NDEBUG)) || \ - defined(OS_WIN) || defined(OS_MAC) || defined(USE_OZONE) +#if ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !defined(NDEBUG)) || \ + BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || defined(USE_OZONE) static constexpr int kGPUInfoWatchdogTimeoutMultiplierOS = 3; #else static constexpr int kGPUInfoWatchdogTimeoutMultiplierOS = 1; @@ -143,7 +143,7 @@ return GPUDevice::Create() .SetVendorId(device.vendor_id) .SetDeviceId(device.device_id) -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) .SetSubSysId(device.sub_sys_id) .SetRevision(device.revision) #endif @@ -286,7 +286,7 @@ .Build(); base::CommandLine* command = base::CommandLine::ForCurrentProcess(); -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) std::string command_string = base::WideToUTF8(command->GetCommandLineString()); #else @@ -369,7 +369,7 @@ std::unique_ptr<base::ProcessMetrics> CreateProcessMetrics( base::ProcessHandle handle) { -#if defined(OS_MAC) +#if BUILDFLAG(IS_MAC) return base::ProcessMetrics::CreateProcessMetrics( handle, content::BrowserChildProcessHost::GetPortProvider()); #else
diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc index a6ff921..7dbf486 100644 --- a/content/browser/devtools/protocol/target_handler.cc +++ b/content/browser/devtools/protocol/target_handler.cc
@@ -116,12 +116,12 @@ return "crashed"; case base::TERMINATION_STATUS_STILL_RUNNING: return "still running"; -#if defined(OS_CHROMEOS) +#if BUILDFLAG(IS_CHROMEOS) // Used for the case when oom-killer kills a process on ChromeOS. case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM: return "oom killed"; #endif -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) // On Android processes are spawned from the system Zygote and we do not get // the termination status. We can't know if the termination was a crash or // an oom kill for sure: but we can use status of the strong process @@ -133,7 +133,7 @@ return "failed to launch"; case base::TERMINATION_STATUS_OOM: return "oom"; -#if defined(OS_WIN) +#if BUILDFLAG(IS_WIN) case base::TERMINATION_STATUS_INTEGRITY_FAILURE: return "integrity failure"; #endif
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index fdb3757..412b3550 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -65,7 +65,7 @@ #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/mojom/devtools/devtools_agent.mojom.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "content/browser/devtools/devtools_frame_trace_recorder.h" #include "content/browser/renderer_host/compositor_impl_android.h" #include "content/public/browser/render_widget_host_view.h" @@ -364,9 +364,9 @@ std::make_unique<protocol::TracingHandler>(GetIOContext())); } session->AddHandler(std::make_unique<protocol::LogHandler>()); -#if !defined(OS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) session->AddHandler(std::make_unique<protocol::WebAuthnHandler>()); -#endif // !defined(OS_ANDROID) +#endif // !BUILDFLAG(IS_ANDROID) if (sessions().empty()) { #ifdef OS_ANDROID @@ -377,7 +377,7 @@ frame_trace_recorder_ = std::make_unique<DevToolsFrameTraceRecorder>(); #endif UpdateRawHeadersAccess(frame_host_); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) if (acquire_wake_lock) GetWakeLock()->RequestWakeLock(); #endif @@ -388,11 +388,11 @@ void RenderFrameDevToolsAgentHost::DetachSession(DevToolsSession* session) { // Destroying session automatically detaches in renderer. if (sessions().empty()) { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) frame_trace_recorder_.reset(); #endif UpdateRawHeadersAccess(frame_host_); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) GetWakeLock()->CancelWakeLock(); #endif } @@ -559,7 +559,7 @@ Release(); } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) device::mojom::WakeLock* RenderFrameDevToolsAgentHost::GetWakeLock() { // Here is a lazy binding, and will not reconnect after connection error. if (!wake_lock_) { @@ -605,11 +605,11 @@ switch (info.status) { case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: -#if defined(OS_CHROMEOS) +#if BUILDFLAG(IS_CHROMEOS) case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM: #endif case base::TERMINATION_STATUS_PROCESS_CRASHED: -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) case base::TERMINATION_STATUS_OOM_PROTECTED: #endif case base::TERMINATION_STATUS_LAUNCH_FAILED: @@ -627,7 +627,7 @@ void RenderFrameDevToolsAgentHost::OnVisibilityChanged( content::Visibility visibility) { -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) if (!sessions().empty()) { if (visibility == content::Visibility::HIDDEN) { GetWakeLock()->CancelWakeLock(); @@ -827,7 +827,7 @@ return base::TimeTicks(); } -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame( RenderFrameHost* frame_host, const cc::RenderFrameMetadata& frame_metadata) {
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h index a82c97e..8f48e58 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.h +++ b/content/browser/devtools/render_frame_devtools_agent_host.h
@@ -18,7 +18,7 @@ #include "net/base/net_errors.h" #include "third_party/abseil-cpp/absl/types/optional.h" -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/wake_lock.mojom.h" #include "ui/android/view_android.h" @@ -76,7 +76,7 @@ static void AttachToWebContents(WebContents* web_contents); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) static void SignalSynchronousSwapCompositorFrame( RenderFrameHost* frame_host, const cc::RenderFrameMetadata& frame_metadata); @@ -156,7 +156,7 @@ bool ShouldAllowSession(DevToolsSession* session); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) device::mojom::WakeLock* GetWakeLock(); void SynchronousSwapCompositorFrame( const cc::RenderFrameMetadata& frame_metadata); @@ -164,7 +164,7 @@ void UpdateResourceLoaderFactories(); -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) std::unique_ptr<DevToolsFrameTraceRecorder> frame_trace_recorder_; mojo::Remote<device::mojom::WakeLock> wake_lock_; #endif
diff --git a/content/browser/devtools/site_per_process_devtools_browsertest.cc b/content/browser/devtools/site_per_process_devtools_browsertest.cc index bb8db71..d502798e 100644 --- a/content/browser/devtools/site_per_process_devtools_browsertest.cc +++ b/content/browser/devtools/site_per_process_devtools_browsertest.cc
@@ -61,7 +61,7 @@ }; // Fails on Android, http://crbug.com/464993. -#if defined(OS_ANDROID) +#if BUILDFLAG(IS_ANDROID) #define MAYBE_CrossSiteIframeAgentHost DISABLED_CrossSiteIframeAgentHost #else #define MAYBE_CrossSiteIframeAgentHost CrossSiteIframeAgentHost
diff --git a/content/browser/interest_group/auction_runner.cc b/content/browser/interest_group/auction_runner.cc index c087438..388e758 100644 --- a/content/browser/interest_group/auction_runner.cc +++ b/content/browser/interest_group/auction_runner.cc
@@ -426,15 +426,12 @@ state->state = BidState::State::kScoringComplete; errors_.insert(errors_.end(), errors.begin(), errors.end()); - if (score <= 0) { - // If the worklet didn't bid, destroy the worklet. - state->ClosePipes(); - } else { - bool replace_top_bidder = false; + // A score <= 0 means the seller rejected the bid. + if (score > 0) { if (!top_bidder_ || score > top_bidder_->seller_score) { // If there's no previous top bidder, or the bidder has the highest score, // need to replace the previous top bidder. - replace_top_bidder = true; + top_bidder_ = state; num_top_bidders_ = 1; } else if (score == top_bidder_->seller_score) { // If there's a tie, replace the top-bidder with 1-in-`num_top_bidders_` @@ -442,15 +439,7 @@ // storage problem. ++num_top_bidders_; if (1 == base::RandInt(1, num_top_bidders_)) - replace_top_bidder = true; - } - - if (replace_top_bidder) { - if (top_bidder_) - top_bidder_->ClosePipes(); - top_bidder_ = state; - } else { - state->ClosePipes(); + top_bidder_ = state; } }
diff --git a/content/browser/interest_group/auction_runner_unittest.cc b/content/browser/interest_group/auction_runner_unittest.cc index fac0cf0b9..b8fcf4fc 100644 --- a/content/browser/interest_group/auction_runner_unittest.cc +++ b/content/browser/interest_group/auction_runner_unittest.cc
@@ -380,18 +380,6 @@ /*errors=*/std::vector<std::string>()); } - // Returns the GenerateBidCallback for a worklet. Needed for cases when the - // BidderWorklet is destroyed (to close its pipe) before the - // AuctionWorkletService is destroyed, since Mojo DCHECKs if a callback is - // destroyed when the pipe its over is still live. - // - // TODO(mmenke): To better simulate real crashes, give worklets their own - // AuctionWorkletService pipes, and remove this method. - GenerateBidCallback TakeLoadCallback() { - WaitForGenerateBid(); - return std::move(generate_bid_callback_); - } - void WaitForReportWin() { DCHECK(!generate_bid_callback_); DCHECK(!report_win_run_loop_); @@ -2387,13 +2375,6 @@ "https://anotheradthing.com/bids.js", "https://adstuff.publisher1.com/auction.js")); - // Have to keep the callbacks around, since the AuctionWorkletService is - // still live. Closing it here causes more issues than its worth (seller - // worklet can't complete loading if it hasn't already). In production, - // there would be multiple service processes in this case, with different - // pipes. - auto bidder1_callback = bidder1_worklet->TakeLoadCallback(); - auto bidder2_callback = bidder2_worklet->TakeLoadCallback(); bidder1_worklet.reset(); bidder2_worklet.reset(); @@ -2472,8 +2453,7 @@ ASSERT_FALSE(auction_complete_); - // Close Bidder1's pipe, keeping its callback alive to avoid a DCHECK. - auto bidder1_callback = bidder1_worklet->TakeLoadCallback(); + // Close Bidder1's pipe. bidder1_worklet.reset(); // Can't flush the closed pipe without reaching into AuctionRunner, so use // RunUntilIdle() instead.
diff --git a/content/browser/payments/payment_app_database.cc b/content/browser/payments/payment_app_database.cc index b2a0cf04..4886f70 100644 --- a/content/browser/payments/payment_app_database.cc +++ b/content/browser/payments/payment_app_database.cc
@@ -731,7 +731,7 @@ blink::ServiceWorkerStatusCode status) { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (status != blink::ServiceWorkerStatusCode::kOk) { - std::move(callback).Run(std::move(apps)); + std::move(callback).Run(PaymentApps()); return; }
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index d5ca5c7f..a0ebd6cd 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1610,22 +1610,6 @@ current_drop_data_.reset(); } -DragOperation WebContentsViewAura::OnPerformDrop( - const ui::DropTargetEvent& event, - std::unique_ptr<ui::OSExchangeData> data) { - if (web_contents_->ShouldIgnoreInputEvents()) - return DragOperation::kNone; - - web_contents_->GetInputEventRouter() - ->GetRenderWidgetHostAtPointAsynchronously( - web_contents_->GetRenderViewHost()->GetWidget()->GetView(), - event.location_f(), - base::BindOnce(&WebContentsViewAura::PerformDropCallback, - weak_ptr_factory_.GetWeakPtr(), event, - std::move(data))); - return current_drag_op_; -} - aura::client::DragDropDelegate::DropCallback WebContentsViewAura::GetDropCallback(const ui::DropTargetEvent& event) { if (web_contents_->ShouldIgnoreInputEvents())
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h index 08a38d8f..7dd09f3 100644 --- a/content/browser/web_contents/web_contents_view_aura.h +++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -231,9 +231,6 @@ aura::client::DragUpdateInfo OnDragUpdated( const ui::DropTargetEvent& event) override; void OnDragExited() override; - ui::mojom::DragOperation OnPerformDrop( - const ui::DropTargetEvent& event, - std::unique_ptr<ui::OSExchangeData> data) override; aura::client::DragDropDelegate::DropCallback GetDropCallback( const ui::DropTargetEvent& event) override;
diff --git a/content/browser/web_contents/web_contents_view_aura_browsertest.cc b/content/browser/web_contents/web_contents_view_aura_browsertest.cc index bd9e47d..1a94651 100644 --- a/content/browser/web_contents/web_contents_view_aura_browsertest.cc +++ b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
@@ -582,7 +582,10 @@ ui::DragDropTypes::DRAG_COPY); view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); @@ -615,7 +618,10 @@ ui::DragDropTypes::DRAG_COPY); view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); @@ -655,7 +661,10 @@ ui::DragDropTypes::DRAG_COPY); view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); // The user should be able to drag other content over Chrome while the scan is // occurring without affecting it. @@ -709,7 +718,10 @@ ui::DragDropTypes::DRAG_COPY); view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); // The user should be able to drag other content over Chrome while the scan is // occurring without affecting it. @@ -967,6 +979,7 @@ view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; std::move(drop_cb).Run(event, std::move(data), output_drag_op); @@ -1003,6 +1016,7 @@ view->OnDragEntered(event); EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled()); auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); drop_cb.Reset(); EXPECT_FALSE(drag_dest_delegate_.GetOnDropCalled());
diff --git a/content/browser/web_contents/web_contents_view_aura_unittest.cc b/content/browser/web_contents/web_contents_view_aura_unittest.cc index 308f1a5..ffcf0c0 100644 --- a/content/browser/web_contents/web_contents_view_aura_unittest.cc +++ b/content/browser/web_contents/web_contents_view_aura_unittest.cc
@@ -310,7 +310,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view); @@ -397,7 +400,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view); @@ -484,7 +490,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view); @@ -556,7 +565,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view); @@ -631,7 +643,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view); @@ -685,7 +700,10 @@ base::RunLoop run_loop; async_drop_closure_ = run_loop.QuitClosure(); - view->OnPerformDrop(event, std::move(data)); + auto drop_cb = view->GetDropCallback(event); + ASSERT_TRUE(drop_cb); + ui::mojom::DragOperation output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(event, std::move(data), output_drag_op); run_loop.Run(); CheckDropData(view);
diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc index 126ab52..bda5813 100644 --- a/content/browser/webauth/authenticator_common.cc +++ b/content/browser/webauth/authenticator_common.cc
@@ -11,6 +11,7 @@ #include "base/base64url.h" #include "base/bind.h" +#include "base/callback_helpers.h" #include "base/check.h" #include "base/command_line.h" #include "base/containers/contains.h" @@ -513,7 +514,7 @@ GetRenderFrameHost(), discovery_factory(), UsesDiscoverableCreds(*make_credential_options_)); - request_ = std::make_unique<device::MakeCredentialRequestHandler>( + request_handler_ = std::make_unique<device::MakeCredentialRequestHandler>( discovery_factory(), transports, *ctap_make_credential_request_, *make_credential_options_, base::BindOnce(&AuthenticatorCommon::OnRegisterResponse, @@ -528,11 +529,12 @@ /*allow_skipping_pin_touch=*/false) /* start_over_callback */, base::BindRepeating( &device::FidoRequestHandlerBase::StartAuthenticatorRequest, - request_->GetWeakPtr()) /* request_callback */, + request_handler_->GetWeakPtr()) /* request_callback */, base::BindRepeating( &device::FidoRequestHandlerBase::PowerOnBluetoothAdapter, - request_->GetWeakPtr()) /* bluetooth_adapter_power_on_callback */); - request_->set_observer(request_delegate_.get()); + request_handler_ + ->GetWeakPtr()) /* bluetooth_adapter_power_on_callback */); + request_handler_->set_observer(request_delegate_.get()); } void AuthenticatorCommon::StartGetAssertionRequest( @@ -561,7 +563,7 @@ GetRenderFrameHost(), discovery_factory(), UsesDiscoverableCreds(*ctap_get_assertion_request_)); - request_ = std::make_unique<device::GetAssertionRequestHandler>( + request_handler_ = std::make_unique<device::GetAssertionRequestHandler>( discovery_factory(), transports, *ctap_get_assertion_request_, *ctap_get_assertion_options_, allow_skipping_pin_touch, base::BindOnce(&AuthenticatorCommon::OnSignResponse, @@ -576,12 +578,13 @@ /*allow_skipping_pin_touch=*/false) /* start_over_callback */, base::BindRepeating( &device::FidoRequestHandlerBase::StartAuthenticatorRequest, - request_->GetWeakPtr()) /* request_callback */, + request_handler_->GetWeakPtr()) /* request_callback */, base::BindRepeating( &device::FidoRequestHandlerBase::PowerOnBluetoothAdapter, - request_->GetWeakPtr()) /* bluetooth_adapter_power_on_callback */); + request_handler_ + ->GetWeakPtr()) /* bluetooth_adapter_power_on_callback */); - request_->set_observer(request_delegate_.get()); + request_handler_->set_observer(request_delegate_.get()); } bool AuthenticatorCommon::IsFocused() const { @@ -611,7 +614,7 @@ url::Origin caller_origin, blink::mojom::PublicKeyCredentialCreationOptionsPtr options, blink::mojom::Authenticator::MakeCredentialCallback callback) { - if (request_) { + if (has_pending_request_) { if (WebAuthRequestSecurityChecker::OriginIsCryptoTokenExtension( caller_origin)) { // Requests originating from cryptotoken will generally outlive any @@ -626,10 +629,13 @@ return; } } - DCHECK(!request_); + has_pending_request_ = true; + DCHECK(make_credential_response_callback_.is_null()); make_credential_response_callback_ = std::move(callback); + BeginRequestTimeout(options->timeout); + WebAuthRequestSecurityChecker::RequestType request_type = options->is_payment_credential_creation ? WebAuthRequestSecurityChecker::RequestType::kMakePaymentCredential @@ -658,6 +664,15 @@ return; } + WebAuthenticationRequestProxy* proxy = GetWebAuthnRequestProxyIfActive(); + if (proxy) { + proxy->SignalCreateRequest( + options, + base::BindOnce(&AuthenticatorCommon::OnMakeCredentialProxyResponse, + weak_factory_.GetWeakPtr())); + return; + } + absl::optional<std::string> rp_id = GetWebAuthenticationDelegate()->MaybeGetRelyingPartyIdOverride( options->relying_party.id, caller_origin); @@ -801,10 +816,6 @@ {*cred_protect_request, options->enforce_protection_policy}}; } - timer_->Start( - FROM_HERE, AdjustTimeout(options->timeout, GetRenderFrameHost()), - base::BindOnce(&AuthenticatorCommon::OnTimeout, base::Unretained(this))); - // Cryptotoken requests and Touch-to-Autofill should be proxied without UI. const bool origin_is_crypto_token_extension = WebAuthRequestSecurityChecker::OriginIsCryptoTokenExtension( @@ -887,13 +898,12 @@ StartMakeCredentialRequest(/*allow_skipping_pin_touch=*/true); } -// mojom:Authenticator void AuthenticatorCommon::GetAssertion( url::Origin caller_origin, blink::mojom::PublicKeyCredentialRequestOptionsPtr options, blink::mojom::PaymentOptionsPtr payment, blink::mojom::Authenticator::GetAssertionCallback callback) { - if (request_) { + if (has_pending_request_) { if (WebAuthRequestSecurityChecker::OriginIsCryptoTokenExtension( caller_origin)) { // Requests originating from cryptotoken will generally outlive any @@ -908,7 +918,8 @@ return; } } - DCHECK(!request_); + has_pending_request_ = true; + DCHECK(get_assertion_response_callback_.is_null()); get_assertion_response_callback_ = std::move(callback); @@ -1048,10 +1059,7 @@ } if (!options->is_conditional) { - timer_->Start(FROM_HERE, - AdjustTimeout(options->timeout, GetRenderFrameHost()), - base::BindOnce(&AuthenticatorCommon::OnTimeout, - base::Unretained(this))); + BeginRequestTimeout(options->timeout); } ctap_get_assertion_request_ = @@ -1170,15 +1178,14 @@ CancelWithStatus(blink::mojom::AuthenticatorStatus::ABORT_ERROR); } -// Callback to handle the async registration response from a U2fDevice. void AuthenticatorCommon::OnRegisterResponse( device::MakeCredentialStatus status_code, absl::optional<device::AuthenticatorMakeCredentialResponse> response_data, const device::FidoAuthenticator* authenticator) { - if (!request_) { - // Either the callback was called immediately and |request_| has not yet - // been assigned (this is a bug), or a navigation caused the request to be - // canceled while a callback was enqueued. + if (!request_handler_) { + // Either the callback was called immediately and |request_handler_| has not + // yet been assigned (this is a bug), or a navigation caused the request to + // be canceled while a callback was enqueued. return; } @@ -1388,7 +1395,7 @@ device::AuthenticatorMakeCredentialResponse response_data, bool attestation_permitted) { awaiting_attestation_response_ = false; - if (!request_) { + if (!request_handler_) { // The request has already been cleaned up, probably because a navigation // occurred while the permissions prompt was pending. return; @@ -1434,11 +1441,10 @@ response_data, const device::FidoAuthenticator* authenticator) { DCHECK(!response_data || !response_data->empty()); // empty vector is invalid - - if (!request_) { - // Either the callback was called immediately and |request_| has not yet - // been assigned (this is a bug), or a navigation caused the request to be - // canceled while a callback was enqueued. + if (!request_handler_) { + // Either the callback was called immediately and |request_handler_| has not + // yet been assigned (this is a bug), or a navigation caused the request to + // be canceled while a callback was enqueued. return; } @@ -1556,29 +1562,36 @@ blink::mojom::AuthenticatorStatus status) { error_awaiting_user_acknowledgement_ = status; - // The request has failed, but the UI may delay resolution of the request - // callback and cleanup of the FidoRequestHandler and its associated - // discoveries and authenticators. Tell them to stop processing the request in - // the meantime. - request_->StopDiscoveries(); - request_->CancelActiveAuthenticators(); - - // If WebAuthnUi is enabled, this error blocks until after receiving user - // acknowledgement. Otherwise, the error is returned right away. - if (request_delegate_->DoesBlockRequestOnFailure(reason)) { + if (!request_delegate_->DoesBlockRequestOnFailure(reason)) { + // Resolve the failed request right away. + CancelWithStatus(error_awaiting_user_acknowledgement_); return; } - CancelWithStatus(error_awaiting_user_acknowledgement_); -} // namespace content + + // The UI blocks resolution of the failed request until it receives user + // acknowledgement. Tell the active FidoRequestHandler to stop processing in + // the meantime. + if (request_handler_) { + request_handler_->StopDiscoveries(); + request_handler_->CancelActiveAuthenticators(); + } +} + +void AuthenticatorCommon::BeginRequestTimeout( + absl::optional<base::TimeDelta> timeout) { + timer_->Start(FROM_HERE, AdjustTimeout(timeout, GetRenderFrameHost()), + base::BindOnce(&AuthenticatorCommon::OnTimeout, + weak_factory_.GetWeakPtr())); +} // TODO(crbug.com/814418): Add web tests to verify timeouts are // indistinguishable from NOT_ALLOWED_ERROR cases. void AuthenticatorCommon::OnTimeout() { - DCHECK(request_delegate_); if (awaiting_attestation_response_) { awaiting_attestation_response_ = false; } + DCHECK(request_delegate_); SignalFailureToRequestDelegate( /*authenticator=*/nullptr, AuthenticatorRequestClientDelegate::InterestingFailureReason::kTimeout, @@ -1850,7 +1863,8 @@ } timer_->Stop(); - request_.reset(); + has_pending_request_ = false; + request_handler_.reset(); discovery_factory_.reset(); discovery_factory_testing_override_ = nullptr; ctap_make_credential_request_.reset(); @@ -1905,11 +1919,34 @@ ->MaybeGetDiscoveryFactoryTestOverride(); } +void AuthenticatorCommon::EnableRequestProxyExtensionsAPISupport() { + enable_request_proxy_api_ = true; +} + WebAuthenticationRequestProxy* AuthenticatorCommon::GetWebAuthnRequestProxyIfActive() { + if (!enable_request_proxy_api_) { + return nullptr; + } WebAuthenticationRequestProxy* proxy = GetWebAuthenticationDelegate()->MaybeGetRequestProxy(GetBrowserContext()); return proxy && proxy->IsActive() ? proxy : nullptr; } +void AuthenticatorCommon::OnMakeCredentialProxyResponse( + blink::mojom::AuthenticatorStatus status, + blink::mojom::MakeCredentialAuthenticatorResponsePtr response) { + if (!make_credential_response_callback_) { + // The caller may have cancelled the request, or it timed out. But the + // WebAuthenticationProxyService doesn't know that. + // TODO(https://crbug.com/1231802): Raise request cancellation as an + // webAuthenticationRequestProxy extension API event. Note that currently + // the response can race against a subsequent request following + // cancellation, which can lead to the wrong response callback being + // invoked. + return; + } + CompleteMakeCredentialRequest(status, std::move(response), Focus::kDoCheck); +} + } // namespace content
diff --git a/content/browser/webauth/authenticator_common.h b/content/browser/webauth/authenticator_common.h index 193a6ca..e8323de9 100644 --- a/content/browser/webauth/authenticator_common.h +++ b/content/browser/webauth/authenticator_common.h
@@ -105,6 +105,11 @@ // nullptr and the process will crash when it tries to use it. RenderFrameHost* GetRenderFrameHost() const; + // Enables support for the webAuthenticationRequestProxy extensions API. If + // called, remote desktop Chrome extensions may choose to act as a request + // proxy for all requests sent to this instance. + void EnableRequestProxyExtensionsAPISupport(); + protected: // MaybeCreateRequestDelegate returns the embedder-provided implementation of // AuthenticatorRequestClientDelegate, which encapsulates per-request state @@ -132,12 +137,12 @@ kEraseAttestationAndAaguid, }; - // Replaces the current |request_| with a |MakeCredentialRequestHandler|, - // effectively restarting the request. + // Replaces the current |request_handler_| with a + // |MakeCredentialRequestHandler|, effectively restarting the request. void StartMakeCredentialRequest(bool allow_skipping_pin_touch); - // Replaces the current |request_| with a |GetAssertionRequestHandler|, - // effectively restarting the request. + // Replaces the current |request_handler_| with a + // |GetAssertionRequestHandler|, effectively restarting the request. void StartGetAssertionRequest(bool allow_skipping_pin_touch); bool IsFocused() const; @@ -172,10 +177,15 @@ response_data, const device::FidoAuthenticator* authenticator); + // Begins a timeout at the beginning of a request. + void BeginRequestTimeout(absl::optional<base::TimeDelta> timeout); + // Runs when timer expires and cancels all issued requests to a U2fDevice. void OnTimeout(); + // Cancels the currently pending request (if any) with the supplied status. void CancelWithStatus(blink::mojom::AuthenticatorStatus status); + // Runs when the user cancels WebAuthN request via UI dialog. void OnCancelFromUI(); @@ -224,8 +234,13 @@ WebAuthenticationRequestProxy* GetWebAuthnRequestProxyIfActive(); + void OnMakeCredentialProxyResponse( + blink::mojom::AuthenticatorStatus status, + blink::mojom::MakeCredentialAuthenticatorResponsePtr response); + const GlobalRenderFrameHostId render_frame_host_id_; - std::unique_ptr<device::FidoRequestHandlerBase> request_; + bool has_pending_request_ = false; + std::unique_ptr<device::FidoRequestHandlerBase> request_handler_; std::unique_ptr<device::FidoDiscoveryFactory> discovery_factory_; raw_ptr<device::FidoDiscoveryFactory> discovery_factory_testing_override_ = nullptr; @@ -255,6 +270,7 @@ blink::mojom::AuthenticatorStatus error_awaiting_user_acknowledgement_ = blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR; data_decoder::DataDecoder data_decoder_; + bool enable_request_proxy_api_ = false; base::flat_set<RequestExtension> requested_extensions_;
diff --git a/content/browser/webauth/authenticator_impl.cc b/content/browser/webauth/authenticator_impl.cc index 6f7ed34..4be05e8 100644 --- a/content/browser/webauth/authenticator_impl.cc +++ b/content/browser/webauth/authenticator_impl.cc
@@ -41,6 +41,7 @@ std::unique_ptr<AuthenticatorCommon> authenticator_common) : DocumentService(render_frame_host, std::move(receiver)), authenticator_common_(std::move(authenticator_common)) { + authenticator_common_->EnableRequestProxyExtensionsAPISupport(); DCHECK(authenticator_common_); }
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index 738354e..c7930f9 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -82,7 +82,9 @@ #include "services/network/public/mojom/network_context.mojom.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom-blink-forward.h" #include "third_party/blink/public/mojom/webauthn/authenticator.mojom-shared.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h" #include "third_party/boringssl/src/include/openssl/bytestring.h" #include "third_party/boringssl/src/include/openssl/ec_key.h" #include "third_party/boringssl/src/include/openssl/evp.h" @@ -115,7 +117,9 @@ using blink::mojom::AuthenticatorTransport; using blink::mojom::CableAuthentication; using blink::mojom::CableAuthenticationPtr; +using blink::mojom::CommonCredentialInfo; using blink::mojom::GetAssertionAuthenticatorResponsePtr; +using blink::mojom::MakeCredentialAuthenticatorResponse; using blink::mojom::MakeCredentialAuthenticatorResponsePtr; using blink::mojom::PublicKeyCredentialCreationOptions; using blink::mojom::PublicKeyCredentialCreationOptionsPtr; @@ -1682,11 +1686,24 @@ class TestWebAuthenticationRequestProxy : public WebAuthenticationRequestProxy { public: struct Config { + // If true, resolves all request event callbacks instantly. + bool resolve_callbacks = true; + + // The return value of IsActive(). bool is_active = true; + + // The fake response to SignalIsUVPAARequest(). bool is_uvpaa = true; + + // Fake response values to SignalCreateRequest(). + blink::mojom::AuthenticatorStatus make_credential_status = + blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR; + blink::mojom::MakeCredentialAuthenticatorResponsePtr + make_credential_response = nullptr; }; struct CallCounts { + size_t signal_create_request; size_t signal_is_uvpaa_request; }; @@ -1696,14 +1713,46 @@ bool IsActive() override { return config_.is_active; } + void SignalCreateRequest(const PublicKeyCredentialCreationOptionsPtr& options, + CreateCallback callback) override { + call_counts_.signal_create_request++; + if (config_.resolve_callbacks) { + std::move(callback).Run(config_.make_credential_status, + config_.make_credential_response.Clone()); + return; + } + DCHECK(!pending_create_callback_); + pending_create_callback_ = std::move(callback); + } + void SignalIsUvpaaRequest(IsUvpaaCallback callback) override { call_counts_.signal_is_uvpaa_request++; - std::move(callback).Run(config_.is_uvpaa); + if (config_.resolve_callbacks) { + std::move(callback).Run(config_.is_uvpaa); + return; + } + DCHECK(!pending_is_uvpaa_callback_); + pending_is_uvpaa_callback_ = std::move(callback); + } + + void RunPendingCreateCallback() { + DCHECK(pending_create_callback_); + std::move(pending_create_callback_) + .Run(config_.make_credential_status, + config_.make_credential_response.Clone()); + } + + void RunPendingIsUvpaaCallback() { + DCHECK(pending_is_uvpaa_callback_); + std::move(pending_is_uvpaa_callback_).Run(config_.is_uvpaa); } private: Config config_; CallCounts call_counts_; + + CreateCallback pending_create_callback_; + IsUvpaaCallback pending_is_uvpaa_callback_; }; // TestWebAuthenticationDelegate is a test fake implementation of the @@ -8117,6 +8166,17 @@ TestAuthenticatorContentBrowserClient test_client_; }; +TEST_F(AuthenticatorImplWithRequestProxyTest, Inactive) { + request_proxy().config().is_active = false; + NavigateAndCommit(GURL(kTestOrigin1)); + mojo::Remote<blink::mojom::Authenticator> authenticator = + ConnectToAuthenticator(); + TestIsUvpaaCallback cb; + authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(cb.callback()); + cb.WaitForCallback(); + EXPECT_EQ(request_proxy().call_counts().signal_is_uvpaa_request, 0u); +} + TEST_F(AuthenticatorImplWithRequestProxyTest, IsUVPAA) { size_t i = 0; for (const bool is_uvpaa : {false, true}) { @@ -8133,15 +8193,40 @@ } } -TEST_F(AuthenticatorImplWithRequestProxyTest, Inactive) { - request_proxy().config().is_active = false; +TEST_F(AuthenticatorImplWithRequestProxyTest, MakeCredential) { + request_proxy().config().make_credential_status = + blink::mojom::AuthenticatorStatus::SUCCESS; + request_proxy().config().make_credential_response = + MakeCredentialAuthenticatorResponse::New(); + request_proxy().config().make_credential_response->info = + CommonCredentialInfo::New(); + NavigateAndCommit(GURL(kTestOrigin1)); - mojo::Remote<blink::mojom::Authenticator> authenticator = - ConnectToAuthenticator(); - TestIsUvpaaCallback cb; - authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(cb.callback()); - cb.WaitForCallback(); - EXPECT_EQ(request_proxy().call_counts().signal_is_uvpaa_request, 0u); + MakeCredentialResult result = + AuthenticatorMakeCredential(GetTestPublicKeyCredentialCreationOptions()); + + EXPECT_EQ(result.status, AuthenticatorStatus::SUCCESS); + EXPECT_EQ(request_proxy().call_counts().signal_create_request, 1u); } +TEST_F(AuthenticatorImplWithRequestProxyTest, MakeCredential_Timeout) { + request_proxy().config().resolve_callbacks = false; + request_proxy().config().make_credential_status = + blink::mojom::AuthenticatorStatus::SUCCESS; + request_proxy().config().make_credential_response = + MakeCredentialAuthenticatorResponse::New(); + request_proxy().config().make_credential_response->info = + CommonCredentialInfo::New(); + + NavigateAndCommit(GURL(kTestOrigin1)); + MakeCredentialResult result = AuthenticatorMakeCredentialAndWaitForTimeout( + GetTestPublicKeyCredentialCreationOptions()); + + EXPECT_EQ(result.status, AuthenticatorStatus::NOT_ALLOWED_ERROR); + EXPECT_EQ(request_proxy().call_counts().signal_create_request, 1u); + + // Proxy should still be able to run the callback after a timeout. But it does + // nothing. + request_proxy().RunPendingCreateCallback(); +} } // namespace content
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 70f47028..454a6e41 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -345,6 +345,7 @@ {"AutofillShadowDOM", blink::features::kAutofillShadowDOM}, {"AndroidDownloadableFontsMatching", features::kAndroidDownloadableFontsMatching}, + {"ClipboardCustomFormats", blink::features::kClipboardCustomFormats}, {"COLRV1Fonts", blink::features::kCOLRV1Fonts}, {"CSSContainerQueries", blink::features::kCSSContainerQueries}, {"ComputePressure", blink::features::kComputePressure,
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h index 5a62684..ce91c4f 100644 --- a/content/public/browser/navigation_handle.h +++ b/content/public/browser/navigation_handle.h
@@ -448,9 +448,9 @@ // IsRendererInitiated() returns true. virtual const absl::optional<url::Origin>& GetInitiatorOrigin() = 0; - // Retrieves any DNS aliases for the requested URL. The alias chain order - // is preserved in reverse, from canonical name (i.e. address record name) - // through to query name. + // Retrieves any DNS aliases for the requested URL. Includes all known + // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for + // the connection, in no particular order. virtual const std::vector<std::string>& GetDnsAliases() = 0; // Whether the new document will be hosted in the same process as the current
diff --git a/content/public/browser/web_authentication_request_proxy.h b/content/public/browser/web_authentication_request_proxy.h index 5b02b56..58eec4f 100644 --- a/content/public/browser/web_authentication_request_proxy.h +++ b/content/public/browser/web_authentication_request_proxy.h
@@ -6,6 +6,7 @@ #define CONTENT_PUBLIC_BROWSER_WEB_AUTHENTICATION_REQUEST_PROXY_H_ #include "base/callback_forward.h" +#include "third_party/blink/public/mojom/webauthn/authenticator.mojom-forward.h" namespace content { @@ -13,6 +14,13 @@ // Authentication API requests. class WebAuthenticationRequestProxy { public: + // CreateCallback is the response callback type for `SignalCreateRequest`. It + // is invoked with the status and optional response that resulted from the + // proxied request. + using CreateCallback = base::OnceCallback<void( + blink::mojom::AuthenticatorStatus, + blink::mojom::MakeCredentialAuthenticatorResponsePtr)>; + // IsUvpaaCallback is the response callback type for `SignalIsUvpaaRequest`. // It is invoked with the result of the proxied request. using IsUvpaaCallback = base::OnceCallback<void(bool is_available)>; @@ -23,6 +31,12 @@ // API requests. virtual bool IsActive() = 0; + // SignalCreateRequest is invoked when a Web Authentication API + // `navigator.credentials.create()` request occurs. + virtual void SignalCreateRequest( + const blink::mojom::PublicKeyCredentialCreationOptionsPtr& options, + CreateCallback callback) = 0; + // SignalIsUvpaaRequest is invoked when a // PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() (aka // `IsUvpaa`) request occurs.
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc index df5a13e..9c0dae5 100644 --- a/content/public/common/content_switch_dependent_feature_overrides.cc +++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -98,6 +98,9 @@ {switches::kEnableExperimentalWebPlatformFeatures, std::cref(blink::features::kClientHintThirdPartyDelegation), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, + {switches::kEnableExperimentalWebPlatformFeatures, + std::cref(blink::features::kClipboardCustomFormats), + base::FeatureList::OVERRIDE_ENABLE_FEATURE}, // Overrides for --enable-experimental-cookie-features. {switches::kEnableExperimentalCookieFeatures,
diff --git a/content/shell/tools/breakpad_integration_test.py b/content/shell/tools/breakpad_integration_test.py index da9ed28..9323ceeb 100755 --- a/content/shell/tools/breakpad_integration_test.py +++ b/content/shell/tools/breakpad_integration_test.py
@@ -102,7 +102,7 @@ cmd = [minidump_stackwalk, minidump, symbols_dir] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stack = proc.communicate()[0] + stack = proc.communicate()[0].decode('utf-8') print(stack) device.RunShellCommand(['rm', os.path.join(pending, dump)], @@ -192,7 +192,7 @@ failure = 'Failed to run cdb.exe.' proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stack = proc.communicate()[0] + stack = proc.communicate()[0].decode('utf-8') else: minidump_stackwalk = os.path.join(options.build_dir, 'minidump_stackwalk') cmd = [minidump_stackwalk, minidump, symbols_dir] @@ -201,7 +201,7 @@ failure = 'Failed to run minidump_stackwalk.' proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stack = proc.communicate()[0] + stack = proc.communicate()[0].decode('utf-8') # Check whether the stack contains a CrashIntentionally symbol. found_symbol = 'CrashIntentionally' in stack
diff --git a/device/fido/cable/noise.cc b/device/fido/cable/noise.cc index 5f45dba4..65f31f3 100644 --- a/device/fido/cable/noise.cc +++ b/device/fido/cable/noise.cc
@@ -6,6 +6,7 @@ #include <string.h> +#include "base/sys_byteorder.h" #include "crypto/aead.h" #include "crypto/sha2.h" #include "device/fido/fido_constants.h" @@ -99,7 +100,8 @@ std::vector<uint8_t> Noise::EncryptAndHash( base::span<const uint8_t> plaintext) { uint8_t nonce[12] = {0}; - memcpy(nonce, &symmetric_nonce_, sizeof(symmetric_nonce_)); + const uint32_t counter = base::ByteSwap(symmetric_nonce_); + memcpy(nonce, &counter, sizeof(counter)); symmetric_nonce_++; crypto::Aead aead(crypto::Aead::AES_256_GCM); @@ -112,7 +114,8 @@ absl::optional<std::vector<uint8_t>> Noise::DecryptAndHash( base::span<const uint8_t> ciphertext) { uint8_t nonce[12] = {0}; - memcpy(nonce, &symmetric_nonce_, sizeof(symmetric_nonce_)); + const uint32_t counter = base::ByteSwap(symmetric_nonce_); + memcpy(nonce, &counter, sizeof(counter)); symmetric_nonce_++; crypto::Aead aead(crypto::Aead::AES_256_GCM);
diff --git a/device/fido/cable/v2_handshake.cc b/device/fido/cable/v2_handshake.cc index 5e33bb6a..e27338b 100644 --- a/device/fido/cable/v2_handshake.cc +++ b/device/fido/cable/v2_handshake.cc
@@ -16,6 +16,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" +#include "base/sys_byteorder.h" #include "components/cbor/reader.h" #include "components/cbor/values.h" #include "components/cbor/writer.h" @@ -47,16 +48,24 @@ // will ever reach. constexpr uint32_t kMaxSequence = (1 << 24) - 1; -bool ConstructNonce(uint32_t counter, base::span<uint8_t, 12> out_nonce) { +bool ConstructNonce(uint32_t counter, + bool big_endian, + base::span<uint8_t, 12> out_nonce) { if (counter > kMaxSequence) { return false; } - // Nonce is just a little-endian counter. std::array<uint8_t, sizeof(counter)> counter_bytes; - memcpy(counter_bytes.data(), &counter, sizeof(counter)); - std::copy(counter_bytes.begin(), counter_bytes.end(), out_nonce.begin()); - std::fill(out_nonce.begin() + counter_bytes.size(), out_nonce.end(), 0); + if (big_endian) { + std::fill(out_nonce.begin(), out_nonce.end(), 0); + counter = base::ByteSwap(counter); + memcpy(out_nonce.data() + out_nonce.size() - sizeof(counter), &counter, + sizeof(counter)); + } else { + memcpy(counter_bytes.data(), &counter, sizeof(counter)); + std::copy(counter_bytes.begin(), counter_bytes.end(), out_nonce.begin()); + std::fill(out_nonce.begin() + counter_bytes.size(), out_nonce.end(), 0); + } return true; } @@ -99,6 +108,11 @@ EC_KEY_derive_from_secret(p256.get(), seed.data(), seed.size())); } +// kAdditionalDataBytes is the AD input to the AEAD used in caBLEv2. We're +// transitioning away from this towards not supplying an AD in order to better +// match Noise. +const uint8_t kAdditionalDataBytes[1] = {/*version=*/2}; + } // namespace namespace tunnelserver { @@ -717,7 +731,7 @@ padded_message[padded_message.size() - 1] = static_cast<uint8_t>(num_zeros); std::array<uint8_t, 12> nonce; - if (!ConstructNonce(write_sequence_num_++, nonce)) { + if (!ConstructNonce(write_sequence_num_++, new_construction_, nonce)) { return false; } @@ -725,7 +739,11 @@ aes_key.Init(write_key_); DCHECK_EQ(nonce.size(), aes_key.NonceLength()); - const uint8_t additional_data[1] = {/*version=*/2}; + base::span<const uint8_t> additional_data; + if (!new_construction_) { + additional_data = kAdditionalDataBytes; + } + std::vector<uint8_t> ciphertext = aes_key.Seal(padded_message, nonce, additional_data); message_to_encrypt->swap(ciphertext); @@ -735,7 +753,7 @@ bool Crypter::Decrypt(base::span<const uint8_t> ciphertext, std::vector<uint8_t>* out_plaintext) { std::array<uint8_t, 12> nonce; - if (!ConstructNonce(read_sequence_num_, nonce)) { + if (!ConstructNonce(read_sequence_num_, new_construction_, nonce)) { return false; } @@ -743,11 +761,21 @@ aes_key.Init(read_key_); DCHECK_EQ(nonce.size(), aes_key.NonceLength()); - const uint8_t additional_data[1] = {/*version=*/2}; + base::span<const uint8_t> additional_data; + if (!new_construction_) { + additional_data = kAdditionalDataBytes; + } + absl::optional<std::vector<uint8_t>> plaintext = aes_key.Open(ciphertext, nonce, additional_data); if (!plaintext) { + // We're transitioning to a different construction. If we failed to decrypt + // the first message with the old one, try again with the new. + if (!new_construction_ && read_sequence_num_ == 0) { + new_construction_ = true; + return Decrypt(ciphertext, out_plaintext); + } return false; } read_sequence_num_++; @@ -772,6 +800,10 @@ return read_key_ == other.write_key_ && write_key_ == other.read_key_; } +bool& Crypter::GetNewConstructionFlagForTesting() { + return new_construction_; +} + HandshakeInitiator::HandshakeInitiator( base::span<const uint8_t, 32> psk, absl::optional<base::span<const uint8_t, kP256X962Length>> peer_identity,
diff --git a/device/fido/cable/v2_handshake.h b/device/fido/cable/v2_handshake.h index 27286f0..c099f4f 100644 --- a/device/fido/cable/v2_handshake.h +++ b/device/fido/cable/v2_handshake.h
@@ -218,10 +218,13 @@ // this object. (I.e. read/write keys are equal but swapped.) bool IsCounterpartyOfForTesting(const Crypter& other) const; + bool& GetNewConstructionFlagForTesting(); + private: const std::array<uint8_t, 32> read_key_, write_key_; uint32_t read_sequence_num_ = 0; uint32_t write_sequence_num_ = 0; + bool new_construction_ = false; }; // HandshakeHash is the hashed transcript of a handshake. This can be used as a
diff --git a/device/fido/cable/v2_handshake_unittest.cc b/device/fido/cable/v2_handshake_unittest.cc index 132f661..d992e17 100644 --- a/device/fido/cable/v2_handshake_unittest.cc +++ b/device/fido/cable/v2_handshake_unittest.cc
@@ -359,6 +359,43 @@ } } +TEST_F(CableV2HandshakeTest, ConstructionTransition) { + std::array<uint8_t, 32> key1, key2; + std::fill(key1.begin(), key1.end(), 1); + std::fill(key2.begin(), key2.end(), 2); + + Crypter a(key1, key2); + Crypter b(key2, key1); + + std::vector<uint8_t> message, ciphertext, plaintext; + message.resize(100); + std::fill(message.begin(), message.end(), 42); + + // Encrypt a message using the new construction. + a.GetNewConstructionFlagForTesting() = true; + ciphertext = message; + ASSERT_TRUE(a.Encrypt(&ciphertext)); + + // The new construction should be automatically detected so this should work + // and should cause the flag to be set. + EXPECT_FALSE(b.GetNewConstructionFlagForTesting()); + ASSERT_TRUE(b.Decrypt(ciphertext, &plaintext)); + ASSERT_TRUE(plaintext == message); + EXPECT_TRUE(b.GetNewConstructionFlagForTesting()); + + // Sending messages still works. + ciphertext = message; + ASSERT_TRUE(a.Encrypt(&ciphertext)); + ASSERT_TRUE(b.Decrypt(ciphertext, &plaintext)); + ASSERT_TRUE(plaintext == message); + + // But old-construction messages will no longer be accepted. + ciphertext = message; + a.GetNewConstructionFlagForTesting() = false; + ASSERT_TRUE(a.Encrypt(&ciphertext)); + ASSERT_FALSE(b.Decrypt(ciphertext, &plaintext)); +} + } // namespace } // namespace cablev2 } // namespace device
diff --git a/extensions/browser/extension_event_histogram_value.h b/extensions/browser/extension_event_histogram_value.h index 9dfe72b..e2b0b7d 100644 --- a/extensions/browser/extension_event_histogram_value.h +++ b/extensions/browser/extension_event_histogram_value.h
@@ -505,6 +505,7 @@ SPEECH_RECOGNITION_PRIVATE_ON_ERROR = 483, FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS = 484, INPUT_METHOD_PRIVATE_ON_TOUCH = 485, + WEB_AUTHENTICATION_PROXY_ON_CREATE_REQUEST = 486, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index 2c6eb6f..434874b 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1671,6 +1671,7 @@ TERMINALPRIVATE_GETOSINFO = 1608, OS_TELEMETRY_GETMEMORYINFO = 1609, AUTOTESTPRIVATE_COULDALLOWCROSTINI = 1610, + WEB_AUTHENTICATION_PROXY_COMPLETE_CREATE_REQUEST = 1611, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/gpu/command_buffer/service/gr_shader_cache.cc b/gpu/command_buffer/service/gr_shader_cache.cc index bc445ec..73ac6469 100644 --- a/gpu/command_buffer/service/gr_shader_cache.cc +++ b/gpu/command_buffer/service/gr_shader_cache.cc
@@ -279,9 +279,6 @@ // thread. Calling it from multiple gpu threads and hence multiple context is // redundant and expensive since each GrContext will have same key. Hence // adding a DCHECK here. - // TODO(vikassoni) : https://crbug.com/1211085. Ensure that we call this - // method from only one gpu thread when multiple gpu threads aka dr-dc is - // implemented. DCHECK_CALLED_ON_VALID_THREAD(gpu_main_thread_checker_); bool need_store_pipeline_cache = false;
diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc index 4abb74c..7ec7d69 100644 --- a/gpu/command_buffer/service/shared_context_state.cc +++ b/gpu/command_buffer/service/shared_context_state.cc
@@ -150,7 +150,8 @@ viz::VulkanContextProvider* vulkan_context_provider, viz::MetalContextProvider* metal_context_provider, viz::DawnContextProvider* dawn_context_provider, - base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor) + base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor, + bool created_on_compositor_gpu_thread) : use_virtualized_gl_contexts_(use_virtualized_gl_contexts), context_lost_callback_(std::move(context_lost_callback)), gr_context_type_(gr_context_type), @@ -160,6 +161,7 @@ vk_context_provider_(vulkan_context_provider), metal_context_provider_(metal_context_provider), dawn_context_provider_(dawn_context_provider), + created_on_compositor_gpu_thread_(created_on_compositor_gpu_thread), share_group_(std::move(share_group)), context_(context), real_context_(std::move(context)), @@ -691,7 +693,12 @@ } void SharedContextState::StoreVkPipelineCacheIfNeeded() { - if (gr_context_ && GrContextIsVulkan()) { + // GrShaderCache::StoreVkPipelineCacheIfNeeded() must be called only for gpu + // main thread. Hence using |created_on_compositor_gpu_thread_| to avoid + // calling it for CompositorGpuThread when DrDc is enabled. See + // GrShaderCache::StoreVkPipelineCacheIfNeeded for more details. + if (gr_context_ && GrContextIsVulkan() && + !created_on_compositor_gpu_thread_) { gpu::raster::GrShaderCache::ScopedCacheUse use(gr_shader_cache_, kDisplayCompositorClientId); gr_shader_cache_->StoreVkPipelineCacheIfNeeded(gr_context_);
diff --git a/gpu/command_buffer/service/shared_context_state.h b/gpu/command_buffer/service/shared_context_state.h index 442473a..5f7a8b19 100644 --- a/gpu/command_buffer/service/shared_context_state.h +++ b/gpu/command_buffer/service/shared_context_state.h
@@ -82,8 +82,8 @@ viz::VulkanContextProvider* vulkan_context_provider = nullptr, viz::MetalContextProvider* metal_context_provider = nullptr, viz::DawnContextProvider* dawn_context_provider = nullptr, - base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor = - nullptr); + base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor = nullptr, + bool created_on_compositor_gpu_thread = false); SharedContextState(const SharedContextState&) = delete; SharedContextState& operator=(const SharedContextState&) = delete; @@ -317,6 +317,7 @@ const raw_ptr<viz::VulkanContextProvider> vk_context_provider_; const raw_ptr<viz::MetalContextProvider> metal_context_provider_; const raw_ptr<viz::DawnContextProvider> dawn_context_provider_; + bool created_on_compositor_gpu_thread_ = false; raw_ptr<GrDirectContext> gr_context_ = nullptr; scoped_refptr<gl::GLShareGroup> share_group_;
diff --git a/gpu/ipc/service/gpu_watchdog_thread_unittest.cc b/gpu/ipc/service/gpu_watchdog_thread_unittest.cc index 5efd9e7d..2b2ac55f 100644 --- a/gpu/ipc/service/gpu_watchdog_thread_unittest.cc +++ b/gpu/ipc/service/gpu_watchdog_thread_unittest.cc
@@ -19,6 +19,14 @@ namespace { constexpr auto kGpuWatchdogTimeoutForTesting = base::Milliseconds(1000); +// This is the extra time the gpu main/test thread spends after +// GpuWatchdogTimeout. Theoretically, any extra time such as 1 ms should be +// enough to trigger the watchdog kill. However, more time is added to fix the +// flakiness in CQ. +base::TimeDelta ExtraGPUJobTimeMSForTesting(int milliseconds) { + return base::Milliseconds(milliseconds); +} + // This task will run for duration_ms milliseconds. void SimpleTask(base::TimeDelta duration) { base::PlatformThread::Sleep(duration); @@ -109,7 +117,7 @@ base::PlatformThread::Sleep(time_to_switch_to_foreground); // Now switch Chrome to the foreground after the specified time watchdog_thread_->OnForegrounded(); - base::PlatformThread::Sleep(duration - time_to_switch_to_foreground); + base::PlatformThread::Sleep(duration); } void GpuWatchdogPowerTest::LongTaskOnResume( @@ -123,7 +131,7 @@ // Now wake up on power resume. power_monitor_source_.GenerateResumeEvent(); // Continue the GPU task for the remaining time. - base::PlatformThread::Sleep(duration - time_to_power_resume); + base::PlatformThread::Sleep(duration); } // GPU Hang In Initialization @@ -133,10 +141,10 @@ SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + kGpuWatchdogTimeoutForTesting * kMaxCountOfMoreGpuThreadTimeAllowed + - base::Milliseconds(3000)); + ExtraGPUJobTimeMSForTesting(3000)); #else SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + - base::Milliseconds(3000)); + ExtraGPUJobTimeMSForTesting(3000)); #endif // Gpu hangs. OnInitComplete() is not called @@ -188,11 +196,12 @@ base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + kGpuWatchdogTimeoutForTesting * kMaxCountOfMoreGpuThreadTimeAllowed + - base::Milliseconds(4000))); + ExtraGPUJobTimeMSForTesting(4000))); #else task_environment_.GetMainThreadTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + - base::Milliseconds(4000))); + FROM_HERE, + base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + + ExtraGPUJobTimeMSForTesting(4000))); #endif task_environment_.GetMainThreadTaskRunner()->PostTask(FROM_HERE, @@ -210,15 +219,16 @@ // Gpu init (3000 ms) takes longer than timeout (2000 ms). SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + - base::Milliseconds(1000)); + ExtraGPUJobTimeMSForTesting(1000)); // Report GPU init complete. watchdog_thread_->OnInitComplete(); // Run a task that takes longer (3000 milliseconds) than timeout. task_environment_.GetMainThreadTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + - base::Milliseconds(1000))); + FROM_HERE, + base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + + ExtraGPUJobTimeMSForTesting(1000))); task_environment_.GetMainThreadTaskRunner()->PostTask(FROM_HERE, run_loop.QuitClosure()); run_loop.Run(); @@ -243,7 +253,7 @@ /*duration*/ kGpuWatchdogTimeoutForTesting * 2 + kGpuWatchdogTimeoutForTesting * kMaxCountOfMoreGpuThreadTimeAllowed + - base::Milliseconds(4200), + ExtraGPUJobTimeMSForTesting(4000), /*time_to_switch_to_foreground*/ base::Milliseconds(200))); #else @@ -252,9 +262,8 @@ base::BindOnce(&GpuWatchdogTest::LongTaskFromBackgroundToForeground, base::Unretained(this), /*duration*/ kGpuWatchdogTimeoutForTesting * 2 + - base::Milliseconds(4200), - /*time_to_switch_to_foreground*/ - base::Milliseconds(200))); + ExtraGPUJobTimeMSForTesting(4000), + /*time_to_switch_to_foreground*/ base::Milliseconds(200))); #endif task_environment_.GetMainThreadTaskRunner()->PostTask(FROM_HERE, @@ -274,7 +283,7 @@ // The Gpu init continues for another (init timeout + 1000) ms after the pause SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + - base::Milliseconds(1000)); + ExtraGPUJobTimeMSForTesting(1000)); // No GPU hang is detected when the watchdog is paused. bool result = watchdog_thread_->IsGpuHangDetectedForTesting(); @@ -287,10 +296,10 @@ SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + kGpuWatchdogTimeoutForTesting * kMaxCountOfMoreGpuThreadTimeAllowed + - base::Milliseconds(4000)); + ExtraGPUJobTimeMSForTesting(4000)); #else SimpleTask(kGpuWatchdogTimeoutForTesting * kInitFactor + - base::Milliseconds(4000)); + ExtraGPUJobTimeMSForTesting(4000)); #endif // A GPU hang should be detected. @@ -306,8 +315,9 @@ // Run a task that takes longer (5000 milliseconds) than timeout. task_environment_.GetMainThreadTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + - base::Milliseconds(3000))); + FROM_HERE, + base::BindOnce(&SimpleTask, kGpuWatchdogTimeoutForTesting * 2 + + ExtraGPUJobTimeMSForTesting(3000))); task_environment_.GetMainThreadTaskRunner()->PostTask(FROM_HERE, run_loop.QuitClosure()); run_loop.Run(); @@ -332,7 +342,7 @@ /*duration*/ kGpuWatchdogTimeoutForTesting * kRestartFactor + kGpuWatchdogTimeoutForTesting * kMaxCountOfMoreGpuThreadTimeAllowed + - base::Milliseconds(4200), + ExtraGPUJobTimeMSForTesting(4000), /*time_to_power_resume*/ base::Milliseconds(200))); #else @@ -341,7 +351,7 @@ base::BindOnce( &GpuWatchdogPowerTest::LongTaskOnResume, base::Unretained(this), /*duration*/ kGpuWatchdogTimeoutForTesting * kRestartFactor + - base::Milliseconds(4200), + ExtraGPUJobTimeMSForTesting(4000), /*time_to_power_resume*/ base::Milliseconds(200))); #endif
diff --git a/infra/config/generated/builders/ci/GPU Linux Builder/properties.textpb b/infra/config/generated/builders/ci/GPU Linux Builder/properties.textpb index 94f3cb4..94d4601 100644 --- a/infra/config/generated/builders/ci/GPU Linux Builder/properties.textpb +++ b/infra/config/generated/builders/ci/GPU Linux Builder/properties.textpb
@@ -1,9 +1,8 @@ { - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true + "$build/reclient": { + "instance": "rbe-chromium-trusted", + "jobs": 250, + "metrics_project": "chromium-reclient-metrics" }, "$recipe_engine/resultdb/test_presentation": { "column_keys": [],
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 1e2ac93..700b381 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -10380,7 +10380,7 @@ ' "led_builder_is_bootstrapped": true,' ' "recipe": "chromium"' '}' - execution_timeout_secs: 18000 + execution_timeout_secs: 28800 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments {
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star index 530c822..2cd5e3a 100644 --- a/infra/config/subprojects/chromium/ci/chromium.fyi.star +++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -644,9 +644,11 @@ ), cores = 32, # TODO(thakis): Remove once https://crbug.com/927738 is resolved. - execution_timeout = 5 * time.hour, + execution_timeout = 8 * time.hour, goma_backend = None, os = os.LINUX_BIONIC_SWITCH_TO_DEFAULT, + # Note, while this builder runs in verification mode (ensure_verified) + # it will run with a parallelism (-j) of cores, not reclient_jobs. reclient_jobs = 400, reclient_instance = rbe_instance.DEFAULT, reclient_ensure_verified = True,
diff --git a/infra/config/subprojects/chromium/ci/chromium.gpu.star b/infra/config/subprojects/chromium/ci/chromium.gpu.star index 06cd6c8..4eb8b6e5a 100644 --- a/infra/config/subprojects/chromium/ci/chromium.gpu.star +++ b/infra/config/subprojects/chromium/ci/chromium.gpu.star
@@ -48,6 +48,9 @@ category = "Linux", ), cq_mirrors_console_view = "mirrors", + goma_backend = None, + reclient_jobs = rbe_jobs.DEFAULT, + reclient_instance = rbe_instance.DEFAULT, ) ci.gpu.linux_builder(
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index e2aa659..9ad266aa 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -786523b0ff341f2f9287b37bd79c30c02bc9030c \ No newline at end of file +74966c1ab6efbf097512550b4b2d621ae959f32c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index e40919b..bed8965 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -086d17aefd00ac6b9ee21d61a18b62e254a9a168 \ No newline at end of file +5d408fc9cd9ae49edbc9ddd061a42b5ad0f2d1f1 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index 04ff3aa..6227fb0 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -bd31d512bea6b670248290d0dcb497840450ec75 \ No newline at end of file +253e41a63a446c9163e594a3829664af6ac4abc9 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index a5932c9..c1cb298 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -0eb663c371d8f9159529db8ac5bad5bd3286acd2 \ No newline at end of file +73852ab58dc552e2e14336a55ddbf730fd2e341a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 index 37e9669..d66b416 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -4c9f1f3b80030dd201fff33ce2cb96fc985e7dc1 \ No newline at end of file +917b611c65c2c78949dfecd26de370ebcec99f21 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 index b1bdf6f..66e5928 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -6ef34a3bd66c042747011899be1bea1c12cde296 \ No newline at end of file +f0afc413cb1d3a3ae025b0130fcd7de7292a5eff \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 2d4e1af..b0c8f28 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -9a6af5b7a3455fedf5392d8ee5dc9226ff928354 \ No newline at end of file +61d62fb570839b97f5fb2e10bf0a7865781ba6d3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index c08d019bb..ee5ce7d 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -cd361266de1ce39e6c464ff08c889d9587f55ae6 \ No newline at end of file +b435937650e6db8c97939f5b58ab14cd9392506e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index 961bcdb2..c75ceec 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -f585092e6dd3f143f2f87b5a7f0cc78e8417ab58 \ No newline at end of file +5d5431b73b3d66ef30ab495cfce0571f9b8c05ec \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 2e79ca9..94608c1a 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -2756fb1b81084d1f543567747428873a83cc52f6 \ No newline at end of file +68e765d20dff181b22e1a9f69e225f5ac4fcc170 \ No newline at end of file
diff --git a/ipc/ipc_cpu_perftest.cc b/ipc/ipc_cpu_perftest.cc index 7ef2299..4566cb4 100644 --- a/ipc/ipc_cpu_perftest.cc +++ b/ipc/ipc_cpu_perftest.cc
@@ -3,10 +3,10 @@ // found in the LICENSE file. #include <memory> +#include <tuple> #include "base/bind.h" #include "base/check_op.h" -#include "base/ignore_result.h" #include "base/memory/raw_ptr.h" #include "base/process/process_metrics.h" #include "base/run_loop.h" @@ -308,7 +308,7 @@ ping_receiver_->Quit(); - ignore_result(ping_receiver_.Unbind().PassPipe().release()); + std::ignore = ping_receiver_.Unbind().PassPipe().release(); } void OnHello(const std::string& value) {
diff --git a/ipc/ipc_mojo_perftest.cc b/ipc/ipc_mojo_perftest.cc index 96f661f..473e72b 100644 --- a/ipc/ipc_mojo_perftest.cc +++ b/ipc/ipc_mojo_perftest.cc
@@ -3,10 +3,11 @@ // found in the LICENSE file. #include <stddef.h> + #include <memory> +#include <tuple> #include "base/bind.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/process/process_metrics.h" @@ -311,7 +312,7 @@ ping_receiver_->Quit(); - ignore_result(ping_receiver_.Unbind().PassPipe().release()); + std::ignore = ping_receiver_.Unbind().PassPipe().release(); } void OnPong(const std::string& value) { @@ -383,7 +384,7 @@ std::move(handle))), quit_closure_(std::move(quit_closure)) {} ~InterfacePassingTestDriverImpl() override { - ignore_result(receiver_.Unbind().PassPipe().release()); + std::ignore = receiver_.Unbind().PassPipe().release(); } private: @@ -462,7 +463,7 @@ driver_remote_->Quit(); - ignore_result(driver_remote_.Unbind().PassPipe().release()); + std::ignore = driver_remote_.Unbind().PassPipe().release(); } void OnInitCallback() {
diff --git a/ipc/ipc_perftest_util.cc b/ipc/ipc_perftest_util.cc index a791391..7d9c701 100644 --- a/ipc/ipc_perftest_util.cc +++ b/ipc/ipc_perftest_util.cc
@@ -4,7 +4,8 @@ #include "ipc/ipc_perftest_util.h" -#include "base/ignore_result.h" +#include <tuple> + #include "base/logging.h" #include "base/run_loop.h" #include "ipc/ipc_channel_proxy.h" @@ -129,7 +130,7 @@ mojo::PendingReceiver<IPC::mojom::Reflector>(std::move(handle))) {} ReflectorImpl::~ReflectorImpl() { - ignore_result(receiver_.Unbind().PassPipe().release()); + std::ignore = receiver_.Unbind().PassPipe().release(); } void ReflectorImpl::Ping(const std::string& value, PingCallback callback) {
diff --git a/ipc/ipc_platform_file_attachment_posix.cc b/ipc/ipc_platform_file_attachment_posix.cc index 845a958..b752e40 100644 --- a/ipc/ipc_platform_file_attachment_posix.cc +++ b/ipc/ipc_platform_file_attachment_posix.cc
@@ -4,6 +4,7 @@ #include "ipc/ipc_platform_file_attachment_posix.h" +#include <tuple> #include <utility> #include "base/ignore_result.h" @@ -25,7 +26,7 @@ } base::PlatformFile PlatformFileAttachment::TakePlatformFile() { - ignore_result(owning_.release()); + std::ignore = owning_.release(); return file_; }
diff --git a/mojo/core/channel_fuchsia.cc b/mojo/core/channel_fuchsia.cc index ea19e02d..df08ba3d 100644 --- a/mojo/core/channel_fuchsia.cc +++ b/mojo/core/channel_fuchsia.cc
@@ -11,15 +11,16 @@ #include <zircon/processargs.h> #include <zircon/status.h> #include <zircon/syscalls.h> + #include <algorithm> #include <memory> +#include <tuple> #include "base/bind.h" #include "base/containers/circular_deque.h" #include "base/cxx17_backports.h" #include "base/files/scoped_file.h" #include "base/fuchsia/fuchsia_logging.h" -#include "base/ignore_result.h" #include "base/location.h" #include "base/memory/ref_counted.h" #include "base/message_loop/message_pump_for_io.h" @@ -252,7 +253,7 @@ read_watch_.reset(); if (leak_handle_) - ignore_result(handle_.release()); + std::ignore = handle_.release(); handle_.reset(); // May destroy the |this| if it was the last reference.
diff --git a/mojo/core/channel_mac.cc b/mojo/core/channel_mac.cc index 5c27e76..686dea5 100644 --- a/mojo/core/channel_mac.cc +++ b/mojo/core/channel_mac.cc
@@ -10,6 +10,7 @@ #include <algorithm> #include <memory> +#include <tuple> #include <utility> #include <vector> @@ -17,7 +18,6 @@ #include "base/containers/buffer_iterator.h" #include "base/containers/circular_deque.h" #include "base/containers/span.h" -#include "base/ignore_result.h" #include "base/logging.h" #include "base/mac/mach_logging.h" #include "base/mac/scoped_mach_msg_destroy.h" @@ -212,8 +212,8 @@ incoming_handles_.clear(); if (leak_handles_) { - ignore_result(receive_port_.release()); - ignore_result(send_port_.release()); + std::ignore = receive_port_.release(); + std::ignore = send_port_.release(); } else { receive_port_.reset(); send_port_.reset();
diff --git a/mojo/core/channel_posix.cc b/mojo/core/channel_posix.cc index 6853d91..eca656a 100644 --- a/mojo/core/channel_posix.cc +++ b/mojo/core/channel_posix.cc
@@ -11,10 +11,10 @@ #include <atomic> #include <limits> #include <memory> +#include <tuple> #include "base/bind.h" #include "base/containers/queue.h" -#include "base/ignore_result.h" #include "base/location.h" #include "base/logging.h" #include "base/memory/ref_counted.h" @@ -253,11 +253,11 @@ read_watcher_.reset(); write_watcher_.reset(); if (leak_handle_) { - ignore_result(socket_.release()); + std::ignore = socket_.release(); server_.TakePlatformHandle().release(); } else { socket_.reset(); - ignore_result(server_.TakePlatformHandle()); + std::ignore = server_.TakePlatformHandle(); } #if defined(OS_IOS) fds_to_close_.clear(); @@ -281,7 +281,7 @@ base::CurrentThread::Get()->RemoveDestructionObserver(this); AcceptSocketConnection(server_.platform_handle().GetFD().get(), &socket_); - ignore_result(server_.TakePlatformHandle()); + std::ignore = server_.TakePlatformHandle(); if (!socket_.is_valid()) { OnError(Error::kConnectionFailed); return;
diff --git a/mojo/core/channel_win.cc b/mojo/core/channel_win.cc index 6f09927a..2e45d4f 100644 --- a/mojo/core/channel_win.cc +++ b/mojo/core/channel_win.cc
@@ -10,11 +10,11 @@ #include <algorithm> #include <limits> #include <memory> +#include <tuple> #include "base/bind.h" #include "base/containers/queue.h" #include "base/debug/activity_tracker.h" -#include "base/ignore_result.h" #include "base/location.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" @@ -243,7 +243,7 @@ CHECK(handle_.IsValid()); CancelIo(handle_.Get()); if (leak_handle_) - ignore_result(handle_.Take()); + std::ignore = handle_.Take(); else handle_.Close();
diff --git a/mojo/public/cpp/bindings/associated_remote.h b/mojo/public/cpp/bindings/associated_remote.h index a5c3797..d8d8165a 100644 --- a/mojo/public/cpp/bindings/associated_remote.h +++ b/mojo/public/cpp/bindings/associated_remote.h
@@ -6,12 +6,12 @@ #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_REMOTE_H_ #include <cstdint> +#include <tuple> #include <utility> #include "base/callback_forward.h" #include "base/check.h" #include "base/compiler_specific.h" -#include "base/ignore_result.h" #include "base/memory/scoped_refptr.h" #include "base/task/sequenced_task_runner.h" #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" @@ -218,7 +218,7 @@ // do not use AssociatedRemote in transit, so binding to a pipe handle can // also imply binding to a SequencedTaskRunner and observing pipe handle // state. - ignore_result(internal_state_.instance()); + std::ignore = internal_state_.instance(); } // Binds this AssociatedRemote with the returned PendingAssociatedReceiver
diff --git a/mojo/public/cpp/bindings/lib/buffer.cc b/mojo/public/cpp/bindings/lib/buffer.cc index 6f637df..3bd8b12 100644 --- a/mojo/public/cpp/bindings/lib/buffer.cc +++ b/mojo/public/cpp/bindings/lib/buffer.cc
@@ -5,9 +5,9 @@ #include "mojo/public/cpp/bindings/lib/buffer.h" #include <cstring> +#include <tuple> #include "base/check_op.h" -#include "base/ignore_result.h" #include "base/notreached.h" #include "base/numerics/safe_math.h" #include "mojo/public/c/system/message_pipe.h" @@ -102,7 +102,7 @@ size_ = new_size; for (auto& handle : *handles) - ignore_result(handle.release()); + std::ignore = handle.release(); handles->clear(); return true; }
diff --git a/mojo/public/cpp/bindings/lib/control_message_handler.cc b/mojo/public/cpp/bindings/lib/control_message_handler.cc index 2343f2a..82962344 100644 --- a/mojo/public/cpp/bindings/lib/control_message_handler.cc +++ b/mojo/public/cpp/bindings/lib/control_message_handler.cc
@@ -6,9 +6,10 @@ #include <stddef.h> #include <stdint.h> + +#include <tuple> #include <utility> -#include "base/ignore_result.h" #include "base/notreached.h" #include "mojo/public/cpp/bindings/interface_endpoint_client.h" #include "mojo/public/cpp/bindings/lib/message_fragment.h" @@ -120,7 +121,7 @@ response_fragment(response_message); Serialize<interface_control::RunResponseMessageParamsDataView>( response_params_ptr, response_fragment); - ignore_result(responder->Accept(&response_message)); + std::ignore = responder->Accept(&response_message); return true; }
diff --git a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc index c1c03d0e..265c3b4e 100644 --- a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc +++ b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
@@ -6,12 +6,13 @@ #include <stdint.h> +#include <tuple> + #include "base/bind.h" #include "base/check.h" #include "base/containers/contains.h" #include "base/containers/cxx20_erase.h" #include "base/cxx17_backports.h" -#include "base/ignore_result.h" #include "base/location.h" #include "base/logging.h" #include "base/memory/ptr_util.h" @@ -158,7 +159,7 @@ static void CallAcceptAndDeleteResponder( std::unique_ptr<MessageReceiver> responder, Message message) { - ignore_result(responder->Accept(&message)); + std::ignore = responder->Accept(&message); } std::unique_ptr<MessageReceiver> responder_; @@ -408,7 +409,7 @@ } if (response->received) - ignore_result(responder->Accept(&response->message)); + std::ignore = responder->Accept(&response->message); } InterfaceEndpointClient::InterfaceEndpointClient( @@ -635,7 +636,7 @@ auto iter = sync_responses_.find(request_id); DCHECK_EQ(&response_received, iter->second->response_received); if (response_received) { - ignore_result(responder->Accept(&iter->second->response)); + std::ignore = responder->Accept(&iter->second->response); } else { DVLOG(1) << "Mojo sync call returns without receiving a response. " << "Typcially it is because the interface has been "
diff --git a/mojo/public/cpp/bindings/lib/message.cc b/mojo/public/cpp/bindings/lib/message.cc index 48632db..de13709 100644 --- a/mojo/public/cpp/bindings/lib/message.cc +++ b/mojo/public/cpp/bindings/lib/message.cc
@@ -10,11 +10,11 @@ #include <algorithm> #include <atomic> +#include <tuple> #include <utility> #include "base/bind.h" #include "base/check_op.h" -#include "base/ignore_result.h" #include "base/lazy_instance.h" #include "base/memory/ptr_util.h" #include "base/numerics/safe_math.h" @@ -117,7 +117,7 @@ if (handles) { // Handle ownership has been taken by MojoAppendMessageData. for (size_t i = 0; i < handles->size(); ++i) - ignore_result(handles->at(i).release()); + std::ignore = handles->at(i).release(); } internal::Buffer payload_buffer(handle.get(), total_size, buffer, @@ -148,7 +148,7 @@ // Finalize the serialized message state and release ownership back to the // caller. - ignore_result(new_message.TakeMojoMessage().release()); + std::ignore = new_message.TakeMojoMessage().release(); } void DestroyUnserializedContext(uintptr_t context) { @@ -286,7 +286,7 @@ // Handle ownership has been taken by MojoAppendMessageData. for (auto& handle : handles) - ignore_result(handle.release()); + std::ignore = handle.release(); payload_buffer_ = internal::Buffer(buffer, payload.size(), payload.size()); std::copy(payload.begin(), payload.end(),
diff --git a/mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc b/mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc index 0a3e33ab..f1f50c96 100644 --- a/mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc +++ b/mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc
@@ -5,9 +5,10 @@ #include "mojo/public/cpp/bindings/pipe_control_message_proxy.h" #include <stddef.h> + +#include <tuple> #include <utility> -#include "base/ignore_result.h" #include "mojo/public/cpp/bindings/lib/message_fragment.h" #include "mojo/public/cpp/bindings/lib/serialization.h" #include "mojo/public/cpp/bindings/message.h" @@ -45,21 +46,21 @@ const absl::optional<DisconnectReason>& reason) { Message message(ConstructPeerEndpointClosedMessage(id, reason)); message.set_heap_profiler_tag(kMessageTag); - ignore_result(receiver_->Accept(&message)); + std::ignore = receiver_->Accept(&message); } void PipeControlMessageProxy::PausePeerUntilFlushCompletes(PendingFlush flush) { auto input = pipe_control::RunOrClosePipeInput::NewPauseUntilFlushCompletes( pipe_control::PauseUntilFlushCompletes::New(flush.PassPipe())); Message message(ConstructRunOrClosePipeMessage(std::move(input))); - ignore_result(receiver_->Accept(&message)); + std::ignore = receiver_->Accept(&message); } void PipeControlMessageProxy::FlushAsync(AsyncFlusher flusher) { auto input = pipe_control::RunOrClosePipeInput::NewFlushAsync( pipe_control::FlushAsync::New(flusher.PassPipe())); Message message(ConstructRunOrClosePipeMessage(std::move(input))); - ignore_result(receiver_->Accept(&message)); + std::ignore = receiver_->Accept(&message); } // static
diff --git a/mojo/public/cpp/bindings/lib/send_message_helper.cc b/mojo/public/cpp/bindings/lib/send_message_helper.cc index 955a23d..13e1be4 100644 --- a/mojo/public/cpp/bindings/lib/send_message_helper.cc +++ b/mojo/public/cpp/bindings/lib/send_message_helper.cc
@@ -5,8 +5,8 @@ #include "mojo/public/cpp/bindings/lib/send_message_helper.h" #include <cstring> +#include <tuple> -#include "base/ignore_result.h" #include "base/trace_event/typed_macros.h" namespace mojo { @@ -19,7 +19,7 @@ TRACE_EVENT_INSTANT("toplevel.flow", "Send mojo message", perfetto::Flow::Global(flow_id)); - ignore_result(receiver.Accept(&message)); + std::ignore = receiver.Accept(&message); // If this is a sync message which has received just received a reply, connect // the point which received the sync reply (us) to the flow. @@ -38,7 +38,7 @@ TRACE_EVENT_INSTANT("toplevel.flow", "Send mojo message", perfetto::Flow::Global(flow_id)); - ignore_result(receiver.AcceptWithResponder(&message, std::move(responder))); + std::ignore = receiver.AcceptWithResponder(&message, std::move(responder)); // If this is a sync message which has received just received a reply, connect // the point which received the sync reply (us) to the flow.
diff --git a/mojo/public/cpp/bindings/remote.h b/mojo/public/cpp/bindings/remote.h index dac19f3..63de5c5 100644 --- a/mojo/public/cpp/bindings/remote.h +++ b/mojo/public/cpp/bindings/remote.h
@@ -6,12 +6,12 @@ #define MOJO_PUBLIC_CPP_BINDINGS_REMOTE_H_ #include <cstdint> +#include <tuple> #include <utility> #include "base/callback_forward.h" #include "base/check.h" #include "base/compiler_specific.h" -#include "base/ignore_result.h" #include "base/memory/scoped_refptr.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" @@ -284,7 +284,7 @@ // binding to a SequencedTaskRunner and observing pipe handle state. This // allows for e.g. |is_connected()| to be a more reliable API than // |InterfacePtr::encountered_error()|. - ignore_result(internal_state_.instance()); + std::ignore = internal_state_.instance(); } // Unbinds this Remote, rendering it unable to issue further Interface method
diff --git a/mojo/public/cpp/bindings/shared_associated_remote.h b/mojo/public/cpp/bindings/shared_associated_remote.h index 849bd03..d94ad6b5 100644 --- a/mojo/public/cpp/bindings/shared_associated_remote.h +++ b/mojo/public/cpp/bindings/shared_associated_remote.h
@@ -5,7 +5,8 @@ #ifndef MOJO_PUBLIC_CPP_BINDINGS_SHARED_ASSOCIATED_REMOTE_H_ #define MOJO_PUBLIC_CPP_BINDINGS_SHARED_ASSOCIATED_REMOTE_H_ -#include "base/ignore_result.h" +#include <tuple> + #include "base/memory/ref_counted.h" #include "base/threading/sequenced_task_runner_handle.h" #include "mojo/public/cpp/bindings/associated_remote.h" @@ -19,7 +20,7 @@ template <typename Interface> struct SharedRemoteTraits<AssociatedRemote<Interface>> { static void BindDisconnected(AssociatedRemote<Interface>& remote) { - ignore_result(remote.BindNewEndpointAndPassDedicatedReceiver()); + std::ignore = remote.BindNewEndpointAndPassDedicatedReceiver(); } };
diff --git a/mojo/public/cpp/bindings/shared_remote.h b/mojo/public/cpp/bindings/shared_remote.h index 1329b64..67af1caf 100644 --- a/mojo/public/cpp/bindings/shared_remote.h +++ b/mojo/public/cpp/bindings/shared_remote.h
@@ -6,9 +6,9 @@ #define MOJO_PUBLIC_CPP_BINDINGS_SHARED_REMOTE_H_ #include <memory> +#include <tuple> #include "base/bind.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/synchronization/waitable_event.h" @@ -31,7 +31,7 @@ template <typename Interface> struct SharedRemoteTraits<Remote<Interface>> { static void BindDisconnected(Remote<Interface>& remote) { - ignore_result(remote.BindNewPipeAndPassReceiver()); + std::ignore = remote.BindNewPipeAndPassReceiver(); } };
diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc index 6e76245..e4d009b 100644 --- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc +++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
@@ -7,12 +7,12 @@ #include <algorithm> #include <memory> +#include <tuple> #include <utility> #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" @@ -828,7 +828,7 @@ TEST_F(AssociatedInterfaceTest, RemoteFlushForTestingWithClosedPeer) { Remote<IntegerSenderConnection> remote; - ignore_result(remote.BindNewPipeAndPassReceiver()); + std::ignore = remote.BindNewPipeAndPassReceiver(); bool called = false; remote.set_disconnect_handler( base::BindLambdaForTesting([&] { called = true; }));
diff --git a/mojo/public/cpp/bindings/tests/message_unittest.cc b/mojo/public/cpp/bindings/tests/message_unittest.cc index d07e35ab..5851db5 100644 --- a/mojo/public/cpp/bindings/tests/message_unittest.cc +++ b/mojo/public/cpp/bindings/tests/message_unittest.cc
@@ -5,9 +5,9 @@ #include <stdint.h> #include <algorithm> +#include <tuple> #include <vector> -#include "base/ignore_result.h" #include "mojo/public/cpp/bindings/message.h" #include "mojo/public/cpp/system/message_pipe.h" #include "testing/gtest/include/gtest/gtest.h" @@ -48,7 +48,7 @@ reinterpret_cast<const MojoHandle*>(in_handles1.data()), in_handles1.size(), MOJO_WRITE_MESSAGE_FLAG_NONE); for (auto& handle : in_handles1) - ignore_result(handle.release()); + std::ignore = handle.release(); // Now construct a Message object from the same payload and feed that into the // pipe.
diff --git a/mojo/public/cpp/bindings/tests/remote_unittest.cc b/mojo/public/cpp/bindings/tests/remote_unittest.cc index a7a1f80..bc26ebef 100644 --- a/mojo/public/cpp/bindings/tests/remote_unittest.cc +++ b/mojo/public/cpp/bindings/tests/remote_unittest.cc
@@ -4,6 +4,7 @@ #include <stdint.h> +#include <tuple> #include <utility> #include "base/barrier_closure.h" @@ -11,7 +12,6 @@ #include "base/callback.h" #include "base/callback_helpers.h" #include "base/debug/dump_without_crashing.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" @@ -780,7 +780,7 @@ TEST_P(RemoteTest, FlushForTestingWithClosedPeer) { Remote<math::Calculator> calc; - ignore_result(calc.BindNewPipeAndPassReceiver()); + std::ignore = calc.BindNewPipeAndPassReceiver(); bool called = false; calc.set_disconnect_handler( base::BindLambdaForTesting([&] { called = true; })); @@ -791,7 +791,7 @@ TEST_P(RemoteTest, FlushAsyncForTestingWithClosedPeer) { Remote<math::Calculator> calc; - ignore_result(calc.BindNewPipeAndPassReceiver()); + std::ignore = calc.BindNewPipeAndPassReceiver(); bool called = false; calc.set_disconnect_handler( base::BindLambdaForTesting([&] { called = true; }));
diff --git a/mojo/public/cpp/bindings/tests/validation_unittest.cc b/mojo/public/cpp/bindings/tests/validation_unittest.cc index 1f25fbe22..253acc7 100644 --- a/mojo/public/cpp/bindings/tests/validation_unittest.cc +++ b/mojo/public/cpp/bindings/tests/validation_unittest.cc
@@ -7,10 +7,10 @@ #include <stdio.h> #include <algorithm> #include <string> +#include <tuple> #include <utility> #include <vector> -#include "base/ignore_result.h" #include "base/memory/raw_ptr.h" #include "base/numerics/safe_math.h" #include "base/run_loop.h" @@ -197,7 +197,7 @@ base::RunLoop run_loop; mojo::internal::ValidationErrorObserverForTesting observer( run_loop.QuitClosure()); - ignore_result(test_message_receiver->Accept(&message)); + std::ignore = test_message_receiver->Accept(&message); if (expected != "PASS") // Observer only gets called on errors. run_loop.Run(); if (observer.last_error() == mojo::internal::VALIDATION_ERROR_NONE)
diff --git a/mojo/public/cpp/platform/platform_channel.cc b/mojo/public/cpp/platform/platform_channel.cc index e231892..f72b1ed3a 100644 --- a/mojo/public/cpp/platform/platform_channel.cc +++ b/mojo/public/cpp/platform/platform_channel.cc
@@ -7,9 +7,9 @@ #include <cstddef> #include <cstdint> #include <string> +#include <tuple> #include <utility> -#include "base/ignore_result.h" #include "base/logging.h" #include "base/rand_util.h" #include "base/strings/string_number_conversions.h" @@ -270,7 +270,7 @@ // process, rather than duplicating it. For consistency the process-launch // call will have consumed the handle regardless of whether launch succeeded. DCHECK(remote_endpoint_.platform_handle().is_valid_handle()); - ignore_result(remote_endpoint_.TakePlatformHandle().ReleaseHandle()); + std::ignore = remote_endpoint_.TakePlatformHandle().ReleaseHandle(); #else remote_endpoint_.reset(); #endif
diff --git a/mojo/public/cpp/platform/platform_handle.cc b/mojo/public/cpp/platform/platform_handle.cc index 91edeb1..cce3749a 100644 --- a/mojo/public/cpp/platform/platform_handle.cc +++ b/mojo/public/cpp/platform/platform_handle.cc
@@ -4,7 +4,8 @@ #include "mojo/public/cpp/platform/platform_handle.h" -#include "base/ignore_result.h" +#include <tuple> + #include "base/logging.h" #include "build/build_config.h" @@ -245,16 +246,16 @@ type_ = Type::kNone; #if defined(OS_WIN) - ignore_result(handle_.Take()); + std::ignore = handle_.Take(); #elif defined(OS_FUCHSIA) - ignore_result(handle_.release()); + std::ignore = handle_.release(); #elif defined(OS_MAC) - ignore_result(mach_send_.release()); - ignore_result(mach_receive_.release()); + std::ignore = mach_send_.release(); + std::ignore = mach_receive_.release(); #endif #if defined(OS_POSIX) || defined(OS_FUCHSIA) - ignore_result(fd_.release()); + std::ignore = fd_.release(); #endif }
diff --git a/mojo/public/cpp/platform/tests/platform_handle_unittest.cc b/mojo/public/cpp/platform/tests/platform_handle_unittest.cc index 1e67dcd..95e99edb4 100644 --- a/mojo/public/cpp/platform/tests/platform_handle_unittest.cc +++ b/mojo/public/cpp/platform/tests/platform_handle_unittest.cc
@@ -4,11 +4,12 @@ #include "mojo/public/cpp/platform/platform_handle.h" +#include <tuple> + #include "base/check.h" #include "base/files/file.h" #include "base/files/platform_file.h" #include "base/files/scoped_temp_dir.h" -#include "base/ignore_result.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/notreached.h" #include "base/rand_util.h" @@ -186,7 +187,7 @@ generic_region = base::UnsafeSharedMemoryRegion::TakeHandleForSerialization( std::move(region)); region_handle = generic_region.PassPlatformHandle(); - ignore_result(region_handle.release()); + std::ignore = region_handle.release(); return contents; }
diff --git a/mojo/public/cpp/system/invitation.cc b/mojo/public/cpp/system/invitation.cc index 7ae60cf..8abfb198 100644 --- a/mojo/public/cpp/system/invitation.cc +++ b/mojo/public/cpp/system/invitation.cc
@@ -4,7 +4,8 @@ #include "mojo/public/cpp/system/invitation.h" -#include "base/ignore_result.h" +#include <tuple> + #include "base/numerics/safe_conversions.h" #include "build/build_config.h" #include "mojo/public/c/system/invitation.h" @@ -98,7 +99,7 @@ error_handler_context, &options); // If successful, the invitation handle is already closed for us. if (result == MOJO_RESULT_OK) - ignore_result(invitation.release()); + std::ignore = invitation.release(); } } // namespace
diff --git a/net/data/ssl/ev_roots/certs/063e4afac491dfd332f3089b8542e94617d893d7fe944e10a7937ee29d9693c0.pem b/net/data/ssl/ev_roots/certs/063e4afac491dfd332f3089b8542e94617d893d7fe944e10a7937ee29d9693c0.pem deleted file mode 100644 index ebc7cc99..0000000 --- a/net/data/ssl/ev_roots/certs/063e4afac491dfd332f3089b8542e94617d893d7fe944e10a7937ee29d9693c0.pem +++ /dev/null
@@ -1,138 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 11806822484801597146 (0xa3da427ea4b1aeda) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008 - Validity - Not Before: Aug 1 12:29:50 2008 GMT - Not After : Jul 31 12:29:50 2038 GMT - Subject: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008 - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (4096 bit) - Modulus: - 00:af:00:cb:70:37:2b:80:5a:4a:3a:6c:78:94:7d: - a3:7f:1a:1f:f6:35:d5:bd:db:cb:0d:44:72:3e:26: - b2:90:52:ba:63:3b:28:58:6f:a5:b3:6d:94:a6:f3: - dd:64:0c:55:f6:f6:e7:f2:22:22:80:5e:e1:62:c6: - b6:29:e1:81:6c:f2:bf:e5:7d:32:6a:54:a0:32:19: - 59:fe:1f:8b:d7:3d:60:86:85:24:6f:e3:11:b3:77: - 3e:20:96:35:21:6b:b3:08:d9:70:2e:64:f7:84:92: - 53:d6:0e:b0:90:8a:8a:e3:87:8d:06:d3:bd:90:0e: - e2:99:a1:1b:86:0e:da:9a:0a:bb:0b:61:50:06:52: - f1:9e:7f:76:ec:cb:0f:d0:1e:0d:cf:99:30:3d:1c: - c4:45:10:58:ac:d6:d3:e8:d7:e5:ea:c5:01:07:77: - d6:51:e6:03:7f:8a:48:a5:4d:68:75:b9:e9:bc:9e: - 4e:19:71:f5:32:4b:9c:6d:60:19:0b:fb:cc:9d:75: - dc:bf:26:cd:8f:93:78:39:79:73:5e:25:0e:ca:5c: - eb:77:12:07:cb:64:41:47:72:93:ab:50:c3:eb:09: - 76:64:34:d2:39:b7:76:11:09:0d:76:45:c4:a9:ae: - 3d:6a:af:b5:7d:65:2f:94:58:10:ec:5c:7c:af:7e: - e2:b6:18:d9:d0:9b:4e:5a:49:df:a9:66:0b:cc:3c: - c6:78:7c:a7:9c:1d:e3:ce:8e:53:be:05:de:60:0f: - 6b:e5:1a:db:3f:e3:e1:21:c9:29:c1:f1:eb:07:9c: - 52:1b:01:44:51:3c:7b:25:d7:c4:e5:52:54:5d:25: - 07:ca:16:20:b8:ad:e4:41:ee:7a:08:fe:99:6f:83: - a6:91:02:b0:6c:36:55:6a:e7:7d:f5:96:e6:ca:81: - d6:97:f1:94:83:e9:ed:b0:b1:6b:12:69:1e:ac:fb: - 5d:a9:c5:98:e9:b4:5b:58:7a:be:3d:a2:44:3a:63: - 59:d4:0b:25:de:1b:4f:bd:e5:01:9e:cd:d2:29:d5: - 9f:17:19:0a:6f:bf:0c:90:d3:09:5f:d9:e3:8a:35: - cc:79:5a:4d:19:37:92:b7:c4:c1:ad:af:f4:79:24: - 9a:b2:01:0b:b1:af:5c:96:f3:80:32:fb:5c:3d:98: - f1:a0:3f:4a:de:be:af:94:2e:d9:55:9a:17:6e:60: - 9d:63:6c:b8:63:c9:ae:81:5c:18:35:e0:90:bb:be: - 3c:4f:37:22:b9:7e:eb:cf:9e:77:21:a6:3d:38:81: - fb:48:da:31:3d:2b:e3:89:f5:d0:b5:bd:7e:e0:50: - c4:12:89:b3:23:9a:10:31:85:db:ae:6f:ef:38:33: - 18:76:11 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: critical - CA:TRUE, pathlen:12 - X509v3 Subject Key Identifier: - F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19 - X509v3 Authority Key Identifier: - keyid:F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19 - DirName:/C=EU/L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287/O=AC Camerfirma S.A./CN=Chambers of Commerce Root - 2008 - serial:A3:DA:42:7E:A4:B1:AE:DA - - X509v3 Key Usage: critical - Certificate Sign, CRL Sign - X509v3 Certificate Policies: - Policy: X509v3 Any Policy - CPS: http://policy.camerfirma.com - - Signature Algorithm: sha1WithRSAEncryption - 90:12:af:22:35:c2:a3:39:f0:2e:de:e9:b5:e9:78:7c:48:be: - 3f:7d:45:92:5e:e9:da:b1:19:fc:16:3c:9f:b4:5b:66:9e:6a: - e7:c3:b9:5d:88:e8:0f:ad:cf:23:0f:de:25:3a:5e:cc:4f:a5: - c1:b5:2d:ac:24:d2:58:07:de:a2:cf:69:84:60:33:e8:10:0d: - 13:a9:23:d0:85:e5:8e:7b:a6:9e:3d:72:13:72:33:f5:aa:7d: - c6:63:1f:08:f4:fe:01:7f:24:cf:2b:2c:54:09:de:e2:2b:6d: - 92:c6:39:4f:16:ea:3c:7e:7a:46:d4:45:6a:46:a8:eb:75:82: - 56:a7:ab:a0:7c:68:13:33:f6:9d:30:f0:6f:27:39:24:23:2a: - 90:fd:90:29:35:f2:93:df:34:a5:c6:f7:f8:ef:8c:0f:62:4a: - 7c:ae:d3:f5:54:f8:8d:b6:9a:56:87:16:82:3a:33:ab:5a:22: - 08:f7:82:ba:ea:2e:e0:47:9a:b4:b5:45:a3:05:3b:d9:dc:2e: - 45:40:3b:ea:dc:7f:e8:3b:eb:d1:ec:26:d8:35:a4:30:c5:3a: - ac:57:9e:b3:76:a5:20:7b:f9:1e:4a:05:62:01:a6:28:75:60: - 97:92:0d:6e:3e:4d:37:43:0d:92:15:9c:18:22:cd:51:99:a0: - 29:1a:3c:5f:8a:32:33:5b:30:c7:89:2f:47:98:0f:a3:03:c6: - f6:f1:ac:df:32:f0:d9:81:1a:e4:9c:bd:f6:80:14:f0:d1:2c: - b9:85:f5:d8:a3:b1:c8:a5:21:e5:1c:13:97:ee:0e:bd:df:29: - a9:ef:34:53:5b:d3:e4:6a:13:84:06:b6:32:02:c4:52:ae:22: - d2:dc:b2:21:42:1a:da:40:f0:29:c9:ec:0a:0c:5c:e2:d0:ba: - cc:48:d3:37:0a:cc:12:0a:8a:79:b0:3d:03:7f:69:4b:f4:34: - 20:7d:b3:34:ea:8e:4b:64:f5:3e:fd:b3:23:67:15:0d:04:b8: - f0:2d:c1:09:51:3c:b2:6c:15:f0:a5:23:d7:83:74:e4:e5:2e: - c9:fe:98:27:42:c6:ab:c6:9e:b0:d0:5b:38:a5:9b:50:de:7e: - 18:98:b5:45:3b:f6:79:b4:e8:f7:1a:7b:06:83:fb:d0:8b:da: - bb:c7:bd:18:ab:08:6f:3c:80:6b:40:3f:19:19:ba:65:8a:e6: - be:d5:5c:d3:36:d7:ef:40:52:24:60:38:67:04:31:ec:8f:f3: - 82:c6:de:b9:55:f3:3b:31:91:5a:dc:b5:08:15:ad:76:25:0a: - 0d:7b:2e:87:e2:0c:a6:06:bc:26:10:6d:37:9d:ec:dd:78:8c: - 7c:80:c5:f0:d9:77:48:d0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2.pem b/net/data/ssl/ev_roots/certs/687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2.pem deleted file mode 100644 index 7de0e35..0000000 --- a/net/data/ssl/ev_roots/certs/687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2.pem +++ /dev/null
@@ -1,86 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root - Validity - Not Before: May 30 10:48:38 2000 GMT - Not After : May 30 10:48:38 2020 GMT - Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:b7:f7:1a:33:e6:f2:00:04:2d:39:e0:4e:5b:ed: - 1f:bc:6c:0f:cd:b5:fa:23:b6:ce:de:9b:11:33:97: - a4:29:4c:7d:93:9f:bd:4a:bc:93:ed:03:1a:e3:8f: - cf:e5:6d:50:5a:d6:97:29:94:5a:80:b0:49:7a:db: - 2e:95:fd:b8:ca:bf:37:38:2d:1e:3e:91:41:ad:70: - 56:c7:f0:4f:3f:e8:32:9e:74:ca:c8:90:54:e9:c6: - 5f:0f:78:9d:9a:40:3c:0e:ac:61:aa:5e:14:8f:9e: - 87:a1:6a:50:dc:d7:9a:4e:af:05:b3:a6:71:94:9c: - 71:b3:50:60:0a:c7:13:9d:38:07:86:02:a8:e9:a8: - 69:26:18:90:ab:4c:b0:4f:23:ab:3a:4f:84:d8:df: - ce:9f:e1:69:6f:bb:d7:42:d7:6b:44:e4:c7:ad:ee: - 6d:41:5f:72:5a:71:08:37:b3:79:65:a4:59:a0:94: - 37:f7:00:2f:0d:c2:92:72:da:d0:38:72:db:14:a8: - 45:c4:5d:2a:7d:b7:b4:d6:c4:ee:ac:cd:13:44:b7: - c9:2b:dd:43:00:25:fa:61:b9:69:6a:58:23:11:b7: - a7:33:8f:56:75:59:f5:cd:29:d7:46:b7:0a:2b:65: - b6:d3:42:6f:15:b2:b8:7b:fb:ef:e9:5d:53:d5:34: - 5a:27 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Subject Key Identifier: - AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A - X509v3 Key Usage: - Certificate Sign, CRL Sign - X509v3 Basic Constraints: critical - CA:TRUE - X509v3 Authority Key Identifier: - keyid:AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A - DirName:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root - serial:01 - - Signature Algorithm: sha1WithRSAEncryption - b0:9b:e0:85:25:c2:d6:23:e2:0f:96:06:92:9d:41:98:9c:d9: - 84:79:81:d9:1e:5b:14:07:23:36:65:8f:b0:d8:77:bb:ac:41: - 6c:47:60:83:51:b0:f9:32:3d:e7:fc:f6:26:13:c7:80:16:a5: - bf:5a:fc:87:cf:78:79:89:21:9a:e2:4c:07:0a:86:35:bc:f2: - de:51:c4:d2:96:b7:dc:7e:4e:ee:70:fd:1c:39:eb:0c:02:51: - 14:2d:8e:bd:16:e0:c1:df:46:75:e7:24:ad:ec:f4:42:b4:85: - 93:70:10:67:ba:9d:06:35:4a:18:d3:2b:7a:cc:51:42:a1:7a: - 63:d1:e6:bb:a1:c5:2b:c2:36:be:13:0d:e6:bd:63:7e:79:7b: - a7:09:0d:40:ab:6a:dd:8f:8a:c3:f6:f6:8c:1a:42:05:51:d4: - 45:f5:9f:a7:62:21:68:15:20:43:3c:99:e7:7c:bd:24:d8:a9: - 91:17:73:88:3f:56:1b:31:38:18:b4:71:0f:9a:cd:c8:0e:9e: - 8e:2e:1b:e1:8c:98:83:cb:1f:31:f1:44:4c:c6:04:73:49:76: - 60:0f:c7:f8:bd:17:80:6b:2e:e9:cc:4c:0e:5a:9a:79:0f:20: - 0a:2e:d5:9e:63:26:1e:55:92:94:d8:82:17:5a:7b:d0:bc:c7: - 8f:4e:86:04 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/certs/960adf0063e96356750c2965dd0a0867da0b9cbd6e77714aeafb2349ab393da3.pem b/net/data/ssl/ev_roots/certs/960adf0063e96356750c2965dd0a0867da0b9cbd6e77714aeafb2349ab393da3.pem deleted file mode 100644 index 1c8e2cf..0000000 --- a/net/data/ssl/ev_roots/certs/960adf0063e96356750c2965dd0a0867da0b9cbd6e77714aeafb2349ab393da3.pem +++ /dev/null
@@ -1,87 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: - 04:00:00:00:00:01:0f:85:aa:2d:48 - Signature Algorithm: sha1WithRSAEncryption - Issuer: O=Cybertrust, Inc, CN=Cybertrust Global Root - Validity - Not Before: Dec 15 08:00:00 2006 GMT - Not After : Dec 15 08:00:00 2021 GMT - Subject: O=Cybertrust, Inc, CN=Cybertrust Global Root - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:f8:c8:bc:bd:14:50:66:13:ff:f0:d3:79:ec:23: - f2:b7:1a:c7:8e:85:f1:12:73:a6:19:aa:10:db:9c: - a2:65:74:5a:77:3e:51:7d:56:f6:dc:23:b6:d4:ed: - 5f:58:b1:37:4d:d5:49:0e:6e:f5:6a:87:d6:d2:8c: - d2:27:c6:e2:ff:36:9f:98:65:a0:13:4e:c6:2a:64: - 9b:d5:90:12:cf:14:06:f4:3b:e3:d4:28:be:e8:0e: - f8:ab:4e:48:94:6d:8e:95:31:10:5c:ed:a2:2d:bd: - d5:3a:6d:b2:1c:bb:60:c0:46:4b:01:f5:49:ae:7e: - 46:8a:d0:74:8d:a1:0c:02:ce:ee:fc:e7:8f:b8:6b: - 66:f3:7f:44:00:bf:66:25:14:2b:dd:10:30:1d:07: - 96:3f:4d:f6:6b:b8:8f:b7:7b:0c:a5:38:eb:de:47: - db:d5:5d:39:fc:88:a7:f3:d7:2a:74:f1:e8:5a:a2: - 3b:9f:50:ba:a6:8c:45:35:c2:50:65:95:dc:63:82: - ef:dd:bf:77:4d:9c:62:c9:63:73:16:d0:29:0f:49: - a9:48:f0:b3:aa:b7:6c:c5:a7:30:39:40:5d:ae:c4: - e2:5d:26:53:f0:ce:1c:23:08:61:a8:94:19:ba:04: - 62:40:ec:1f:38:70:77:12:06:71:a7:30:18:5d:25: - 27:a5 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Key Usage: critical - Certificate Sign, CRL Sign - X509v3 Basic Constraints: critical - CA:TRUE - X509v3 Subject Key Identifier: - B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57 - X509v3 CRL Distribution Points: - - Full Name: - URI:http://www2.public-trust.com/crl/ct/ctroot.crl - - X509v3 Authority Key Identifier: - keyid:B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57 - - Signature Algorithm: sha1WithRSAEncryption - 56:ef:0a:23:a0:54:4e:95:97:c9:f8:89:da:45:c1:d4:a3:00: - 25:f4:1f:13:ab:b7:a3:85:58:69:c2:30:ad:d8:15:8a:2d:e3: - c9:cd:81:5a:f8:73:23:5a:a7:7c:05:f3:fd:22:3b:0e:d1:06: - c4:db:36:4c:73:04:8e:e5:b0:22:e4:c5:f3:2e:a5:d9:23:e3: - b8:4e:4a:20:a7:6e:02:24:9f:22:60:67:7b:8b:1d:72:09:c5: - 31:5c:e9:79:9f:80:47:3d:ad:a1:0b:07:14:3d:47:ff:03:69: - 1a:0c:0b:44:e7:63:25:a7:7f:b2:c9:b8:76:84:ed:23:f6:7d: - 07:ab:45:7e:d3:df:b3:bf:e9:8a:b6:cd:a8:a2:67:2b:52:d5: - b7:65:f0:39:4c:63:a0:91:79:93:52:0f:54:dd:83:bb:9f:d1: - 8f:a7:53:73:c3:cb:ff:30:ec:7c:04:b8:d8:44:1f:93:5f:71: - 09:22:b7:6e:3e:ea:1c:03:4e:9d:1a:20:61:fb:81:37:ec:5e: - fc:0a:45:ab:d7:e7:17:55:d0:a0:ea:60:9b:a6:f6:e3:8c:5b: - 29:c2:06:60:14:9d:2d:97:4c:a9:93:15:9d:61:c4:01:5f:48: - d6:58:bd:56:31:12:4e:11:c8:21:e0:b3:11:91:65:db:b4:a6: - 88:38:ce:55 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE-----
diff --git a/net/data/ssl/ev_roots/root_store.textproto b/net/data/ssl/ev_roots/root_store.textproto index 239aa43..f1158fa 100644 --- a/net/data/ssl/ev_roots/root_store.textproto +++ b/net/data/ssl/ev_roots/root_store.textproto
@@ -6,28 +6,6 @@ # the certificate. Also make sure to add the PEM file to the inputs section of # BUILD.gn. -# AC Camerfirma S.A. Chambers of Commerce Root - 2008 -# https://www.camerfirma.com -trust_anchors { - filename: "063e4afac491dfd332f3089b8542e94617d893d7fe944e10a7937ee29d9693c0.pem" - - # AC Camerfirma uses the last two arcs to track how the private key - # is managed - the effective verification policy is the same. - ev_policy_oids: "1.3.6.1.4.1.17326.10.14.2.1.2" - ev_policy_oids: "1.3.6.1.4.1.17326.10.14.2.2.2" -} - -# AddTrust External CA Root -# https://addtrustexternalcaroot-ev.comodoca.com -trust_anchors { - filename: "687fa451382278fff0c8b11f8d43d576671c6eb2bceab413fb83d965d06d2ff2.pem" - - ev_policy_oids: "1.3.6.1.4.1.6449.1.2.1.5.1" - # This is the Network Solutions EV OID. However, this root - # cross-certifies NetSol and so we need it here too. - ev_policy_oids: "1.3.6.1.4.1.782.1.2.1.8.1" -} - # Actalis Authentication Root CA # https://ssltest-a.actalis.it:8443 trust_anchors { @@ -158,14 +136,6 @@ ev_policy_oids: "1.3.6.1.4.1.6449.1.2.1.5.1" } -# Cybertrust Global Root -# https://evup.cybertrust.ne.jp/ctj-ev-upgrader/evseal.gif -trust_anchors { - filename: "960adf0063e96356750c2965dd0a0867da0b9cbd6e77714aeafb2349ab393da3.pem" - - ev_policy_oids: "1.3.6.1.4.1.6334.1.100.1" -} - # DigiCert Assured ID Root CA # https://assured-id-root-ca.chain-demos.digicert.com/ trust_anchors {
diff --git a/net/dns/dns_alias_utility.cc b/net/dns/dns_alias_utility.cc index 8c96c5f..7c517228 100644 --- a/net/dns/dns_alias_utility.cc +++ b/net/dns/dns_alias_utility.cc
@@ -48,25 +48,18 @@ namespace dns_alias_utility { -std::vector<std::string> SanitizeDnsAliases( - const std::vector<std::string>& aliases) { - std::vector<std::string> sanitized_aliases; - std::unordered_set<std::string> aliases_seen; +std::set<std::string> FixUpDnsAliases(const std::set<std::string>& aliases) { + std::set<std::string> fixed_aliases; for (const auto& alias : aliases) { std::string canonicalized_alias; if (IsValidAliasWithCanonicalOutput(alias, &canonicalized_alias)) { - // Skip adding any duplicate aliases. - if (aliases_seen.find(canonicalized_alias) != aliases_seen.end()) - continue; - - aliases_seen.insert(canonicalized_alias); - sanitized_aliases.push_back(std::move(canonicalized_alias)); + fixed_aliases.insert(std::move(canonicalized_alias)); } } - return sanitized_aliases; + return fixed_aliases; } } // namespace dns_alias_utility
diff --git a/net/dns/dns_alias_utility.h b/net/dns/dns_alias_utility.h index 236a69a..cac7074 100644 --- a/net/dns/dns_alias_utility.h +++ b/net/dns/dns_alias_utility.h
@@ -5,8 +5,8 @@ #ifndef NET_DNS_DNS_ALIAS_UTILITY_H_ #define NET_DNS_DNS_ALIAS_UTILITY_H_ +#include <set> #include <string> -#include <vector> #include "net/base/net_export.h" @@ -14,15 +14,15 @@ namespace dns_alias_utility { -// Returns a sanitized list of canonicalized aliases (i.e. aliases that are -// written as hostnames for canonical URLs). The list is stripped of -// "localhost", IP addresses, duplicates, the empty string, strings longer -// than `dns_protocol::kMaxCharNameLength` characters (with one extra -// character allowed for fully-qualified hostnames, i.e. hostnames ending -// with '.'), and any strings that fail to URL-canonicalize as hosts. The -// remaining aliases are replaced with their canonicalized forms. -NET_EXPORT_PRIVATE std::vector<std::string> SanitizeDnsAliases( - const std::vector<std::string>& aliases); +// Returns a fixed up set of canonicalized aliases (i.e. aliases that are +// written as hostnames for canonical URLs). The set is stripped of "localhost", +// IP addresses, duplicates, the empty string, strings longer than +// `dns_protocol::kMaxCharNameLength` characters (with one extra character +// allowed for fully-qualified hostnames, i.e. hostnames ending with '.'), and +// any strings that fail to URL-canonicalize as hosts. The remaining aliases are +// replaced with their canonicalized forms. +NET_EXPORT_PRIVATE std::set<std::string> FixUpDnsAliases( + const std::set<std::string>& aliases); } // namespace dns_alias_utility
diff --git a/net/dns/dns_alias_utility_unittest.cc b/net/dns/dns_alias_utility_unittest.cc index 473a474..c4adadab 100644 --- a/net/dns/dns_alias_utility_unittest.cc +++ b/net/dns/dns_alias_utility_unittest.cc
@@ -14,71 +14,39 @@ namespace net { namespace { -TEST(DnsAliasUtilityTest, SanitizeDnsAliases) { - const struct { - const char* dns_alias; - const char* sanitized_dns_alias; - } kTestCases[] = {{"localhost", nullptr}, - {"1.2.3.4", nullptr}, - {"a.com", "a.com"}, - {"", nullptr}, - {"test", "test"}, - {"0", nullptr}, - {"[::1]", nullptr}, - {"::1", nullptr}, - {"-www.e.com", "-www.e.com"}, - {"alias.com", "alias.com"}, - {"s .de", "s%20.de"}, - {"www-1", "www-1"}, - {"2a", "2a"}, - {"a-", "a-"}, - {"b..net", "b..net"}, - {"a.com", nullptr}, - {"b_o.org", "b_o.org"}, - {"alias.com", nullptr}, - {"1..3.2", nullptr}, - {"1.2.3.09", nullptr}, - {"foo.4", nullptr}, - {"a,b,c", "a%2Cb%2Cc"}, - {"f/g", nullptr}, - {"www?", nullptr}, - {"[3a2:401f::1]", nullptr}, - {"0.0.1.2", nullptr}, - {"a.b.com", "a.b.com"}, - {"c.org", "c.org"}, - {"123.tld", "123.tld"}, - {"d-e.net", "d-e.net"}, - {"f__g", "f__g"}, - {"h", "h"}}; +TEST(DnsAliasUtilityTest, FixUpDnsAliases) { + const std::set<std::string> kAliases = { + "localhost", "1.2.3.4", "a.com", "", "test", + "0", "[::1]", "::1", "-www.e.com", "alias.com", + "s .de", "www-1", "2a", "a-", "b..net", + "a.com", "b_o.org", "alias.com", "1..3.2", "1.2.3.09", + "foo.4", "a,b,c", "f/g", "www?", "[3a2:401f::1]", + "0.0.1.2", "a.b.com", "c.org", "123.tld", "d-e.net", + "f__g", "h"}; + const std::set<std::string> kExpectedFixedUpAliases = { + "a.com", "test", "-www.e.com", "alias.com", "s%20.de", "www-1", + "2a", "a-", "b..net", "b_o.org", "a%2Cb%2Cc", "a.b.com", + "c.org", "123.tld", "d-e.net", "f__g", "h"}; - std::vector<std::string> aliases; - std::vector<std::string> expected_sanitized_aliases; - - for (const auto& test : kTestCases) { - aliases.push_back(test.dns_alias); - if (test.sanitized_dns_alias) - expected_sanitized_aliases.push_back(test.sanitized_dns_alias); - } - - std::vector<std::string> sanitized_aliases = - dns_alias_utility::SanitizeDnsAliases(aliases); - EXPECT_EQ(expected_sanitized_aliases, sanitized_aliases); + std::set<std::string> fixed_up_aliases = + dns_alias_utility::FixUpDnsAliases(kAliases); + EXPECT_EQ(kExpectedFixedUpAliases, fixed_up_aliases); std::string long_unqualified_alias(dns_protocol::kMaxCharNameLength + 1, 'x'); std::string long_qualified_alias(dns_protocol::kMaxCharNameLength, 'x'); long_qualified_alias += "."; - std::vector<std::string> List_with_long_aliases( + std::set<std::string> set_with_long_aliases( {long_unqualified_alias, long_qualified_alias}); - std::vector<std::string> sanitized_list_with_long_aliases = - dns_alias_utility::SanitizeDnsAliases(List_with_long_aliases); - EXPECT_THAT(sanitized_list_with_long_aliases, + std::set<std::string> fixed_up_set_with_long_aliases = + dns_alias_utility::FixUpDnsAliases(set_with_long_aliases); + EXPECT_THAT(fixed_up_set_with_long_aliases, testing::ElementsAre(long_qualified_alias)); - std::vector<std::string> empty_aliases; - std::vector<std::string> sanitized_empty_aliases = - dns_alias_utility::SanitizeDnsAliases(empty_aliases); - EXPECT_TRUE(sanitized_empty_aliases.empty()); + std::set<std::string> empty_aliases; + std::set<std::string> fixed_up_empty_aliases = + dns_alias_utility::FixUpDnsAliases(empty_aliases); + EXPECT_TRUE(fixed_up_empty_aliases.empty()); } } // namespace
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc index 05286ae..a2ade9d9 100644 --- a/net/dns/host_resolver.cc +++ b/net/dns/host_resolver.cc
@@ -4,6 +4,7 @@ #include "net/dns/host_resolver.h" +#include <set> #include <string> #include <utility> #include <vector> @@ -69,11 +70,8 @@ return *nullopt_result; } - const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const override { - static const base::NoDestructor<absl::optional<std::vector<std::string>>> - nullopt_result; - return *nullopt_result; + const std::set<std::string>* GetDnsAliasResults() const override { + return nullptr; } ResolveErrorInfo GetResolveErrorInfo() const override {
diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h index c41f5c7..5900589 100644 --- a/net/dns/host_resolver.h +++ b/net/dns/host_resolver.h
@@ -9,6 +9,7 @@ #include <stdint.h> #include <memory> +#include <set> #include <string> #include <vector> @@ -112,21 +113,20 @@ GetHostnameResults() const = 0; // Any DNS record aliases, such as CNAME aliases, found as a result of an - // address query. The alias chain order is preserved in reverse, from - // canonical name (i.e. address record name) through to query name. Should - // only be called after Start() signals completion, either by invoking the - // callback or by returning a result other than `ERR_IO_PENDING`. Returns a - // list of aliases that has been fixed up and canonicalized (as URL - // hostnames), and thus may differ from the results stored directly in the - // AddressList. + // address query. Includes all known aliases, e.g. from A, AAAA, or HTTPS, + // not just from the address used for the connection, in no particular + // order. Should only be called after Start() signals completion, either by + // invoking the callback or by returning a result other than + // `ERR_IO_PENDING`. Returns a list of aliases that has been fixed up and + // canonicalized (as URL hostnames), and thus may differ from the results + // stored directly in the AddressList. // // If `ResolveHostParameters::include_canonical_name` was true, alias // results will always be the single "canonical name" received from the - // system resolver without URL hostname canonicalization (or an empty vector - // or `nullopt` in the unusual case that the system resolver did not give a + // system resolver without URL hostname canonicalization (or an empty set or + // `nullptr` in the unusual case that the system resolver did not give a // canonical name). - virtual const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const = 0; + virtual const std::set<std::string>* GetDnsAliasResults() const = 0; // Result of an experimental query. Meaning depends on the specific query // type, but each boolean value generally refers to a valid or invalid
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc index 30ec8f5..f8a3f5e 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc
@@ -8,6 +8,7 @@ #include <cmath> #include <limits> #include <memory> +#include <set> #include <string> #include <tuple> #include <unordered_set> @@ -758,8 +759,7 @@ return results_ ? results_.value().hostnames() : *nullopt_result; } - const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const override { + const std::set<std::string>* GetDnsAliasResults() const override { DCHECK(complete_); // If `include_canonical_name` param was true, should only ever have at most @@ -768,17 +768,19 @@ if (parameters().include_canonical_name && fixed_up_dns_alias_results_) { DCHECK_LE(fixed_up_dns_alias_results_->size(), 1u); if (GetAddressResults()) { - DCHECK(GetAddressResults()->dns_aliases() == - fixed_up_dns_alias_results_.value()); + std::set<std::string> address_list_aliases_set( + GetAddressResults()->dns_aliases().begin(), + GetAddressResults()->dns_aliases().end()); + DCHECK(address_list_aliases_set == fixed_up_dns_alias_results_.value()); DCHECK_EQ(GetAddressResults()->GetCanonicalName(), fixed_up_dns_alias_results_->empty() ? "" - : fixed_up_dns_alias_results_->front()); + : *fixed_up_dns_alias_results_->begin()); } } #endif // DCHECK_IS_ON() - return fixed_up_dns_alias_results_; + return base::OptionalOrNullptr(fixed_up_dns_alias_results_); } const absl::optional<std::vector<bool>>& GetExperimentalResultsForTesting() @@ -900,16 +902,18 @@ return; } + fixed_up_dns_alias_results_.emplace( + results_.value().addresses()->dns_aliases().begin(), + results_.value().addresses()->dns_aliases().end()); + // Skip fixups for `include_canonical_name` requests. Just use the // canonical name exactly as it was received from the system resolver. if (parameters().include_canonical_name) { DCHECK_LE(results_.value().addresses()->dns_aliases().size(), 1u); - fixed_up_dns_alias_results_ = results_.value().addresses()->dns_aliases(); - return; + } else { + fixed_up_dns_alias_results_ = dns_alias_utility::FixUpDnsAliases( + fixed_up_dns_alias_results_.value()); } - - fixed_up_dns_alias_results_ = dns_alias_utility::SanitizeDnsAliases( - results_.value().addresses()->dns_aliases()); } private: @@ -979,7 +983,7 @@ bool complete_; absl::optional<HostCache::Entry> results_; absl::optional<HostCache::EntryStaleness> stale_info_; - absl::optional<std::vector<std::string>> fixed_up_dns_alias_results_; + absl::optional<std::set<std::string>> fixed_up_dns_alias_results_; ResolveErrorInfo error_info_; const raw_ptr<const base::TickClock> tick_clock_;
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc index 32bea5cb..d06d312 100644 --- a/net/dns/host_resolver_manager_unittest.cc +++ b/net/dns/host_resolver_manager_unittest.cc
@@ -2644,7 +2644,7 @@ testing::Optional(testing::UnorderedElementsAre(ExpectEndpointResult( testing::ElementsAre(CreateExpected("192.168.1.42", 80)))))); EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("canon.name"))); + testing::Pointee(testing::UnorderedElementsAre("canon.name"))); EXPECT_THAT(response_no_flag.result_error(), IsError(ERR_NAME_NOT_RESOLVED)); } @@ -2674,7 +2674,7 @@ response.request()->GetEndpointResults(), testing::Optional(testing::UnorderedElementsAre(ExpectEndpointResult( testing::ElementsAre(CreateExpected("192.168.1.42", 80)))))); - EXPECT_EQ(response.request()->GetDnsAliasResults(), absl::nullopt); + EXPECT_FALSE(response.request()->GetDnsAliasResults()); EXPECT_THAT(response_no_flag.result_error(), IsError(ERR_NAME_NOT_RESOLVED)); } @@ -2708,7 +2708,7 @@ testing::Optional(testing::UnorderedElementsAre(ExpectEndpointResult( testing::ElementsAre(CreateExpected("192.168.1.42", 80)))))); EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("CANON.name"))); + testing::Pointee(testing::UnorderedElementsAre("CANON.name"))); EXPECT_THAT(response_no_flag.result_error(), IsError(ERR_NAME_NOT_RESOLVED)); } @@ -7491,8 +7491,9 @@ EXPECT_EQ(response.request()->GetAddressResults().value().GetCanonicalName(), "canonical"); - EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("canonical", "alias"))); + EXPECT_THAT( + response.request()->GetDnsAliasResults(), + testing::Pointee(testing::UnorderedElementsAre("canonical", "alias"))); } TEST_F(HostResolverManagerDnsTest, CanonicalName_PreferV6) { @@ -7520,7 +7521,7 @@ // GetDnsAliasResults() includes all aliases from all families. EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional( + testing::Pointee( testing::UnorderedElementsAre("correct", "alias", "wrong"))); } @@ -7541,8 +7542,9 @@ ASSERT_THAT(response.result_error(), IsOk()); EXPECT_EQ(response.request()->GetAddressResults().value().GetCanonicalName(), "correct"); - EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("correct", "alias"))); + EXPECT_THAT( + response.request()->GetDnsAliasResults(), + testing::Pointee(testing::UnorderedElementsAre("correct", "alias"))); } // Test that responses containing CNAME records but no address results are fine @@ -7576,7 +7578,7 @@ resolve_context_->host_cache())); ASSERT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED)); - EXPECT_EQ(response.request()->GetDnsAliasResults(), absl::nullopt); + EXPECT_FALSE(response.request()->GetDnsAliasResults()); // Underlying error should be the typical no-results error // (ERR_NAME_NOT_RESOLVED), not anything more exotic like @@ -7651,7 +7653,7 @@ EXPECT_EQ(response.request()->GetAddressResults().value().GetCanonicalName(), "canonical"); EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("canonical"))); + testing::Pointee(testing::UnorderedElementsAre("canonical"))); } TEST_F(HostResolverManagerDnsTest, DnsAliases) { @@ -7696,7 +7698,7 @@ "first.test")); EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre( + testing::Pointee(testing::UnorderedElementsAre( "fourth.test", "third.test", "second.test", "first.test"))); } @@ -7742,9 +7744,9 @@ "localhost"); EXPECT_THAT(response.request()->GetAddressResults().value().dns_aliases(), testing::ElementsAre("localhost", "HOST2.test", "host.test")); - EXPECT_THAT( - response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("host2.test", "host.test"))); + EXPECT_THAT(response.request()->GetDnsAliasResults(), + testing::Pointee( + testing::UnorderedElementsAre("host2.test", "host.test"))); } TEST_F(HostResolverManagerDnsTest, NoAdditionalDnsAliases) { @@ -7773,7 +7775,7 @@ EXPECT_THAT(response.request()->GetAddressResults().value().dns_aliases(), testing::ElementsAre("first.test")); EXPECT_THAT(response.request()->GetDnsAliasResults(), - testing::Optional(testing::ElementsAre("first.test"))); + testing::Pointee(testing::UnorderedElementsAre("first.test"))); } TEST_F(HostResolverManagerDnsTest, SortsAndDeduplicatesAddresses) {
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc index 61d6e9f..721e6ed 100644 --- a/net/dns/mock_host_resolver.cc +++ b/net/dns/mock_host_resolver.cc
@@ -21,6 +21,7 @@ #include "base/memory/ref_counted.h" #include "base/no_destructor.h" #include "base/notreached.h" +#include "base/stl_util.h" #include "base/strings/pattern.h" #include "base/strings/string_piece.h" #include "base/strings/string_split.h" @@ -213,10 +214,9 @@ return *nullopt_result; } - const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const override { + const std::set<std::string>* GetDnsAliasResults() const override { DCHECK(complete_); - return sanitized_dns_alias_results_; + return base::OptionalOrNullptr(fixed_up_dns_alias_results_); } net::ResolveErrorInfo GetResolveErrorInfo() const override { @@ -264,8 +264,9 @@ SetError(OK); - sanitized_dns_alias_results_ = - dns_alias_utility::SanitizeDnsAliases(address_results_->dns_aliases()); + fixed_up_dns_alias_results_ = dns_alias_utility::FixUpDnsAliases( + std::set<std::string>(address_results_->dns_aliases().begin(), + address_results_->dns_aliases().end())); staleness_ = std::move(staleness); endpoint_results_ = AddressListToEndpointResults(address_results_.value()); @@ -367,7 +368,7 @@ absl::optional<AddressList> address_results_; absl::optional<std::vector<HostResolverEndpointResult>> endpoint_results_; - absl::optional<std::vector<std::string>> sanitized_dns_alias_results_; + absl::optional<std::set<std::string>> fixed_up_dns_alias_results_; absl::optional<HostCache::EntryStaleness> staleness_; ResolveErrorInfo resolve_error_info_; @@ -636,6 +637,17 @@ AddRule(hostname_pattern, std::move(results)); } +void MockHostResolverBase::RuleResolver::AddIPLiteralRuleWithDnsAliases( + base::StringPiece hostname_pattern, + base::StringPiece ip_literal, + std::set<std::string> dns_aliases) { + std::vector<std::string> aliases_vector; + base::ranges::move(dns_aliases, std::back_inserter(aliases_vector)); + + AddIPLiteralRuleWithDnsAliases(hostname_pattern, ip_literal, + std::move(aliases_vector)); +} + void MockHostResolverBase::RuleResolver::AddSimulatedFailure( base::StringPiece hostname_pattern) { AddRule(hostname_pattern, ERR_NAME_NOT_RESOLVED); @@ -1422,8 +1434,7 @@ IMMEDIATE_CRASH(); } - const absl::optional<std::vector<std::string>>& GetDnsAliasResults() - const override { + const std::set<std::string>* GetDnsAliasResults() const override { IMMEDIATE_CRASH(); }
diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h index 1d57022..17ec2b4f 100644 --- a/net/dns/mock_host_resolver.h +++ b/net/dns/mock_host_resolver.h
@@ -180,6 +180,9 @@ void AddIPLiteralRuleWithDnsAliases(base::StringPiece hostname_pattern, base::StringPiece ip_literal, std::vector<std::string> dns_aliases); + void AddIPLiteralRuleWithDnsAliases(base::StringPiece hostname_pattern, + base::StringPiece ip_literal, + std::set<std::string> dns_aliases); void AddSimulatedFailure(base::StringPiece hostname_pattern); void AddSimulatedTimeoutFailure(base::StringPiece hostname_pattern); void AddRuleWithFlags(base::StringPiece host_pattern,
diff --git a/net/http/http_basic_state.cc b/net/http/http_basic_state.cc index eace6fe..b3212b3 100644 --- a/net/http/http_basic_state.cc +++ b/net/http/http_basic_state.cc
@@ -4,6 +4,7 @@ #include "net/http/http_basic_state.h" +#include <set> #include <utility> #include "base/check_op.h" @@ -75,11 +76,11 @@ connection_->reuse_type() == ClientSocketHandle::UNUSED_IDLE; } -const std::vector<std::string>& HttpBasicState::GetDnsAliases() const { - static const base::NoDestructor<std::vector<std::string>> emptyvector_result; +const std::set<std::string>& HttpBasicState::GetDnsAliases() const { + static const base::NoDestructor<std::set<std::string>> emptyset_result; return (connection_ && connection_->socket()) ? connection_->socket()->GetDnsAliases() - : *emptyvector_result; + : *emptyset_result; } } // namespace net
diff --git a/net/http/http_basic_state.h b/net/http/http_basic_state.h index 37ddbf6..12164fd 100644 --- a/net/http/http_basic_state.h +++ b/net/http/http_basic_state.h
@@ -9,8 +9,8 @@ #define NET_HTTP_HTTP_BASIC_STATE_H_ #include <memory> +#include <set> #include <string> -#include <vector> #include "base/memory/ref_counted.h" #include "net/base/net_export.h" @@ -70,10 +70,10 @@ // ClientSocketHandle::is_reused(). bool IsConnectionReused() const; - // Retrieves any DNS aliases for the remote endpoint. The alias chain order - // is preserved in reverse, from canonical name (i.e. address record name) - // through to query name. - const std::vector<std::string>& GetDnsAliases() const; + // Retrieves any DNS aliases for the remote endpoint. Includes all known + // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for + // the connection, in no particular order. + const std::set<std::string>& GetDnsAliases() const; private: scoped_refptr<GrowableIOBuffer> read_buf_;
diff --git a/net/http/http_basic_stream.cc b/net/http/http_basic_stream.cc index 6adfe5b..03b443c 100644 --- a/net/http/http_basic_stream.cc +++ b/net/http/http_basic_stream.cc
@@ -4,6 +4,7 @@ #include "net/http/http_basic_stream.h" +#include <set> #include <utility> #include "base/bind.h" @@ -196,7 +197,7 @@ request_headers_callback_ = std::move(callback); } -const std::vector<std::string>& HttpBasicStream::GetDnsAliases() const { +const std::set<std::string>& HttpBasicStream::GetDnsAliases() const { return state_.GetDnsAliases(); }
diff --git a/net/http/http_basic_stream.h b/net/http/http_basic_stream.h index 16668deb..cd3c8d0 100644 --- a/net/http/http_basic_stream.h +++ b/net/http/http_basic_stream.h
@@ -12,8 +12,8 @@ #include <stdint.h> #include <memory> +#include <set> #include <string> -#include <vector> #include "base/strings/string_piece.h" #include "base/time/time.h" @@ -96,7 +96,7 @@ void SetRequestHeadersCallback(RequestHeadersCallback callback) override; - const std::vector<std::string>& GetDnsAliases() const override; + const std::set<std::string>& GetDnsAliases() const override; base::StringPiece GetAcceptChViaAlps() const override;
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc index 4d1e60f9..8448f792 100644 --- a/net/http/http_cache_unittest.cc +++ b/net/http/http_cache_unittest.cc
@@ -8,6 +8,7 @@ #include <algorithm> #include <memory> +#include <set> #include <utility> #include <vector> @@ -702,7 +703,7 @@ } std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp2Stream( base::WeakPtr<SpdySession> session, - std::vector<std::string> dns_aliases) override { + std::set<std::string> dns_aliases) override { NOTREACHED(); return nullptr; }
diff --git a/net/http/http_response_body_drainer_unittest.cc b/net/http/http_response_body_drainer_unittest.cc index 981d059e..d2f92e4 100644 --- a/net/http/http_response_body_drainer_unittest.cc +++ b/net/http/http_response_body_drainer_unittest.cc
@@ -7,6 +7,7 @@ #include <stdint.h> #include <cstring> +#include <set> #include <utility> #include "base/bind.h" @@ -149,9 +150,9 @@ void SetPriority(RequestPriority priority) override {} - const std::vector<std::string>& GetDnsAliases() const override { - static const base::NoDestructor<std::vector<std::string>> nullvector_result; - return *nullvector_result; + const std::set<std::string>& GetDnsAliases() const override { + static const base::NoDestructor<std::set<std::string>> nullset_result; + return *nullset_result; } base::StringPiece GetAcceptChViaAlps() const override { return {}; }
diff --git a/net/http/http_response_info.cc b/net/http/http_response_info.cc index cc09d47..f50ed5c 100644 --- a/net/http/http_response_info.cc +++ b/net/http/http_response_info.cc
@@ -380,7 +380,7 @@ for (int i = 0; i < num_aliases; i++) { if (!iter.ReadString(&alias)) return false; - dns_aliases.push_back(alias); + dns_aliases.insert(alias); } }
diff --git a/net/http/http_response_info.h b/net/http/http_response_info.h index d0d1f86c..86d157aa 100644 --- a/net/http/http_response_info.h +++ b/net/http/http_response_info.h
@@ -5,6 +5,7 @@ #ifndef NET_HTTP_HTTP_RESPONSE_INFO_H_ #define NET_HTTP_HTTP_RESPONSE_INFO_H_ +#include <set> #include <string> #include "base/time/time.h" @@ -237,10 +238,10 @@ // The "Vary" header data for this response. HttpVaryData vary_data; - // Any DNS aliases for the remote endpoint. The alias chain order is - // preserved in reverse, from canonical name (i.e. address record name) - // through to query name. - std::vector<std::string> dns_aliases; + // Any DNS aliases for the remote endpoint. Includes all known aliases, e.g. + // from A, AAAA, or HTTPS, not just from the address used for the connection, + // in no particular order. + std::set<std::string> dns_aliases; static std::string ConnectionInfoToString(ConnectionInfo connection_info); };
diff --git a/net/http/http_stream.h b/net/http/http_stream.h index 967d5632..668b1ff 100644 --- a/net/http/http_stream.h +++ b/net/http/http_stream.h
@@ -14,7 +14,7 @@ #include <stdint.h> #include <memory> -#include <vector> +#include <set> #include "base/strings/string_piece.h" #include "net/base/completion_once_callback.h" @@ -195,10 +195,10 @@ // Set the idempotency of the request. No-op by default. virtual void SetRequestIdempotency(Idempotency idempotency) {} - // Retrieves any DNS aliases for the remote endpoint. The alias chain order - // is preserved in reverse, from canonical name (i.e. address record name) - // through to query name. - virtual const std::vector<std::string>& GetDnsAliases() const = 0; + // Retrieves any DNS aliases for the remote endpoint. Includes all known + // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for + // the connection, in no particular order. + virtual const std::set<std::string>& GetDnsAliases() const = 0; // The value in the ACCEPT_CH frame received during TLS handshake via the // ALPS extension, or the empty string if the server did not send one. Unlike
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc index 77cf4d8..a455944 100644 --- a/net/http/http_stream_factory_unittest.cc +++ b/net/http/http_stream_factory_unittest.cc
@@ -7,6 +7,7 @@ #include <stdint.h> #include <memory> +#include <set> #include <string> #include <tuple> #include <utility> @@ -169,9 +170,9 @@ void PopulateNetErrorDetails(NetErrorDetails* details) override { return; } void SetPriority(RequestPriority priority) override {} HttpStream* RenewStreamForAuth() override { return nullptr; } - const std::vector<std::string>& GetDnsAliases() const override { - static const base::NoDestructor<std::vector<std::string>> nullvector_result; - return *nullvector_result; + const std::set<std::string>& GetDnsAliases() const override { + static const base::NoDestructor<std::set<std::string>> nullset_result; + return *nullset_result; } base::StringPiece GetAcceptChViaAlps() const override { return {}; } @@ -354,7 +355,7 @@ } std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp2Stream( base::WeakPtr<SpdySession> session, - std::vector<std::string> dns_aliases) override { + std::set<std::string> dns_aliases) override { NOTREACHED(); return nullptr; } @@ -3144,8 +3145,8 @@ TEST_F(HttpStreamFactoryTest, SpdyIPPoolingWithDnsAliases) { SpdySessionDependencies session_deps; - const std::vector<std::string> kDnsAliasesA({"alias1", "alias2"}); - const std::vector<std::string> kDnsAliasesB({"b.com", "b.org", "b.net"}); + const std::set<std::string> kDnsAliasesA({"alias1", "alias2"}); + const std::set<std::string> kDnsAliasesB({"b.com", "b.org", "b.net"}); const std::string kHostnameC("c.example.org"); session_deps.host_resolver->rules()->AddIPLiteralRuleWithDnsAliases( @@ -3153,7 +3154,7 @@ session_deps.host_resolver->rules()->AddIPLiteralRuleWithDnsAliases( "b.example.org", "127.0.0.1", kDnsAliasesB); session_deps.host_resolver->rules()->AddIPLiteralRuleWithDnsAliases( - "c.example.org", "127.0.0.1", {}); + "c.example.org", "127.0.0.1", /*dns_aliases=*/std::set<std::string>()); // Prepare for an HTTPS connect. MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); @@ -3335,15 +3336,16 @@ const GURL kUrlA("https://a.example.org"); const GURL kUrlB("https://b.example.org"); const GURL kUrlC("https://c.example.org"); - const std::vector<std::string> kDnsAliasesA({"alias1", "alias2"}); - const std::vector<std::string> kDnsAliasesB({"b.com", "b.org", "b.net"}); + const std::set<std::string> kDnsAliasesA({"alias1", "alias2"}); + const std::set<std::string> kDnsAliasesB({"b.com", "b.org", "b.net"}); host_resolver()->rules()->AddIPLiteralRuleWithDnsAliases( kUrlA.host(), "127.0.0.1", kDnsAliasesA); host_resolver()->rules()->AddIPLiteralRuleWithDnsAliases( kUrlB.host(), "127.0.0.1", kDnsAliasesB); - host_resolver()->rules()->AddIPLiteralRuleWithDnsAliases(kUrlC.host(), - "127.0.0.1", {}); + host_resolver()->rules()->AddIPLiteralRuleWithDnsAliases( + kUrlC.host(), "127.0.0.1", + /*dns_aliases=*/std::set<std::string>()); // Prepare mock QUIC data for a first session establishment. MockQuicData mock_quic_data(version());
diff --git a/net/http/http_transaction_test_util.h b/net/http/http_transaction_test_util.h index e4c84419..c68a375b 100644 --- a/net/http/http_transaction_test_util.h +++ b/net/http/http_transaction_test_util.h
@@ -10,6 +10,7 @@ #include <stdint.h> +#include <set> #include <string> #include <vector> @@ -84,10 +85,10 @@ // If |response_time| is unspecified, the current time will be used. base::Time response_time; const char* data; - // Any aliases for the requested URL, as read from DNS records. The alias - // chain order is preserved in reverse, from canonical name (i.e. address - // record name) through to query name. - std::vector<std::string> dns_aliases; + // Any aliases for the requested URL, as read from DNS records. Includes all + // known aliases, e.g. from A, AAAA, or HTTPS, not just from the address used + // for the connection, in no particular order. + std::set<std::string> dns_aliases; int test_mode; MockTransactionHandler handler; MockTransactionReadHandler read_handler;
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc index 03ca363..3667216 100644 --- a/net/quic/quic_chromium_client_session.cc +++ b/net/quic/quic_chromium_client_session.cc
@@ -5,6 +5,7 @@ #include "net/quic/quic_chromium_client_session.h" #include <memory> +#include <set> #include <utility> #include "base/bind.h" @@ -579,12 +580,12 @@ return session_->WasConnectionEverUsed(); } -const std::vector<std::string>& +const std::set<std::string>& QuicChromiumClientSession::Handle::GetDnsAliasesForSessionKey( const QuicSessionKey& key) const { - static const base::NoDestructor<std::vector<std::string>> emptyvector_result; + static const base::NoDestructor<std::set<std::string>> emptyset_result; return session_ ? session_->GetDnsAliasesForSessionKey(key) - : *emptyvector_result; + : *emptyset_result; } bool QuicChromiumClientSession::Handle::CheckVary( @@ -3797,12 +3798,12 @@ return push_promise_index_->GetPromised(url.spec()); } -const std::vector<std::string>& +const std::set<std::string>& QuicChromiumClientSession::GetDnsAliasesForSessionKey( const QuicSessionKey& key) const { - static const base::NoDestructor<std::vector<std::string>> emptyvector_result; + static const base::NoDestructor<std::set<std::string>> emptyset_result; return stream_factory_ ? stream_factory_->GetDnsAliasesForSessionKey(key) - : *emptyvector_result; + : *emptyset_result; } bool QuicChromiumClientSession::ValidateStatelessReset(
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h index f1333fb..b009b14 100644 --- a/net/quic/quic_chromium_client_session.h +++ b/net/quic/quic_chromium_client_session.h
@@ -288,9 +288,10 @@ bool WasEverUsed() const; // Retrieves any DNS aliases for the given session key from the map stored - // in `stream_factory_`. The alias chain order is preserved in reverse, from - // canonical name (i.e. address record name) through to query name. - const std::vector<std::string>& GetDnsAliasesForSessionKey( + // in `stream_factory_`. Includes all known aliases, e.g. from A, AAAA, or + // HTTPS, not just from the address used for the connection, in no + // particular order. + const std::set<std::string>& GetDnsAliasesForSessionKey( const QuicSessionKey& key) const; private: @@ -868,9 +869,10 @@ bool require_confirmation() const { return require_confirmation_; } // Retrieves any DNS aliases for the given session key from the map stored - // in `stream_factory_`. The alias chain order is preserved in reverse, from - // canonical name (i.e. address record name) through to query name. - const std::vector<std::string>& GetDnsAliasesForSessionKey( + // in `stream_factory_`. Includes all known aliases, e.g. from A, AAAA, or + // HTTPS, not just from the address used for the connection, in no particular + // order. + const std::set<std::string>& GetDnsAliasesForSessionKey( const QuicSessionKey& key) const; protected:
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc index bc3f864..7aeb0f6 100644 --- a/net/quic/quic_http_stream.cc +++ b/net/quic/quic_http_stream.cc
@@ -4,6 +4,7 @@ #include "net/quic/quic_http_stream.h" +#include <set> #include <utility> #include "base/auto_reset.h" @@ -59,7 +60,7 @@ QuicHttpStream::QuicHttpStream( std::unique_ptr<QuicChromiumClientSession::Handle> session, - std::vector<std::string> dns_aliases) + std::set<std::string> dns_aliases) : MultiplexedHttpStream(std::move(session)), next_state_(STATE_NONE), stream_(nullptr), @@ -438,7 +439,7 @@ } } -const std::vector<std::string>& QuicHttpStream::GetDnsAliases() const { +const std::set<std::string>& QuicHttpStream::GetDnsAliases() const { return dns_aliases_; }
diff --git a/net/quic/quic_http_stream.h b/net/quic/quic_http_stream.h index efe2db4..f47d666 100644 --- a/net/quic/quic_http_stream.h +++ b/net/quic/quic_http_stream.h
@@ -9,8 +9,8 @@ #include <stdint.h> #include <list> +#include <set> #include <string> -#include <vector> #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" @@ -43,7 +43,7 @@ public: explicit QuicHttpStream( std::unique_ptr<QuicChromiumClientSession::Handle> session, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); QuicHttpStream(const QuicHttpStream&) = delete; QuicHttpStream& operator=(const QuicHttpStream&) = delete; @@ -74,7 +74,7 @@ void PopulateNetErrorDetails(NetErrorDetails* details) override; void SetPriority(RequestPriority priority) override; void SetRequestIdempotency(Idempotency idempotency) override; - const std::vector<std::string>& GetDnsAliases() const override; + const std::set<std::string>& GetDnsAliases() const override; base::StringPiece GetAcceptChViaAlps() const override; static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion( @@ -228,11 +228,11 @@ // Session connect timing info. LoadTimingInfo::ConnectTiming connect_timing_; - // Stores any DNS aliases for the remote endpoint. The alias chain is - // preserved in reverse order, from canonical name (i.e. address record name) - // through to query name. These are stored in the stream instead of the - // session due to complications related to IP-pooling. - std::vector<std::string> dns_aliases_; + // Stores any DNS aliases for the remote endpoint. Includes all known + // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for + // the connection, in no particular order. These are stored in the stream + // instead of the session due to complications related to IP-pooling. + std::set<std::string> dns_aliases_; base::WeakPtrFactory<QuicHttpStream> weak_factory_{this}; };
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc index 1ba4ff3..d984117b 100644 --- a/net/quic/quic_http_stream_test.cc +++ b/net/quic/quic_http_stream_test.cc
@@ -442,11 +442,11 @@ stream_ = std::make_unique<QuicHttpStream>( session_->CreateHandle( url::SchemeHostPort(url::kHttpsScheme, "www.example.org", 443)), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); promised_stream_ = std::make_unique<QuicHttpStream>( session_->CreateHandle( url::SchemeHostPort(url::kHttpsScheme, "www.example.org", 443)), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); push_promise_[":path"] = "/bar"; push_promise_[":authority"] = "www.example.org"; push_promise_[":version"] = "HTTP/1.1"; @@ -1055,7 +1055,7 @@ auto stream = std::make_unique<QuicHttpStream>( session_->CreateHandle( url::SchemeHostPort(url::kHttpsScheme, "www.example.org/foo", 443)), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); EXPECT_THAT( stream->InitializeStream(&request_, true, DEFAULT_PRIORITY, net_log_with_source_, callback_.callback()),
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc index 1181074..82a5e77e 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <memory> +#include <set> #include <tuple> #include <utility> @@ -20,6 +21,7 @@ #include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/numerics/safe_conversions.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" @@ -990,10 +992,10 @@ } LogConnectionIpPooling(false); - std::vector<std::string> dns_aliases = + std::set<std::string> dns_aliases = use_dns_aliases_ && resolve_host_request_->GetDnsAliasResults() - ? resolve_host_request_->GetDnsAliasResults().value() - : std::vector<std::string>(); + ? *resolve_host_request_->GetDnsAliasResults() + : std::set<std::string>(); factory_->ActivateSession(key_, session_, std::move(dns_aliases)); return OK; @@ -1684,13 +1686,12 @@ return base::Microseconds(srtt); } -const std::vector<std::string>& QuicStreamFactory::GetDnsAliasesForSessionKey( +const std::set<std::string>& QuicStreamFactory::GetDnsAliasesForSessionKey( const QuicSessionKey& key) const { auto it = dns_aliases_by_session_key_.find(key); if (it == dns_aliases_by_session_key_.end()) { - static const base::NoDestructor<std::vector<std::string>> - emptyvector_result; + static const base::NoDestructor<std::set<std::string>> emptyvector_result; return *emptyvector_result; } @@ -1712,10 +1713,13 @@ continue; active_sessions_[key.session_key()] = session; - std::vector<std::string> dns_aliases = - use_dns_aliases ? dns_alias_utility::SanitizeDnsAliases( - address_list.dns_aliases()) - : std::vector<std::string>(); + std::set<std::string> dns_aliases; + if (use_dns_aliases) { + base::ranges::copy(address_list.dns_aliases(), + std::inserter(dns_aliases, dns_aliases.end())); + dns_aliases = dns_alias_utility::FixUpDnsAliases(dns_aliases); + } + MapSessionToAliasKey(session, key, std::move(dns_aliases)); return true; @@ -1898,7 +1902,7 @@ void QuicStreamFactory::ActivateSession(const QuicSessionAliasKey& key, QuicChromiumClientSession* session, - std::vector<std::string> dns_aliases) { + std::set<std::string> dns_aliases) { DCHECK(!HasActiveSession(key.session_key())); UMA_HISTOGRAM_COUNTS_1M("Net.QuicActiveSessions", active_sessions_.size()); active_sessions_[key.session_key()] = session; @@ -2150,7 +2154,7 @@ void QuicStreamFactory::MapSessionToAliasKey( QuicChromiumClientSession* session, const QuicSessionAliasKey& key, - std::vector<std::string> dns_aliases) { + std::set<std::string> dns_aliases) { session_aliases_[session].insert(key); dns_aliases_by_session_key_[key.session_key()] = std::move(dns_aliases); }
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h index e2f71bd..56c2a04 100644 --- a/net/quic/quic_stream_factory.h +++ b/net/quic/quic_stream_factory.h
@@ -377,7 +377,7 @@ } // Returns the stored DNS aliases for the session key. - const std::vector<std::string>& GetDnsAliasesForSessionKey( + const std::set<std::string>& GetDnsAliasesForSessionKey( const QuicSessionKey& key) const; private: @@ -396,7 +396,7 @@ using SessionPeerIPMap = std::map<QuicChromiumClientSession*, IPEndPoint>; using JobMap = std::map<QuicSessionKey, std::unique_ptr<Job>>; using DnsAliasesBySessionKeyMap = - std::map<QuicSessionKey, std::vector<std::string>>; + std::map<QuicSessionKey, std::set<std::string>>; using QuicCryptoClientConfigMap = std::map<NetworkIsolationKey, std::unique_ptr<QuicCryptoClientConfigOwner>>; @@ -419,7 +419,7 @@ NetworkChangeNotifier::NetworkHandle* network); void ActivateSession(const QuicSessionAliasKey& key, QuicChromiumClientSession* session, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); // Go away all active sessions. May disable session's connectivity monitoring // based on the |reason|. void MarkAllActiveSessionsGoingAway(AllActiveSessionsGoingAwayReason reason); @@ -471,7 +471,7 @@ // `key.session_key()` in `dns_aliases_by_session_key_`. void MapSessionToAliasKey(QuicChromiumClientSession* session, const QuicSessionAliasKey& key, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); // For all alias keys for `session` in `session_aliases_`, erase the // corresponding DNS aliases in `dns_aliases_by_session_key_`. Then erase
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc index d600f7a..014457a 100644 --- a/net/quic/quic_stream_factory_test.cc +++ b/net/quic/quic_stream_factory_test.cc
@@ -6,6 +6,7 @@ #include <memory> #include <ostream> +#include <set> #include <utility> #include "base/bind.h" @@ -312,7 +313,7 @@ if (!session || !session->IsConnected()) return nullptr; - std::vector<std::string> dns_aliases = + std::set<std::string> dns_aliases = session->GetDnsAliasesForSessionKey(request->session_key()); return std::make_unique<QuicHttpStream>(std::move(session), std::move(dns_aliases)); @@ -15354,20 +15355,29 @@ quic::ParsedQuicVersion version; bool client_headers_include_h2_stream_dependency; bool use_dns_aliases; - std::vector<std::string> dns_aliases1; - std::vector<std::string> dns_aliases2; - std::vector<std::string> expected_dns_aliases1; - std::vector<std::string> expected_dns_aliases2; + std::set<std::string> dns_aliases1; + std::set<std::string> dns_aliases2; + std::set<std::string> expected_dns_aliases1; + std::set<std::string> expected_dns_aliases2; }; +std::string PrintToString(const std::set<std::string>& set) { + std::string joined; + for (const std::string& str : set) { + if (!joined.empty()) + joined += "_"; + joined += str; + } + return joined; +} + // Used by ::testing::PrintToStringParamName(). std::string PrintToString(const DnsAliasPoolingTestParams& p) { return base::StrCat( {ParsedQuicVersionToString(p.version), "_", (p.client_headers_include_h2_stream_dependency ? "" : "No"), "Dependency_", (p.use_dns_aliases ? "" : "DoNot"), "UseDnsAliases_1st_", - base::JoinString(p.dns_aliases1, "_"), "_2nd_", - base::JoinString(p.dns_aliases2, "_")}); + PrintToString(p.dns_aliases1), "_2nd_", PrintToString(p.dns_aliases2)}); } std::vector<DnsAliasPoolingTestParams> GetDnsAliasPoolingTestParams() { @@ -15462,10 +15472,10 @@ expected_dns_aliases2_(GetParam().expected_dns_aliases2) {} const bool use_dns_aliases_; - const std::vector<std::string> dns_aliases1_; - const std::vector<std::string> dns_aliases2_; - const std::vector<std::string> expected_dns_aliases1_; - const std::vector<std::string> expected_dns_aliases2_; + const std::set<std::string> dns_aliases1_; + const std::set<std::string> dns_aliases2_; + const std::set<std::string> expected_dns_aliases1_; + const std::set<std::string> expected_dns_aliases2_; }; INSTANTIATE_TEST_SUITE_P(VersionIncludeStreamDependencySequence,
diff --git a/net/socket/connect_job.cc b/net/socket/connect_job.cc index 873bb95..0916443 100644 --- a/net/socket/connect_job.cc +++ b/net/socket/connect_job.cc
@@ -4,6 +4,7 @@ #include "net/socket/connect_job.h" +#include <set> #include <utility> #include "base/trace_event/trace_event.h" @@ -133,9 +134,8 @@ return nullptr; } -void ConnectJob::SetSocket( - std::unique_ptr<StreamSocket> socket, - absl::optional<std::vector<std::string>> dns_aliases) { +void ConnectJob::SetSocket(std::unique_ptr<StreamSocket> socket, + absl::optional<std::set<std::string>> dns_aliases) { if (socket) { net_log().AddEvent(NetLogEventType::CONNECT_JOB_SET_SOCKET); if (dns_aliases)
diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h index 44c3017e..70da15c 100644 --- a/net/socket/connect_job.h +++ b/net/socket/connect_job.h
@@ -6,8 +6,8 @@ #define NET_SOCKET_CONNECT_JOB_H_ #include <memory> +#include <set> #include <string> -#include <vector> #include "base/callback_forward.h" #include "base/memory/raw_ptr.h" @@ -266,7 +266,7 @@ } void SetSocket(std::unique_ptr<StreamSocket> socket, - absl::optional<std::vector<std::string>> dns_aliases); + absl::optional<std::set<std::string>> dns_aliases); void NotifyDelegateOfCompletion(int rv); void NotifyDelegateOfProxyAuth(const HttpResponseInfo& response, HttpAuthController* auth_controller,
diff --git a/net/socket/socket.cc b/net/socket/socket.cc index b5b79e8..70b12ce1 100644 --- a/net/socket/socket.cc +++ b/net/socket/socket.cc
@@ -4,6 +4,8 @@ #include "net/socket/socket.h" +#include <set> + #include "net/base/net_errors.h" namespace net { @@ -22,18 +24,18 @@ return ERR_READ_IF_READY_NOT_IMPLEMENTED; } -void Socket::SetDnsAliases(std::vector<std::string> aliases) { - if (aliases == std::vector<std::string>({""})) { +void Socket::SetDnsAliases(std::set<std::string> aliases) { + if (aliases == std::set<std::string>({""})) { // Reset field to empty vector. Necessary because some tests and other // inputs still use a trivial canonical name of std::string(). - dns_aliases_ = std::vector<std::string>(); + dns_aliases_.clear(); return; } dns_aliases_ = std::move(aliases); } -const std::vector<std::string>& Socket::GetDnsAliases() const { +const std::set<std::string>& Socket::GetDnsAliases() const { return dns_aliases_; }
diff --git a/net/socket/socket.h b/net/socket/socket.h index beecf2325..bb45151 100644 --- a/net/socket/socket.h +++ b/net/socket/socket.h
@@ -7,8 +7,8 @@ #include <stdint.h> +#include <set> #include <string> -#include <vector> #include "net/base/completion_once_callback.h" #include "net/base/net_export.h" @@ -88,15 +88,13 @@ // DNS aliases must be stored in sockets in case of socket reuse. // Sets the field storing the aliases. Empty if using a proxy. - // The alias chain order is preserved in reverse, from canonical name (i.e. - // address record name) through to query name. - virtual void SetDnsAliases(std::vector<std::string> aliases); + virtual void SetDnsAliases(std::set<std::string> aliases); // Retrieves any DNS aliases for the socket's remote endpoint. - virtual const std::vector<std::string>& GetDnsAliases() const; + virtual const std::set<std::string>& GetDnsAliases() const; protected: - std::vector<std::string> dns_aliases_; + std::set<std::string> dns_aliases_; }; } // namespace net
diff --git a/net/socket/ssl_connect_job.h b/net/socket/ssl_connect_job.h index e56a10f..666dc02 100644 --- a/net/socket/ssl_connect_job.h +++ b/net/socket/ssl_connect_job.h
@@ -6,8 +6,8 @@ #define NET_SOCKET_SSL_CONNECT_JOB_H_ #include <memory> +#include <set> #include <string> -#include <vector> #include "base/memory/ref_counted.h" #include "base/time/time.h" @@ -199,12 +199,12 @@ // through an HTTPS CONNECT request or a SOCKS proxy). IPEndPoint server_address_; - // Any DNS aliases for the remote endpoint. The alias chain order is - // preserved in reverse, from canonical name (i.e. address record name) - // through to query name. Stored because `nested_connect_job_` has a - // limited lifetime and the aliases can no longer be retrieved from there by - // by the time that the aliases are needed to be passed in SetSocket. - std::vector<std::string> dns_aliases_; + // Any DNS aliases for the remote endpoint. Includes all known aliases, e.g. + // from A, AAAA, or HTTPS, not just from the address used for the connection, + // in no particular order. Stored because `nested_connect_job_` has a limited + // lifetime and the aliases can no longer be retrieved from there by by the + // time that the aliases are needed to be passed in SetSocket. + std::set<std::string> dns_aliases_; }; } // namespace net
diff --git a/net/socket/tcp_client_socket_unittest.cc b/net/socket/tcp_client_socket_unittest.cc index d97fc56..879ae08a 100644 --- a/net/socket/tcp_client_socket_unittest.cc +++ b/net/socket/tcp_client_socket_unittest.cc
@@ -10,6 +10,7 @@ #include <stddef.h> +#include <set> #include <string> #include <vector> @@ -252,12 +253,12 @@ EXPECT_TRUE(socket.GetDnsAliases().empty()); // Set the aliases. - std::vector<std::string> dns_aliases({"alias1", "alias2", "host"}); + std::set<std::string> dns_aliases({"alias1", "alias2", "host"}); socket.SetDnsAliases(dns_aliases); // Verify that the aliases are set. EXPECT_THAT(socket.GetDnsAliases(), - testing::ElementsAre("alias1", "alias2", "host")); + testing::UnorderedElementsAre("alias1", "alias2", "host")); // Connect the socket. TestCompletionCallback connect_callback;
diff --git a/net/socket/transport_connect_job.cc b/net/socket/transport_connect_job.cc index 36bf77d4d..a9c07f8 100644 --- a/net/socket/transport_connect_job.cc +++ b/net/socket/transport_connect_job.cc
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/metrics/histogram_macros.h" #include "base/notreached.h" +#include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" @@ -400,7 +401,8 @@ HistogramDuration(connect_timing_, race_result); DCHECK(request_); - SetSocket(std::move(transport_socket_), request_->GetDnsAliasResults()); + SetSocket(std::move(transport_socket_), + base::OptionalFromPtr(request_->GetDnsAliasResults())); } else { // Failure will be returned via |GetAdditionalErrorState|, so save // connection attempts from both sockets for use there. @@ -480,7 +482,7 @@ HistogramDuration(connect_timing_, RACE_IPV4_WINS); DCHECK(request_); SetSocket(std::move(fallback_transport_socket_), - request_->GetDnsAliasResults()); + base::OptionalFromPtr(request_->GetDnsAliasResults())); next_state_ = STATE_NONE; } else { // Failure will be returned via |GetAdditionalErrorState|, so save
diff --git a/net/socket/websocket_transport_connect_job.cc b/net/socket/websocket_transport_connect_job.cc index 0f10af6..36f1b87 100644 --- a/net/socket/websocket_transport_connect_job.cc +++ b/net/socket/websocket_transport_connect_job.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/location.h" #include "base/logging.h" +#include "base/stl_util.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" @@ -238,7 +239,8 @@ switch (result) { case OK: DCHECK(request_); - SetSocket(ipv6_job_->PassSocket(), request_->GetDnsAliasResults()); + SetSocket(ipv6_job_->PassSocket(), + base::OptionalFromPtr(request_->GetDnsAliasResults())); race_result_ = had_ipv4_ ? TransportConnectJob::RACE_IPV6_WINS : TransportConnectJob::RACE_IPV6_SOLO; return result; @@ -265,7 +267,8 @@ result = ipv4_job_->Start(); if (result == OK) { DCHECK(request_); - SetSocket(ipv4_job_->PassSocket(), request_->GetDnsAliasResults()); + SetSocket(ipv4_job_->PassSocket(), + base::OptionalFromPtr(request_->GetDnsAliasResults())); race_result_ = had_ipv6_ ? TransportConnectJob::RACE_IPV4_WINS : TransportConnectJob::RACE_IPV4_SOLO; } @@ -296,7 +299,8 @@ break; } DCHECK(request_); - SetSocket(job->PassSocket(), request_->GetDnsAliasResults()); + SetSocket(job->PassSocket(), + base::OptionalFromPtr(request_->GetDnsAliasResults())); // Make sure all connections are cancelled even if this object fails to be // deleted.
diff --git a/net/socket/websocket_transport_connect_sub_job.cc b/net/socket/websocket_transport_connect_sub_job.cc index cfbe9e3..1668fdb 100644 --- a/net/socket/websocket_transport_connect_sub_job.cc +++ b/net/socket/websocket_transport_connect_sub_job.cc
@@ -4,8 +4,9 @@ #include "net/socket/websocket_transport_connect_sub_job.h" +#include <set> #include <string> -#include <vector> +#include <utility> #include "base/bind.h" #include "base/check_op.h" @@ -63,10 +64,10 @@ int SetSendBufferSize(int32_t size) override { return wrapped_socket_->SetSendBufferSize(size); } - void SetDnsAliases(std::vector<std::string> aliases) override { - wrapped_socket_->SetDnsAliases(aliases); + void SetDnsAliases(std::set<std::string> aliases) override { + wrapped_socket_->SetDnsAliases(std::move(aliases)); } - const std::vector<std::string>& GetDnsAliases() const override { + const std::set<std::string>& GetDnsAliases() const override { return wrapped_socket_->GetDnsAliases(); }
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc index d3d8e9da0..32a6c2c1 100644 --- a/net/spdy/spdy_http_stream.cc +++ b/net/spdy/spdy_http_stream.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <list> +#include <set> #include <string> #include <utility> @@ -102,7 +103,7 @@ SpdyHttpStream::SpdyHttpStream(const base::WeakPtr<SpdySession>& spdy_session, spdy::SpdyStreamId pushed_stream_id, NetLogSource source_dependency, - std::vector<std::string> dns_aliases) + std::set<std::string> dns_aliases) : MultiplexedHttpStream( std::make_unique<MultiplexedSessionHandle>(spdy_session)), spdy_session_(spdy_session), @@ -711,7 +712,7 @@ } } -const std::vector<std::string>& SpdyHttpStream::GetDnsAliases() const { +const std::set<std::string>& SpdyHttpStream::GetDnsAliases() const { return dns_aliases_; }
diff --git a/net/spdy/spdy_http_stream.h b/net/spdy/spdy_http_stream.h index 7b7fad3..ac3192a 100644 --- a/net/spdy/spdy_http_stream.h +++ b/net/spdy/spdy_http_stream.h
@@ -9,6 +9,7 @@ #include <list> #include <memory> +#include <set> #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" @@ -41,7 +42,7 @@ SpdyHttpStream(const base::WeakPtr<SpdySession>& spdy_session, spdy::SpdyStreamId pushed_stream_id, NetLogSource source_dependency, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); SpdyHttpStream(const SpdyHttpStream&) = delete; SpdyHttpStream& operator=(const SpdyHttpStream&) = delete; @@ -90,7 +91,7 @@ bool GetRemoteEndpoint(IPEndPoint* endpoint) override; void PopulateNetErrorDetails(NetErrorDetails* details) override; void SetPriority(RequestPriority priority) override; - const std::vector<std::string>& GetDnsAliases() const override; + const std::set<std::string>& GetDnsAliases() const override; base::StringPiece GetAcceptChViaAlps() const override; // SpdyStream::Delegate implementation. @@ -222,11 +223,11 @@ bool was_alpn_negotiated_; - // Stores any DNS aliases for the remote endpoint. The alias chain is - // preserved in reverse order, from canonical name (i.e. address record name) - // through to query name. These are stored in the stream instead of the - // session due to complications related to IP-pooling. - std::vector<std::string> dns_aliases_; + // Stores any DNS aliases for the remote endpoint. Includes all known aliases, + // e.g. from A, AAAA, or HTTPS, not just from the address used for the + // connection, in no particular order. These are stored in the stream instead + // of the session due to complications related to IP-pooling. + std::set<std::string> dns_aliases_; base::WeakPtrFactory<SpdyHttpStream> weak_factory_{this}; };
diff --git a/net/spdy/spdy_http_stream_unittest.cc b/net/spdy/spdy_http_stream_unittest.cc index 95f8b63..8ef2510 100644 --- a/net/spdy/spdy_http_stream_unittest.cc +++ b/net/spdy/spdy_http_stream_unittest.cc
@@ -6,6 +6,7 @@ #include <stdint.h> +#include <set> #include <string> #include "base/bind.h" @@ -204,7 +205,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); // Make sure getting load timing information the stream early does not crash. LoadTimingInfo load_timing_info; EXPECT_FALSE(http_stream->GetLoadTimingInfo(&load_timing_info)); @@ -266,7 +267,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT( http_stream->InitializeStream(request.get(), true, DEFAULT_PRIORITY, @@ -336,7 +337,7 @@ NetLogWithSource net_log; auto http_stream1 = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); HttpRequestInfo request2; request2.method = "GET"; @@ -348,7 +349,7 @@ HttpRequestHeaders headers2; auto http_stream2 = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); // First write. ASSERT_THAT(http_stream1->InitializeStream(&request1, true, DEFAULT_PRIORITY, @@ -639,7 +640,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT(http_stream->InitializeStream(&request, false, DEFAULT_PRIORITY, net_log, CompletionOnceCallback()), IsOk()); @@ -742,7 +743,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT(http_stream->InitializeStream(&request, false, DEFAULT_PRIORITY, net_log, CompletionOnceCallback()), IsOk()); @@ -832,7 +833,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT(http_stream->InitializeStream(&request, false, DEFAULT_PRIORITY, net_log, CompletionOnceCallback()), IsOk()); @@ -897,7 +898,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT(http_stream->InitializeStream(&request, true, DEFAULT_PRIORITY, net_log, CompletionOnceCallback()), IsOk()); @@ -954,7 +955,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); ASSERT_THAT(http_stream->InitializeStream(&request, false, DEFAULT_PRIORITY, net_log, CompletionOnceCallback()), IsOk()); @@ -1229,7 +1230,7 @@ NetLogWithSource net_log; auto http_stream = std::make_unique<SpdyHttpStream>( session_, kNoPushedStreamFound, net_log.source(), - std::vector<std::string>() /* dns_aliases */); + /*dns_aliases=*/std::set<std::string>()); int rv = http_stream->InitializeStream(&request, true, DEFAULT_PRIORITY, net_log, CompletionOnceCallback());
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc index b230dc89..9cbbcea90c 100644 --- a/net/spdy/spdy_network_transaction_unittest.cc +++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -4151,7 +4151,7 @@ std::move(session_deps)); GURL url = request_.url; - std::vector<std::string> dns_aliases({"alias1", "alias2", "alias3"}); + std::set<std::string> dns_aliases({"alias1", "alias2", "alias3"}); helper.session_deps()->host_resolver->rules()->AddIPLiteralRuleWithDnsAliases( url.host(), "127.0.0.1", dns_aliases); @@ -4270,9 +4270,9 @@ NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, std::move(session_deps)); GURL url1 = request_.url; - std::vector<std::string> dns_aliases1({"alias1", "alias2", "alias3"}); + std::set<std::string> dns_aliases1({"alias1", "alias2", "alias3"}); GURL url2("https://example.test/"); - std::vector<std::string> dns_aliases2({"example.net", "example.com"}); + std::set<std::string> dns_aliases2({"example.net", "example.com"}); helper.session_deps()->host_resolver->rules()->AddIPLiteralRuleWithDnsAliases( url1.host(), "127.0.0.1", dns_aliases1);
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc index b24a221..2c37cc2d 100644 --- a/net/spdy/spdy_session_pool.cc +++ b/net/spdy/spdy_session_pool.cc
@@ -5,6 +5,7 @@ #include "net/spdy/spdy_session_pool.h" #include <algorithm> +#include <set> #include <utility> #include "base/bind.h" @@ -153,7 +154,7 @@ std::unique_ptr<SpdySession> new_session = CreateSession(key, net_log.net_log()); - std::vector<std::string> dns_aliases = + std::set<std::string> dns_aliases = client_socket_handle->socket()->GetDnsAliases(); new_session->InitializeWithSocketHandle(std::move(client_socket_handle), @@ -187,7 +188,7 @@ std::unique_ptr<SpdySession> new_session = CreateSession(key, net_log.net_log()); - std::vector<std::string> dns_aliases = socket_stream->GetDnsAliases(); + std::set<std::string> dns_aliases = socket_stream->GetDnsAliases(); new_session->InitializeWithSocket(std::move(socket_stream), connect_timing, this); @@ -345,7 +346,7 @@ adding_pooled_alias = false; // Remap main session key. - std::vector<std::string> main_session_old_dns_aliases = + std::set<std::string> main_session_old_dns_aliases = GetDnsAliasesForSessionKey(old_key); UnmapKey(old_key); MapKeyToAvailableSession(new_key, available_session, @@ -365,7 +366,7 @@ continue; } - std::vector<std::string> pooled_alias_old_dns_aliases = + std::set<std::string> pooled_alias_old_dns_aliases = GetDnsAliasesForSessionKey(*it); UnmapKey(*it); SpdySessionKey new_pool_alias_key = SpdySessionKey( @@ -388,12 +389,14 @@ if (adding_pooled_alias) { // Sanitize DNS aliases so that they can be added to the DNS alias map. - std::vector<std::string> sanitized_dns_aliases = - dns_alias_utility::SanitizeDnsAliases(addresses.dns_aliases()); + std::set<std::string> fixed_dns_aliases = + dns_alias_utility::FixUpDnsAliases( + std::set<std::string>(addresses.dns_aliases().begin(), + addresses.dns_aliases().end())); // Add this session to the map so that we can find it next time. MapKeyToAvailableSession(key, available_session, - std::move(sanitized_dns_aliases)); + std::move(fixed_dns_aliases)); available_session->AddPooledAlias(key); } @@ -526,7 +529,7 @@ } } -std::vector<std::string> SpdySessionPool::GetDnsAliasesForSessionKey( +std::set<std::string> SpdySessionPool::GetDnsAliasesForSessionKey( const SpdySessionKey& key) const { auto it = dns_aliases_by_session_key_.find(key); if (it == dns_aliases_by_session_key_.end()) @@ -571,7 +574,7 @@ void SpdySessionPool::MapKeyToAvailableSession( const SpdySessionKey& key, const base::WeakPtr<SpdySession>& session, - std::vector<std::string> dns_aliases) { + std::set<std::string> dns_aliases) { DCHECK(base::Contains(sessions_, session.get())); std::pair<AvailableSessionMap::iterator, bool> result = available_sessions_.insert(std::make_pair(key, session)); @@ -672,7 +675,7 @@ const SpdySessionKey& key, std::unique_ptr<SpdySession> new_session, const NetLogWithSource& source_net_log, - std::vector<std::string> dns_aliases) { + std::set<std::string> dns_aliases) { base::WeakPtr<SpdySession> available_session = new_session->GetWeakPtr(); sessions_.insert(new_session.release()); MapKeyToAvailableSession(key, available_session, std::move(dns_aliases));
diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h index ec42108..023ae2f 100644 --- a/net/spdy/spdy_session_pool.h +++ b/net/spdy/spdy_session_pool.h
@@ -312,7 +312,7 @@ } // Returns the stored DNS aliases for the session key. - std::vector<std::string> GetDnsAliasesForSessionKey( + std::set<std::string> GetDnsAliasesForSessionKey( const SpdySessionKey& key) const; private: @@ -324,7 +324,7 @@ std::map<SpdySessionKey, base::WeakPtr<SpdySession>>; using AliasMap = std::multimap<IPEndPoint, SpdySessionKey>; using DnsAliasesBySessionKeyMap = - std::map<SpdySessionKey, std::vector<std::string>>; + std::map<SpdySessionKey, std::set<std::string>>; using RequestSet = std::set<SpdySessionRequest*>; struct RequestInfoForKey { @@ -355,7 +355,7 @@ // given key, replaces them. void MapKeyToAvailableSession(const SpdySessionKey& key, const base::WeakPtr<SpdySession>& session, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); // Returns an iterator into |available_sessions_| for the given key, // which may be equal to |available_sessions_.end()|. @@ -391,7 +391,7 @@ const SpdySessionKey& key, std::unique_ptr<SpdySession> new_session, const NetLogWithSource& source_net_log, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); // If a session with the specified |key| exists, invokes // OnSpdySessionAvailable on all matching members of
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 11256dd1..5940231 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -13081,7 +13081,7 @@ TEST_F(URLRequestDnsAliasTest, NoAdditionalDnsAliases) { GURL url(test_server_.GetURL("www.example.test", "/echo")); host_resolver_.rules()->AddIPLiteralRuleWithDnsAliases( - "www.example.test", "127.0.0.1", {} /* dns_aliases */); + "www.example.test", "127.0.0.1", /*dns_aliases=*/std::set<std::string>()); std::unique_ptr<URLRequest> request(context_.CreateRequest( url, DEFAULT_PRIORITY, &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc index 302b6c4b..6eaa493 100644 --- a/net/websockets/websocket_basic_handshake_stream.cc +++ b/net/websockets/websocket_basic_handshake_stream.cc
@@ -389,7 +389,7 @@ return handshake_stream.release(); } -const std::vector<std::string>& WebSocketBasicHandshakeStream::GetDnsAliases() +const std::set<std::string>& WebSocketBasicHandshakeStream::GetDnsAliases() const { return state_.GetDnsAliases(); }
diff --git a/net/websockets/websocket_basic_handshake_stream.h b/net/websockets/websocket_basic_handshake_stream.h index 695f4ef..9f61302 100644 --- a/net/websockets/websocket_basic_handshake_stream.h +++ b/net/websockets/websocket_basic_handshake_stream.h
@@ -8,6 +8,7 @@ #include <stdint.h> #include <memory> +#include <set> #include <string> #include <vector> @@ -79,7 +80,7 @@ void SetPriority(RequestPriority priority) override; void PopulateNetErrorDetails(NetErrorDetails* details) override; HttpStream* RenewStreamForAuth() override; - const std::vector<std::string>& GetDnsAliases() const override; + const std::set<std::string>& GetDnsAliases() const override; base::StringPiece GetAcceptChViaAlps() const override; // This is called from the top level once correct handshake response headers
diff --git a/net/websockets/websocket_basic_handshake_stream_test.cc b/net/websockets/websocket_basic_handshake_stream_test.cc index 0653a473..2e1fd8edb 100644 --- a/net/websockets/websocket_basic_handshake_stream_test.cc +++ b/net/websockets/websocket_basic_handshake_stream_test.cc
@@ -4,6 +4,7 @@ #include "net/websockets/websocket_basic_handshake_stream.h" +#include <set> #include <string> #include <utility> #include <vector> @@ -103,16 +104,18 @@ const int connect_result = socket->Connect(CompletionOnceCallback()); EXPECT_EQ(connect_result, OK); - std::vector<std::string> aliases({"alias1", "alias2", "www.example.org"}); + std::set<std::string> aliases({"alias1", "alias2", "www.example.org"}); socket->SetDnsAliases(aliases); - EXPECT_THAT(socket->GetDnsAliases(), - testing::ElementsAre("alias1", "alias2", "www.example.org")); + EXPECT_THAT( + socket->GetDnsAliases(), + testing::UnorderedElementsAre("alias1", "alias2", "www.example.org")); const MockTCPClientSocket* const socket_ptr = socket.get(); auto handle = std::make_unique<ClientSocketHandle>(); handle->SetSocket(std::move(socket)); - EXPECT_THAT(handle->socket()->GetDnsAliases(), - testing::ElementsAre("alias1", "alias2", "www.example.org")); + EXPECT_THAT( + handle->socket()->GetDnsAliases(), + testing::UnorderedElementsAre("alias1", "alias2", "www.example.org")); DummyConnectDelegate delegate; WebSocketEndpointLockManager endpoint_lock_manager;
diff --git a/net/websockets/websocket_handshake_stream_base.h b/net/websockets/websocket_handshake_stream_base.h index 5be2b6d..66cfde2e 100644 --- a/net/websockets/websocket_handshake_stream_base.h +++ b/net/websockets/websocket_handshake_stream_base.h
@@ -10,6 +10,7 @@ // this file must not introduce any link-time dependencies on websockets. #include <memory> +#include <set> #include <string> #include <vector> @@ -110,7 +111,7 @@ // has been opened. This cannot be called more than once. virtual std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp2Stream( base::WeakPtr<SpdySession> session, - std::vector<std::string> dns_aliases) = 0; + std::set<std::string> dns_aliases) = 0; }; // After the handshake has completed, this method creates a WebSocketStream
diff --git a/net/websockets/websocket_handshake_stream_create_helper.cc b/net/websockets/websocket_handshake_stream_create_helper.cc index b96e151..44ca0f9fa 100644 --- a/net/websockets/websocket_handshake_stream_create_helper.cc +++ b/net/websockets/websocket_handshake_stream_create_helper.cc
@@ -4,6 +4,7 @@ #include "net/websockets/websocket_handshake_stream_create_helper.h" +#include <set> #include <utility> #include "base/check.h" @@ -49,7 +50,7 @@ std::unique_ptr<WebSocketHandshakeStreamBase> WebSocketHandshakeStreamCreateHelper::CreateHttp2Stream( base::WeakPtr<SpdySession> session, - std::vector<std::string> dns_aliases) { + std::set<std::string> dns_aliases) { std::vector<std::string> extensions( 1, "permessage-deflate; client_max_window_bits"); auto stream = std::make_unique<WebSocketHttp2HandshakeStream>(
diff --git a/net/websockets/websocket_handshake_stream_create_helper.h b/net/websockets/websocket_handshake_stream_create_helper.h index d0ae166f..1b7083b 100644 --- a/net/websockets/websocket_handshake_stream_create_helper.h +++ b/net/websockets/websocket_handshake_stream_create_helper.h
@@ -6,6 +6,7 @@ #define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_ #include <memory> +#include <set> #include <string> #include <vector> @@ -54,7 +55,7 @@ // Creates a WebSocketHttp2HandshakeStream over an HTTP/2 connection. std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp2Stream( base::WeakPtr<SpdySession> session, - std::vector<std::string> dns_aliases) override; + std::set<std::string> dns_aliases) override; private: const raw_ptr<WebSocketStream::ConnectDelegate> connect_delegate_;
diff --git a/net/websockets/websocket_http2_handshake_stream.cc b/net/websockets/websocket_http2_handshake_stream.cc index f2be257..feed31f 100644 --- a/net/websockets/websocket_http2_handshake_stream.cc +++ b/net/websockets/websocket_http2_handshake_stream.cc
@@ -5,6 +5,7 @@ #include "net/websockets/websocket_http2_handshake_stream.h" #include <cstddef> +#include <set> #include <utility> #include "base/bind.h" @@ -44,7 +45,7 @@ std::vector<std::string> requested_sub_protocols, std::vector<std::string> requested_extensions, WebSocketStreamRequestAPI* request, - std::vector<std::string> dns_aliases) + std::set<std::string> dns_aliases) : result_(HandshakeResult::HTTP2_INCOMPLETE), session_(session), connect_delegate_(connect_delegate), @@ -248,7 +249,7 @@ return nullptr; } -const std::vector<std::string>& WebSocketHttp2HandshakeStream::GetDnsAliases() +const std::set<std::string>& WebSocketHttp2HandshakeStream::GetDnsAliases() const { return dns_aliases_; }
diff --git a/net/websockets/websocket_http2_handshake_stream.h b/net/websockets/websocket_http2_handshake_stream.h index dbc25121..02f21cfa 100644 --- a/net/websockets/websocket_http2_handshake_stream.h +++ b/net/websockets/websocket_http2_handshake_stream.h
@@ -8,6 +8,7 @@ #include <stdint.h> #include <memory> +#include <set> #include <string> #include <vector> @@ -54,7 +55,7 @@ std::vector<std::string> requested_sub_protocols, std::vector<std::string> requested_extensions, WebSocketStreamRequestAPI* request, - std::vector<std::string> dns_aliases); + std::set<std::string> dns_aliases); WebSocketHttp2HandshakeStream(const WebSocketHttp2HandshakeStream&) = delete; WebSocketHttp2HandshakeStream& operator=( @@ -92,7 +93,7 @@ void SetPriority(RequestPriority priority) override; void PopulateNetErrorDetails(NetErrorDetails* details) override; HttpStream* RenewStreamForAuth() override; - const std::vector<std::string>& GetDnsAliases() const override; + const std::set<std::string>& GetDnsAliases() const override; base::StringPiece GetAcceptChViaAlps() const override; // WebSocketHandshakeStreamBase methods. @@ -193,11 +194,11 @@ // to avoid including extension-related header files here. std::unique_ptr<WebSocketExtensionParams> extension_params_; - // Stores any DNS aliases for the remote endpoint. The alias chain is - // preserved in reverse order, from canonical name (i.e. address record name) - // through to query name. These are stored in the stream instead of the - // session due to complications related to IP-pooling. - std::vector<std::string> dns_aliases_; + // Stores any DNS aliases for the remote endpoint. Includes all known aliases, + // e.g. from A, AAAA, or HTTPS, not just from the address used for the + // connection, in no particular order. These are stored in the stream instead + // of the session due to complications related to IP-pooling. + std::set<std::string> dns_aliases_; base::WeakPtrFactory<WebSocketHttp2HandshakeStream> weak_ptr_factory_{this}; };
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc index edda7ec..bf97773 100644 --- a/pdf/out_of_process_instance.cc +++ b/pdf/out_of_process_instance.cc
@@ -28,7 +28,6 @@ #include "base/time/time.h" #include "base/values.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "net/base/escape.h" #include "pdf/accessibility.h" #include "pdf/accessibility_structs.h"
diff --git a/pdf/pdf_features.cc b/pdf/pdf_features.cc index 0cd94b2..229acf4 100644 --- a/pdf/pdf_features.cc +++ b/pdf/pdf_features.cc
@@ -4,8 +4,6 @@ #include "pdf/pdf_features.h" -#include "build/chromeos_buildflags.h" - namespace chrome_pdf { namespace features {
diff --git a/pdf/pdf_view_plugin_base.cc b/pdf/pdf_view_plugin_base.cc index aef2402..63f10ce 100644 --- a/pdf/pdf_view_plugin_base.cc +++ b/pdf/pdf_view_plugin_base.cc
@@ -37,7 +37,6 @@ #include "base/strings/string_util.h" #include "base/time/time.h" #include "base/values.h" -#include "build/chromeos_buildflags.h" #include "net/base/escape.h" #include "pdf/accessibility.h" #include "pdf/accessibility_structs.h"
diff --git a/printing/backend/cups_ipp_constants.cc b/printing/backend/cups_ipp_constants.cc index 464a088..178a5d2 100644 --- a/printing/backend/cups_ipp_constants.cc +++ b/printing/backend/cups_ipp_constants.cc
@@ -7,7 +7,6 @@ #include <cups/cups.h> #include "build/build_config.h" -#include "build/chromeos_buildflags.h" namespace printing {
diff --git a/printing/backend/cups_ipp_constants.h b/printing/backend/cups_ipp_constants.h index eed3a57b..3d453a67b 100644 --- a/printing/backend/cups_ipp_constants.h +++ b/printing/backend/cups_ipp_constants.h
@@ -7,7 +7,6 @@ #include "base/component_export.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" namespace printing {
diff --git a/printing/backend/mojom/print_backend_mojom_traits.cc b/printing/backend/mojom/print_backend_mojom_traits.cc index 4e1e97f..16b882b 100644 --- a/printing/backend/mojom/print_backend_mojom_traits.cc +++ b/printing/backend/mojom/print_backend_mojom_traits.cc
@@ -8,7 +8,6 @@ #include "base/logging.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "ui/gfx/geometry/mojom/geometry.mojom-shared.h" #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
diff --git a/printing/backend/mojom/print_backend_mojom_traits.h b/printing/backend/mojom/print_backend_mojom_traits.h index 706521cc..4fff7e2 100644 --- a/printing/backend/mojom/print_backend_mojom_traits.h +++ b/printing/backend/mojom/print_backend_mojom_traits.h
@@ -9,7 +9,6 @@ #include <vector> #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/backend/mojom/print_backend.mojom-shared.h" #include "printing/backend/print_backend.h" #include "printing/mojom/print.mojom.h"
diff --git a/printing/backend/mojom/print_backend_mojom_traits_unittest.cc b/printing/backend/mojom/print_backend_mojom_traits_unittest.cc index 7ed8a3d..3eea4490 100644 --- a/printing/backend/mojom/print_backend_mojom_traits_unittest.cc +++ b/printing/backend/mojom/print_backend_mojom_traits_unittest.cc
@@ -7,7 +7,6 @@ #include <vector> #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "mojo/public/cpp/test_support/test_utils.h" #include "printing/backend/mojom/print_backend.mojom.h" #include "printing/backend/print_backend.h"
diff --git a/printing/backend/print_backend.cc b/printing/backend/print_backend.cc index 259ab633..4c71279 100644 --- a/printing/backend/print_backend.cc +++ b/printing/backend/print_backend.cc
@@ -8,7 +8,6 @@ #include "base/memory/scoped_refptr.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" namespace {
diff --git a/printing/backend/print_backend.h b/printing/backend/print_backend.h index 3b9b0cfd..84d5ba6e3 100644 --- a/printing/backend/print_backend.h +++ b/printing/backend/print_backend.h
@@ -15,7 +15,6 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/mojom/print.mojom.h" #include "ui/gfx/geometry/size.h"
diff --git a/printing/backend/printing_restrictions.cc b/printing/backend/printing_restrictions.cc index ba619a8f..0dab5ea 100644 --- a/printing/backend/printing_restrictions.cc +++ b/printing/backend/printing_restrictions.cc
@@ -5,7 +5,6 @@ #include "printing/backend/printing_restrictions.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" namespace printing {
diff --git a/printing/backend/printing_restrictions.h b/printing/backend/printing_restrictions.h index cc6cf26e..44f4587 100644 --- a/printing/backend/printing_restrictions.h +++ b/printing/backend/printing_restrictions.h
@@ -7,7 +7,6 @@ #include "base/component_export.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #if BUILDFLAG(IS_CHROMEOS) #include "printing/mojom/print.mojom.h"
diff --git a/printing/print_settings.cc b/printing/print_settings.cc index a9ad8bf3..a896ef7 100644 --- a/printing/print_settings.cc +++ b/printing/print_settings.cc
@@ -7,7 +7,6 @@ #include "base/atomic_sequence_num.h" #include "base/notreached.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/units.h" #if defined(USE_CUPS) && (BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS))
diff --git a/printing/print_settings_conversion.cc b/printing/print_settings_conversion.cc index 8a7aa68c3..016887c 100644 --- a/printing/print_settings_conversion.cc +++ b/printing/print_settings_conversion.cc
@@ -20,7 +20,6 @@ #include "base/time/time.h" #include "base/values.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/mojom/print.mojom.h" #include "printing/print_job_constants.h" #include "printing/print_settings.h"
diff --git a/printing/print_settings_conversion_unittest.cc b/printing/print_settings_conversion_unittest.cc index b468252..727a58f1 100644 --- a/printing/print_settings_conversion_unittest.cc +++ b/printing/print_settings_conversion_unittest.cc
@@ -8,7 +8,6 @@ #include "base/json/json_reader.h" #include "base/values.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/print_settings.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/printing/printing_context.cc b/printing/printing_context.cc index 666debb9..3d8281c8a 100644 --- a/printing/printing_context.cc +++ b/printing/printing_context.cc
@@ -9,7 +9,6 @@ #include "base/check.h" #include "base/notreached.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/buildflags/buildflags.h" #include "printing/mojom/print.mojom.h" #include "printing/page_setup.h"
diff --git a/printing/printing_context.h b/printing/printing_context.h index 3ad8a5f..3f36303 100644 --- a/printing/printing_context.h +++ b/printing/printing_context.h
@@ -12,7 +12,6 @@ #include "base/memory/raw_ptr.h" #include "base/values.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/buildflags/buildflags.h" #include "printing/mojom/print.mojom.h" #include "printing/native_drawing_context.h"
diff --git a/printing/printing_features.cc b/printing/printing_features.cc index 9232099..e5a9011 100644 --- a/printing/printing_features.cc +++ b/printing/printing_features.cc
@@ -5,7 +5,6 @@ #include "printing/printing_features.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/buildflags/buildflags.h" #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
diff --git a/printing/printing_features.h b/printing/printing_features.h index a1e0e6d..e0e32de 100644 --- a/printing/printing_features.h +++ b/printing/printing_features.h
@@ -8,7 +8,6 @@ #include "base/component_export.h" #include "base/feature_list.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "printing/buildflags/buildflags.h" namespace printing {
diff --git a/sandbox/policy/mac/common.sb b/sandbox/policy/mac/common.sb index 84c7e99..1c531988 100644 --- a/sandbox/policy/mac/common.sb +++ b/sandbox/policy/mac/common.sb
@@ -111,6 +111,40 @@ ; All processes can read the bundle contents. (allow file-read* (subpath (param bundle-path))) +; A sandbox bug on macOS 11 and 12 causes the sandbox to see any paths within +; the data volume (/System/Volumes/Data) outside of system firm link locations +; (listed in /usr/share/firmlinks) as though they were not on the data volume, +; causing it to deny access to user paths containing the data volume mount point +; as a prefix. This is filed as https://openradar.appspot.com/FB9738355 and +; tracked at https://crbug.com/1266490. Although macOS 10.15 also has the root +; volume split, this bug does not appear to affect that OS version. +; +; When the bundle path appears in the data volume, this causes the sandbox to +; deny access to the bundle. +; +; This is not a problem in normal use, as typical bundle paths, while on the +; data volume, will be in system firm link locations such as /Applications or +; /Users. As a workaround for other cases where the bundle may be present on the +; data volume but not in a system firm link location, configure the sandbox with +; an alternate bundle path so that it permits access to the bundle. +(define (string-prefix? str prefix) + (let ((l (string-length prefix))) + (if (< (string-length str) l) + #f + (equal? (substring str 0 l) prefix) + ) + ) +) +(define data-volume-root "/System/Volumes/Data/") +(when (string-prefix? (param bundle-path) data-volume-root) + (define (strip-leading-chars str count) + (substring str count (string-length str)) + ) + (allow file-read* + (subpath (strip-leading-chars (param bundle-path) + (- (string-length data-volume-root) 1)))) +) + ; Allow reads of system libraries and frameworks. (allow file-read* (subpath "/System/Library/CoreServices/CoreTypes.bundle")
diff --git a/sandbox/win/src/file_policy_test.cc b/sandbox/win/src/file_policy_test.cc index feef97e..08de096e 100644 --- a/sandbox/win/src/file_policy_test.cc +++ b/sandbox/win/src/file_policy_test.cc
@@ -274,9 +274,7 @@ TEST(FilePolicyTest, DenyNtCreateCalc) { TestRunner runner; - EXPECT_TRUE( - runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_DIR_ANY, L"calc.exe")); - + EXPECT_TRUE(runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_ANY, L"calc.txt")); EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"File_CreateSys32 calc.exe")); runner.SetTestState(BEFORE_REVERT); @@ -530,18 +528,6 @@ ::DeleteFile(temp_file_name8); } -TEST(FilePolicyTest, OpenSys32FilesDenyBecauseOfDir) { - TestRunner runner; - EXPECT_TRUE( - runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_DIR_ANY, L"notepad.exe")); - - EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"File_Win32Create notepad.exe")); - - runner.SetTestState(BEFORE_REVERT); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, - runner.RunTest(L"File_Win32Create notepad.exe")); -} - TEST(FilePolicyTest, OpenSys32FilesAllowNotepad) { TestRunner runner; EXPECT_TRUE( @@ -567,7 +553,7 @@ // Add an 'allow' rule in the windows\system32 such that GetDiskFreeSpaceEx // succeeds (it does an NtOpenFile) but windows\system32\notepad.exe is // denied since there is no wild card in the rule. - EXPECT_TRUE(runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_DIR_ANY, L"")); + EXPECT_TRUE(runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_READONLY, L"")); runner.SetTestState(BEFORE_REVERT); EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"File_GetDiskSpace"));
diff --git a/sandbox/win/src/filesystem_dispatcher.cc b/sandbox/win/src/filesystem_dispatcher.cc index ea1c331..50dd777 100644 --- a/sandbox/win/src/filesystem_dispatcher.cc +++ b/sandbox/win/src/filesystem_dispatcher.cc
@@ -95,21 +95,8 @@ return true; } - const wchar_t* filename = name->c_str(); - - uint32_t broker = BROKER_TRUE; - CountedParameterSet<OpenFile> params; - params[OpenFile::NAME] = ParamPickerMake(filename); - params[OpenFile::ACCESS] = ParamPickerMake(desired_access); - params[OpenFile::DISPOSITION] = ParamPickerMake(create_disposition); - params[OpenFile::OPTIONS] = ParamPickerMake(create_options); - params[OpenFile::BROKER] = ParamPickerMake(broker); - - // To evaluate the policy we need to call back to the policy object. We - // are just middlemen in the operation since is the FileSystemPolicy which - // knows what to do. - EvalResult result = - policy_base_->EvalPolicy(IpcTag::NTCREATEFILE, params.GetBase()); + EvalResult result = EvalPolicy(IpcTag::NTCREATEFILE, *name, desired_access, + create_disposition == FILE_OPEN); HANDLE handle; ULONG_PTR io_information = 0; NTSTATUS nt_status; @@ -139,22 +126,8 @@ return true; } - const wchar_t* filename = name->c_str(); - - uint32_t broker = BROKER_TRUE; - uint32_t create_disposition = FILE_OPEN; - CountedParameterSet<OpenFile> params; - params[OpenFile::NAME] = ParamPickerMake(filename); - params[OpenFile::ACCESS] = ParamPickerMake(desired_access); - params[OpenFile::DISPOSITION] = ParamPickerMake(create_disposition); - params[OpenFile::OPTIONS] = ParamPickerMake(open_options); - params[OpenFile::BROKER] = ParamPickerMake(broker); - - // To evaluate the policy we need to call back to the policy object. We - // are just middlemen in the operation since is the FileSystemPolicy which - // knows what to do. EvalResult result = - policy_base_->EvalPolicy(IpcTag::NTOPENFILE, params.GetBase()); + EvalPolicy(IpcTag::NTOPENFILE, *name, desired_access, true); HANDLE handle; ULONG_PTR io_information = 0; NTSTATUS nt_status; @@ -184,17 +157,7 @@ return true; } - uint32_t broker = BROKER_TRUE; - const wchar_t* filename = name->c_str(); - CountedParameterSet<FileName> params; - params[FileName::NAME] = ParamPickerMake(filename); - params[FileName::BROKER] = ParamPickerMake(broker); - - // To evaluate the policy we need to call back to the policy object. We - // are just middlemen in the operation since is the FileSystemPolicy which - // knows what to do. - EvalResult result = - policy_base_->EvalPolicy(IpcTag::NTQUERYATTRIBUTESFILE, params.GetBase()); + EvalResult result = EvalPolicy(IpcTag::NTQUERYATTRIBUTESFILE, *name); FILE_BASIC_INFORMATION* information = reinterpret_cast<FILE_BASIC_INFORMATION*>(info->Buffer()); @@ -224,17 +187,7 @@ return true; } - uint32_t broker = BROKER_TRUE; - const wchar_t* filename = name->c_str(); - CountedParameterSet<FileName> params; - params[FileName::NAME] = ParamPickerMake(filename); - params[FileName::BROKER] = ParamPickerMake(broker); - - // To evaluate the policy we need to call back to the policy object. We - // are just middlemen in the operation since is the FileSystemPolicy which - // knows what to do. - EvalResult result = policy_base_->EvalPolicy( - IpcTag::NTQUERYFULLATTRIBUTESFILE, params.GetBase()); + EvalResult result = EvalPolicy(IpcTag::NTQUERYFULLATTRIBUTESFILE, *name); FILE_NETWORK_OPEN_INFORMATION* information = reinterpret_cast<FILE_NETWORK_OPEN_INFORMATION*>(info->Buffer()); @@ -277,17 +230,7 @@ return true; } - uint32_t broker = BROKER_TRUE; - const wchar_t* filename = name.c_str(); - CountedParameterSet<FileName> params; - params[FileName::NAME] = ParamPickerMake(filename); - params[FileName::BROKER] = ParamPickerMake(broker); - - // To evaluate the policy we need to call back to the policy object. We - // are just middlemen in the operation since is the FileSystemPolicy which - // knows what to do. - EvalResult result = - policy_base_->EvalPolicy(IpcTag::NTSETINFO_RENAME, params.GetBase()); + EvalResult result = EvalPolicy(IpcTag::NTSETINFO_RENAME, name); IO_STATUS_BLOCK* io_status = reinterpret_cast<IO_STATUS_BLOCK*>(status->Buffer()); @@ -304,4 +247,17 @@ return true; } +EvalResult FilesystemDispatcher::EvalPolicy(IpcTag ipc_tag, + const std::wstring& name, + uint32_t desired_access, + bool open_only) { + CountedParameterSet<OpenFile> params; + const wchar_t* name_ptr = name.c_str(); + params[OpenFile::NAME] = ParamPickerMake(name_ptr); + params[OpenFile::ACCESS] = ParamPickerMake(desired_access); + uint32_t open_only_int = open_only; + params[OpenFile::OPENONLY] = ParamPickerMake(open_only_int); + return policy_base_->EvalPolicy(ipc_tag, params.GetBase()); +} + } // namespace sandbox
diff --git a/sandbox/win/src/filesystem_dispatcher.h b/sandbox/win/src/filesystem_dispatcher.h index 6bc5462a..5b5b147 100644 --- a/sandbox/win/src/filesystem_dispatcher.h +++ b/sandbox/win/src/filesystem_dispatcher.h
@@ -71,6 +71,12 @@ uint32_t length, uint32_t info_class); + // Evaluate the sandbox policy for the file system call. + EvalResult EvalPolicy(IpcTag ipc_tag, + const std::wstring& name, + uint32_t desired_access = 0, + bool open_only = true); + raw_ptr<PolicyBase> policy_base_; };
diff --git a/sandbox/win/src/filesystem_interception.cc b/sandbox/win/src/filesystem_interception.cc index 59934ebd..4210ba4 100644 --- a/sandbox/win/src/filesystem_interception.cc +++ b/sandbox/win/src/filesystem_interception.cc
@@ -18,6 +18,36 @@ namespace sandbox { +namespace { +// This checks for three conditions on whether to ask the broker. +// - The path looks like a DOS device path (namely \??\something). +// - The path looks like a short-name path. +// - Whether the details match the policy. +bool ShouldAskBroker(IpcTag ipc_tag, + const std::unique_ptr<wchar_t, NtAllocDeleter>& name, + size_t name_len, + uint32_t desired_access = 0, + bool open_only = true) { + const wchar_t* name_ptr = name.get(); + if (name_len >= 4 && name_ptr[0] == L'\\' && name_ptr[1] == L'?' && + name_ptr[2] == L'?' && name_ptr[3] == L'\\') { + return true; + } + + for (size_t index = 0; index < name_len; ++index) { + if (name_ptr[index] == L'~') + return true; + } + + CountedParameterSet<OpenFile> params; + params[OpenFile::NAME] = ParamPickerMake(name_ptr); + params[OpenFile::ACCESS] = ParamPickerMake(desired_access); + uint32_t open_only_int = open_only; + params[OpenFile::OPENONLY] = ParamPickerMake(open_only_int); + return QueryBroker(ipc_tag, params.GetBase()); +} +} // namespace + NTSTATUS WINAPI TargetNtCreateFile(NtCreateFileFunction orig_CreateFile, PHANDLE file, ACCESS_MASK desired_access, @@ -52,35 +82,24 @@ break; std::unique_ptr<wchar_t, NtAllocDeleter> name; - uint32_t attributes = 0; + size_t name_len; + uint32_t attributes; NTSTATUS ret = - AllocAndCopyName(object_attributes, &name, &attributes, nullptr); - if (!NT_SUCCESS(ret) || !name) + CopyNameAndAttributes(object_attributes, &name, &name_len, &attributes); + if (!NT_SUCCESS(ret) || !name || !name_len) break; - - uint32_t desired_access_uint32 = desired_access; - uint32_t options_uint32 = options; - uint32_t disposition_uint32 = disposition; - uint32_t broker = BROKER_FALSE; - CountedParameterSet<OpenFile> params; - const wchar_t* name_ptr = name.get(); - params[OpenFile::NAME] = ParamPickerMake(name_ptr); - params[OpenFile::ACCESS] = ParamPickerMake(desired_access_uint32); - params[OpenFile::DISPOSITION] = ParamPickerMake(disposition_uint32); - params[OpenFile::OPTIONS] = ParamPickerMake(options_uint32); - params[OpenFile::BROKER] = ParamPickerMake(broker); - - if (!QueryBroker(IpcTag::NTCREATEFILE, params.GetBase())) + if (!ShouldAskBroker(IpcTag::NTCREATEFILE, name, name_len, desired_access, + disposition == FILE_OPEN)) { break; + } SharedMemIPCClient ipc(memory); CrossCallReturn answer = {0}; // The following call must match in the parameters with // FilesystemDispatcher::ProcessNtCreateFile. - ResultCode code = - CrossCall(ipc, IpcTag::NTCREATEFILE, name.get(), attributes, - desired_access_uint32, file_attributes, sharing, disposition, - options_uint32, &answer); + ResultCode code = CrossCall(ipc, IpcTag::NTCREATEFILE, name.get(), + attributes, desired_access, file_attributes, + sharing, disposition, options, &answer); if (SBOX_ALL_OK != code) break; @@ -129,32 +148,21 @@ break; std::unique_ptr<wchar_t, NtAllocDeleter> name; + size_t name_len; uint32_t attributes; NTSTATUS ret = - AllocAndCopyName(object_attributes, &name, &attributes, nullptr); - if (!NT_SUCCESS(ret) || !name) + CopyNameAndAttributes(object_attributes, &name, &name_len, &attributes); + if (!NT_SUCCESS(ret) || !name || !name_len) break; - - uint32_t desired_access_uint32 = desired_access; - uint32_t options_uint32 = options; - uint32_t disposition_uint32 = FILE_OPEN; - uint32_t broker = BROKER_FALSE; - const wchar_t* name_ptr = name.get(); - CountedParameterSet<OpenFile> params; - params[OpenFile::NAME] = ParamPickerMake(name_ptr); - params[OpenFile::ACCESS] = ParamPickerMake(desired_access_uint32); - params[OpenFile::DISPOSITION] = ParamPickerMake(disposition_uint32); - params[OpenFile::OPTIONS] = ParamPickerMake(options_uint32); - params[OpenFile::BROKER] = ParamPickerMake(broker); - - if (!QueryBroker(IpcTag::NTOPENFILE, params.GetBase())) + if (!ShouldAskBroker(IpcTag::NTOPENFILE, name, name_len, desired_access, + true)) { break; + } SharedMemIPCClient ipc(memory); CrossCallReturn answer = {0}; - ResultCode code = - CrossCall(ipc, IpcTag::NTOPENFILE, name.get(), attributes, - desired_access_uint32, sharing, options_uint32, &answer); + ResultCode code = CrossCall(ipc, IpcTag::NTOPENFILE, name.get(), attributes, + desired_access, sharing, options, &answer); if (SBOX_ALL_OK != code) break; @@ -197,24 +205,17 @@ break; std::unique_ptr<wchar_t, NtAllocDeleter> name; - uint32_t attributes = 0; + size_t name_len; + uint32_t attributes; NTSTATUS ret = - AllocAndCopyName(object_attributes, &name, &attributes, nullptr); - if (!NT_SUCCESS(ret) || !name) + CopyNameAndAttributes(object_attributes, &name, &name_len, &attributes); + if (!NT_SUCCESS(ret) || !name || !name_len) + break; + if (!ShouldAskBroker(IpcTag::NTQUERYATTRIBUTESFILE, name, name_len)) break; InOutCountedBuffer file_info(file_attributes, sizeof(FILE_BASIC_INFORMATION)); - - uint32_t broker = BROKER_FALSE; - CountedParameterSet<FileName> params; - const wchar_t* name_ptr = name.get(); - params[FileName::NAME] = ParamPickerMake(name_ptr); - params[FileName::BROKER] = ParamPickerMake(broker); - - if (!QueryBroker(IpcTag::NTQUERYATTRIBUTESFILE, params.GetBase())) - break; - SharedMemIPCClient ipc(memory); CrossCallReturn answer = {0}; ResultCode code = CrossCall(ipc, IpcTag::NTQUERYATTRIBUTESFILE, name.get(), @@ -254,24 +255,17 @@ break; std::unique_ptr<wchar_t, NtAllocDeleter> name; - uint32_t attributes = 0; + size_t name_len; + uint32_t attributes; NTSTATUS ret = - AllocAndCopyName(object_attributes, &name, &attributes, nullptr); - if (!NT_SUCCESS(ret) || !name) + CopyNameAndAttributes(object_attributes, &name, &name_len, &attributes); + if (!NT_SUCCESS(ret) || !name || !name_len) + break; + if (!ShouldAskBroker(IpcTag::NTQUERYFULLATTRIBUTESFILE, name, name_len)) break; InOutCountedBuffer file_info(file_attributes, sizeof(FILE_NETWORK_OPEN_INFORMATION)); - - uint32_t broker = BROKER_FALSE; - CountedParameterSet<FileName> params; - const wchar_t* name_ptr = name.get(); - params[FileName::NAME] = ParamPickerMake(name_ptr); - params[FileName::BROKER] = ParamPickerMake(broker); - - if (!QueryBroker(IpcTag::NTQUERYFULLATTRIBUTESFILE, params.GetBase())) - break; - SharedMemIPCClient ipc(memory); CrossCallReturn answer = {0}; ResultCode code = CrossCall(ipc, IpcTag::NTQUERYFULLATTRIBUTESFILE, @@ -334,18 +328,11 @@ } std::unique_ptr<wchar_t, NtAllocDeleter> name; - NTSTATUS ret = - AllocAndCopyName(&object_attributes, &name, nullptr, nullptr); - if (!NT_SUCCESS(ret) || !name) + size_t name_len; + NTSTATUS ret = CopyNameAndAttributes(&object_attributes, &name, &name_len); + if (!NT_SUCCESS(ret) || !name || !name_len) break; - - uint32_t broker = BROKER_FALSE; - CountedParameterSet<FileName> params; - const wchar_t* name_ptr = name.get(); - params[FileName::NAME] = ParamPickerMake(name_ptr); - params[FileName::BROKER] = ParamPickerMake(broker); - - if (!QueryBroker(IpcTag::NTSETINFO_RENAME, params.GetBase())) + if (!ShouldAskBroker(IpcTag::NTSETINFO_RENAME, name, name_len)) break; InOutCountedBuffer io_status_buffer(io_status, sizeof(IO_STATUS_BLOCK));
diff --git a/sandbox/win/src/filesystem_policy.cc b/sandbox/win/src/filesystem_policy.cc index fe995b7..bbf03802 100644 --- a/sandbox/win/src/filesystem_policy.cc +++ b/sandbox/win/src/filesystem_policy.cc
@@ -116,11 +116,6 @@ PolicyRule rename(result); switch (semantics) { - case TargetPolicy::FILES_ALLOW_DIR_ANY: { - open.AddNumberMatch(IF, OpenFile::OPTIONS, FILE_DIRECTORY_FILE, AND); - create.AddNumberMatch(IF, OpenFile::OPTIONS, FILE_DIRECTORY_FILE, AND); - break; - } case TargetPolicy::FILES_ALLOW_READONLY: { // We consider all flags that are not known to be readonly as potentially // used for write. @@ -129,9 +124,9 @@ GENERIC_READ | GENERIC_EXECUTE | READ_CONTROL; DWORD restricted_flags = ~allowed_flags; open.AddNumberMatch(IF_NOT, OpenFile::ACCESS, restricted_flags, AND); - open.AddNumberMatch(IF, OpenFile::DISPOSITION, FILE_OPEN, EQUAL); + open.AddNumberMatch(IF, OpenFile::OPENONLY, true, EQUAL); create.AddNumberMatch(IF_NOT, OpenFile::ACCESS, restricted_flags, AND); - create.AddNumberMatch(IF, OpenFile::DISPOSITION, FILE_OPEN, EQUAL); + create.AddNumberMatch(IF, OpenFile::OPENONLY, true, EQUAL); // Read only access don't work for rename. rule_to_add &= ~kCallNtSetInfoRename; @@ -165,19 +160,19 @@ } if ((rule_to_add & kCallNtQueryAttributesFile) && - (!query.AddStringMatch(IF, FileName::NAME, name, CASE_INSENSITIVE) || + (!query.AddStringMatch(IF, OpenFile::NAME, name, CASE_INSENSITIVE) || !policy->AddRule(IpcTag::NTQUERYATTRIBUTESFILE, &query))) { return false; } if ((rule_to_add & kCallNtQueryFullAttributesFile) && - (!query_full.AddStringMatch(IF, FileName::NAME, name, CASE_INSENSITIVE) || + (!query_full.AddStringMatch(IF, OpenFile::NAME, name, CASE_INSENSITIVE) || !policy->AddRule(IpcTag::NTQUERYFULLATTRIBUTESFILE, &query_full))) { return false; } if ((rule_to_add & kCallNtSetInfoRename) && - (!rename.AddStringMatch(IF, FileName::NAME, name, CASE_INSENSITIVE) || + (!rename.AddStringMatch(IF, OpenFile::NAME, name, CASE_INSENSITIVE) || !policy->AddRule(IpcTag::NTSETINFO_RENAME, &rename))) { return false; } @@ -185,60 +180,6 @@ return true; } -// Right now we insert two rules, to be evaluated before any user supplied rule: -// - go to the broker if the path doesn't look like the paths that we push on -// the policy (namely \??\something). -// - go to the broker if it looks like this is a short-name path. -// -// It is possible to add a rule to go to the broker in any case; it would look -// something like: -// rule = new PolicyRule(ASK_BROKER); -// rule->AddNumberMatch(IF_NOT, FileName::BROKER, true, AND); -// policy->AddRule(service, rule); -bool FileSystemPolicy::SetInitialRules(LowLevelPolicy* policy) { - PolicyRule format(ASK_BROKER); - PolicyRule short_name(ASK_BROKER); - - bool rv = format.AddNumberMatch(IF_NOT, FileName::BROKER, BROKER_TRUE, AND); - rv &= format.AddStringMatch(IF_NOT, FileName::NAME, L"\\/?/?\\*", - CASE_SENSITIVE); - - rv &= short_name.AddNumberMatch(IF_NOT, FileName::BROKER, BROKER_TRUE, AND); - rv &= short_name.AddStringMatch(IF, FileName::NAME, L"*~*", CASE_SENSITIVE); - - if (!rv || !policy->AddRule(IpcTag::NTCREATEFILE, &format)) - return false; - - if (!policy->AddRule(IpcTag::NTCREATEFILE, &short_name)) - return false; - - if (!policy->AddRule(IpcTag::NTOPENFILE, &format)) - return false; - - if (!policy->AddRule(IpcTag::NTOPENFILE, &short_name)) - return false; - - if (!policy->AddRule(IpcTag::NTQUERYATTRIBUTESFILE, &format)) - return false; - - if (!policy->AddRule(IpcTag::NTQUERYATTRIBUTESFILE, &short_name)) - return false; - - if (!policy->AddRule(IpcTag::NTQUERYFULLATTRIBUTESFILE, &format)) - return false; - - if (!policy->AddRule(IpcTag::NTQUERYFULLATTRIBUTESFILE, &short_name)) - return false; - - if (!policy->AddRule(IpcTag::NTSETINFO_RENAME, &format)) - return false; - - if (!policy->AddRule(IpcTag::NTSETINFO_RENAME, &short_name)) - return false; - - return true; -} - bool FileSystemPolicy::CreateFileAction(EvalResult eval_result, const ClientInfo& client_info, const std::wstring& file,
diff --git a/sandbox/win/src/filesystem_policy.h b/sandbox/win/src/filesystem_policy.h index 38d7484..e42b245 100644 --- a/sandbox/win/src/filesystem_policy.h +++ b/sandbox/win/src/filesystem_policy.h
@@ -16,8 +16,6 @@ namespace sandbox { -enum IsBroker { BROKER_FALSE, BROKER_TRUE }; - // This class centralizes most of the knowledge related to file system policy class FileSystemPolicy { public: @@ -30,9 +28,6 @@ TargetPolicy::Semantics semantics, LowLevelPolicy* policy); - // Add basic file system rules. - static bool SetInitialRules(LowLevelPolicy* policy); - // Performs the desired policy action on a create request with an // API that is compatible with the IPC-received parameters. // 'client_info' : the target process that is making the request.
diff --git a/sandbox/win/src/policy_params.h b/sandbox/win/src/policy_params.h index 485ecb14..ae48d57 100644 --- a/sandbox/win/src/policy_params.h +++ b/sandbox/win/src/policy_params.h
@@ -18,27 +18,14 @@ #define POLPARAMS_END(type) PolParamLast }; }; \ typedef sandbox::ParameterSet type##Array [type::PolParamLast]; -// Policy parameters for file open / create. +// Policy parameters for file access. POLPARAMS_BEGIN(OpenFile) POLPARAM(NAME) - POLPARAM(BROKER) // true if called from the broker. POLPARAM(ACCESS) - POLPARAM(DISPOSITION) - POLPARAM(OPTIONS) + POLPARAM(OPENONLY) POLPARAMS_END(OpenFile) // Policy parameter for name-based policies. -POLPARAMS_BEGIN(FileName) - POLPARAM(NAME) - POLPARAM(BROKER) // true if called from the broker. -POLPARAMS_END(FileName) - -static_assert(OpenFile::NAME == static_cast<int>(FileName::NAME), - "to simplify fs policies"); -static_assert(OpenFile::BROKER == static_cast<int>(FileName::BROKER), - "to simplify fs policies"); - -// Policy parameter for name-based policies. POLPARAMS_BEGIN(NameBased) POLPARAM(NAME) POLPARAMS_END(NameBased)
diff --git a/sandbox/win/src/sandbox_nt_util.cc b/sandbox/win/src/sandbox_nt_util.cc index 84b5bb6..c12ec6d 100644 --- a/sandbox/win/src/sandbox_nt_util.cc +++ b/sandbox/win/src/sandbox_nt_util.cc
@@ -230,42 +230,41 @@ return ret; } -// Hacky code... replace with AllocAndCopyObjectAttributes. -NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object, - std::unique_ptr<wchar_t, NtAllocDeleter>* out_name, - uint32_t* attributes, - HANDLE* root) { +NTSTATUS CopyNameAndAttributes( + const OBJECT_ATTRIBUTES* in_object, + std::unique_ptr<wchar_t, NtAllocDeleter>* out_name, + size_t* out_name_len, + uint32_t* attributes) { if (!InitHeap()) return STATUS_NO_MEMORY; DCHECK_NT(out_name); + DCHECK_NT(out_name_len); NTSTATUS ret = STATUS_UNSUCCESSFUL; __try { do { - if (in_object->RootDirectory != static_cast<HANDLE>(0) && !root) + if (in_object->RootDirectory != nullptr) break; if (!in_object->ObjectName) break; if (!in_object->ObjectName->Buffer) break; - size_t size = in_object->ObjectName->Length + sizeof(wchar_t); - out_name->reset(new (NT_ALLOC) wchar_t[size / sizeof(wchar_t)]); + size_t size = in_object->ObjectName->Length / sizeof(wchar_t); + out_name->reset(new (NT_ALLOC) wchar_t[size + 1]); if (!*out_name) break; ret = CopyData(out_name->get(), in_object->ObjectName->Buffer, - size - sizeof(wchar_t)); + size * sizeof(wchar_t)); if (!NT_SUCCESS(ret)) break; - out_name->get()[size / sizeof(wchar_t) - 1] = L'\0'; - + *out_name_len = size; + out_name->get()[size] = L'\0'; if (attributes) *attributes = in_object->Attributes; - if (root) - *root = in_object->RootDirectory; ret = STATUS_SUCCESS; } while (false); } __except (EXCEPTION_EXECUTE_HANDLER) {
diff --git a/sandbox/win/src/sandbox_nt_util.h b/sandbox/win/src/sandbox_nt_util.h index 2eddc3f..36d20e8 100644 --- a/sandbox/win/src/sandbox_nt_util.h +++ b/sandbox/win/src/sandbox_nt_util.h
@@ -111,11 +111,14 @@ // Copies data from a user buffer to our buffer. Returns the operation status. NTSTATUS CopyData(void* destination, const void* source, size_t bytes); -// Copies the name from an object attributes. -NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object, - std::unique_ptr<wchar_t, NtAllocDeleter>* out_name, - uint32_t* attributes, - HANDLE* root); +// Copies the name from an object attributes. |out_name| is a NUL terminated +// string and |out_name_len| is the number of characters copied. |attributes| +// is a copy of the attribute flags from |in_object|. +NTSTATUS CopyNameAndAttributes( + const OBJECT_ATTRIBUTES* in_object, + std::unique_ptr<wchar_t, NtAllocDeleter>* out_name, + size_t* out_name_len, + uint32_t* attributes = nullptr); // Initializes our ntdll level heap bool InitHeap();
diff --git a/sandbox/win/src/sandbox_nt_util_unittest.cc b/sandbox/win/src/sandbox_nt_util_unittest.cc index 011f1dbb..8a9eae9 100644 --- a/sandbox/win/src/sandbox_nt_util_unittest.cc +++ b/sandbox/win/src/sandbox_nt_util_unittest.cc
@@ -9,6 +9,7 @@ #include <memory> #include <vector> +#include "base/cxx17_backports.h" #include "base/files/file.h" #include "base/path_service.h" #include "base/strings/string_util.h" @@ -263,5 +264,41 @@ EXPECT_STREQ(path.get(), nt_path.c_str()); } +TEST(SandboxNtUtil, CopyNameAndAttributes) { + InitGlobalNt(); + OBJECT_ATTRIBUTES object_attributes; + InitializeObjectAttributes(&object_attributes, nullptr, 0, nullptr, nullptr); + std::unique_ptr<wchar_t, NtAllocDeleter> name; + size_t name_len; + uint32_t attributes; + EXPECT_EQ(STATUS_UNSUCCESSFUL, + sandbox::CopyNameAndAttributes(&object_attributes, &name, &name_len, + &attributes)); + UNICODE_STRING object_name = {}; + InitializeObjectAttributes(&object_attributes, &object_name, 0, + reinterpret_cast<HANDLE>(0x88), nullptr); + EXPECT_EQ(STATUS_UNSUCCESSFUL, + sandbox::CopyNameAndAttributes(&object_attributes, &name, &name_len, + &attributes)); + wchar_t name_buffer[] = {L'A', L'B', L'C', L'D'}; + object_name.Length = static_cast<USHORT>(sizeof(name_buffer)); + object_name.MaximumLength = object_name.Length; + object_name.Buffer = name_buffer; + + InitializeObjectAttributes(&object_attributes, &object_name, 0, + reinterpret_cast<HANDLE>(0x88), nullptr); + EXPECT_EQ(STATUS_UNSUCCESSFUL, + sandbox::CopyNameAndAttributes(&object_attributes, &name, &name_len, + &attributes)); + InitializeObjectAttributes(&object_attributes, &object_name, 0x12345678, + nullptr, nullptr); + ASSERT_EQ(STATUS_SUCCESS, + sandbox::CopyNameAndAttributes(&object_attributes, &name, &name_len, + &attributes)); + EXPECT_EQ(object_attributes.Attributes, attributes); + EXPECT_EQ(base::size(name_buffer), name_len); + EXPECT_EQ(0, wcsncmp(name.get(), name_buffer, base::size(name_buffer))); + EXPECT_EQ(L'\0', name.get()[name_len]); +} } // namespace } // namespace sandbox
diff --git a/sandbox/win/src/sandbox_policy.h b/sandbox/win/src/sandbox_policy.h index 5f3f1896..2d7b176 100644 --- a/sandbox/win/src/sandbox_policy.h +++ b/sandbox/win/src/sandbox_policy.h
@@ -40,8 +40,6 @@ // the file system supports. FILES_ALLOW_READONLY, // Allows open or create with read access only. FILES_ALLOW_QUERY, // Allows access to query the attributes of a file. - FILES_ALLOW_DIR_ANY, // Allows open or create with directory semantics - // only. NAMEDPIPES_ALLOW_ANY, // Allows creation of a named pipe. FAKE_USER_GDI_INIT, // Fakes user32 and gdi32 initialization. This can // be used to allow the DLLs to load and initialize
diff --git a/sandbox/win/src/sandbox_policy_base.cc b/sandbox/win/src/sandbox_policy_base.cc index 580968c1..4b1dee7e 100644 --- a/sandbox/win/src/sandbox_policy_base.cc +++ b/sandbox/win/src/sandbox_policy_base.cc
@@ -96,7 +96,6 @@ memory_limit_(0), use_alternate_desktop_(false), use_alternate_winstation_(false), - file_system_init_(false), relaxed_interceptions_(true), stdout_handle_(INVALID_HANDLE_VALUE), stderr_handle_(INVALID_HANDLE_VALUE), @@ -700,11 +699,6 @@ switch (subsystem) { case SUBSYS_FILES: { - if (!file_system_init_) { - if (!FileSystemPolicy::SetInitialRules(policy_maker_)) - return SBOX_ERROR_BAD_PARAMS; - file_system_init_ = true; - } if (!FileSystemPolicy::GenerateRules(pattern, semantics, policy_maker_)) { NOTREACHED(); return SBOX_ERROR_BAD_PARAMS;
diff --git a/sandbox/win/src/sandbox_policy_base.h b/sandbox/win/src/sandbox_policy_base.h index 695e942f..f7a3ca88 100644 --- a/sandbox/win/src/sandbox_policy_base.h +++ b/sandbox/win/src/sandbox_policy_base.h
@@ -155,8 +155,6 @@ size_t memory_limit_; bool use_alternate_desktop_; bool use_alternate_winstation_; - // Helps the file system policy initialization. - bool file_system_init_; bool relaxed_interceptions_; HANDLE stdout_handle_; HANDLE stderr_handle_;
diff --git a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc index 56ccee5..f0d2810 100644 --- a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc +++ b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc
@@ -65,7 +65,6 @@ #include "base/bind.h" #include "base/callback_helpers.h" #include "base/check_op.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" @@ -622,7 +621,7 @@ // it, binding it to a new pipe, and dropping the PendingReceiver on the // floor. factory_.reset(); - ignore_result(factory_.BindNewPipeAndPassReceiver()); + std::ignore = factory_.BindNewPipeAndPassReceiver(); factory_.FlushForTesting(); }
diff --git a/services/device/usb/usb_device_handle_usbfs.cc b/services/device/usb/usb_device_handle_usbfs.cc index c157474..976f587 100644 --- a/services/device/usb/usb_device_handle_usbfs.cc +++ b/services/device/usb/usb_device_handle_usbfs.cc
@@ -10,13 +10,13 @@ #include <sys/ioctl.h> #include <numeric> +#include <tuple> #include <utility> #include "base/bind.h" #include "base/cancelable_callback.h" #include "base/containers/contains.h" #include "base/files/file_descriptor_watcher_posix.h" -#include "base/ignore_result.h" #include "base/logging.h" #include "base/memory/ref_counted_memory.h" #include "base/numerics/checked_math.h" @@ -235,7 +235,7 @@ // This method intentionally leaks the file descriptor. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); watch_controller_.reset(); - ignore_result(fd_.release()); + std::ignore = fd_.release(); } bool UsbDeviceHandleUsbfs::BlockingTaskRunnerHelper::SetConfiguration(
diff --git a/services/network/network_context.cc b/services/network/network_context.cc index b5b0180..d1ad7581 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc
@@ -6,6 +6,7 @@ #include <memory> #include <string> +#include <tuple> #include <utility> #include "base/barrier_closure.h" @@ -16,7 +17,6 @@ #include "base/containers/unique_ptr_adapters.h" #include "base/dcheck_is_on.h" #include "base/feature_list.h" -#include "base/ignore_result.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" @@ -849,7 +849,7 @@ trust_token_store_->ExecuteOrEnqueue(base::BindOnce( [](mojom::ClearDataFilterPtr filter, base::OnceClosure done, TrustTokenStore* store) { - ignore_result(store->ClearDataForFilter(std::move(filter))); + std::ignore = store->ClearDataForFilter(std::move(filter)); std::move(done).Run(); }, std::move(filter), std::move(done)));
diff --git a/services/network/p2p/socket_udp.cc b/services/network/p2p/socket_udp.cc index 6db686e..ebae0cde 100644 --- a/services/network/p2p/socket_udp.cc +++ b/services/network/p2p/socket_udp.cc
@@ -4,9 +4,10 @@ #include "services/network/p2p/socket_udp.h" +#include <tuple> + #include "base/bind.h" #include "base/containers/contains.h" -#include "base/ignore_result.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/strings/stringprintf.h" @@ -410,7 +411,7 @@ net::NetworkTrafficAnnotationTag(traffic_annotation)); // We are not going to use |this| again, so it's safe to ignore the result. - ignore_result(DoSend(packet)); + std::ignore = DoSend(packet); } }
diff --git a/services/network/proxy_resolver_factory_mojo_unittest.cc b/services/network/proxy_resolver_factory_mojo_unittest.cc index 3247b2d..7c59187 100644 --- a/services/network/proxy_resolver_factory_mojo_unittest.cc +++ b/services/network/proxy_resolver_factory_mojo_unittest.cc
@@ -8,13 +8,13 @@ #include <map> #include <memory> #include <string> +#include <tuple> #include <utility> #include <vector> #include "base/bind.h" #include "base/callback_helpers.h" #include "base/containers/queue.h" -#include "base/ignore_result.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" #include "base/test/task_environment.h" @@ -288,7 +288,7 @@ case GetProxyForUrlAction::MAKE_DNS_REQUEST: { mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient> dns_client; - ignore_result(dns_client.InitWithNewPipeAndPassReceiver()); + std::ignore = dns_client.InitWithNewPipeAndPassReceiver(); client->ResolveDns(url.host(), net::ProxyResolveDnsOperation::DNS_RESOLVE_EX, network_isolation_key, std::move(dns_client)); @@ -474,7 +474,7 @@ case CreateProxyResolverAction::MAKE_DNS_REQUEST: { mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient> dns_client; - ignore_result(dns_client.InitWithNewPipeAndPassReceiver()); + std::ignore = dns_client.InitWithNewPipeAndPassReceiver(); client->ResolveDns(pac_script, net::ProxyResolveDnsOperation::DNS_RESOLVE_EX, net::NetworkIsolationKey(), std::move(dns_client));
diff --git a/services/network/public/cpp/cert_verifier/mojo_cert_verifier_unittest.cc b/services/network/public/cpp/cert_verifier/mojo_cert_verifier_unittest.cc index 0c10eb5..cdd0cf4 100644 --- a/services/network/public/cpp/cert_verifier/mojo_cert_verifier_unittest.cc +++ b/services/network/public/cpp/cert_verifier/mojo_cert_verifier_unittest.cc
@@ -5,10 +5,10 @@ #include "services/network/public/cpp/cert_verifier/mojo_cert_verifier.h" #include <map> +#include <tuple> #include "base/bind.h" #include "base/callback_helpers.h" -#include "base/ignore_result.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" #include "base/test/bind.h" @@ -44,7 +44,7 @@ CreateUnconnectedURLLoaderFactory() { mojo::PendingRemote<network::mojom::URLLoaderFactory> url_loader_factory; // Bind the factory, but don't bother connecting it. - ignore_result(url_loader_factory.InitWithNewPipeAndPassReceiver()); + std::ignore = url_loader_factory.InitWithNewPipeAndPassReceiver(); return url_loader_factory; }
diff --git a/services/network/public/cpp/network_connection_tracker_unittest.cc b/services/network/public/cpp/network_connection_tracker_unittest.cc index 330dcfe8..cfc2a73 100644 --- a/services/network/public/cpp/network_connection_tracker_unittest.cc +++ b/services/network/public/cpp/network_connection_tracker_unittest.cc
@@ -5,10 +5,10 @@ #include "services/network/public/cpp/network_connection_tracker.h" #include <memory> +#include <tuple> #include "base/bind.h" #include "base/callback_helpers.h" -#include "base/ignore_result.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" #include "base/test/task_environment.h" @@ -337,7 +337,7 @@ mojo::Remote<network::mojom::NetworkService>* network_service_remote = new mojo::Remote<network::mojom::NetworkService>; - ignore_result(network_service_remote->BindNewPipeAndPassReceiver()); + std::ignore = network_service_remote->BindNewPipeAndPassReceiver(); NetworkConnectionTracker::BindingCallback callback = base::BindRepeating( [](network::mojom::NetworkService* service, mojo::PendingReceiver<network::mojom::NetworkChangeManager> receiver) {
diff --git a/services/network/public/cpp/optional_trust_token_params_unittest.cc b/services/network/public/cpp/optional_trust_token_params_unittest.cc index b35d433..da1dff4 100644 --- a/services/network/public/cpp/optional_trust_token_params_unittest.cc +++ b/services/network/public/cpp/optional_trust_token_params_unittest.cc
@@ -4,7 +4,8 @@ #include "services/network/public/cpp/optional_trust_token_params.h" -#include "base/ignore_result.h" +#include <tuple> + #include "base/test/gtest_util.h" #include "mojo/public/cpp/bindings/struct_traits.h" #include "mojo/public/cpp/test_support/test_utils.h" @@ -85,8 +86,8 @@ TEST(OptionalTrustTokenParams, DereferenceEmpty) { OptionalTrustTokenParams in = absl::nullopt; - EXPECT_CHECK_DEATH(ignore_result(in->type)); - EXPECT_CHECK_DEATH(ignore_result(in.value())); + EXPECT_CHECK_DEATH(std::ignore = in->type); + EXPECT_CHECK_DEATH(std::ignore = in.value()); EXPECT_EQ(in.as_ptr(), mojom::TrustTokenParamsPtr()); }
diff --git a/services/network/public/mojom/url_response_head.mojom b/services/network/public/mojom/url_response_head.mojom index 9e4ea015..80f26b62 100644 --- a/services/network/public/mojom/url_response_head.mojom +++ b/services/network/public/mojom/url_response_head.mojom
@@ -212,9 +212,8 @@ mojo_base.mojom.UnguessableToken? recursive_prefetch_token; // Aliases, if any, for the destination URL, as read from DNS CNAME records. - // The first entry of `dns_aliases`, if it exists, is the canonical name. - // The alias chain is preserved in reverse order, from canonical name (i.e. - // address record name) through to query name. + // Includes all known aliases, e.g. from A, AAAA, or HTTPS, not just from the + // address used for the connection, in no particular order. array<string> dns_aliases; // The URL of WebBundle this response was loaded from. This value is only
diff --git a/services/network/trust_tokens/trust_token_request_signing_helper.cc b/services/network/trust_tokens/trust_token_request_signing_helper.cc index 69a2db32..82b91fb 100644 --- a/services/network/trust_tokens/trust_token_request_signing_helper.cc +++ b/services/network/trust_tokens/trust_token_request_signing_helper.cc
@@ -7,10 +7,10 @@ #include <iterator> #include <memory> #include <string> +#include <tuple> #include "base/base64.h" #include "base/containers/flat_set.h" -#include "base/ignore_result.h" #include "base/no_destructor.h" #include "base/ranges/algorithm.h" #include "base/strings/strcat.h" @@ -143,8 +143,8 @@ net::URLRequest* request, const std::vector<std::string>& additional_headers) { std::string signed_headers_header; - ignore_result(request->extra_request_headers().GetHeader( - kTrustTokensRequestHeaderSignedHeaders, &signed_headers_header)); + std::ignore = request->extra_request_headers().GetHeader( + kTrustTokensRequestHeaderSignedHeaders, &signed_headers_header); // Because of the characteristics of the protocol, there are expected to be // roughly 2-5 total headers to sign.
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index 2ca649b..f7260ed 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -173,8 +173,8 @@ response->auth_challenge_info = request->auth_challenge_info(); response->has_range_requested = request->extra_request_headers().HasHeader( net::HttpRequestHeaders::kRange); - response->dns_aliases = request->response_info().dns_aliases; - + base::ranges::copy(request->response_info().dns_aliases, + std::back_inserter(response->dns_aliases)); // [spec]: https://fetch.spec.whatwg.org/#http-network-or-cache-fetch // 13. Set response’s request-includes-credentials to includeCredentials. response->request_include_credentials = request->allow_credentials();
diff --git a/services/network/websocket.cc b/services/network/websocket.cc index 4c5d1dc..eef15ca 100644 --- a/services/network/websocket.cc +++ b/services/network/websocket.cc
@@ -8,6 +8,7 @@ #include <string.h> #include <memory> +#include <tuple> #include <utility> #include "base/bind.h" @@ -15,7 +16,6 @@ #include "base/check.h" #include "base/check_op.h" #include "base/feature_list.h" -#include "base/ignore_result.h" #include "base/location.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" @@ -521,7 +521,7 @@ void WebSocket::StartReceiving() { DCHECK(pending_data_frames_.empty()); - ignore_result(channel_->ReadFrames()); + std::ignore = channel_->ReadFrames(); } void WebSocket::StartClosingHandshake(uint16_t code, @@ -539,7 +539,7 @@ std::make_unique<CloseInfo>(code, reason); return; } - ignore_result(channel_->StartClosingHandshake(code, reason)); + std::ignore = channel_->StartClosingHandshake(code, reason); } bool WebSocket::AllowCookies(const GURL& url) const { @@ -693,7 +693,7 @@ pending_data_frames_.pop(); } if (resuming_after_interruption) { - ignore_result(channel_->ReadFrames()); + std::ignore = channel_->ReadFrames(); } } @@ -775,8 +775,8 @@ if (pending_start_closing_handshake_) { std::unique_ptr<CloseInfo> close_info = std::move(pending_start_closing_handshake_); - ignore_result( - channel_->StartClosingHandshake(close_info->code, close_info->reason)); + std::ignore = + channel_->StartClosingHandshake(close_info->code, close_info->reason); } }
diff --git a/services/proxy_resolver_win/winhttp_api_wrapper_impl.cc b/services/proxy_resolver_win/winhttp_api_wrapper_impl.cc index bbc7e0c..37bc5bc8 100644 --- a/services/proxy_resolver_win/winhttp_api_wrapper_impl.cc +++ b/services/proxy_resolver_win/winhttp_api_wrapper_impl.cc
@@ -5,10 +5,10 @@ #include "services/proxy_resolver_win/winhttp_api_wrapper_impl.h" #include <string> +#include <tuple> #include <utility> #include "base/check_op.h" -#include "base/ignore_result.h" #include "services/proxy_resolver_win/winhttp_proxy_resolver_functions.h" namespace proxy_resolver_win { @@ -29,7 +29,7 @@ WinHttpAPIWrapperImpl::WinHttpAPIWrapperImpl() = default; WinHttpAPIWrapperImpl::~WinHttpAPIWrapperImpl() { if (session_handle_) - ignore_result(CallWinHttpSetStatusCallback(nullptr)); + std::ignore = CallWinHttpSetStatusCallback(nullptr); CloseSessionHandle(); }
diff --git a/storage/browser/quota/quota_database.cc b/storage/browser/quota/quota_database.cc index dc2c3edb..fbc7fcf0 100644 --- a/storage/browser/quota/quota_database.cc +++ b/storage/browser/quota/quota_database.cc
@@ -52,7 +52,15 @@ // Definitions for database schema. const char kHostQuotaTable[] = "quota"; const char kBucketTable[] = "buckets"; + +// Deprecated flag that ensured that the buckets table was bootstrapped +// with existing storage key data for eviction logic. +// TODO(crbug.com/1254535): Remove once enough time has passed to ensure that +// this flag is no longer stored and supported in the QuotaDatabase. const char kIsOriginTableBootstrapped[] = "IsOriginTableBootstrapped"; +// Flag to ensure that all existing data for storage keys have been +// registered into the buckets table. +const char kBucketsTableBootstrapped[] = "IsBucketsTableBootstrapped"; const int kCommitIntervalMs = 30000; @@ -326,7 +334,7 @@ StorageType type, base::Time last_accessed) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - QuotaError open_error = EnsureOpened(EnsureOpenedMode::kCreateIfNotFound); + QuotaError open_error = EnsureOpened(EnsureOpenedMode::kFailIfNotFound); if (open_error != QuotaError::kNone) return open_error; @@ -335,15 +343,8 @@ // TODO(crbug/1210252): Update to not execute 2 sql statements. QuotaErrorOr<BucketInfo> result = GetBucket(storage_key, kDefaultBucketName, type); - if (!result.ok()) { - if (result.error() != QuotaError::kNotFound) - return result.error(); - - QuotaErrorOr<BucketInfo> created_bucket = - CreateBucketInternal(storage_key, type, kDefaultBucketName, - /*use_count=*/1, last_accessed, last_accessed); - return created_bucket.ok() ? QuotaError::kNone : created_bucket.error(); - } + if (!result.ok()) + return result.error(); // clang-format off static constexpr char kSql[] = @@ -399,7 +400,7 @@ StorageType type, base::Time last_modified) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - QuotaError open_error = EnsureOpened(EnsureOpenedMode::kCreateIfNotFound); + QuotaError open_error = EnsureOpened(EnsureOpenedMode::kFailIfNotFound); if (open_error != QuotaError::kNone) return open_error; @@ -408,15 +409,8 @@ // TODO(crbug/1210252): Update to not execute 2 sql statements. QuotaErrorOr<BucketInfo> result = GetBucket(storage_key, kDefaultBucketName, type); - if (!result.ok()) { - if (result.error() != QuotaError::kNotFound) - return result.error(); - - QuotaErrorOr<BucketInfo> created_bucket = - CreateBucketInternal(storage_key, type, kDefaultBucketName, - /*use_count=*/0, last_modified, last_modified); - return created_bucket.ok() ? QuotaError::kNone : created_bucket.error(); - } + if (!result.ok()) + return result.error(); static constexpr char kSql[] = "UPDATE buckets SET last_modified = ? WHERE id = ?"; @@ -459,41 +453,43 @@ return QuotaError::kNone; } -bool QuotaDatabase::RegisterInitialStorageKeyInfo( - const std::set<StorageKey>& storage_keys, - StorageType type) { +QuotaError QuotaDatabase::RegisterInitialStorageKeyInfo( + base::flat_map<StorageType, std::set<StorageKey>> storage_keys_by_type) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (EnsureOpened(EnsureOpenedMode::kCreateIfNotFound) != QuotaError::kNone) - return false; + QuotaError open_error = EnsureOpened(EnsureOpenedMode::kCreateIfNotFound); + if (open_error != QuotaError::kNone) + return open_error; - for (const auto& storage_key : storage_keys) { - static constexpr char kSql[] = - // clang-format off - "INSERT OR IGNORE INTO buckets(" - "storage_key," - "host," - "type," - "name," - "use_count," - "last_accessed," - "last_modified," - "expiration," - "quota) " - "VALUES (?, ?, ?, ?, 0, 0, 0, ?, 0)"; - // clang-format on - sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); - statement.BindString(0, storage_key.Serialize()); - statement.BindString(1, storage_key.origin().host()); - statement.BindInt(2, static_cast<int>(type)); - statement.BindString(3, kDefaultBucketName); - statement.BindTime(4, base::Time::Max()); + for (const auto& type_and_storage_keys : storage_keys_by_type) { + StorageType storage_type = type_and_storage_keys.first; + for (const auto& storage_key : type_and_storage_keys.second) { + static constexpr char kSql[] = + // clang-format off + "INSERT OR IGNORE INTO buckets(" + "storage_key," + "host," + "type," + "name," + "use_count," + "last_accessed," + "last_modified," + "expiration," + "quota) " + "VALUES (?, ?, ?, ?, 0, 0, 0, ?, 0)"; + // clang-format on + sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); + statement.BindString(0, storage_key.Serialize()); + statement.BindString(1, storage_key.origin().host()); + statement.BindInt(2, static_cast<int>(storage_type)); + statement.BindString(3, kDefaultBucketName); + statement.BindTime(4, base::Time::Max()); - if (!statement.Run()) - return false; + if (!statement.Run()) + return QuotaError::kDatabaseError; + } } - ScheduleCommit(); - return true; + return QuotaError::kNone; } QuotaErrorOr<QuotaDatabase::BucketTableEntry> QuotaDatabase::GetBucketInfo( @@ -695,21 +691,29 @@ return buckets; } -bool QuotaDatabase::IsBootstrappedForEviction() { +bool QuotaDatabase::IsBootstrapped() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (EnsureOpened(EnsureOpenedMode::kCreateIfNotFound) != QuotaError::kNone) return false; int flag = 0; - return meta_table_->GetValue(kIsOriginTableBootstrapped, &flag) && flag; + return meta_table_->GetValue(kBucketsTableBootstrapped, &flag) && flag; } -bool QuotaDatabase::SetBootstrappedForEviction(bool bootstrap_flag) { +QuotaError QuotaDatabase::SetIsBootstrapped(bool bootstrap_flag) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (EnsureOpened(EnsureOpenedMode::kCreateIfNotFound) != QuotaError::kNone) - return false; + QuotaError open_error = EnsureOpened(EnsureOpenedMode::kCreateIfNotFound); + if (open_error != QuotaError::kNone) + return open_error; - return meta_table_->SetValue(kIsOriginTableBootstrapped, bootstrap_flag); + // Delete deprecated bootstrap flag if it still exists. + // TODO(crbug.com/1254535): Remove once enough time has passed to ensure that + // this flag is no longer stored and supported in the QuotaDatabase. + meta_table_->DeleteKey(kIsOriginTableBootstrapped); + + return meta_table_->SetValue(kBucketsTableBootstrapped, bootstrap_flag) + ? QuotaError::kNone + : QuotaError::kDatabaseError; } void QuotaDatabase::Commit() {
diff --git a/storage/browser/quota/quota_database.h b/storage/browser/quota/quota_database.h index af088838..de7d416 100644 --- a/storage/browser/quota/quota_database.h +++ b/storage/browser/quota/quota_database.h
@@ -171,12 +171,12 @@ base::Time last_modified) WARN_UNUSED_RESULT; - // Register initial `storage_keys` info `type` to the database. + // Register initial `storage_keys_by_type` into the database. // This method is assumed to be called only after the installation or // the database schema reset. - bool RegisterInitialStorageKeyInfo( - const std::set<blink::StorageKey>& storage_keys, - blink::mojom::StorageType type); + QuotaError RegisterInitialStorageKeyInfo( + base::flat_map<blink::mojom::StorageType, std::set<blink::StorageKey>> + storage_keys_by_type); // Returns the BucketTableEntry for `bucket` if one exists. Returns a // QuotaError if not found or the operation has failed. @@ -208,11 +208,12 @@ base::Time begin, base::Time end); - // Returns false if SetBootstrappedForEviction() has never - // been called before, which means existing storage keys may not have been - // registered. - bool IsBootstrappedForEviction(); - bool SetBootstrappedForEviction(bool bootstrap_flag); + // Returns false if SetIsBootstrapped() has never been called before, which + // means existing storage keys may not have been registered. Bootstrapping + // ensures that there is a bucket entry in the buckets table for all storage + // keys that have stored data by quota managed Storage APIs. + bool IsBootstrapped(); + QuotaError SetIsBootstrapped(bool bootstrap_flag); // Manually disable database to test database error scenarios for testing. void SetDisabledForTesting(bool disable) { is_disabled_ = disable; }
diff --git a/storage/browser/quota/quota_database_unittest.cc b/storage/browser/quota/quota_database_unittest.cc index 04304cb..5ce1fc4 100644 --- a/storage/browser/quota/quota_database_unittest.cc +++ b/storage/browser/quota/quota_database_unittest.cc
@@ -12,6 +12,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/containers/contains.h" +#include "base/containers/flat_map.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/test/metrics/histogram_tester.h" @@ -493,13 +494,12 @@ StorageKey::CreateFromStringForTesting("http://example/"); base::Time now = base::Time::Now(); - // Should create a bucket if one doesn't exist. + // Should error if bucket doesn't exist. EXPECT_EQ(db.SetStorageKeyLastModifiedTime(storage_key, kTemp, now), - QuotaError::kNone); + QuotaError::kNotFound); QuotaErrorOr<BucketInfo> bucket = - db.GetBucket(storage_key, kDefaultBucketName, kTemp); - EXPECT_TRUE(bucket.ok()); + db.CreateBucketForTesting(storage_key, kDefaultBucketName, kTemp); EXPECT_EQ(db.SetStorageKeyLastModifiedTime(storage_key, kTemp, now), QuotaError::kNone); @@ -617,13 +617,12 @@ StorageKey::CreateFromStringForTesting("http://example/"); base::Time now = base::Time::Now(); - // Should create a bucket if one doesn't exist. + // Should error if bucket doesn't exist. EXPECT_EQ(db.SetStorageKeyLastAccessTime(storage_key, kTemp, now), - QuotaError::kNone); + QuotaError::kNotFound); QuotaErrorOr<BucketInfo> bucket = - db.GetBucket(storage_key, kDefaultBucketName, kTemp); - EXPECT_TRUE(bucket.ok()); + db.CreateBucketForTesting(storage_key, kDefaultBucketName, kTemp); EXPECT_EQ(db.SetStorageKeyLastAccessTime(storage_key, kTemp, now), QuotaError::kNone); @@ -632,7 +631,7 @@ db.GetBucketInfo(bucket->id); EXPECT_TRUE(info.ok()); EXPECT_EQ(now, info->last_accessed); - EXPECT_EQ(2, info->use_count); + EXPECT_EQ(1, info->use_count); } TEST_P(QuotaDatabaseTest, GetStorageKeysForType) { @@ -778,13 +777,19 @@ TEST_P(QuotaDatabaseTest, RegisterInitialStorageKeyInfo) { QuotaDatabase db(use_in_memory_db() ? base::FilePath() : DbPath()); + base::flat_map<blink::mojom::StorageType, std::set<StorageKey>> + storage_keys_by_type; const StorageKey kStorageKeys[] = { StorageKey::CreateFromStringForTesting("http://a/"), StorageKey::CreateFromStringForTesting("http://b/"), StorageKey::CreateFromStringForTesting("http://c/")}; - std::set<StorageKey> storage_keys(kStorageKeys, std::end(kStorageKeys)); + storage_keys_by_type.emplace( + kTemp, std::set<StorageKey>(kStorageKeys, std::end(kStorageKeys))); + storage_keys_by_type.emplace( + kPerm, std::set<StorageKey>(kStorageKeys, std::end(kStorageKeys))); - EXPECT_TRUE(db.RegisterInitialStorageKeyInfo(storage_keys, kTemp)); + EXPECT_EQ(db.RegisterInitialStorageKeyInfo(storage_keys_by_type), + QuotaError::kNone); QuotaErrorOr<BucketInfo> bucket_result = db.GetBucket(StorageKey::CreateFromStringForTesting("http://a/"), @@ -804,7 +809,8 @@ EXPECT_TRUE(info.ok()); EXPECT_EQ(1, info->use_count); - EXPECT_TRUE(db.RegisterInitialStorageKeyInfo(storage_keys, kTemp)); + EXPECT_EQ(db.RegisterInitialStorageKeyInfo(storage_keys_by_type), + QuotaError::kNone); info = db.GetBucketInfo(bucket_result->id); EXPECT_TRUE(info.ok()); @@ -887,14 +893,14 @@ } // Non-parameterized tests. -TEST_F(QuotaDatabaseTest, BootstrapForEvictionFlag) { +TEST_F(QuotaDatabaseTest, BootstrapFlag) { QuotaDatabase db(DbPath()); - EXPECT_FALSE(db.IsBootstrappedForEviction()); - EXPECT_TRUE(db.SetBootstrappedForEviction(true)); - EXPECT_TRUE(db.IsBootstrappedForEviction()); - EXPECT_TRUE(db.SetBootstrappedForEviction(false)); - EXPECT_FALSE(db.IsBootstrappedForEviction()); + EXPECT_FALSE(db.IsBootstrapped()); + EXPECT_EQ(db.SetIsBootstrapped(true), QuotaError::kNone); + EXPECT_TRUE(db.IsBootstrapped()); + EXPECT_EQ(db.SetIsBootstrapped(false), QuotaError::kNone); + EXPECT_FALSE(db.IsBootstrapped()); } TEST_F(QuotaDatabaseTest, OpenCorruptedDatabase) {
diff --git a/storage/browser/quota/quota_manager_impl.cc b/storage/browser/quota/quota_manager_impl.cc index 386a4237..83cdc2e 100644 --- a/storage/browser/quota/quota_manager_impl.cc +++ b/storage/browser/quota/quota_manager_impl.cc
@@ -33,6 +33,7 @@ #include "base/task/single_thread_task_runner.h" #include "base/task/task_runner_util.h" #include "base/task/thread_pool.h" +#include "base/thread_annotations.h" #include "base/threading/thread_restrictions.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" @@ -174,6 +175,11 @@ return database->SetHostQuota(host, StorageType::kPersistent, *new_quota); } +QuotaError SetDatabaseBootstrappedOnDBThread(QuotaDatabase* database) { + DCHECK(database); + return database->SetIsBootstrapped(true); +} + QuotaErrorOr<BucketLocator> GetLRUBucketOnDBThread( StorageType type, const std::set<BucketId>& bucket_exceptions, @@ -203,19 +209,13 @@ return database->GetBucketInfo(bucket_id); } -bool BootstrapDatabaseOnDBThread(std::set<StorageKey> storage_keys, - QuotaDatabase* database) { +QuotaError BootstrapDatabaseOnDBThread( + base::flat_map<StorageType, std::set<StorageKey>> storage_keys_by_type, + QuotaDatabase* database) { DCHECK(database); - if (database->IsBootstrappedForEviction()) - return true; - // Register existing storage keys with 0 last time access. - if (database->RegisterInitialStorageKeyInfo(storage_keys, - StorageType::kTemporary)) { - database->SetBootstrappedForEviction(true); - return true; - } - return false; + return database->RegisterInitialStorageKeyInfo( + std::move(storage_keys_by_type)); } QuotaError UpdateAccessTimeOnDBThread(const StorageKey& storage_key, @@ -620,6 +620,90 @@ base::WeakPtrFactory<GetUsageInfoTask> weak_factory_{this}; }; +class QuotaManagerImpl::StorageKeyGathererTask { + public: + StorageKeyGathererTask(QuotaManagerImpl* manager, + base::OnceCallback<void(StorageKeysByType)> callback) + : manager_(manager), callback_(std::move(callback)) { + DCHECK(manager_); + DCHECK(callback_); + } + + void Run() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +#if DCHECK_IS_ON() + DCHECK(!run_called_) << __func__ << " already called"; + run_called_ = true; +#endif // DCHECK_IS_ON() + + size_t client_call_count = 0; + for (const auto& client_and_type : manager_->client_types_) + client_call_count += client_and_type.second.size(); + + // Registered clients can be empty in tests. + if (!client_call_count) { + Completed(); + return; + } + + base::RepeatingClosure barrier = base::BarrierClosure( + client_call_count, + base::BindOnce(&QuotaManagerImpl::StorageKeyGathererTask::Completed, + weak_factory_.GetWeakPtr())); + + GetStorageKeysForType(StorageType::kTemporary, barrier); + GetStorageKeysForType(StorageType::kPersistent, barrier); + GetStorageKeysForType(StorageType::kSyncable, barrier); + } + + private: + void GetStorageKeysForType(StorageType type, base::RepeatingClosure barrier) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto client_map_it = manager_->client_types_.find(type); + DCHECK(client_map_it != manager_->client_types_.end()); + + for (const auto& client_and_type : client_map_it->second) { + client_and_type.first->GetStorageKeysForType( + type, base::BindOnce(&StorageKeyGathererTask::DidGetStorageKeys, + weak_factory_.GetWeakPtr(), type, barrier)); + } + } + + void DidGetStorageKeys(StorageType type, + base::OnceClosure barrier, + const std::vector<StorageKey>& storage_keys) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + storage_keys_by_type_[type].insert(storage_keys.begin(), + storage_keys.end()); + std::move(barrier).Run(); + } + + void Completed() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +#if DCHECK_IS_ON() + DCHECK(!completed_called_) << __func__ << " already called"; + completed_called_ = true; +#endif // DCHECK_IS_ON() + + // Deletes `this`. + std::move(callback_).Run(storage_keys_by_type_); + } + + SEQUENCE_CHECKER(sequence_checker_); + QuotaManagerImpl* manager_ GUARDED_BY_CONTEXT(sequence_checker_); + base::OnceCallback<void(StorageKeysByType)> callback_ + GUARDED_BY_CONTEXT(sequence_checker_); + StorageKeysByType storage_keys_by_type_ GUARDED_BY_CONTEXT(sequence_checker_); + +#if DCHECK_IS_ON() + bool run_called_ = false; + bool completed_called_ = false; +#endif // DCHECK_IS_ON() + + base::WeakPtrFactory<StorageKeyGathererTask> weak_factory_ + GUARDED_BY_CONTEXT(sequence_checker_){this}; +}; + // Calls each QuotaClient for `quota_client_types` to delete `storage_key` data. // If `storage_key` is delete for all registered client types, and there are no // deletion errors, StorageKeyDataDeleter will call to delete `storage_key` from @@ -1592,44 +1676,80 @@ &QuotaManagerImpl::ReportHistogram); } + if (bootstrap_disabled_for_testing_) + return; + + is_bootstrapping_database_ = true; base::PostTaskAndReplyWithResult( db_runner_.get(), FROM_HERE, - base::BindOnce(&QuotaDatabase::IsBootstrappedForEviction, + base::BindOnce(&QuotaDatabase::IsBootstrapped, base::Unretained(database_.get())), - base::BindOnce(&QuotaManagerImpl::DidOpenDatabase, + base::BindOnce(&QuotaManagerImpl::DidGetBootstrapFlag, weak_factory_.GetWeakPtr())); } -void QuotaManagerImpl::DidOpenDatabase(bool is_database_bootstrapped) { +void QuotaManagerImpl::DidGetBootstrapFlag(bool is_database_bootstrapped) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - is_database_bootstrapped_for_eviction_ = is_database_bootstrapped; + DCHECK(is_bootstrapping_database_); + if (!is_database_bootstrapped) { + BootstrapDatabase(); + return; + } + is_bootstrapping_database_ = false; + RunDatabaseCallbacks(); StartEviction(); } -void QuotaManagerImpl::BootstrapDatabaseForEviction( - GetBucketCallback did_get_bucket_callback, - int64_t usage, - int64_t unlimited_usage) { +void QuotaManagerImpl::BootstrapDatabase() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // The usage cache should be fully populated now so we can - // seed the database with storage keys we know about. - std::set<StorageKey> storage_keys = - temporary_usage_tracker_->GetCachedStorageKeys(); - PostTaskAndReplyWithResultForDBThread( - FROM_HERE, - base::BindOnce(&BootstrapDatabaseOnDBThread, std::move(storage_keys)), - base::BindOnce(&QuotaManagerImpl::DidBootstrapDatabaseForEviction, - weak_factory_.GetWeakPtr(), - std::move(did_get_bucket_callback))); + DCHECK(!storage_key_gatherer_); + storage_key_gatherer_ = std::make_unique<StorageKeyGathererTask>( + this, base::BindOnce(&QuotaManagerImpl::DidGetStorageKeysForBootstrap, + weak_factory_.GetWeakPtr())); + storage_key_gatherer_->Run(); } -void QuotaManagerImpl::DidBootstrapDatabaseForEviction( - GetBucketCallback did_get_bucket_callback, - bool success) { +void QuotaManagerImpl::DidGetStorageKeysForBootstrap( + StorageKeysByType storage_keys_by_type) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - is_database_bootstrapped_for_eviction_ = success; - DidDatabaseWork(success); - GetLRUBucket(StorageType::kTemporary, std::move(did_get_bucket_callback)); + DCHECK(storage_key_gatherer_); + storage_key_gatherer_.reset(); + + PostTaskAndReplyWithResultForDBThread( + base::BindOnce(&BootstrapDatabaseOnDBThread, + std::move(storage_keys_by_type)), + base::BindOnce(&QuotaManagerImpl::DidBootstrapDatabase, + weak_factory_.GetWeakPtr()), + FROM_HERE, + /*is_bootstrap_task=*/true); +} + +void QuotaManagerImpl::DidBootstrapDatabase(QuotaError error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DidDatabaseWork(error != QuotaError::kDatabaseError); + + PostTaskAndReplyWithResultForDBThread( + base::BindOnce(&SetDatabaseBootstrappedOnDBThread), + base::BindOnce(&QuotaManagerImpl::DidSetDatabaseBootstrapped, + weak_factory_.GetWeakPtr()), + FROM_HERE, + /*is_bootstrap_task=*/true); +} + +void QuotaManagerImpl::DidSetDatabaseBootstrapped(QuotaError error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(is_bootstrapping_database_); + is_bootstrapping_database_ = false; + DidDatabaseWork(error != QuotaError::kDatabaseError); + + RunDatabaseCallbacks(); + StartEviction(); +} + +void QuotaManagerImpl::RunDatabaseCallbacks() { + for (auto& callback : database_callbacks_) + std::move(callback).Run(); + database_callbacks_.clear(); } void QuotaManagerImpl::RegisterClient( @@ -1741,15 +1861,17 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); EnsureDatabaseOpened(); - // TODO(crbug.com/1199417): Update bucket usage in UsageTracker once - // QuotaClient & UsageTracker operate by bucket. - if (callback) std::move(callback).Run(); if (db_disabled_) return; + // TODO(crbug.com/1199417): Update bucket usage in UsageTracker once + // QuotaClient & UsageTracker operate by bucket. UsageTracker should be + // updated after ensuring there is a entry in the QuotaDatabase. + // Run `callback` on completion. + PostTaskAndReplyWithResultForDBThread( base::BindOnce(&UpdateBucketModifiedTimeOnDBThread, bucket_id, modification_time), @@ -2122,7 +2244,6 @@ } void QuotaManagerImpl::GetEvictionBucket(StorageType type, - int64_t global_quota, GetBucketCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); EnsureDatabaseOpened(); @@ -2130,21 +2251,9 @@ DCHECK(!is_getting_eviction_bucket_); is_getting_eviction_bucket_ = true; - auto did_get_bucket_callback = - base::BindOnce(&QuotaManagerImpl::DidGetEvictionBucket, - weak_factory_.GetWeakPtr(), std::move(callback)); - - if (!is_database_bootstrapped_for_eviction_ && !eviction_disabled_) { - // Once bootstrapped, GetLRUBucket will be called. - GetGlobalUsage( - StorageType::kTemporary, - base::BindOnce(&QuotaManagerImpl::BootstrapDatabaseForEviction, - weak_factory_.GetWeakPtr(), - std::move(did_get_bucket_callback))); - return; - } - - GetLRUBucket(type, std::move(did_get_bucket_callback)); + GetLRUBucket(type, + base::BindOnce(&QuotaManagerImpl::DidGetEvictionBucket, + weak_factory_.GetWeakPtr(), std::move(callback))); } void QuotaManagerImpl::EvictBucketData(const BucketLocator& bucket, @@ -2421,29 +2530,25 @@ std::move(callback).Run(result.value(), type); } -void QuotaManagerImpl::PostTaskAndReplyWithResultForDBThread( - const base::Location& from_here, - base::OnceCallback<bool(QuotaDatabase*)> task, - base::OnceCallback<void(bool)> reply) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Deleting manager will post another task to DB sequence to delete - // |database_|, therefore we can be sure that database_ is alive when this - // task runs. - base::PostTaskAndReplyWithResult( - db_runner_.get(), from_here, - base::BindOnce(std::move(task), base::Unretained(database_.get())), - std::move(reply)); -} - template <typename ValueType> void QuotaManagerImpl::PostTaskAndReplyWithResultForDBThread( base::OnceCallback<QuotaErrorOr<ValueType>(QuotaDatabase*)> task, base::OnceCallback<void(QuotaErrorOr<ValueType>)> reply, - const base::Location& from_here) { + const base::Location& from_here, + bool is_bootstrap_task) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Deleting manager will post another task to DB sequence to delete // |database_|, therefore we can be sure that database_ is alive when this // task runs. + + if (!is_bootstrap_task && is_bootstrapping_database_) { + database_callbacks_.push_back(base::BindOnce( + &QuotaManagerImpl::PostTaskAndReplyWithResultForDBThread<ValueType>, + weak_factory_.GetWeakPtr(), std::move(task), std::move(reply), + from_here, is_bootstrap_task)); + return; + } + base::PostTaskAndReplyWithResult( db_runner_.get(), from_here, base::BindOnce(std::move(task), base::Unretained(database_.get())), @@ -2453,11 +2558,24 @@ void QuotaManagerImpl::PostTaskAndReplyWithResultForDBThread( base::OnceCallback<QuotaError(QuotaDatabase*)> task, base::OnceCallback<void(QuotaError)> reply, - const base::Location& from_here) { + const base::Location& from_here, + bool is_bootstrap_task) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Deleting manager will post another task to DB sequence to delete // |database_|, therefore we can be sure that database_ is alive when this // task runs. + + if (!is_bootstrap_task && is_bootstrapping_database_) { + database_callbacks_.push_back(base::BindOnce( + static_cast<void (QuotaManagerImpl::*)( + base::OnceCallback<QuotaError(QuotaDatabase*)>, + base::OnceCallback<void(QuotaError)>, const base::Location&, bool)>( + &QuotaManagerImpl::PostTaskAndReplyWithResultForDBThread), + weak_factory_.GetWeakPtr(), std::move(task), std::move(reply), + from_here, is_bootstrap_task)); + return; + } + base::PostTaskAndReplyWithResult( db_runner_.get(), from_here, base::BindOnce(std::move(task), base::Unretained(database_.get())),
diff --git a/storage/browser/quota/quota_manager_impl.h b/storage/browser/quota/quota_manager_impl.h index 7629b98..cb5ff40 100644 --- a/storage/browser/quota/quota_manager_impl.h +++ b/storage/browser/quota/quota_manager_impl.h
@@ -81,7 +81,6 @@ // Returns the next bucket to evict, or nullopt if there are no evictable // buckets. virtual void GetEvictionBucket(blink::mojom::StorageType type, - int64_t global_quota, GetBucketCallback callback) = 0; // Called to evict a bucket. @@ -420,6 +419,10 @@ void SetQuotaDatabaseForTesting(std::unique_ptr<QuotaDatabase> database); + void SetBootstrapDisabledForTesting(bool disable) { + bootstrap_disabled_for_testing_ = disable; + } + protected: ~QuotaManagerImpl() override; void SetQuotaChangeCallbackForTesting( @@ -438,6 +441,7 @@ class EvictionRoundInfoHelper; class UsageAndQuotaInfoGatherer; class GetUsageInfoTask; + class StorageKeyGathererTask; class BucketDataDeleter; class StorageKeyDataDeleter; class HostDataDeleter; @@ -462,6 +466,8 @@ using BucketTableEntry = QuotaDatabase::BucketTableEntry; using QuotaTableEntries = std::vector<QuotaTableEntry>; using BucketTableEntries = std::vector<BucketTableEntry>; + using StorageKeysByType = + base::flat_map<blink::mojom::StorageType, std::set<blink::StorageKey>>; using QuotaSettingsCallback = base::OnceCallback<void(const QuotaSettings&)>; @@ -485,13 +491,19 @@ // Initialize() must be called after all quota clients are added to the // manager by RegisterClient(). void EnsureDatabaseOpened(); - void DidOpenDatabase(bool is_database_bootstraped); - void BootstrapDatabaseForEviction(GetBucketCallback did_get_bucket_callback, - int64_t unused_usage, - int64_t unused_unlimited_usage); - void DidBootstrapDatabaseForEviction( - GetBucketCallback did_get_bucket_callback, - bool success); + + // Bootstraps database with storage keys that may not have been registered. + // Bootstrapping ensures that there is a bucket entry in the buckets table for + // all storage keys that have stored data by quota managed Storage APIs. Will + // queue calls to QuotaDatabase during bootstrap to be run after bootstrapping + // is complete. + void BootstrapDatabase(); + void DidGetBootstrapFlag(bool is_database_bootstrapped); + void DidGetStorageKeysForBootstrap(StorageKeysByType storage_keys_by_type); + void DidBootstrapDatabase(QuotaError error); + void DidSetDatabaseBootstrapped(QuotaError error); + // Runs all callbacks to QuotaDatabase that have been queued during bootstrap. + void RunDatabaseCallbacks(); // Called by clients via proxy. // Registers a quota client to the manager. @@ -547,7 +559,6 @@ // QuotaEvictionHandler. void GetEvictionBucket(blink::mojom::StorageType type, - int64_t global_quota, GetBucketCallback callback) override; void EvictBucketData(const BucketLocator& bucket, StatusCallback callback) override; @@ -611,28 +622,28 @@ absl::optional<int64_t> GetQuotaOverrideForStorageKey( const blink::StorageKey&); - // TODO(ayui): Replace instances to use result with QuotaErrorOr. - void PostTaskAndReplyWithResultForDBThread( - const base::Location& from_here, - base::OnceCallback<bool(QuotaDatabase*)> task, - base::OnceCallback<void(bool)> reply); - template <typename ValueType> void PostTaskAndReplyWithResultForDBThread( base::OnceCallback<QuotaErrorOr<ValueType>(QuotaDatabase*)> task, base::OnceCallback<void(QuotaErrorOr<ValueType>)> reply, - const base::Location& from_here = base::Location::Current()); + const base::Location& from_here = base::Location::Current(), + bool is_bootstrap_task = false); void PostTaskAndReplyWithResultForDBThread( base::OnceCallback<QuotaError(QuotaDatabase*)> task, base::OnceCallback<void(QuotaError)> reply, - const base::Location& from_here = base::Location::Current()); + const base::Location& from_here = base::Location::Current(), + bool is_bootstrap_task = false); static std::tuple<int64_t, int64_t> CallGetVolumeInfo( GetVolumeInfoFn get_volume_info_fn, const base::FilePath& path); static std::tuple<int64_t, int64_t> GetVolumeInfo(const base::FilePath& path); + bool is_bootstrapping_database_for_testing() { + return is_bootstrapping_database_; + } + bool is_db_disabled_for_testing() { return db_disabled_; } const bool is_incognito_; @@ -645,12 +656,17 @@ int db_error_count_ = 0; bool db_disabled_ = false; bool eviction_disabled_ = false; + bool bootstrap_disabled_for_testing_ = false; + absl::optional<blink::StorageKey> storage_key_for_pending_storage_pressure_callback_; scoped_refptr<base::SingleThreadTaskRunner> io_thread_; scoped_refptr<base::SequencedTaskRunner> db_runner_; mutable std::unique_ptr<QuotaDatabase> database_; - bool is_database_bootstrapped_for_eviction_ = false; + bool is_bootstrapping_database_ = false; + // Queued callbacks to QuotaDatabase that will run after database bootstrap is + // complete. + std::vector<base::OnceClosure> database_callbacks_; GetQuotaSettingsFunc get_settings_function_; scoped_refptr<base::TaskRunner> get_settings_task_runner_; @@ -730,6 +746,7 @@ std::unique_ptr<EvictionRoundInfoHelper> eviction_helper_; std::vector<std::unique_ptr<BucketDataDeleter>> bucket_data_deleters_; + std::unique_ptr<StorageKeyGathererTask> storage_key_gatherer_; SEQUENCE_CHECKER(sequence_checker_);
diff --git a/storage/browser/quota/quota_manager_unittest.cc b/storage/browser/quota/quota_manager_unittest.cc index 4d5a2de..8fe6be7 100644 --- a/storage/browser/quota/quota_manager_unittest.cc +++ b/storage/browser/quota/quota_manager_unittest.cc
@@ -452,9 +452,8 @@ // The quota manager's default eviction policy is to use an LRU eviction // policy. quota_manager_impl_->GetEvictionBucket( - type, 0, - base::BindOnce(&QuotaManagerImplTest::DidGetEvictionBucket, - weak_factory_.GetWeakPtr())); + type, base::BindOnce(&QuotaManagerImplTest::DidGetEvictionBucket, + weak_factory_.GetWeakPtr())); } void GetBucketsModifiedBetween(StorageType type, @@ -649,6 +648,10 @@ quota_manager_impl_->SetQuotaDatabaseForTesting(std::move(database)); } + bool is_db_bootstrapping() { + return quota_manager_impl_->is_bootstrapping_database_for_testing(); + } + bool is_db_disabled() { return quota_manager_impl_->is_db_disabled_for_testing(); } @@ -657,6 +660,10 @@ quota_manager_impl_->database_->SetDisabledForTesting(disable); } + void disable_database_bootstrap(bool disable) { + quota_manager_impl_->SetBootstrapDisabledForTesting(disable); + } + QuotaStatusCode status() const { return quota_status_; } const UsageInfoEntries& usage_info() const { return usage_info_; } int64_t usage() const { return usage_; } @@ -719,6 +726,48 @@ base::WeakPtrFactory<QuotaManagerImplTest> weak_factory_{this}; }; +TEST_F(QuotaManagerImplTest, QuotaDatabaseBootstrap) { + static const MockStorageKeyData kData1[] = { + {"http://foo.com/", kTemp, 10}, + {"http://foo.com:8080/", kTemp, 15}, + {"http://bar.com/", kPerm, 50}, + }; + static const MockStorageKeyData kData2[] = { + {"https://foo.com/", kTemp, 30}, + {"https://foo.com:8081/", kTemp, 35}, + {"http://example.com/", kPerm, 40}, + }; + CreateAndRegisterClient(kData1, QuotaClientType::kFileSystem, + {blink::mojom::StorageType::kTemporary, + blink::mojom::StorageType::kPersistent}); + CreateAndRegisterClient(kData2, QuotaClientType::kDatabase, + {blink::mojom::StorageType::kTemporary, + blink::mojom::StorageType::kPersistent}); + + // OpenDatabase should trigger database bootstrapping. + OpenDatabase(); + EXPECT_TRUE(is_db_bootstrapping()); + + // When bootstrapping is complete, queued calls to the QuotaDatabase + // should return successfully and buckets for registered storage keys should + // already exist. + GetBucket(ToStorageKey("http://foo.com/"), kDefaultBucketName, kTemp); + EXPECT_FALSE(is_db_bootstrapping()); + ASSERT_TRUE(bucket_.ok()); + + GetBucket(ToStorageKey("http://foo.com:8080/"), kDefaultBucketName, kTemp); + ASSERT_TRUE(bucket_.ok()); + + GetBucket(ToStorageKey("https://foo.com:8081/"), kDefaultBucketName, kTemp); + ASSERT_TRUE(bucket_.ok()); + + GetBucket(ToStorageKey("http://bar.com/"), kDefaultBucketName, kPerm); + ASSERT_TRUE(bucket_.ok()); + + GetBucket(ToStorageKey("http://example.com/"), kDefaultBucketName, kPerm); + ASSERT_TRUE(bucket_.ok()); +} + TEST_F(QuotaManagerImplTest, GetUsageInfo) { static const MockStorageKeyData kData1[] = { {"http://foo.com/", kTemp, 10}, @@ -749,6 +798,7 @@ } TEST_F(QuotaManagerImplTest, DatabaseDisabledAfterThreshold) { + disable_database_bootstrap(true); OpenDatabase(); // Disable quota database for database error behavior. @@ -833,6 +883,7 @@ } TEST_F(QuotaManagerImplTest, GetStorageKeysForTypeWithDatabaseError) { + disable_database_bootstrap(true); OpenDatabase(); // Disable quota database for database error behavior. @@ -1908,19 +1959,18 @@ } TEST_F(QuotaManagerImplTest, EvictBucketDataHistogram) { - const StorageKey kStorageKey = ToStorageKey("http://foo.com/"); static const MockStorageKeyData kData[] = { {"http://foo.com/", kTemp, 1}, + {"http://bar.com/", kTemp, 1}, }; base::HistogramTester histograms; - MockQuotaClient* client = - CreateAndRegisterClient(kData, QuotaClientType::kFileSystem, - {blink::mojom::StorageType::kTemporary}); + CreateAndRegisterClient(kData, QuotaClientType::kFileSystem, + {blink::mojom::StorageType::kTemporary}); GetGlobalUsage(kTemp); - CreateBucketForTesting(kStorageKey, kDefaultBucketName, kTemp); + GetBucket(ToStorageKey("http://foo.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); EvictBucketData(bucket_->ToBucketLocator()); @@ -1934,15 +1984,16 @@ histograms.ExpectTotalCount( QuotaManagerImpl::kEvictedBucketDaysSinceAccessHistogram, 1); - client->AddStorageKeyAndNotify(kStorageKey, kTemp, 100); - - // Change the use count of the storage key. - quota_manager_impl()->NotifyStorageAccessed(kStorageKey, kTemp, - base::Time::Now()); + // Change the use count. + quota_manager_impl()->NotifyStorageAccessed(ToStorageKey("http://bar.com/"), + kTemp, base::Time::Now()); task_environment_.RunUntilIdle(); GetGlobalUsage(kTemp); + GetBucket(ToStorageKey("http://bar.com"), kDefaultBucketName, kTemp); + ASSERT_TRUE(bucket_.ok()); + EvictBucketData(bucket_->ToBucketLocator()); task_environment_.RunUntilIdle(); @@ -2212,13 +2263,13 @@ const int64_t predelete_bar_tmp = usage(); GetGlobalUsage(kPerm); - const int64_t predelete_global_pers = usage(); + EXPECT_EQ((1000 + 10 + 1), usage()); GetHostUsageWithBreakdown("foo.com", kPerm); - const int64_t predelete_foo_pers = usage(); + EXPECT_EQ((10 + 1), usage()); GetHostUsageWithBreakdown("bar.com", kPerm); - const int64_t predelete_bar_pers = usage(); + EXPECT_EQ(1000, usage()); reset_status_callback_count(); DeleteHostData("foo.com", kPerm, AllQuotaClientTypes()); @@ -2231,7 +2282,7 @@ task_environment_.RunUntilIdle(); for (const auto& entry : bucket_entries()) { - if (entry.type != kTemp) + if (entry.type != kPerm) continue; EXPECT_NE(std::string("http://foo.com/"), @@ -2254,13 +2305,13 @@ EXPECT_EQ(predelete_bar_tmp, usage()); GetGlobalUsage(kPerm); - EXPECT_EQ(predelete_global_pers - (1 + 10 + 1000), usage()); + EXPECT_EQ(0, usage()); GetHostUsageWithBreakdown("foo.com", kPerm); - EXPECT_EQ(predelete_foo_pers - (1 + 10), usage()); + EXPECT_EQ(0, usage()); GetHostUsageWithBreakdown("bar.com", kPerm); - EXPECT_EQ(predelete_bar_pers - 1000, usage()); + EXPECT_EQ(0, usage()); } TEST_F(QuotaManagerImplTest, DeleteBucketNoClients) { @@ -2292,13 +2343,11 @@ {blink::mojom::StorageType::kTemporary, blink::mojom::StorageType::kPersistent}); - CreateBucketForTesting(ToStorageKey("http://foo.com"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://foo.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo foo_temp_bucket = bucket_.value(); - CreateBucketForTesting(ToStorageKey("http://bar.com"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://bar.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo bar_temp_bucket = bucket_.value(); @@ -2383,13 +2432,11 @@ CreateAndRegisterClient(kData2, QuotaClientType::kDatabase, {blink::mojom::StorageType::kTemporary}); - CreateBucketForTesting(ToStorageKey("http://foo.com/"), kDefaultBucketName, - kPerm); + GetBucket(ToStorageKey("http://foo.com/"), kDefaultBucketName, kPerm); ASSERT_TRUE(bucket_.ok()); BucketInfo foo_perm_bucket = bucket_.value(); - CreateBucketForTesting(ToStorageKey("http://bar.com/"), kDefaultBucketName, - kPerm); + GetBucket(ToStorageKey("http://bar.com/"), kDefaultBucketName, kPerm); ASSERT_TRUE(bucket_.ok()); BucketInfo bar_perm_bucket = bucket_.value(); @@ -2476,13 +2523,11 @@ {blink::mojom::StorageType::kTemporary, blink::mojom::StorageType::kPersistent}); - CreateBucketForTesting(ToStorageKey("http://foo.com"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://foo.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo foo_bucket = bucket_.value(); - CreateBucketForTesting(ToStorageKey("http://bar.com"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://bar.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo bar_bucket = bucket_.value(); @@ -2610,36 +2655,29 @@ TEST_F(QuotaManagerImplTest, NotifyAndLRUBucket) { static const MockStorageKeyData kData[] = { - {"http://a.com/", kTemp, 0}, {"http://a.com:1/", kTemp, 0}, - {"https://a.com/", kTemp, 0}, {"http://b.com/", kPerm, 0}, // persistent + {"http://a.com/", kTemp, 0}, + {"http://a.com:1/", kTemp, 0}, + {"http://b.com/", kPerm, 0}, // persistent {"http://c.com/", kTemp, 0}, }; CreateAndRegisterClient(kData, QuotaClientType::kFileSystem, {blink::mojom::StorageType::kTemporary, blink::mojom::StorageType::kPersistent}); - GetEvictionBucket(kTemp); - task_environment_.RunUntilIdle(); - EXPECT_FALSE(eviction_bucket().has_value()); - - NotifyStorageAccessed(ToStorageKey("http://a.com/"), kTemp); - GetEvictionBucket(kTemp); - task_environment_.RunUntilIdle(); - EXPECT_EQ("http://a.com/", - eviction_bucket()->storage_key.origin().GetURL().spec()); - NotifyStorageAccessed(ToStorageKey("http://b.com/"), kPerm); - NotifyStorageAccessed(ToStorageKey("https://a.com/"), kTemp); + NotifyStorageAccessed(ToStorageKey("http://a.com/"), kTemp); NotifyStorageAccessed(ToStorageKey("http://c.com/"), kTemp); + task_environment_.RunUntilIdle(); + GetEvictionBucket(kTemp); task_environment_.RunUntilIdle(); - EXPECT_EQ("http://a.com/", + EXPECT_EQ("http://a.com:1/", eviction_bucket()->storage_key.origin().GetURL().spec()); DeleteBucketData(*eviction_bucket(), AllQuotaClientTypes()); GetEvictionBucket(kTemp); task_environment_.RunUntilIdle(); - EXPECT_EQ("https://a.com/", + EXPECT_EQ("http://a.com/", eviction_bucket()->storage_key.origin().GetURL().spec()); DeleteBucketData(*eviction_bucket(), AllQuotaClientTypes()); @@ -2702,7 +2740,7 @@ blink::mojom::StorageType::kPersistent}); GetBucketsModifiedBetween(kTemp, base::Time(), base::Time::Max()); - EXPECT_TRUE(modified_buckets().empty()); + EXPECT_EQ(4U, modified_buckets().size()); EXPECT_EQ(modified_buckets_type(), kTemp); base::Time time1 = client->IncrementMockTime(); @@ -2744,6 +2782,7 @@ } TEST_F(QuotaManagerImplTest, GetBucketsModifiedBetweenWithDatabaseError) { + disable_database_bootstrap(true); OpenDatabase(); // Disable quota database for database error behavior. @@ -2775,12 +2814,16 @@ } TEST_F(QuotaManagerImplTest, DumpBucketTable) { - quota_manager_impl()->NotifyStorageAccessed( - ToStorageKey("http://example.com/"), kTemp, base::Time::Now()); - quota_manager_impl()->NotifyStorageAccessed( - ToStorageKey("http://example.com/"), kPerm, base::Time::Now()); - quota_manager_impl()->NotifyStorageAccessed( - ToStorageKey("http://example.com/"), kPerm, base::Time::Now()); + const StorageKey kStorageKey = ToStorageKey("http://example.com/"); + CreateBucketForTesting(kStorageKey, kDefaultBucketName, kTemp); + CreateBucketForTesting(kStorageKey, kDefaultBucketName, kPerm); + + quota_manager_impl()->NotifyStorageAccessed(kStorageKey, kTemp, + base::Time::Now()); + quota_manager_impl()->NotifyStorageAccessed(kStorageKey, kPerm, + base::Time::Now()); + quota_manager_impl()->NotifyStorageAccessed(kStorageKey, kPerm, + base::Time::Now()); task_environment_.RunUntilIdle(); DumpBucketTable(); @@ -2788,10 +2831,8 @@ EXPECT_THAT(bucket_entries(), testing::UnorderedElementsAre( - MatchesBucketTableEntry(ToStorageKey("http://example.com/"), - kTemp, 1), - MatchesBucketTableEntry(ToStorageKey("http://example.com/"), - kPerm, 2))); + MatchesBucketTableEntry(kStorageKey, kTemp, 1), + MatchesBucketTableEntry(kStorageKey, kPerm, 2))); } TEST_F(QuotaManagerImplTest, QuotaForEmptyHost) { @@ -2827,8 +2868,7 @@ CreateAndRegisterClient(kData4, QuotaClientType::kIndexedDatabase, {blink::mojom::StorageType::kTemporary}); - CreateBucketForTesting(ToStorageKey("http://foo.com"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://foo.com"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo foo_bucket = bucket_.value(); @@ -2923,8 +2963,7 @@ CreateAndRegisterClient(kData4, QuotaClientType::kIndexedDatabase, {blink::mojom::StorageType::kTemporary}); - CreateBucketForTesting(ToStorageKey("http://foo.com/"), kDefaultBucketName, - kTemp); + GetBucket(ToStorageKey("http://foo.com/"), kDefaultBucketName, kTemp); ASSERT_TRUE(bucket_.ok()); BucketInfo foo_bucket = bucket_.value();
diff --git a/storage/browser/quota/quota_temporary_storage_evictor.cc b/storage/browser/quota/quota_temporary_storage_evictor.cc index 38faa8a..8962a7d 100644 --- a/storage/browser/quota/quota_temporary_storage_evictor.cc +++ b/storage/browser/quota/quota_temporary_storage_evictor.cc
@@ -196,7 +196,7 @@ // TODO(michaeln): if the reason for eviction is low physical disk space, // make 'unlimited' storage keys subject to eviction too. quota_eviction_handler_->GetEvictionBucket( - blink::mojom::StorageType::kTemporary, settings.pool_size, + blink::mojom::StorageType::kTemporary, base::BindOnce(&QuotaTemporaryStorageEvictor::OnGotEvictionBucket, weak_factory_.GetWeakPtr())); return;
diff --git a/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc b/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc index ab8e9fc..9abddf32 100644 --- a/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc +++ b/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc
@@ -63,7 +63,6 @@ } void GetEvictionBucket(StorageType type, - int64_t global_quota, GetBucketCallback callback) override { if (bucket_order_.empty()) { std::move(callback).Run(absl::nullopt);
diff --git a/testing/scripts/content_shell_crash_test.py b/testing/scripts/content_shell_crash_test.py index 72318cf..fe3515a7 100755 --- a/testing/scripts/content_shell_crash_test.py +++ b/testing/scripts/content_shell_crash_test.py
@@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env vpython3 # Copyright 2017 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file.
diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation.cc index f6c3bad6..2126b51 100644 --- a/third_party/blink/renderer/core/frame/deprecation.cc +++ b/third_party/blink/renderer/core/frame/deprecation.cc
@@ -672,7 +672,7 @@ case WebFeature::kPaymentRequestShowWithoutGesture: return DeprecationInfo::WithFeatureAndChromeStatusID( - "PaymentRequestShowWithoutGesture", kM99, + "PaymentRequestShowWithoutGesture", kM100, "Calling PaymentRequest.show() without user activation", "5948593429020672");
diff --git a/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc b/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc index f874923..7e90af56 100644 --- a/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc +++ b/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc
@@ -957,14 +957,25 @@ if (!client) return; - if (!client->GetCaretBoundsFromFocusedPlugin(rect)) { - // When request range is invalid we will try to obtain it from current - // frame selection. The fallback value will be 0. - uint32_t start = range.IsValid() ? range.start() - : GetCurrentCursorPositionInFrame(frame_); + WebPluginContainerImpl* plugin_container = frame_->GetWebPluginContainer(); + if (plugin_container) { + // Pepper-free PDF will reach here. + FrameWidget* frame_widget = frame_->GetWidgetForLocalRoot(); + rect = frame_widget->BlinkSpaceToEnclosedDIPs( + plugin_container->Plugin()->GetPluginCaretBounds()); + } else { + // TODO(crbug.com/702990): Remove `pepper_has_caret` once pepper is removed. + bool pepper_has_caret = client->GetCaretBoundsFromFocusedPlugin(rect); + if (!pepper_has_caret) { + // When request range is invalid we will try to obtain it from current + // frame selection. The fallback value will be 0. + uint32_t start = range.IsValid() + ? range.start() + : GetCurrentCursorPositionInFrame(frame_); - WebLocalFrameImpl::FromFrame(frame_)->FirstRectForCharacterRange( - start, range.length(), rect); + WebLocalFrameImpl::FromFrame(frame_)->FirstRectForCharacterRange( + start, range.length(), rect); + } } TextInputHost().GotFirstRectForRange(rect);
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc index 8247f6a..470027b 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.cc
@@ -242,8 +242,7 @@ cell_block_constraints->push_back(cell_block_constraint); is_constrained |= cell_block_constraint.is_constrained && rowspan == 1; row_baseline_tabulator.ProcessCell( - fragment, cell_block_constraint.min_block_size, - NGTableAlgorithmUtils::IsBaseline(cell_style.VerticalAlign()), + fragment, NGTableAlgorithmUtils::IsBaseline(cell_style.VerticalAlign()), is_parallel, rowspan > 1, layout_result->HasDescendantThatDependsOnPercentageBlockSize()); @@ -682,7 +681,6 @@ void NGRowBaselineTabulator::ProcessCell( const NGBoxFragment& fragment, - const LayoutUnit cell_min_block_size, const bool is_baseline_aligned, const bool is_parallel, const bool is_rowspanned, @@ -700,7 +698,7 @@ } else { max_cell_descent_ = std::max(max_cell_descent_.value_or(LayoutUnit::Min()), - cell_min_block_size - cell_baseline); + fragment.BlockSize() - cell_baseline); } }
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h index 4b91e617..16af3604 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm_utils.h
@@ -116,7 +116,6 @@ class NGRowBaselineTabulator { public: void ProcessCell(const NGBoxFragment& fragment, - const LayoutUnit cell_min_block_size, bool is_baseline_aligned, bool is_parallel, bool is_rowspanned,
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc index eb13896a..15494bd 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_row_layout_algorithm.cc
@@ -20,43 +20,49 @@ scoped_refptr<const NGLayoutResult> NGTableRowLayoutAlgorithm::Layout() { const NGTableConstraintSpaceData& table_data = *ConstraintSpace().TableData(); - wtf_size_t row_index = ConstraintSpace().TableRowIndex(); + const auto& row = table_data.rows[ConstraintSpace().TableRowIndex()]; - auto CreateCellConstraintSpace = [this, &table_data]( + auto CreateCellConstraintSpace = [this, &row, &table_data]( NGBlockNode cell, wtf_size_t cell_index, absl::optional<LayoutUnit> row_baseline, - bool row_is_collapsed, - wtf_size_t* cell_location_start_column) { + LayoutUnit* cell_inline_offset = + nullptr) { const wtf_size_t start_column = table_data.cells[cell_index].start_column; const wtf_size_t end_column = std::min(start_column + cell.TableCellColspan() - 1, table_data.column_locations.size() - 1); - *cell_location_start_column = start_column; - // When columns spanned by the cell are collapsed, cell geometry is defined - // by: - // - start edge of first non-collapsed column. - // - end edge of the last non-collapsed column. - // - if all columns are collapsed, cell_inline_size is defined by edges - // of last column. Picking last column is arbitrary, any spanned column - // would work, as all spanned columns define the same geometry: same - // location, width: 0. + + // When columns spanned by the cell are collapsed, the cell geometry is + // defined by: + // - The start edge of the first non-collapsed column. + // - The end edge of the last non-collapsed column. + // - If all columns are collapsed, the |cell_inline_size| is defined by the + // edges of the last column. Picking last column is arbitrary, any + // spanned column would work, as all spanned columns define the same + // geometry: same location, zero width. + wtf_size_t cell_location_start_column = start_column; while ( - table_data.column_locations[*cell_location_start_column].is_collapsed && - *cell_location_start_column < end_column) - (*cell_location_start_column)++; + table_data.column_locations[cell_location_start_column].is_collapsed && + cell_location_start_column < end_column) + cell_location_start_column++; wtf_size_t cell_location_end_column = end_column; while (table_data.column_locations[cell_location_end_column].is_collapsed && - cell_location_end_column > *cell_location_start_column) + cell_location_end_column > cell_location_start_column) cell_location_end_column--; + if (cell_inline_offset) { + *cell_inline_offset = + table_data.column_locations[cell_location_start_column].offset; + } + const NGTableConstraintSpaceData::Cell& cell_data = table_data.cells[cell_index]; const LayoutUnit cell_inline_size = table_data.column_locations[cell_location_end_column].offset + table_data.column_locations[cell_location_end_column].inline_size - - table_data.column_locations[*cell_location_start_column].offset; + table_data.column_locations[cell_location_start_column].offset; const LayoutUnit cell_block_size = - row_is_collapsed ? LayoutUnit() : cell_data.block_size; + row.is_collapsed ? LayoutUnit() : cell_data.block_size; // Our initial block-size is definite if this cell has a fixed block-size, // or we have grown and the table has a specified block-size. @@ -65,8 +71,8 @@ (cell_data.has_grown && table_data.is_table_block_size_specified); const bool is_hidden_for_paint = - table_data.column_locations[*cell_location_start_column].is_collapsed && - *cell_location_start_column == cell_location_end_column; + table_data.column_locations[cell_location_start_column].is_collapsed && + cell_location_start_column == cell_location_end_column; return NGTableAlgorithmUtils::CreateTableCellConstraintSpace( table_data.table_writing_direction, cell, cell_data.border_box_borders, @@ -76,10 +82,9 @@ table_data.has_collapsed_borders, NGCacheSlot::kLayout); }; - const NGTableConstraintSpaceData::Row& row = table_data.rows[row_index]; - // Cell with perecentage block size descendants can layout with - // size that differs from its intrinsic size. This might cause - // row baseline to move, if cell was baseline-aligned. + // A cell with perecentage block-size descendants can layout with size that + // differs from its intrinsic size. This might cause row baseline to move, if + // cell was baseline-aligned. // To compute correct baseline, we need to do an initial layout pass. WritingMode table_writing_mode = ConstraintSpace().GetWritingMode(); LayoutUnit row_baseline = row.baseline; @@ -90,18 +95,15 @@ cell = To<NGBlockNode>(cell.NextSibling()), ++cell_index) { bool is_parallel = IsParallelWritingMode(table_writing_mode, cell.Style().GetWritingMode()); - wtf_size_t cell_location_start_column; - - NGConstraintSpace cell_constraint_space = CreateCellConstraintSpace( - cell, cell_index, absl::nullopt, row.is_collapsed, - &cell_location_start_column); + NGConstraintSpace cell_constraint_space = + CreateCellConstraintSpace(cell, cell_index, absl::nullopt); scoped_refptr<const NGLayoutResult> layout_result = cell.Layout(cell_constraint_space); NGBoxFragment fragment( table_data.table_writing_direction, To<NGPhysicalBoxFragment>(layout_result->PhysicalFragment())); row_baseline_tabulator.ProcessCell( - fragment, row.block_size, + fragment, NGTableAlgorithmUtils::IsBaseline(cell.Style().VerticalAlign()), is_parallel, cell.TableCellRowspan() > 1, layout_result->HasDescendantThatDependsOnPercentageBlockSize()); @@ -114,24 +116,22 @@ NGRowBaselineTabulator row_baseline_tabulator; for (NGBlockNode cell = To<NGBlockNode>(Node().FirstChild()); cell; cell = To<NGBlockNode>(cell.NextSibling()), ++cell_index) { - wtf_size_t cell_location_start_column; + LayoutUnit cell_inline_offset; NGConstraintSpace cell_constraint_space = CreateCellConstraintSpace( - cell, cell_index, row_baseline, row.is_collapsed, - &cell_location_start_column); + cell, cell_index, row_baseline, &cell_inline_offset); scoped_refptr<const NGLayoutResult> cell_result = cell.Layout(cell_constraint_space); - LogicalOffset cell_offset( - table_data.column_locations[cell_location_start_column].offset - - table_data.table_border_spacing.inline_size, - LayoutUnit()); - container_builder_.AddResult(*cell_result, cell_offset); + container_builder_.AddResult( + *cell_result, + {cell_inline_offset - table_data.table_border_spacing.inline_size, + LayoutUnit()}); NGBoxFragment fragment( table_data.table_writing_direction, To<NGPhysicalBoxFragment>(cell_result->PhysicalFragment())); bool is_parallel = IsParallelWritingMode(table_writing_mode, cell.Style().GetWritingMode()); row_baseline_tabulator.ProcessCell( - fragment, row.block_size, + fragment, NGTableAlgorithmUtils::IsBaseline(cell.Style().VerticalAlign()), is_parallel, cell.TableCellRowspan() > 1, cell_result->HasDescendantThatDependsOnPercentageBlockSize());
diff --git a/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc b/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc index 5b203b7..420d0c7 100644 --- a/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc +++ b/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc
@@ -7,6 +7,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-blink.h" #include "third_party/blink/public/platform/web_vector.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_css_style_sheet_init.h" #include "third_party/blink/renderer/core/css/css_style_sheet.h" @@ -64,7 +65,16 @@ v8::Local<v8::Value>(), settings_object, params.SourceURL(), KURL(), ScriptFetchOptions(), error); } - v8::Local<v8::Value> v8_value_stylesheet = ToV8(style_sheet, script_state); + v8::Local<v8::Value> v8_value_stylesheet; + if (!ToV8Traits<CSSStyleSheet>::ToV8(script_state, style_sheet) + .ToLocal(&v8_value_stylesheet)) { + v8::Local<v8::Value> error = exception_state.GetException(); + exception_state.ClearException(); + return ValueWrapperSyntheticModuleScript::CreateWithError( + v8::Local<v8::Value>(), settings_object, params.SourceURL(), KURL(), + ScriptFetchOptions(), error); + }; + return ValueWrapperSyntheticModuleScript::CreateWithDefaultExport( v8_value_stylesheet, settings_object, params.SourceURL(), KURL(), ScriptFetchOptions());
diff --git a/third_party/blink/renderer/core/xml/xpath_step.cc b/third_party/blink/renderer/core/xml/xpath_step.cc index bf7cc05..3522b768 100644 --- a/third_party/blink/renderer/core/xml/xpath_step.cc +++ b/third_party/blink/renderer/core/xml/xpath_step.cc
@@ -295,7 +295,7 @@ case kParentAxis: if (auto* attr = DynamicTo<Attr>(context)) { Element* n = attr->ownerElement(); - if (NodeMatches(evaluation_context, n, kParentAxis, GetNodeTest())) + if (n && NodeMatches(evaluation_context, n, kParentAxis, GetNodeTest())) nodes.Append(n); } else { ContainerNode* n = context->parentNode();
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc index 249847c..a020d1e 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc
@@ -75,8 +75,8 @@ unparsed_font_(defaultFont), unparsed_css_filter_(defaultFilter), text_align_(kStartTextAlign), - unparsed_letter_spacing_(defaultSpacing), - unparsed_word_spacing_(defaultSpacing), + parsed_letter_spacing_(defaultSpacing), + parsed_word_spacing_(defaultSpacing), realized_font_(false), is_transform_invertible_(true), has_clip_(false), @@ -771,7 +771,7 @@ void CanvasRenderingContext2DState::SetLetterSpacing( const String& letter_spacing) { DCHECK(realized_font_); - if (unparsed_letter_spacing_ == letter_spacing) + if (parsed_letter_spacing_ == letter_spacing) return; float num_spacing; CSSPrimitiveValue::UnitType unit; @@ -783,13 +783,16 @@ letter_spacing_unit_ = unit; letter_spacing_ = num_spacing; - unparsed_letter_spacing_ = letter_spacing; + StringBuilder builder; + builder.AppendNumber(num_spacing); + builder.Append(CSSPrimitiveValue::UnitTypeToString(unit)); + parsed_letter_spacing_ = builder.ToString(); SetFont(GetFontDescription(), font_.GetFontSelector()); } void CanvasRenderingContext2DState::SetWordSpacing(const String& word_spacing) { DCHECK(realized_font_); - if (unparsed_word_spacing_ == word_spacing) + if (parsed_word_spacing_ == word_spacing) return; float num_spacing; CSSPrimitiveValue::UnitType unit; @@ -801,7 +804,10 @@ word_spacing_unit_ = unit; word_spacing_ = num_spacing; - unparsed_word_spacing_ = word_spacing; + StringBuilder builder; + builder.AppendNumber(num_spacing); + builder.Append(CSSPrimitiveValue::UnitTypeToString(unit)); + parsed_word_spacing_ = builder.ToString(); SetFont(GetFontDescription(), font_.GetFontSelector()); }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h index acf8dc7..9326e7c 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h
@@ -160,10 +160,10 @@ TextBaseline GetTextBaseline() const { return text_baseline_; } void SetLetterSpacing(const String& letter_spacing); - String GetLetterSpacing() const { return unparsed_letter_spacing_; } + String GetLetterSpacing() const { return parsed_letter_spacing_; } void SetWordSpacing(const String& word_spacing); - String GetWordSpacing() const { return unparsed_word_spacing_; } + String GetWordSpacing() const { return parsed_word_spacing_; } void SetTextRendering(TextRenderingMode text_rendering, FontSelector* selector); @@ -305,12 +305,12 @@ float letter_spacing_{0}; CSSPrimitiveValue::UnitType letter_spacing_unit_{ CSSPrimitiveValue::UnitType::kPixels}; - String unparsed_letter_spacing_; + String parsed_letter_spacing_; float word_spacing_{0}; CSSPrimitiveValue::UnitType word_spacing_unit_{ CSSPrimitiveValue::UnitType::kPixels}; - String unparsed_word_spacing_; + String parsed_word_spacing_; TextRenderingMode text_rendering_mode_{TextRenderingMode::kAutoTextRendering}; FontDescription::Kerning font_kerning_{FontDescription::kAutoKerning}; FontSelectionValue font_stretch_{NormalWidthValue()};
diff --git a/third_party/blink/renderer/modules/webmidi/midi_port.cc b/third_party/blink/renderer/modules/webmidi/midi_port.cc index 843e275..c72bd18 100644 --- a/third_party/blink/renderer/modules/webmidi/midi_port.cc +++ b/third_party/blink/renderer/modules/webmidi/midi_port.cc
@@ -32,6 +32,7 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/frame/web_feature.h" #include "third_party/blink/renderer/modules/webmidi/midi_access.h" @@ -235,9 +236,9 @@ } ScriptPromise MIDIPort::Accept(ScriptState* script_state) { - return ScriptPromise::Cast(script_state, - ToV8(this, script_state->GetContext()->Global(), - script_state->GetIsolate())); + return ScriptPromise::Cast( + script_state, + ToV8Traits<MIDIPort>::ToV8(script_state, this).ToLocalChecked()); } void MIDIPort::SetStates(PortState state, ConnectionState connection) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_response.h b/third_party/blink/renderer/platform/loader/fetch/resource_response.h index 84a9b4a..d892d0cf 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_response.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
@@ -606,8 +606,8 @@ absl::optional<base::UnguessableToken> recursive_prefetch_token_; // Any DNS aliases for the requested URL, as read from CNAME records. - // The alias chain order is preserved in reverse, from canonical name (i.e. - // address record name) through to query name. + // Includes all known aliases, e.g. from A, AAAA, or HTTPS, not just from the + // address used for the connection, in no particular order. Vector<String> dns_aliases_; // The URL of WebBundle this response was loaded from. This value is only
diff --git a/third_party/blink/web_tests/external/wpt/domxpath/xpath-evaluate-crash.html b/third_party/blink/web_tests/external/wpt/domxpath/xpath-evaluate-crash.html new file mode 100644 index 0000000..d322549 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/domxpath/xpath-evaluate-crash.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel=author href="mailto:jarhar@chromium.org"> +<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=1236967"> + +<body> +<script> +const domParser = new DOMParser(); +const doc = domParser.parseFromString(undefined, 'text/html', {includeShadowRoots: false}); +const attribute = doc.createAttribute("test"); +new XPathEvaluator().evaluate("..", attribute, null, 2, null); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.html index 35f25875..b5a411e 100644 --- a/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.html +++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.html
@@ -35,6 +35,11 @@ _assertSame(ctx.letterSpacing, '-1px', "ctx.letterSpacing", "'-1px'"); _assertSame(ctx.wordSpacing, '-1px', "ctx.wordSpacing", "'-1px'"); +ctx.letterSpacing = '1PX'; +ctx.wordSpacing = '1EM'; +_assertSame(ctx.letterSpacing, '1px', "ctx.letterSpacing", "'1px'"); +_assertSame(ctx.wordSpacing, '1em', "ctx.wordSpacing", "'1em'"); + }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.html b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.html index 43e959f..ea480c46 100644 --- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.html +++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.html
@@ -35,6 +35,11 @@ ctx.wordSpacing = '-1px'; _assertSame(ctx.letterSpacing, '-1px', "ctx.letterSpacing", "'-1px'"); _assertSame(ctx.wordSpacing, '-1px', "ctx.wordSpacing", "'-1px'"); + +ctx.letterSpacing = '1PX'; +ctx.wordSpacing = '1EM'; +_assertSame(ctx.letterSpacing, '1px', "ctx.letterSpacing", "'1px'"); +_assertSame(ctx.wordSpacing, '1em', "ctx.wordSpacing", "'1em'"); t.done(); });
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.worker.js b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.worker.js index 6bf7c13..a413f92 100644 --- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.worker.js +++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.worker.js
@@ -31,6 +31,11 @@ ctx.wordSpacing = '-1px'; _assertSame(ctx.letterSpacing, '-1px', "ctx.letterSpacing", "'-1px'"); _assertSame(ctx.wordSpacing, '-1px', "ctx.wordSpacing", "'-1px'"); + +ctx.letterSpacing = '1PX'; +ctx.wordSpacing = '1EM'; +_assertSame(ctx.letterSpacing, '1px', "ctx.letterSpacing", "'1px'"); +_assertSame(ctx.wordSpacing, '1em', "ctx.wordSpacing", "'1em'"); t.done(); });
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml index 8f08c5e..846c3f9 100644 --- a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml +++ b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
@@ -759,6 +759,11 @@ @assert ctx.letterSpacing === '-1px'; @assert ctx.wordSpacing === '-1px'; + ctx.letterSpacing = '1PX'; + ctx.wordSpacing = '1EM'; + @assert ctx.letterSpacing === '1px'; + @assert ctx.wordSpacing === '1em'; + - name: 2d.text.drawing.style.nonfinite.spacing desc: Testing letter spacing and word spacing with nonfinite inputs testing:
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/offscreen/text.yaml b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/offscreen/text.yaml index b65dbe6..9713626 100644 --- a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/offscreen/text.yaml +++ b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml/offscreen/text.yaml
@@ -1278,6 +1278,11 @@ ctx.wordSpacing = '-1px'; @assert ctx.letterSpacing === '-1px'; @assert ctx.wordSpacing === '-1px'; + + ctx.letterSpacing = '1PX'; + ctx.wordSpacing = '1EM'; + @assert ctx.letterSpacing === '1px'; + @assert ctx.wordSpacing === '1em'; t.done(); - name: 2d.text.drawing.style.nonfinite.spacing
diff --git a/third_party/wpt_tools/README.chromium b/third_party/wpt_tools/README.chromium index b8b4ab7..6eb905745 100644 --- a/third_party/wpt_tools/README.chromium +++ b/third_party/wpt_tools/README.chromium
@@ -1,7 +1,7 @@ Name: web-platform-tests - Test Suites for Web Platform specifications Short Name: wpt URL: https://github.com/web-platform-tests/wpt/ -Version: 6b19cafdf4be16c27ab42fcb4d2b77e493cdf256 +Version: 2f627176af13e921be0a97846955c88bd065a5f4 License: LICENSES FOR W3C TEST SUITES (https://www.w3.org/Consortium/Legal/2008/03-bsd-license.html) License File: NOT_SHIPPED Security Critical: no
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements.txt index 24067fb..35069656 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements.txt +++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements.txt
@@ -3,6 +3,6 @@ mozlog==7.1.0 mozdebug==0.3.0 pillow==8.4.0 -urllib3[secure]==1.26.7 -requests==2.26.0 +urllib3[secure]==1.26.8 +requests==2.27.1 six==1.16.0
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt index 466d1e5d..192d1f3 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt +++ b/third_party/wpt_tools/wpt/tools/wptrunner/requirements_sauce.txt
@@ -1,3 +1,3 @@ mozprocess==1.3.0 selenium==3.141.0 -requests==2.26.0 +requests==2.27.1
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/android_weblayer.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/android_weblayer.py index c445759d..36f014a 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/android_weblayer.py +++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/android_weblayer.py
@@ -55,6 +55,8 @@ capabilities["goog:chromeOptions"]["androidPackage"] = \ "org.chromium.weblayer.shell" capabilities["goog:chromeOptions"]["androidActivity"] = ".WebLayerShellActivity" + capabilities["goog:chromeOptions"]["androidKeepAppDataDir"] = \ + kwargs.get("keep_app_data_directory") # Workaround: driver.quit() cannot quit WeblayerShell. executor_kwargs["pause_after_test"] = False
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py index 3cfe5502..05be769 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py +++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py
@@ -55,8 +55,11 @@ del executor_kwargs["capabilities"]["goog:chromeOptions"]["prefs"] assert kwargs["package_name"], "missing --package-name" - executor_kwargs["capabilities"]["goog:chromeOptions"]["androidPackage"] = \ + capabilities = executor_kwargs["capabilities"] + capabilities["goog:chromeOptions"]["androidPackage"] = \ kwargs["package_name"] + capabilities["goog:chromeOptions"]["androidKeepAppDataDir"] = \ + kwargs.get("keep_app_data_directory") return executor_kwargs
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py index 6b7c1318..9b57db0 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py +++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py
@@ -134,7 +134,7 @@ shutdown_timeout = 60 def __init__(self, logger, prefs_root, test_type, package_name="org.mozilla.geckoview.test_runner", - device_serial="emulator-5444", extra_prefs=None, debug_info=None, + device_serial=None, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, ca_certificate_path=None, e10s=False, enable_webrender=False, stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False, asan=False,
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testrunner.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testrunner.py index bf0da18..d8e698e 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testrunner.py +++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testrunner.py
@@ -293,7 +293,7 @@ if self.browser_kwargs.get("device_serial"): # Assign Android device to runner according to manager_number self.browser_kwargs["device_serial"] = ( - self.browser_kwargs["device_serial"][self.manager_number-1]) + self.browser_kwargs["device_serial"][self.manager_number - 1]) self.executor_cls = executor_cls self.executor_kwargs = executor_kwargs
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py index fd75f115..69f5794 100644 --- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py +++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py
@@ -553,10 +553,12 @@ if kwargs["device_serial"]: if kwargs["processes"] is None: kwargs["processes"] = len(kwargs["device_serial"]) - print("Set --processes to match with number of devices provided") elif len(kwargs["device_serial"]) != kwargs["processes"]: print("--processes does not match number of devices") sys.exit(1) + elif len(set(kwargs["device_serial"])) != len(kwargs["device_serial"]): + print("Got duplicate --device-serial value") + sys.exit(1) if kwargs["processes"] is None: kwargs["processes"] = 1
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 3d2a243..9b9fe96 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -452,7 +452,7 @@ # These all use the 'trybot' mixins to ensure that dcheck is on. 'GPU Mac Builder': 'gpu_tests_release_trybot_minimal_symbols', 'GPU Mac Builder (dbg)': 'gpu_tests_debug_bot', - 'GPU Linux Builder': 'gpu_tests_release_trybot_minimal_symbols', + 'GPU Linux Builder': 'gpu_tests_release_trybot_minimal_symbols_reclient', 'GPU Linux Builder (dbg)': 'gpu_tests_debug_bot_reclient', 'GPU Win x64 Builder': 'gpu_tests_release_bot_dcheck_always_on_resource_allowlisting', 'GPU Win x64 Builder Code Coverage': 'gpu_tests_release_trybot_resource_allowlisting_code_coverage', @@ -2420,6 +2420,10 @@ 'gpu_tests', 'release_trybot_minimal_symbols', ], + 'gpu_tests_release_trybot_minimal_symbols_reclient': [ + 'gpu_tests', 'release_trybot_minimal_symbols_reclient', + ], + 'gpu_tests_release_trybot_minimal_symbol_x86_resource_allowlisting': [ 'gpu_tests', 'release_trybot_minimal_symbols', 'x86', 'resource_allowlisting', ],
diff --git a/tools/mb/mb_config_expectations/chromium.gpu.json b/tools/mb/mb_config_expectations/chromium.gpu.json index 360fc0c..4a18dc2a 100644 --- a/tools/mb/mb_config_expectations/chromium.gpu.json +++ b/tools/mb/mb_config_expectations/chromium.gpu.json
@@ -26,7 +26,8 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, - "use_goma": true + "use_rbe": true, + "use_remoteexec": true } }, "GPU Linux Builder (dbg)": {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 237d630..5bfb494 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -18353,6 +18353,30 @@ <int value="3" label="UnableToRun"/> </enum> +<enum name="CrosDictationMacroName"> + <summary> + List of Dictation macro names. This list should be aligned with macro list + specified in Dictation JavaScript: + https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/macro_names.js + </summary> + <int value="0" label="UNSPECIFID"/> + <int value="1" label="INPUT_TEXT_VIEW"/> + <int value="2" label="DELETE_PREV_CHAR"/> + <int value="3" label="NAV_PREV_CHAR"/> + <int value="4" label="NAV_NEXT_CHAR"/> + <int value="5" label="NAV_PREV_LINE"/> + <int value="6" label="NAV_NEXT_LINE"/> + <int value="7" label="COPY_SELECTED_TEXT"/> + <int value="8" label="PASTE_TEXT"/> + <int value="9" label="CUT_SELECTED_TEXT"/> + <int value="10" label="UNDO_TEXT_EDIT"/> + <int value="11" label="REDO_ACTION"/> + <int value="12" label="SELECT_ALL_TEXT"/> + <int value="13" label="UNSELECT_TEXT"/> + <int value="14" label="LIST_COMMANDS"/> + <int value="15" label="NEW_LINE"/> +</enum> + <enum name="CrosDictationToggleDictationMethod"> <int value="0" label="Search+D"/> <int value="1" label="Click onscreen button"/> @@ -29508,6 +29532,7 @@ <int value="483" label="SPEECH_RECOGNITION_PRIVATE_ON_ERROR"/> <int value="484" label="FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS"/> <int value="485" label="INPUT_METHOD_PRIVATE_ON_TOUCH"/> + <int value="486" label="WEB_AUTHENTICATION_PROXY_ON_CREATE_REQUEST"/> </enum> <enum name="ExtensionFileWriteResult"> @@ -31195,6 +31220,7 @@ <int value="1608" label="TERMINALPRIVATE_GETOSINFO"/> <int value="1609" label="OS_TELEMETRY_GETMEMORYINFO"/> <int value="1610" label="AUTOTESTPRIVATE_COULDALLOWCROSTINI"/> + <int value="1611" label="WEB_AUTHENTICATION_PROXY_COMPLETE_CREATE_REQUEST"/> </enum> <enum name="ExtensionIconState"> @@ -80752,6 +80778,20 @@ </int> </enum> +<enum name="ShowQueryTilesSegmentationResult"> + <int value="0" label="Uninitialized"/> + <int value="1" label="Dont show Start surface"/> + <int value="2" label="Show Start surface"/> +</enum> + +<enum name="ShowQueryTilesSegmentationResultComparison"> + <int value="0" label="Uninitialized."/> + <int value="1" label="Segmentation enabled and logic enabled."/> + <int value="2" label="Segmentation enabled and logic disabled."/> + <int value="3" label="Segmentation disabled and logic enabled."/> + <int value="4" label="Segmentation disabled and logic disabled."/> +</enum> + <enum name="ShowTabSwitcherSnapshotResult"> <obsolete> Removed 2019-01.
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml index bfff227..661a0365 100644 --- a/tools/metrics/histograms/metadata/accessibility/histograms.xml +++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -465,6 +465,20 @@ </summary> </histogram> +<histogram name="Accessibility.CrosDictation.MacroFailed" + enum="CrosDictationMacroName" expires_after="2023-01-30"> + <owner>akihiroota@chromium.org</owner> + <owner>chrome-a11y-core@google.com</owner> + <summary>Recorded whenever Dictation fails to perform a macro.</summary> +</histogram> + +<histogram name="Accessibility.CrosDictation.MacroSucceeded" + enum="CrosDictationMacroName" expires_after="2023-01-30"> + <owner>akihiroota@chromium.org</owner> + <owner>chrome-a11y-core@google.com</owner> + <summary>Recorded whenever Dictation successfully performs a macro.</summary> +</histogram> + <histogram name="Accessibility.CrosDictation.ToggleDictationMethod" enum="CrosDictationToggleDictationMethod" expires_after="2022-08-23"> <owner>anastasi@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index e8427d1b..b0ded90b 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -1766,7 +1766,7 @@ </histogram> <histogram name="Android.Jank.FrameDuration{Scenario}" units="ms" - expires_after="2022-03-31"> + expires_after="2022-06-30"> <owner>salg@google.com</owner> <owner>ssid@chromium.org</owner> <summary> @@ -1790,7 +1790,7 @@ </histogram> <histogram name="Android.Jank.JankBursts{Scenario}" units="ms" - expires_after="2022-03-31"> + expires_after="2022-06-30"> <owner>salg@google.com</owner> <owner>ssid@chromium.org</owner> <summary> @@ -1816,7 +1816,7 @@ </histogram> <histogram name="Android.Jank.MissedFrames{Scenario}" units="frames" - expires_after="2022-03-31"> + expires_after="2022-06-30"> <owner>salg@google.com</owner> <owner>ssid@chromium.org</owner> <summary> @@ -4091,7 +4091,7 @@ </histogram> <histogram name="Android.WebView.Gfx.HardwareDrawType" - enum="WebViewDrawAndSubmissionType" expires_after="2022-01-15"> + enum="WebViewDrawAndSubmissionType" expires_after="2022-07-15"> <owner>vasilyt@chromium.org</owner> <owner>boliu@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml index ae5e567..b83b702 100644 --- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml +++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -796,6 +796,18 @@ </summary> </histogram> +<histogram name="Bluetooth.ChromeOS.FastPair.Scanner.StartSession.Result" + enum="BooleanSuccess" expires_after="2022-09-20"> + <owner>shanefitz@google.com</owner> + <owner>julietlevesque@google.com</owner> + <owner>chromeos-cross-device-eng@google.com</owner> + <summary> + Records the success or failure of starting a BluetoothLowEnergy scan session + in the Fast Pair scanner. Emitted on success or failure of starting the scan + session. + </summary> +</histogram> + <histogram name="Bluetooth.ChromeOS.FastPair.TotalGattConnectionTime" units="ms" expires_after="2022-09-20"> <owner>shanefitz@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index 0eaf060f..7d074f5e 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -10904,6 +10904,9 @@ </histogram_suffixes> <histogram_suffixes name="PageLoadMetricsAfterBuffering" separator="."> + <obsolete> + Removed 12/2021. + </obsolete> <suffix name="AfterBuffering" label="Recorded after buffering of timing updates in the browser process has completed."/>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index 7ff2dc1..89397d73 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -1309,7 +1309,7 @@ </histogram> <histogram name="IOS.SiriShortcuts.Count" units="shortcuts" - expires_after="2022-02-06"> + expires_after="2023-02-06"> <owner>gujen@google.com</owner> <owner>sebsg@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/nearby/histograms.xml b/tools/metrics/histograms/metadata/nearby/histograms.xml index b7f22ee..653a51b 100644 --- a/tools/metrics/histograms/metadata/nearby/histograms.xml +++ b/tools/metrics/histograms/metadata/nearby/histograms.xml
@@ -23,8 +23,8 @@ <histograms> <histogram name="Nearby.Connections.Bluetooth.Adapter.SetName.Result" - enum="BooleanSuccess" expires_after="2022-04-24"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records whether the request to set the adapter's name has succeeded. Emitted @@ -33,8 +33,8 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.Adapter.SetScanMode.Result" - enum="BooleanSuccess" expires_after="2022-04-24"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records whether the request to set the adapter's scan mode has succeeded. @@ -44,8 +44,8 @@ <histogram name="Nearby.Connections.Bluetooth.ClassicMedium.ConnectToService.Duration" - units="ms" expires_after="2022-06-26"> - <owner>hansberry@chromium.org</owner> + units="ms" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records time spent in milliseconds to establish a Bluetooth service @@ -54,8 +54,8 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.ClassicMedium.{Operation}.Result" - enum="BooleanSuccess" expires_after="2022-02-23"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary>Records the result of {Operation}.</summary> <token key="Operation"> @@ -67,8 +67,8 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.LEMedium.StartAdvertising.Result" - enum="BooleanSuccess" expires_after="2022-06-26"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records whether the request to start advertising has succeeded. @@ -76,8 +76,8 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.LEMedium.StartScanning.Result" - enum="BooleanSuccess" expires_after="2022-02-23"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records whether BLE scanning has been initiated successfully. @@ -85,8 +85,8 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.LEMedium.StopAdvertising.Result" - enum="BooleanSuccess" expires_after="2022-02-23"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records whether the request to stop advertising has succeeded. @@ -94,15 +94,15 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.LEMedium.StopScanning.Result" - enum="BooleanSuccess" expires_after="2022-04-24"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary>Records whether BLE scanning has been stopped successfully.</summary> </histogram> <histogram name="Nearby.Connections.Bluetooth.Socket.{Operation}.Result" - enum="BooleanSuccess" expires_after="2022-02-23"> - <owner>hansberry@chromium.org</owner> + enum="BooleanSuccess" expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary>Records whether {Operation} has succeeded.</summary> <token key="Operation"> @@ -217,8 +217,8 @@ <histogram name="Nearby.Connections.UtilityProcessShutdownReason" enum="NearbyConnectionsUtilityProcessShutdownReason" - expires_after="2022-06-26"> - <owner>hansberry@chromium.org</owner> + expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records why the Sharing utility process, which hosts Nearby Connections, was @@ -230,8 +230,8 @@ <histogram name="Nearby.Connections.UtilityProcessShutdownReason.DisconnectedMojoDependency" enum="NearbyConnectionsUtilityProcessMojoDependencyName" - expires_after="2022-04-24"> - <owner>hansberry@chromium.org</owner> + expires_after="2023-02-01"> + <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> Records which Mojo dependency of the Sharing utility process disconnected
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index 0e095b0..adb7245 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -3055,7 +3055,7 @@ </summary> </histogram> -<histogram name="Network.Shill.Wifi.TimeFromRekeyToFailureSeconds" +<histogram name="Network.Shill.WiFi.TimeFromRekeyToFailureSeconds" units="seconds" expires_after="2022-12-01"> <owner>billyzhao@chromium.org</owner> <owner>cros-network-metrics@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 1b462a8..4ccba11 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -3388,14 +3388,6 @@ </summary> </histogram> -<histogram name="clickjacking.save_download" units="ms" expires_after="M77"> - <owner>Please list the metric's owners. Add more owner tags as needed.</owner> - <summary> - The length of time between a dangerous download appearing on the download - shelf, and the "Keep" button being clicked. - </summary> -</histogram> - <histogram name="ClientHints.AcceptCHFrame" enum="AcceptCHFrameRestart" expires_after="2022-06-05"> <owner>aarontag@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index 294b4c2..cd1deb71 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -2181,6 +2181,9 @@ <histogram name="PageLoad.Internal.ClientRedirect.FirstPaintToNavigation" units="ms" expires_after="M77"> + <obsolete> + Removed 12/2021. + </obsolete> <owner>bmcquade@chromium.org</owner> <summary> The delay between first paint and a client-side redirect navigation, for @@ -2193,6 +2196,9 @@ <histogram name="PageLoad.Internal.ClientRedirect.NavigationWithoutPaint" enum="Boolean" expires_after="2021-08-09"> + <obsolete> + Removed 12/2021. + </obsolete> <owner>bmcquade@chromium.org</owner> <summary> Counts how often a client-side redirect was initiated from a page that did @@ -2220,6 +2226,9 @@ <histogram name="PageLoad.Internal.OutOfOrderInterFrameTiming" units="ms" expires_after="M77"> + <obsolete> + Removed 12/2021. + </obsolete> <owner>bmcquade@chromium.org</owner> <summary> The difference in magnitude between existing and updated timing, for @@ -2333,6 +2342,9 @@ <histogram name="PageLoad.Internal.Prerender" enum="BooleanHit" expires_after="M77"> + <obsolete> + Removed 12/2021. + </obsolete> <owner>bmcquade@chromium.org</owner> <summary> Counts the number of prerender navigations. Only logs true values.
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml index 9993dd4..ecda8be 100644 --- a/tools/metrics/histograms/metadata/search/histograms.xml +++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -1409,6 +1409,33 @@ </summary> </histogram> +<histogram name="Search.QueryTiles.ShowQueryTilesSegmentationResult" + enum="ShowQueryTilesSegmentationResult" expires_after="2022-08-09"> + <owner>haileywang@chromium.org</owner> + <owner>ssid@chromium.org</owner> + <summary> + Records the result from segmentation platform that determines whether or not + to show Query Tiles on NTP. When segmentation model is finch enabled, this + is recorded every time the user navigates to NTP and the current Query Tiles + decision is inexistant or expired. For cases where segmentation model is not + finch enabled see ShowQueryTilesSegmentationResultComparison. + </summary> +</histogram> + +<histogram name="Search.QueryTiles.ShowQueryTilesSegmentationResultComparison" + enum="ShowQueryTilesSegmentationResultComparison" + expires_after="2022-08-09"> + <owner>haileywang@chromium.org</owner> + <owner>ssid@chromium.org</owner> + <summary> + Records the comparison of result from segmentation model and code logic for + when to show Query Tiles on NTP. When segmentation model is not finch + enabled, this is recorded every time the user navigates to NTP and the + current Query Tiles decision is inexistant or expired. For cases where + segmentation model is finch enabled see ShowQueryTilesSegmentationResult. + </summary> +</histogram> + <histogram base="true" name="Search.QueryTiles.Tile.Clicked" units="index" expires_after="2022-04-01"> <!-- Name completed by histogram_suffixes name="TileUiSurface" -->
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index 054d7f3..98eabe6 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -717,7 +717,7 @@ </histogram> <histogram name="Sharing.SmsFetcherClientNameIsEmpty" enum="BooleanEmpty" - expires_after="M100"> + expires_after="2022-05-01"> <owner>yigu@chromium.org</owner> <owner>web-identity@google.com</owner> <summary>
diff --git a/ui/android/java/res/values-night/colors.xml b/ui/android/java/res/values-night/colors.xml index 835cb50..67ccac818 100644 --- a/ui/android/java/res/values-night/colors.xml +++ b/ui/android/java/res/values-night/colors.xml
@@ -17,8 +17,9 @@ <!-- Common icon colors for drawables. --> <color name="default_icon_color_baseline">@color/default_icon_color_light</color> - <color name="default_icon_color_inverse">@color/default_icon_color_inverse_dark</color> + <color name="default_icon_color_inverse_baseline">@color/default_icon_color_inverse_dark</color> <color name="default_icon_color_accent1_baseline">@color/default_icon_color_blue_light</color> + <color name="default_icon_color_on_accent1_baseline">@color/default_icon_color_on_accent1_dark</color> <color name="default_icon_color_secondary">@color/default_icon_color_secondary_light</color> <color name="hairline_stroke_color_baseline">@color/hairline_stroke_color_light</color> <color name="default_icon_color_disabled">@color/default_icon_color_disabled_light</color>
diff --git a/ui/android/java/res/values-night/styles.xml b/ui/android/java/res/values-night/styles.xml index 291af1b..fda4fcd 100644 --- a/ui/android/java/res/values-night/styles.xml +++ b/ui/android/java/res/values-night/styles.xml
@@ -6,7 +6,6 @@ <resources xmlns:tools="http://schemas.android.com/tools"> <style name="ColorOverlay.Ui" parent="ColorOverlay.Ui.DayNight"> <!-- Common icon colors for drawables. --> - <item name="default_icon_color_inverse">@color/default_icon_color_dark</item> <item name="default_icon_color_secondary">@color/default_icon_color_secondary_light</item> <item name="default_icon_color_disabled">@color/default_icon_color_disabled_light</item> <item name="default_icon_color_disabled_inverse">@color/default_icon_color_disabled_dark</item>
diff --git a/ui/android/java/res/values/attrs.xml b/ui/android/java/res/values/attrs.xml index 0814dcd..d5c3085 100644 --- a/ui/android/java/res/values/attrs.xml +++ b/ui/android/java/res/values/attrs.xml
@@ -27,7 +27,6 @@ <attr name="default_bg_color_dynamic" format="color"/> <attr name="divider_line_bg_color_dynamic" format="color"/> - <attr name="default_icon_color_inverse" format="color" /> <attr name="default_icon_color_secondary" format="color" /> <attr name="default_icon_color_disabled" format="color" /> <attr name="default_icon_color_disabled_inverse" format="color" />
diff --git a/ui/android/java/res/values/semantic_colors_adaptive.xml b/ui/android/java/res/values/semantic_colors_adaptive.xml index 080a127..ca08d6b 100644 --- a/ui/android/java/res/values/semantic_colors_adaptive.xml +++ b/ui/android/java/res/values/semantic_colors_adaptive.xml
@@ -26,8 +26,9 @@ <!-- Common icon colors for drawables. --> <color name="default_icon_color_baseline">@color/default_icon_color_dark</color> - <color name="default_icon_color_inverse" tools:ignore="UnusedResources">@color/default_icon_color_inverse_light</color> + <color name="default_icon_color_inverse_baseline" tools:ignore="UnusedResources">@color/default_icon_color_inverse_light</color> <color name="default_icon_color_accent1_baseline" tools:ignore="UnusedResources">@color/default_icon_color_blue_dark</color> + <color name="default_icon_color_on_accent1_baseline">@color/default_icon_color_on_accent1_light</color> <color name="default_icon_color_secondary" tools:ignore="UnusedResources">@color/default_icon_color_secondary_dark</color> <color name="hairline_stroke_color_baseline">@color/hairline_stroke_color_dark</color>
diff --git a/ui/android/java/res/values/semantic_colors_non_adaptive.xml b/ui/android/java/res/values/semantic_colors_non_adaptive.xml index 17ea20c8..f96e2d1 100644 --- a/ui/android/java/res/values/semantic_colors_non_adaptive.xml +++ b/ui/android/java/res/values/semantic_colors_non_adaptive.xml
@@ -22,6 +22,9 @@ <!-- Same as ?attr/colorOnSurfaceInverse --> <color name="default_icon_color_inverse_light">@color/baseline_neutral_50</color> <color name="default_icon_color_inverse_dark">@color/baseline_neutral_800</color> + <!-- Same as ?attr/colorOnPrimary. --> + <color name="default_icon_color_on_accent1_light">@color/baseline_neutral_0</color> + <color name="default_icon_color_on_accent1_dark">@color/baseline_primary_800</color> <!-- Common text colors --> <!-- Same as ?attr/colorOnSurface. -->
diff --git a/ui/android/java/res/values/styles.xml b/ui/android/java/res/values/styles.xml index 004055d..638920d 100644 --- a/ui/android/java/res/values/styles.xml +++ b/ui/android/java/res/values/styles.xml
@@ -6,7 +6,6 @@ <resources xmlns:tools="http://schemas.android.com/tools"> <style name="ColorOverlay.Ui" parent="ColorOverlay.Ui.DayNight"> <!-- Common icon colors for drawables. --> - <item name="default_icon_color_inverse">@color/default_icon_color_light</item> <item name="default_icon_color_secondary">@color/default_icon_color_secondary_dark</item> <item name="default_icon_color_disabled">@color/default_icon_color_disabled_dark</item> <item name="default_icon_color_disabled_inverse">@color/default_icon_color_disabled_light</item>
diff --git a/ui/aura/client/drag_drop_delegate.h b/ui/aura/client/drag_drop_delegate.h index 47b49fd..6b88187 100644 --- a/ui/aura/client/drag_drop_delegate.h +++ b/ui/aura/client/drag_drop_delegate.h
@@ -73,6 +73,8 @@ // Invoked during a drag and drop session when the user release the mouse, but // the drop is held because of the DataTransferPolicyController. + // The returned callback may be NullCallback if there's nothing to do and the + // drop event is ignored. virtual DropCallback GetDropCallback(const ui::DropTargetEvent& event) = 0; protected:
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc index f21e88c..86830f7f 100644 --- a/ui/aura/window_tree_host.cc +++ b/ui/aura/window_tree_host.cc
@@ -655,7 +655,11 @@ display::Display display = display::Screen::GetScreen()->GetDisplayNearestWindow(window()); - device_scale_factor_ = display.device_scale_factor(); + // If we don't have the actual display, don't overwrite the scale factor with + // the default value. See https://crbug.com/1285476 for details. + if (display.is_valid()) + device_scale_factor_ = display.device_scale_factor(); + UpdateRootWindowSizeInPixels(); // Passing |new_size_in_pixels| to set compositor size. It could be different
diff --git a/ui/chromeos/resources/ui_chromeos_resources.grd b/ui/chromeos/resources/ui_chromeos_resources.grd index 68f5fc7..6399ca7 100644 --- a/ui/chromeos/resources/ui_chromeos_resources.grd +++ b/ui/chromeos/resources/ui_chromeos_resources.grd
@@ -121,8 +121,6 @@ <!-- Assistant images. --> <structure type="chrome_html" name="IDR_ASSISTANT_VOICE_MATCH_ANIMATION" file="vector/voice_laptop.json" compress="gzip" /> <structure type="chrome_html" name="IDR_ASSISTANT_VOICE_MATCH_ALREADY_SETUP_ANIMATION" file="vector/connecting_loop.json" compress="gzip" /> - - <structure type="chrome_html" name="IDR_LOGIN_WELCOME_SCREEN_ANIMATION" file="vector/welcome_screen_animation.json" compress="gzip" /> </structures> </release> </grit>
diff --git a/ui/chromeos/resources/vector/welcome_screen_animation.json b/ui/chromeos/resources/vector/welcome_screen_animation.json deleted file mode 100644 index ff315c3..0000000 --- a/ui/chromeos/resources/vector/welcome_screen_animation.json +++ /dev/null
@@ -1 +0,0 @@ -{"v":"5.7.6","fr":30,"ip":0,"op":101,"w":648,"h":320,"nm":"R02_Welcome-648x320","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Master Scale Null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[324,160,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[54,54,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Oval_character 1","parent":104,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":29,"ix":3},"y":{"a":0,"k":194.5,"ix":4}},"a":{"a":0,"k":[29,194.5,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-7.431,5.894],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-6.24,-11.036]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.432,6.292],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-3.736,-10.299]],"c":true}]},{"i":{"x":0.57,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.432,6.292],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-3.736,-10.299]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-3.14,7.541],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[0.544,-8.433]],"c":true}]},{"i":{"x":0.77,"y":1},"o":{"x":0.56,"y":0.26},"t":20,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-3.14,7.541],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[0.544,-8.433]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.215,6.235],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-2.42,-9.601]],"c":true}]},{"i":{"x":0.42,"y":1},"o":{"x":0.4,"y":0.1},"t":49,"s":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-6.215,6.235],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-2.42,-9.601]],"c":true}],"e":[{"i":[[0,0],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0]],"o":[[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[0,0]],"v":[[-7.16,6.101],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-5.758,-10.881]],"c":true}]},{"t":101}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.173,193.797],"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":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hand 3","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-16.333,"ix":10},"p":{"a":0,"k":[83.128,147.933,0],"ix":2,"l":2},"a":{"a":0,"k":[83.128,147.933,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"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":[[0,0],[2.532,-1.018],[0.837,0.292],[-0.209,0.626]],"o":[[-1.837,2.334],[-0.823,0.331],[-0.838,-0.292],[0,0]],"v":[[5.235,-3.796],[-3.403,2.172],[-5.983,2.505],[-6.65,0.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":2,"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":[[0,0],[3.317,-1.237],[0.891,0.234],[-0.221,0.895]],"o":[[-2.276,2.63],[-0.864,0.321],[-0.891,-0.234],[0,0]],"v":[[5.61,-3.711],[-2.872,2.126],[-5.569,2.477],[-7.013,0.445]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.523,-4.593]],"c":false}],"e":[{"i":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.344,-4.456]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0.382,-0.472],[4.917,0.646],[0.134,0.885]],"o":[[-3.533,4.371],[-1.285,-0.169],[0,0]],"v":[[-3.954,24.911],[-17.795,33.087],[-19.485,31.465]],"c":false}],"e":[{"i":[[0.37,-0.46],[4.931,0.648],[0.134,0.885]],"o":[[-3.534,4.387],[-1.285,-0.169],[0,0]],"v":[[-3.923,24.873],[-17.795,33.087],[-19.485,31.465]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":-1,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"1-right hand 3","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-11.013,4.255],[-17.731,11.232],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.841,14.933]],"c":true}],"e":[{"i":[[0.032,0.027],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-13.632,7.461],[-17.894,11.218],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.153,17.771]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0.032,0.027],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-13.632,7.461],[-17.894,11.218],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.153,17.771]],"c":true}],"e":[{"i":[[0.077,-0.115],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.257,8.772],[-18.056,11.203],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-3.992,18.641]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.077,-0.115],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.257,8.772],[-18.056,11.203],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-3.992,18.641]],"c":true}],"e":[{"i":[[0.156,-0.247],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.629,1.582]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.599,9.167],[-18.219,11.189],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.422,21.54],[-5.154,18.431]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0.156,-0.247],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.629,1.582]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.599,9.167],[-18.219,11.189],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.422,21.54],[-5.154,18.431]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.691,9.256],[-18.381,11.175],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-5.615,18.488]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.058],[-0.6,1.635]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.051,-0.138],[-0.446,-0.299]],"v":[[-15.691,9.256],[-18.381,11.175],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-5.615,18.488]],"c":true}],"e":[{"i":[[0.143,-0.214],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.059],[-1.024,1.851]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.432,-0.266],[-0.446,-0.299]],"v":[[-15.091,8.836],[-17.882,10.807],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-4.039,18.377]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0.143,-0.214],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.157,0.059],[-1.024,1.851]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.432,-0.266],[-0.446,-0.299]],"v":[[-15.091,8.836],[-17.882,10.807],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-4.039,18.377]],"c":true}],"e":[{"i":[[0.05,-0.05],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.156,0.06],[-1.449,2.068]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.813,-0.395],[-0.446,-0.299]],"v":[[-14.267,7.832],[-17.382,10.44],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.464,18.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0.05,-0.05],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.156,0.06],[-1.449,2.068]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[0.813,-0.395],[-0.446,-0.299]],"v":[[-14.267,7.832],[-17.382,10.44],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[-2.464,18.266]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}],"e":[{"i":[[0.235,-0.378],[1.743,-0.832],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-2.58,2.644]],"o":[[-0.803,0.771],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[1.83,-0.737],[-0.446,-0.299]],"v":[[-11.14,4.375],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[0.646,14.732]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.89019613827,0.988235353956,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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"leg 8","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[10.23,-6.979],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[87.152,249.23],"e":[78.459,242.816],"to":[-1.449,-1.069],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[78.459,242.816],"e":[87.152,248.73],"to":[0,-0.083],"ti":[-1.449,-0.986]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[87.152,248.73],"e":[87.152,248.73],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-10],"e":[17.626]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[17.626],"e":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-10],"e":[-10]},{"t":36}],"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":"shoes2","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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[1.019,-7.116]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.878,5.994],[-9.663,2.894],[-8.267,-0.472],[-4.679,-8.652]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.878,5.994],[-9.663,2.894],[-8.267,-0.472],[-4.679,-8.652]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.908,-7.123]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[71.552,242.76],"e":[65.832,230.597],"to":[-0.953,-2.027],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[65.832,230.597],"e":[71.552,242.26],"to":[0,-0.083],"ti":[-0.953,-1.944]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[71.552,242.26],"e":[71.552,242.26],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-14],"e":[13.567]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[13.567],"e":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-14],"e":[-14]},{"t":36}],"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":"shoes back","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[3.189,-7.515],[1.602,-2.314]],"o":[[-1.461,3.444],[0,0]],"v":[[-11.052,30.255],[-17.039,43.27]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[3.189,-7.515],[1.602,-2.314]],"o":[[-1.461,3.444],[0,0]],"v":[[-11.052,30.255],[-17.039,43.27]],"c":false}],"e":[{"i":[[3.055,-7.474],[1.544,-2.422]],"o":[[-1.4,3.425],[0,0]],"v":[[-9.788,29.129],[-16.126,43.783]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[3.055,-7.474],[1.544,-2.422]],"o":[[-1.4,3.425],[0,0]],"v":[[-9.788,29.129],[-16.126,43.783]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.16,-7.323],[1.086,-3.052]],"o":[[-0.931,3.156],[0,0]],"v":[[-6.673,38.037],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[2.16,-7.323],[1.086,-3.052]],"o":[[-0.931,3.156],[0,0]],"v":[[-6.673,38.037],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}],"e":[{"i":[[2.106,-7.185],[1.133,-3.185]],"o":[[-0.965,3.293],[0,0]],"v":[[-6.551,37.624],[-9.687,47.399]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.372]],"c":false}],"e":[{"i":[[0.396,-0.829],[0,0],[0,0]],"o":[[-4.005,8.372],[0,0],[0,0]],"v":[[-24.274,-13.641],[-46.73,27.072],[-17.272,43.283]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0.396,-0.829],[0,0],[0,0]],"o":[[-4.005,8.372],[0,0],[0,0]],"v":[[-24.274,-13.641],[-46.73,27.072],[-17.272,43.283]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.909,-2.794],[0,0],[0,0]],"o":[[-4.826,14.826],[0,0],[0,0]],"v":[[-23.85,-12.762],[-40.793,41.539],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.909,-2.794],[0,0],[0,0]],"o":[[-4.826,14.826],[0,0],[0,0]],"v":[[-23.85,-12.762],[-40.793,41.539],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.69,40.784],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.627,40.722],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0.465,-1.233],[0,0],[0,0]],"o":[[-4.693,12.458],[0,0],[0,0]],"v":[[-23.149,-15.402],[-40.627,40.722],[-9.756,47.371]],"c":false}],"e":[{"i":[[0.299,-1.007],[0,0],[0,0]],"o":[[-3.018,10.172],[0,0],[0,0]],"v":[[-22.549,-16.253],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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":"middle","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"1-big sqaure","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-1.25,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-24.526,-50.637],[-37.05,50.637],[37.05,50.637],[30.144,-29.532]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[68.022,206.431],"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":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"1-laptop","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[5.356,12.197],[-17.392,13.023]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[178.642,89.983],"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":180,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"1-arm and hand 3","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[0.744]},"t":0,"s":[-9],"e":[2.7]},{"i":{"x":[0.394],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[2.7],"e":[-6]},{"i":{"x":[0.567],"y":[1]},"o":{"x":[0.264],"y":[0]},"t":36,"s":[-6],"e":[3]},{"i":{"x":[0.521],"y":[1]},"o":{"x":[0.216],"y":[0]},"t":49,"s":[3],"e":[-3]},{"i":{"x":[0.521],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":67,"s":[-3],"e":[-3]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[-3],"e":[-9]},{"t":100}],"ix":10},"p":{"a":0,"k":[151.562,128.625,0],"ix":2,"l":2},"a":{"a":0,"k":[151.562,128.625,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],[-0.164,-0.418],[0.403,-0.437],[0.551,-0.224],[4.089,0.984]],"o":[[0.431,0.125],[0.217,0.554],[-0.403,0.438],[-3.898,1.581],[0,0]],"v":[[6.3,-2.689],[7.171,-1.74],[6.786,-0.098],[5.275,0.824],[-7.388,1.704]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","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],[-0.037,-0.873],[0.894,-0.456],[3.681,0.776]],"o":[[1.059,-0.495],[0.043,1.003],[-3.277,1.672],[0,0]],"v":[[4.079,-2.239],[6.206,-1.228],[4.376,0.946],[-6.249,1.958]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":2,"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,0],[-0.037,-0.873],[0.894,-0.456],[3.681,0.775]],"o":[[1.059,-0.495],[0.043,1.002],[-3.277,1.672],[0,0]],"v":[[4.079,-2.238],[6.206,-1.227],[4.376,0.946],[-6.249,1.958]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":2,"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":[[0,0],[-3.03,1.597],[-0.017,0.639],[0.67,0.046],[0.63,-0.232],[2.269,0.215],[2.033,0.229],[1.647,-1.213],[1.159,-2.129]],"o":[[3.312,0.873],[0.566,-0.298],[0.017,-0.671],[-0.669,-0.047],[-2.139,0.786],[-2.037,-0.194],[-2.033,-0.23],[-1.638,1.207],[0,0]],"v":[[2.508,-1.228],[12.482,-2.367],[13.675,-3.747],[12.325,-4.971],[10.383,-4.508],[3.659,-3.637],[-2.39,-4.659],[-8.267,-3.488],[-13.692,5.018]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.418,7.949],[4.419,-7.949]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":2,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.644,-2.912],[6.644,2.912]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":2,"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":[[-11.254,0]],"o":[[6.448,0]],"v":[[0.582,15.475]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[-11.254,0],[-2.149,3.251],[-1.518,6.226]],"o":[[6.448,0],[3.832,-5.798],[0,0]],"v":[[0.582,15.475],[13.051,7.746],[22.55,-15.475]],"c":false}],"e":[{"i":[[-11.012,2.323],[-2.149,3.251],[-1.518,6.226]],"o":[[4.699,-0.991],[3.832,-5.798],[0,0]],"v":[[3.63,15.081],[13.051,7.746],[22.55,-15.475]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.012,2.323],[-2.149,3.251],[-1.518,6.226]],"o":[[4.699,-0.991],[3.832,-5.798],[0,0]],"v":[[3.63,15.081],[13.051,7.746],[22.55,-15.475]],"c":false}],"e":[{"i":[[-11.254,0],[-2.149,3.251],[-1.518,6.226]],"o":[[6.448,0],[3.832,-5.798],[0,0]],"v":[[0.582,15.475],[13.051,7.746],[22.55,-15.475]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"1-laptop 2","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[10.304,-6.253],[5.412,12.975]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":49,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[10.527,-12.897],[13.038,-3.417],[8.435,14.122]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.69,-12.207],[10.304,-6.253],[5.412,12.975]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529471603,0.89019613827,0.988235353956,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[178.642,89.983],"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":36,"op":180,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"1-arm bottom","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-6,"ix":10},"p":{"a":0,"k":[151.562,128.625,0],"ix":2,"l":2},"a":{"a":0,"k":[151.562,128.625,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"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":[[0,0],[-11.254,0]],"o":[[6.598,9.985],[6.448,0]],"v":[[-22.485,-4.474],[0.582,15.475]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-11.254,0]],"o":[[6.448,0]],"v":[[0.582,15.475]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"1-left hand","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":[[-1.945,-0.705],[-0.312,0.8],[-4.143,1.623],[-0.259,0.399],[0.72,0.247],[-0.314,0.803],[0.031,0.241],[0.744,0.126],[0.187,0.743],[0.659,-0.389],[0.877,0.255],[0.422,-0.104],[1.54,-0.213],[1.251,0.137],[1.406,0.328],[1.361,-0.48],[0.582,-0.422],[1.267,-2.82],[-0.485,-0.515],[-0.608,-0.302],[-1.692,-0.732]],"o":[[0.312,-0.8],[4.426,-0.454],[0.443,-0.174],[0.415,-0.638],[0.728,-0.463],[0.089,-0.226],[-0.095,-0.748],[0.546,-0.537],[-0.188,-0.742],[0.604,-0.683],[-0.416,-0.121],[-1.51,0.371],[-1.247,0.172],[-1.435,-0.155],[-1.405,-0.328],[-0.678,0.24],[-2.504,1.815],[-0.253,0.564],[0.474,0.504],[1.65,0.823],[1.899,0.822]],"v":[[-1.54,9.438],[0.174,4.18],[13.368,2.599],[14.529,1.809],[13.884,-0.064],[15.502,-2.028],[15.629,-2.739],[13.879,-3.904],[14.617,-5.972],[12.848,-6.864],[12.307,-9.098],[11.024,-9.005],[6.444,-8.129],[2.681,-7.974],[-1.535,-8.944],[-5.804,-8.957],[-7.678,-7.906],[-13.457,-0.785],[-15.176,3.667],[-12.323,4.814],[-7.308,7.147]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[174.466,111.82],"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":180,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":1,"nm":"Pale Royal Blue Solid 3","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":6,"ix":10},"p":{"a":0,"k":[297.162,163.41,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[363.375,196.625],[369.25,157.125]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[370.875,203.25],[375.125,165.875]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[367.25,149.125],[360.75,197],[363.375,196.625],[369.25,157.125]],"c":true}]},{"t":95}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#d2e3fc","ip":36,"op":180,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"front hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-0.188,"ix":10},"p":{"a":0,"k":[114.198,89.625,0],"ix":2,"l":2},"a":{"a":0,"k":[2.52,-2.189,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[0,0],[-5.137,-5.543],[4.707,3.704],[0,0]],"o":[[7.785,1.186],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-4.119,4.544],[4.707,3.704],[0,0]],"o":[[1.108,13.599],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[{"i":[[0,0],[-4.119,4.544],[4.707,3.704],[0,0]],"o":[[1.108,13.599],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":85,"s":[{"i":[[0,0],[-6.102,0.702],[4.707,3.704],[0,0]],"o":[[3.255,8.247],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}],"e":[{"i":[[0,0],[-5.137,-5.543],[4.707,3.704],[0,0]],"o":[[7.785,1.186],[0,0],[-4.226,-3.325],[0,0]],"v":[[4.866,-11.842],[20.529,-2.23],[14.472,-8.715],[4.866,-11.842]],"c":false}]},{"t":94.9998046875}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.521568655968,0.956862747669,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":202.8,"st":7.2,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"mouse","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":36,"s":[-58.096],"e":[-43.096]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[-43.096],"e":[-43.096]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[-43.096],"e":[-58.096]},{"t":93}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[121.315,93.502,0],"e":[116.344,94.921,0],"to":[-0.677,1.812,0],"ti":[1.114,0.544,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.408,"y":0},"t":53,"s":[116.344,94.921,0],"e":[116.31,94.891,0],"to":[-0.014,-0.007,0],"ti":[0.01,0.009,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[116.31,94.891,0],"e":[116.382,95.92,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[116.382,95.92,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.734,"y":0.971},"o":{"x":0.167,"y":0.166},"t":84,"s":[116.31,94.891,0],"e":[116.31,94.891,0],"to":[-0.126,-0.11,0],"ti":[0.01,0.009,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.457,"y":0.01},"t":85,"s":[116.31,94.891,0],"e":[121.315,93.502,0],"to":[-0.126,-0.11,0],"ti":[-1.825,2.839,0]},{"t":93}],"ix":2,"l":2},"a":{"a":0,"k":[119.816,95.089,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[120.76,133.087],"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},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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 4","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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 6","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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 12","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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 13","np":1,"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":[[0,0],[-1.191,0.123]],"o":[[-0.082,0.949],[0,0]],"v":[[-1.11,-1.167],[1.254,0.841]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[119.869,94.938],"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 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[88.56,246.151],"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 15","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[75.052,236.26],"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 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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 19","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[86.166,185.898],"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 20","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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 22","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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 23","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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 24","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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 25","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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 27","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.592,92.779],"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 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"1-head-hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":36,"s":[-16],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":53,"s":[0],"e":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0],"e":[-16]},{"t":95}],"ix":10},"p":{"a":0,"k":[115.5,92.562,0],"ix":2,"l":2},"a":{"a":0,"k":[115.5,92.562,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[-1.228,2.267],[1.269,0.074],[1.25,-0.719],[0.664,-0.736],[0.013,-1.849],[-0.801,-1.333],[-0.434,1.067],[0.045,0.088],[0.05,0.27],[-0.327,0.483],[-0.508,-0.973]],"o":[[-1.146,-0.552],[-1.44,-0.084],[-0.859,0.494],[-1.239,1.372],[-0.01,1.514],[0.312,0.521],[0.019,-0.048],[-0.125,-0.244],[-0.107,-0.57],[0.715,-1.056],[2.257,-1.51]],"v":[[6.261,-5.028],[2.132,-6.614],[-2.462,-5.392],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-1.412,3.569],[-1.845,2.905],[-2.105,2.131],[-1.774,0.426],[0.815,0.84]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[0.605,3.494],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[3.434,1.412]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[{"i":[[0.605,3.494],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[3.434,1.412]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[-1.228,2.267],[0.493,-0.107],[1.25,-0.719],[0.664,-0.736],[-0.395,-2.295],[-0.801,-1.333],[-0.089,1.147],[0.045,0.088],[0.05,0.27],[-0.238,0.532],[-0.508,-0.973]],"o":[[-0.393,-0.101],[-0.892,0.239],[-0.859,0.494],[-1.239,1.372],[0.257,1.492],[0.312,0.521],[0.004,-0.051],[-0.125,-0.244],[-0.107,-0.57],[0.308,-0.63],[2.257,-1.51]],"v":[[1.46,-6.512],[-0.148,-6.519],[-2.568,-5.573],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-5.204,2.641],[-5.75,1.703],[-6.01,0.929],[-5.875,-0.888],[-3.881,-0.934]],"c":true}],"e":[{"i":[[-1.228,2.267],[1.269,0.074],[1.25,-0.719],[0.664,-0.736],[0.013,-1.849],[-0.801,-1.333],[-0.434,1.067],[0.045,0.088],[0.05,0.27],[-0.327,0.483],[-0.508,-0.973]],"o":[[-1.146,-0.552],[-1.44,-0.084],[-0.859,0.494],[-1.239,1.372],[-0.01,1.514],[0.312,0.521],[0.019,-0.048],[-0.125,-0.244],[-0.107,-0.57],[0.715,-1.056],[2.257,-1.51]],"v":[[6.261,-5.028],[2.132,-6.614],[-2.462,-5.392],[-4.797,-3.571],[-6.251,1.917],[-4.541,6.177],[-1.412,3.569],[-1.845,2.905],[-2.105,2.131],[-1.774,0.426],[0.815,0.84]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[114.041,91.717],"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":180,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"1-arm and hand 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":36,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-2.023,-6.292],[-14.971,-9.372],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":53,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-3.023,-6.542],[-15.971,-9.622],[-16.407,-14.432]],"c":false}],"e":[{"i":[[1.231,1.662],[2.198,2.85],[3.617,1.926],[0,0],[0,0]],"o":[[-2.142,-2.893],[-2.476,-3.211],[-5.657,-3.011],[0,0],[0,0]],"v":[[15.921,14.027],[7.042,2.158],[-2.023,-6.292],[-14.971,-9.372],[-16.407,-14.432]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"head","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":36,"s":[0],"e":[4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[4],"e":[4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[4],"e":[4]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":84,"s":[4],"e":[4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[4],"e":[0]},{"t":95}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[115.5,92.5,0],"e":[115.131,92.5,0],"to":[-0.064,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0},"t":53,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[115.131,92.5,0],"e":[115.131,93,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":66,"s":[115.131,93,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[115.131,92.5,0],"e":[115.131,92.5,0],"to":[-0.203,0,0],"ti":[0.158,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[115.131,92.5,0],"e":[115.5,92.5,0],"to":[-0.203,0,0],"ti":[0.146,0,0]},{"t":95}],"ix":2,"l":2},"a":{"a":0,"k":[115.5,92.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[120.76,133.087],"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},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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 4","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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 6","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[181.964,113.96],"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 8","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.551,110.4],"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 9","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[183.028,107.318],"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 10","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[174.194,107.705],"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 11","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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 12","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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 13","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[119.869,94.938],"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 14","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[88.56,246.151],"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 15","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[75.052,236.26],"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 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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 19","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[86.166,185.898],"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 20","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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 21","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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 22","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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 23","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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 24","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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 25","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[135.258,114.188],"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 26","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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 27","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.235,-2.759],[2.759,-3.235],[3.235,2.759],[-2.759,3.235]],"o":[[3.236,2.759],[-2.759,3.236],[-3.236,-2.759],[2.759,-3.236]],"v":[[4.995,-5.859],[5.859,4.995],[-4.995,5.859],[-5.859,-4.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.592,92.779],"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 28","np":3,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,120.672],"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 29","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[165.935,118.398],"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 30","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.026,131.14],"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 31","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"arm 3","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[101.5,113.5,0],"ix":2,"l":2},"a":{"a":0,"k":[101.5,113.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":1,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[17.778,-25.43],[18.881,-30.456]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"hand","parent":22,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-16.333,"ix":10},"p":{"a":0,"k":[83.128,147.933,0],"ix":2,"l":2},"a":{"a":0,"k":[83.128,147.933,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.7,-1.859],[7.254,2.036]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.912,-0.933],[-1.65,-0.392],[-1.445,0.495]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-2.287,-1.433],[-3.025,-0.892],[-2.82,-0.005]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.912,-0.933],[-1.65,-0.392],[-1.445,0.495]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[0.003,2.554],[-4.054,1.066],[-2.565,-2.991],[1.491,-1.503]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[-1.372,2.054],[-5.429,0.566],[-3.94,-3.491],[0.116,-2.003]],"c":true}],"e":[{"i":[[1.531,-0.709],[0.709,1.531],[-1.532,0.709],[-0.709,-1.531]],"o":[[-1.531,0.709],[-0.709,-1.532],[1.531,-0.709],[0.709,1.532]],"v":[[0.003,2.554],[-4.054,1.066],[-2.565,-2.991],[1.491,-1.503]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":3,"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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.772,-2.354],[6.465,2.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":2,"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":[[0,0],[2.532,-1.018],[0.837,0.292],[-0.209,0.626]],"o":[[-1.837,2.334],[-0.823,0.331],[-0.838,-0.292],[0,0]],"v":[[5.235,-3.796],[-3.403,2.172],[-5.983,2.505],[-6.65,0.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":2,"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":[[0,0],[3.317,-1.237],[0.891,0.234],[-0.221,0.895]],"o":[[-2.276,2.63],[-0.864,0.321],[-0.891,-0.234],[0,0]],"v":[[5.61,-3.711],[-2.872,2.126],[-5.569,2.477],[-7.013,0.445]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":2,"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":[[0,0],[2.491,-0.389],[-1.092,1.201],[-0.858,0.591],[-1.485,2.478],[-1.369,0.965]],"o":[[-1.021,1.795],[-1.644,0.257],[0.712,-0.785],[2.58,-1.775],[1.175,-1.957],[0,0]],"v":[[4.18,0.062],[-5.138,7.006],[-6.302,4.57],[-3.728,2.71],[2.1,-3.747],[5.769,-8.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":2,"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":[[0,0],[-0.658,1.655],[-0.799,2.035]],"o":[[0.611,-1.7],[1.483,-3.729],[2.091,-5.325]],"v":[[-20.694,29.55],[-18.762,24.473],[-15.019,15.317]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.577,130.006],"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":"shoulder","np":2,"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":[[2.441,-6.683],[3.541,-4.899],[5.448,0.716],[0.134,0.885]],"o":[[-2.073,5.677],[-3.54,4.898],[-1.285,-0.169],[0,0]],"v":[[6.736,1.805],[-3.244,24.014],[-17.795,33.087],[-19.485,31.465]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"arm","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.48],"y":[1]},"o":{"x":[0.26],"y":[0.692]},"t":0,"s":[-2.667],"e":[-7]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":13,"s":[-7],"e":[-2.667]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":27,"s":[-2.667],"e":[-2.667]},{"t":32}],"ix":10},"p":{"a":0,"k":[110.5,104.5,0],"ix":2,"l":2},"a":{"a":0,"k":[110.909,104.928,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.144,148.278],"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":"손목","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,156.508],"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":"시계시간","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[84.125,156.318],"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":"시계","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[82.025,155.838],"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":"시계선","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.367,174.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":"손가락","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[70.268,177.091],"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":"손가락","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[66.114,167.85],"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":"손가락","np":1,"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":[[-0.094,5.676],[-15.46,2.964],[0,0]],"o":[[0.398,-23.99],[2.639,-0.506],[0,0]],"v":[[-15.596,16.705],[12.197,-24.71],[17.778,-25.43]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[92.735,130.181],"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":"shoulder","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0},"t":0,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.205,-33.477],[6.875,-1.099]],"c":false}],"e":[{"i":[[0.791,-0.998],[2.863,-13.169]],"o":[[-2.496,3.15],[-0.958,4.409]],"v":[[19.114,-31.512],[6.875,-1.099]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.821,148.553],"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":"팔","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"1-right hand 2","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.669,0.293],[1.112,-1.541],[0.551,-0.968],[-0.948,0.01],[-1.959,2.629]],"o":[[-1.652,2.352],[-0.65,0.904],[-0.151,0.267],[0.895,-1.227],[-1.424,-0.156]],"v":[[5.417,-22.798],[2.053,-18.211],[-1.341,-13.174],[12.865,-8.628],[17.96,-15.479]],"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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"1-right hand","parent":21,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-2.667,"ix":10},"p":{"a":0,"k":[298.257,137.695,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.669,0.293],[1.112,-1.541],[0.551,-0.968],[-0.045,-0.302],[-0.273,-0.438],[-1.674,-1.925],[-1.348,-0.245],[-0.155,0.062],[-0.188,0.475],[-0.826,2.917],[-0.609,3.857]],"o":[[-0.734,2.66],[-0.65,0.904],[-0.151,0.267],[-0.727,0.493],[0.001,0.361],[1.824,2.098],[0.164,0.03],[3.311,-1.334],[1.114,-2.819],[1.065,-3.756],[-1.424,-0.156]],"v":[[-0.732,-13.666],[-7.426,0.476],[-9.521,3.07],[-16.049,9.459],[-20.719,13.389],[-17.091,17.303],[-12.31,22.047],[-6.714,21.428],[4.238,10.285],[8.485,2.272],[12.796,-8.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[79.968,159.262],"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":180,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"1-body 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.2,1.652],[-3.075,1.652],[-3.075,-1.651],[1.2,-1.651]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.3,1.678],[-5.575,1.678],[-5.575,-1.625],[-1.3,-1.625]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.2,1.652],[-3.075,1.652],[-3.075,-1.651],[1.2,-1.651]],"c":true}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[121.51,133.087],"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":"벨트 악세서리","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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-12.92,1.652],[12.92,1.652],[12.92,-1.651],[-12.92,-1.651]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[115.956,133.087],"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":"벨트","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,0],[-4.576,1.017],[-1.341,1.793]],"o":[[3.344,3.286],[2.186,-0.486],[0,0]],"v":[[-8.796,-2.017],[3.655,1.349],[9.315,-2]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[115.165,107.479],"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":"목","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":36,"s":[{"i":[[0,0],[0.593,-4.574],[0.24,-1.849]],"o":[[0.304,5.122],[-0.224,1.726],[0,0]],"v":[[0.504,-9.683],[-0.213,4.348],[-0.61,8.151]],"c":false}],"e":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}],"e":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0,0],[0.877,-5.149],[0.24,-1.849]],"o":[[0.973,4.007],[-0.211,1.239],[0,0]],"v":[[-0.371,-9.683],[-0.4,3.723],[-1.173,8.151]],"c":false}],"e":[{"i":[[0,0],[0.593,-4.574],[0.24,-1.849]],"o":[[0.304,5.122],[-0.224,1.726],[0,0]],"v":[[0.504,-9.683],[-0.213,4.348],[-0.61,8.151]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[129.523,123.301],"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":"가슴","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.114,-4.363]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-0.478,-2.361]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-0.478,-2.361]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.092,-6.349]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.092,-6.349]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.239,-5.238]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.239,-5.238]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":53,"s":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[{"i":[[0.104,0.41],[0.721,2.204]],"o":[[-0.037,-0.144],[0,0]],"v":[[0.038,2.719],[-1.707,-4.456]],"c":false}],"e":[{"i":[[0.104,0.41],[0.721,2.205]],"o":[[-0.036,-0.142],[0,0]],"v":[[0.476,2.719],[-1.114,-4.363]],"c":false}]},{"t":95}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[102.537,128.621],"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":"허리","np":2,"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":[[0,0]],"o":[[8.372,35.331]],"v":[[6.852,-51.678]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.06,186.349],"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":"벨트중앙","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"leg 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[10.23,-6.979],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.779,9.104],[5.981,8.858],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.664],[0.057,-0.098],[4.687,1.83],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-5.847,-2.283],[0,0],[0,0]],"v":[[4.508,-10.783],[1.465,1.09],[1.605,1.701],[3.179,4.019],[3.255,4.728],[2.634,7.314],[2.459,7.65],[-7.637,4.022],[-16.307,-7.52],[-18.864,-1.622]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.21,0.612],[0.052,0.225],[0.004,0.921],[-0.713,0.158],[-1.148,-0.433],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[7.02,5.644],[7.097,6.352],[6.475,8.938],[4.678,8.691],[-2.846,5.075],[-10.144,-7.287],[-13.844,-0.573]],"c":false}],"e":[{"i":[[0,0],[-0.075,-2.104],[-0.084,-0.084],[-0.204,-0.889],[-0.001,-0.245],[0.313,-0.663],[0.057,-0.098],[4.472,2.305],[-0.275,5.107],[0,0]],"o":[[-1.234,2.877],[0.011,0.314],[0.648,0.646],[0.052,0.225],[0.004,0.921],[-0.059,0.125],[-0.878,-0.451],[-4.965,-2.559],[0,0],[0,0]],"v":[[9.875,-6.407],[6.483,3.24],[6.623,3.85],[8.197,6.168],[8.273,6.877],[7.652,9.463],[5.854,9.216],[-1.669,5.6],[-9.396,-7.028],[-13.096,-0.314]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[87.152,249.23],"e":[78.459,242.816],"to":[-1.449,-1.069],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[78.459,242.816],"e":[87.152,248.73],"to":[0,-0.083],"ti":[-1.449,-0.986]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[87.152,248.73],"e":[87.152,248.73],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-10],"e":[11.626]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[11.626],"e":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-10],"e":[-10]},{"t":36}],"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":"shoes2","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":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[1.019,-7.116]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-4.659,7.481],[-10.444,4.381],[-8.267,-0.472],[-3.853,-10.314]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-4.659,7.481],[-10.444,4.381],[-8.267,-0.472],[-3.853,-10.314]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.333,9.125],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.394,9.435],[-5.391,6.335],[-3.214,1.483],[0.303,-5.728]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[71.552,242.76],"e":[65.832,230.597],"to":[-0.953,-2.027],"ti":[0,0.083]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[65.832,230.597],"e":[71.552,242.26],"to":[0,-0.083],"ti":[-0.953,-1.944]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[71.552,242.26],"e":[71.552,242.26],"to":[0,0],"ti":[0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[1]},"t":0,"s":[-14],"e":[7.567]},{"i":{"x":[0.68],"y":[0.06]},"o":{"x":[0.4],"y":[0]},"t":12,"s":[7.567],"e":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-14],"e":[-14]},{"t":36}],"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":"shoes back","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-10.64,-34.313]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-10.64,-34.313]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[14.706,14.043],[-14.706,14.043],[-13.18,-14.309]],"c":false}]},{"t":36}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[121.815,225.675],"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 18","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[4.28,-10.68],[3.329,-7.046],[5.098,-7.362]],"o":[[-0.652,13.885],[-1.539,3.84],[-3.842,8.132],[0,0]],"v":[[9.812,-43.26],[1.561,-2.106],[-3.751,12.245],[-17.039,43.27]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[4.28,-10.68],[3.329,-7.046],[5.098,-7.362]],"o":[[-0.652,13.885],[-1.539,3.84],[-3.842,8.132],[0,0]],"v":[[9.812,-43.26],[1.561,-2.106],[-3.751,12.245],[-17.039,43.27]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[3.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}],"e":[{"i":[[0,0],[3.442,-15.084],[2.052,-7.3],[3.605,-10.133]],"o":[[-0.557,13.031],[-1.408,6.17],[-2.434,8.659],[0,0]],"v":[[9.812,-43.26],[4.155,-2.756],[-1.012,17.335],[-9.687,47.399]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":1},"t":0,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.605,-18.847],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.294,2.128],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-21.068,-20.446],[-46.73,27.072],[-17.272,43.283]],"c":false}]},{"i":{"x":0.68,"y":0.06},"o":{"x":0.4,"y":0},"t":12,"s":[{"i":[[0,0],[1.173,-2.306],[2.605,-18.847],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.294,2.128],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-21.068,-20.446],[-46.73,27.072],[-17.272,43.283]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-3.053,5.917],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-41.127,41.472],[-9.756,47.371]],"c":false}],"e":[{"i":[[0,0],[1.173,-2.306],[2.608,-12.608],[0,0],[0,0]],"o":[[0,0],[-5.96,11.708],[-0.435,2.103],[0,0],[0,0]],"v":[[-6.421,-59.057],[-9.109,-53.735],[-22.029,-18.088],[-40.502,41.597],[-9.756,47.371]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-8.372,-35.331],[1.643,-24.463],[0.372,-7.462]],"o":[[8.372,35.331],[-0.495,7.367],[0,0]],"v":[[19.143,-60.813],[28.883,21.104],[27.342,45.919]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[109.457,193.797],"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":"middle","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"shoes","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-59,1,0],"ix":2,"l":2},"a":{"a":0,"k":[112,256.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[-3.141,0.001],[0,0],[-5.684,0.019],[-0.328,0.001],[0.669,1.041],[0.817,0.298],[0.108,2.361],[-0.306,4.793]],"o":[[0,0],[0,0],[0,0],[1.394,2.445],[0,0],[0.165,-0.945],[-0.482,-0.751],[-0.818,-0.297],[-0.067,-1.455],[0,0]],"v":[[-14.018,-8.372],[-15.105,8.353],[-7.956,8.352],[-7.549,4.89],[2.988,8.353],[14.939,8.346],[14.436,5.221],[12.206,3.777],[9.555,0.491],[9.799,-8.372]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[126.999,248.088],"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":"shoes","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":3,"nm":"Null 6","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.22],"y":[0.6]},"t":0,"s":[0],"e":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.26],"y":[0]},"t":12,"s":[5],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":36,"s":[0],"e":[0]},{"t":87}],"ix":10},"p":{"a":0,"k":[-317,216,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"1-hair","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.564],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[-33],"e":[-33]},{"i":{"x":[0.678],"y":[1]},"o":{"x":[0.322],"y":[0]},"t":17,"s":[-33],"e":[-24]},{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.436],"y":[0]},"t":29,"s":[-24],"e":[-46]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":39,"s":[-46],"e":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[-20],"e":[-20]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":85,"s":[-20],"e":[-33]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":39,"s":[107.439,91.749,0],"e":[122.178,90.586,0],"to":[6.037,4.409,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":60,"s":[122.178,90.586,0],"e":[122.073,89.09,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":67,"s":[122.073,89.09,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":0.58},"o":{"x":0.167,"y":0.167},"t":84,"s":[122.178,90.586,0],"e":[122.178,90.586,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":85,"s":[122.178,90.586,0],"e":[107.438,91.767,0],"to":[0,0,0],"ti":[6.369,4.328,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[109,88.5,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":[[1.127,-1.127],[1.386,-0.574],[1.532,0],[1.437,0.595],[1.127,1.127],[0.574,1.387],[0,1.532],[-0.595,1.437],[-1.127,1.127],[-1.386,0.574],[-1.532,0],[-1.438,-0.594],[-1.127,-1.127],[-0.573,-1.386],[0,-1.531],[0.595,-1.437]],"o":[[-1.127,1.127],[-1.438,0.595],[-1.531,0],[-1.386,-0.574],[-1.127,-1.127],[-0.595,-1.437],[0,-1.531],[0.574,-1.386],[1.127,-1.127],[1.438,-0.594],[1.531,0],[1.386,0.574],[1.127,1.127],[0.595,1.437],[0,1.532],[-0.573,1.387]],"v":[[8.973,8.973],[4.144,10.002],[-0.001,12.689],[-4.144,10.002],[-8.973,8.973],[-10.002,4.143],[-12.689,0],[-10.002,-4.143],[-8.973,-8.972],[-4.144,-10.002],[0.001,-12.689],[4.144,-10.002],[8.973,-8.972],[10.002,-4.143],[12.689,0],[10.002,4.143]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[100.549,79.222],"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":136,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"1-neck 2","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.953,0.217],[0.205,-0.054],[0.127,-0.368],[0.278,-0.804],[0.184,-0.126],[0.145,-0.027],[1.26,-0.227],[-0.537,-0.36],[-1.492,-0.387],[-1.059,-0.035],[-1.747,0.507],[-1.104,1.221],[-0.026,0.142],[0.247,0.086],[0.261,-0.018],[0.783,0.182],[0.122,0.131],[0.042,0.139],[0.283,0.933],[0.791,0.004],[0.773,-0.084]],"o":[[-0.207,-0.047],[-0.377,0.099],[-0.278,0.804],[-0.073,0.21],[-0.122,0.084],[-1.262,0.227],[-0.031,0.645],[1.28,0.857],[1.026,0.266],[1.818,0.06],[1.581,-0.459],[0.097,-0.107],[0.047,-0.257],[-0.246,-0.086],[-0.802,0.056],[-0.175,-0.041],[-0.099,-0.107],[-0.283,-0.933],[-0.205,-0.679],[-0.773,-0.004],[-0.968,0.106]],"v":[[-2.382,-4.172],[-3.01,-4.222],[-3.695,-3.335],[-4.529,-0.924],[-4.87,-0.363],[-5.286,-0.225],[-9.07,0.456],[-7.969,1.941],[-3.87,4.027],[-0.717,4.37],[4.702,3.962],[8.834,1.376],[9.054,1.011],[8.64,0.423],[7.864,0.384],[5.469,0.193],[4.988,-0.032],[4.803,-0.422],[3.955,-3.221],[2.9,-4.465],[0.523,-4.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.486000001197,0.694000004787,0.948999980852,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":[115.255,104.67],"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":180,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"3-neck-line","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-5.897,-0.049],[-1.983,4.842]],"o":[[0,3.813],[5.095,0.044],[0,0]],"v":[[-10.744,-2.849],[-2.613,3.867],[10.745,-3.911]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[526.426,106.414],"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":180,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"3-mouse","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":16,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[519.299,92.713,0],"e":[520.187,91.535,0],"to":[0.148,-0.196,0],"ti":[-0.148,0.196,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":62,"s":[520.187,91.535,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[520.187,91.535,0],"e":[520.198,92.16,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[520.198,92.16,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":85,"s":[520.187,91.535,0],"e":[520.187,91.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[520.187,91.535,0],"e":[519.299,92.713,0],"to":[-0.148,0.196,0],"ti":[0.148,-0.196,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[518.983,93.692,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.024,0.691],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":62,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.741,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.131,0.919],[2.489,-0.764]],"c":false}],"e":[{"i":[[0,0],[-0.858,0.222],[-0.657,0.594]],"o":[[0.74,0.243],[0.858,-0.221],[0,0]],"v":[[-2.49,0.764],[0.024,0.691],[2.489,-0.764]],"c":false}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[521.265,92.955],"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":180,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"3-head hair 2","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[300,148,0],"e":[300.011,148.625,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[300.011,148.625,0],"e":[300,148,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"t":85}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.2,0.54],[0,0],[0,0]],"o":[[1.999,-3.439],[0,0],[0,0],[0,0]],"v":[[-8.022,0.186],[-3.262,-3.189],[-4.522,-3.006],[-6.554,-1.793]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.935,0.773],[-4.843,-3.002],[-4.766,-3.766],[-7.335,-1.654]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.935,0.773],[-4.843,-3.002],[-4.766,-3.766],[-7.335,-1.654]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.433,0.89],[-4.34,-2.885],[-4.263,-3.65],[-7.335,-1.654]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-0.2,0.54],[-0.157,0.044],[0.386,-0.543]],"o":[[2.443,-0.01],[0,0],[-0.874,0.179],[-0.386,0.543]],"v":[[-8.433,0.89],[-4.34,-2.885],[-4.263,-3.65],[-7.335,-1.654]],"c":true}],"e":[{"i":[[0,0],[-0.2,0.54],[0,0],[0,0]],"o":[[1.999,-3.439],[0,0],[0,0],[0,0]],"v":[[-8.022,0.186],[-3.262,-3.189],[-4.522,-3.006],[-6.554,-1.793]],"c":true}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[526.795,87.931],"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":180,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"3-head hair","parent":35,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":71,"s":[300,148,0],"e":[300.011,148.625,0],"to":[0.002,0.104,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":78,"s":[300.011,148.625,0],"e":[300,148,0],"to":[0,0,0],"ti":[0.002,0.104,0]},{"t":85}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":53,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-5.289,-2.635],[5.289,3.707],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":65,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.525,-3.07],[5.737,2.314],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}],"e":[{"i":[[0,0],[-3.146,-0.732],[0,0],[0,0],[0,0],[0,0]],"o":[[2.025,2.672],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-5.289,-2.635],[5.289,3.707],[4.728,1.067],[3.491,-1.085],[1.195,-3.491],[-2.096,-4.128]],"c":true}]},{"t":100}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[526.795,87.931],"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":180,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"3-head","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":50,"s":[-17],"e":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[1],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":92,"s":[1],"e":[-17]},{"t":100}],"ix":10},"p":{"a":0,"k":[526.969,91.5,0],"ix":2,"l":2},"a":{"a":0,"k":[524.969,91.5,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":[[-2.223,-3.169],[3.169,-2.222],[2.222,3.168],[-3.168,2.222]],"o":[[2.222,3.168],[-3.168,2.222],[-2.221,-3.169],[3.169,-2.222]],"v":[[5.737,-4.023],[4.022,5.737],[-5.738,4.023],[-4.024,-5.737]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[524.924,91.355],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"3-neck","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.29,-1.089],[1.245,-0.105],[0.282,-0.005],[1.525,-0.547],[-1.142,-1.267],[-1.271,-0.189],[-1.257,0.265],[-1.644,1.229],[-0.48,1.996],[0.895,0.672],[0.367,1.453],[0.943,-0.11],[0.77,-0.212]],"o":[[-0.074,0.79],[-0.279,0.024],[-1.62,0.031],[0.283,1.681],[0.861,0.954],[1.271,0.19],[2.009,-0.425],[1.645,-1.229],[-1.194,-0.12],[-1.198,-0.9],[-0.924,0.215],[-0.803,0.092],[-1.325,0.366]],"v":[[-3.712,-2.207],[-5.812,-1.031],[-5.812,-1.031],[-10.572,-0.156],[-8.818,4.572],[-5.44,6.264],[-0.209,6.025],[5.485,4.095],[10.697,-1.289],[4.82,-2.314],[3.845,-6.454],[-0.551,-5.967],[-2.285,-6.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[526.599,103.886],"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":180,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"3-left-arm-borderwithhand","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[8.51,-2.038],[-8.51,2.038]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[564.773,159.549],"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":180,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"3-leftarm","parent":39,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[541,104,0],"ix":2,"l":2},"a":{"a":0,"k":[541,104,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}],"e":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}],"e":[{"i":[[0,0],[0,0],[-1.859,-0.475],[-0.559,-0.218],[-2.956,-10.452],[-1.97,-3.238],[-1.364,-3.3],[0.219,-3.534]],"o":[[0,0],[1.916,0.075],[1.07,0.274],[10.655,4.165],[1.037,3.671],[1.854,3.046],[1.371,3.314],[0,0]],"v":[[-21.85,-27.668],[-15.601,-27.407],[-9.918,-26.603],[-7.446,-25.83],[11.96,-0.245],[16.427,10.047],[20.432,16.844],[21.631,27.668]],"c":false}]},{"t":71}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[551.651,129.844],"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":180,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"3-arm","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":0,"s":[12],"e":[22]},{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":10,"s":[22],"e":[18]},{"i":{"x":[0.649],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":18,"s":[18],"e":[18]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.385],"y":[0]},"t":50,"s":[18],"e":[10]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[10],"e":[12]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":71,"s":[12],"e":[11.5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":78,"s":[11.5],"e":[12]},{"t":85}],"ix":10},"p":{"a":0,"k":[539,112.5,0],"ix":2,"l":2},"a":{"a":0,"k":[539,112.5,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":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}],"e":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":50,"s":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}],"e":[{"i":[[-0.269,4.207],[2.193,6.791],[0,0]],"o":[[0,0],[-2.193,-6.791],[0,0]],"v":[[5.709,15.858],[-0.638,-8.394],[-11.643,-33.555]],"c":false}]},{"t":71}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[550.555,145.729],"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":180,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":1,"nm":"White Solid 7","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-7,"ix":10},"p":{"a":0,"k":[285.074,179.754,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"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":[[1177.377,307.014],[1142.901,309.128],[1143.75,324.25],[1176.97,322.017]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"3-finger3","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.916,-2.478],[0.065,-1.328],[0.29,-0.438],[0.525,0.035],[0.252,0.535]],"o":[[1.175,2.367],[0.462,1.247],[-0.025,0.525],[-0.291,0.44],[-0.589,-0.04],[0,0]],"v":[[-2.491,-7.609],[1.63,1.465],[2.426,5.345],[2.006,6.846],[0.686,7.575],[-1.274,6.292]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[571.424,174.236],"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":180,"st":0,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"3-finger2","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.846,-3.817],[0.783,-0.493],[0.487,0.304],[0.327,0.477],[0.586,1.274],[1.435,2.842]],"o":[[1.757,3.486],[0.203,0.918],[-0.482,0.304],[-0.487,-0.302],[-0.792,-1.155],[-1.194,-2.596],[0,0]],"v":[[-0.415,-7.027],[4.18,4.148],[3.654,6.724],[2.036,6.628],[0.865,5.372],[-0.714,2.651],[-4.438,-6.141]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[565.875,174.854],"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":180,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"3-finger4","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.678,-3.918],[0.422,-0.73],[0.782,0.699]],"o":[[2.029,3.946],[0.145,0.832],[-0.422,0.731],[0,0]],"v":[[-2.359,-7.499],[2.214,3.773],[1.9,6.241],[-0.477,6.799]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[574.386,173.075],"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":180,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"3-finger5","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,1.04],[2.895,5.618]],"o":[[0.967,-0.387],[0,-2.453],[0,0]],"v":[[1.658,9.608],[3.172,7.081],[-3.797,-12.109]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[575.198,167.421],"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":180,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"3-arm 2","parent":46,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":12,"ix":10},"p":{"a":0,"k":[552.25,109.25,0],"ix":2,"l":2},"a":{"a":0,"k":[539,112.5,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],[0.019,-1.904],[0.828,-0.332],[0.399,0.336],[0.197,0.482],[0.21,0.947],[-0.269,4.207]],"o":[[-0.019,1.904],[-0.008,0.89],[-0.483,0.194],[-0.398,-0.336],[-0.368,-0.898],[-0.91,-4.116],[0,0]],"v":[[11.242,25.423],[11.625,31.047],[10.652,33.361],[9.197,33.051],[8.35,31.756],[7.562,28.958],[3.908,17.007]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[550.555,145.729],"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":180,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"3-hand-right","parent":39,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.594],"y":[2.114]},"o":{"x":[0.163],"y":[0]},"t":0,"s":[11],"e":[12.6]},{"i":{"x":[0.716],"y":[0.816]},"o":{"x":[0.363],"y":[0.121]},"t":11,"s":[12.6],"e":[3]},{"i":{"x":[0.779],"y":[1]},"o":{"x":[0.429],"y":[-0.669]},"t":19,"s":[3],"e":[5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[5],"e":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[5],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[0],"e":[12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":71,"s":[12],"e":[11]},{"t":78}],"ix":10},"p":{"a":0,"k":[566.1,159.239,0],"ix":2,"l":2},"a":{"a":0,"k":[564.804,158.647,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.668,-2.419],[-1.424,-0.582],[-0.17,0.049],[-0.11,0.21],[0.008,2.235],[-1.223,-2.392],[-1,-0.447],[-0.089,1.091],[-0.747,0.265],[-0.286,0.74],[-0.344,-0.055],[-0.287,0.196],[0.206,1.174],[0.014,1.13],[0.396,1.06],[2.42,4.174],[4.606,-1.832],[-0.009,-1.49],[-0.187,-1.231]],"o":[[0.41,1.481],[0.165,0.069],[0.228,-0.067],[1.033,-1.983],[0.833,2.555],[0.498,0.976],[1,0.446],[0.017,0.793],[0.748,-0.265],[-0.069,0.342],[0.343,0.054],[0.984,-0.674],[1.094,0.283],[-0.015,-1.132],[-1.815,-4.861],[-4.896,0.553],[-1.354,0.539],[0.008,1.245],[0.38,2.484]],"v":[[-9.123,4.672],[-6.911,9.033],[-6.391,9.102],[-5.911,8.603],[-4.677,1.424],[-1.586,8.861],[0.508,11.306],[3.065,10.149],[5.424,11.713],[6.349,9.408],[7.521,10.142],[8.497,9.848],[9.227,6.72],[11.302,4.647],[9.665,-0.742],[3.932,-15.103],[-9.961,-8.823],[-11.159,-6.377],[-10.843,-2.659]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[567.348,170.05],"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":-16,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":1,"nm":"White Solid 7","parent":38,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-7,"ix":10},"p":{"a":0,"k":[285.074,179.754,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[-1.207,-5.214],[0,0],[0,0]],"o":[[0,0],[0,0],[1.207,5.214],[0,0],[0,0]],"v":[[1144.884,230.797],[1123.75,233.5],[1135.129,269.406],[1143.75,324.25],[1174.541,319.359]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"3-waist","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[302,148,0],"e":[300,148,0],"to":[-0.333,0,0],"ti":[0.333,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.4,"y":0.4},"t":20,"s":[300,148,0],"e":[300,148,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[300,148,0],"e":[302,148,0],"to":[0.333,0,0],"ti":[-0.333,0,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[539.935,131.182],[514.349,131.182]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"3-dress back","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[0.893,5.189],[1.732,-2.939]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":20,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":50,"s":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[-0.982,5.314],[0.982,-5.314]],"c":false}],"e":[{"i":[[0,0],[-0.337,1.916]],"o":[[0,0],[0,0]],"v":[[0.893,5.189],[1.732,-2.939]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[540.88,125.868],"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":180,"st":0,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"3-shorder-right","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.551,8.848]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.979,-1.228],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-4.757,2.952],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[-0.185,-8.583],[-13.392,7.321]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":27,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.979,-1.228],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-4.757,2.952],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[-0.185,-8.583],[-13.392,7.321]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.51,14.243]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.51,14.243]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":39,"s":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":50,"s":[{"i":[[0,0],[0.842,-0.13],[1.978,-0.821],[1.728,-1.035],[6.433,-8.294]],"o":[[0,0],[-2.425,0.374],[-1.246,0.517],[-5.138,3.078],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.749,-9.524],[-13.572,5.223]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.006,-0.749],[1.638,-1.17],[4.555,-9.481]],"o":[[0,0],[-2.425,0.374],[-1.823,0.678],[-7.51,5.395],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.978,-9.124],[-14.342,11.41]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,0],[0.842,-0.13],[2.006,-0.749],[1.638,-1.17],[4.555,-9.481]],"o":[[0,0],[-2.425,0.374],[-1.823,0.678],[-7.51,5.395],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.978,-9.124],[-14.342,11.41]],"c":false}],"e":[{"i":[[0,0],[0.842,-0.13],[2.009,-0.742],[1.63,-1.183],[4.152,-8.607]],"o":[[0,0],[-2.425,0.374],[-1.877,0.693],[-7.734,5.613],[0,0]],"v":[[14.654,-13.973],[12.382,-13.531],[6.294,-11.9],[0.999,-9.087],[-14.551,8.848]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[506.233,116.41],"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":180,"st":0,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"3-right-arm","parent":53,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":32,"s":[0],"e":[14]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":39,"s":[14],"e":[14]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":50,"s":[14],"e":[0]},{"t":61}],"ix":10},"p":{"a":0,"k":[491.33,130.102,0],"ix":2,"l":2},"a":{"a":0,"k":[491.33,130.102,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],[0,0]],"o":[[0,0],[0,0]],"v":[[12.745,-1.316],[-12.879,1.303]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[478.836,131.698],"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":180,"st":0,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"3-arm-right-borderwithhand","parent":51,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[467.24,133.616,0],"ix":2,"l":2},"a":{"a":0,"k":[467.24,133.616,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],[0,0]],"o":[[0,0],[0,0]],"v":[[0.608,8.602],[-0.608,-8.601]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[466.699,141.615],"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":180,"st":0,"bm":0},{"ddd":0,"ind":53,"ty":4,"nm":"3-rightarm","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.516],"y":[1]},"o":{"x":[0.209],"y":[0.878]},"t":0,"s":[13.638],"e":[18.282]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":27,"s":[18.282],"e":[-1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":32,"s":[-1],"e":[24]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":39,"s":[24],"e":[24]},{"i":{"x":[0.479],"y":[0.88]},"o":{"x":[0.199],"y":[0]},"t":50,"s":[24],"e":[6.238]},{"i":{"x":[0.619],"y":[0.851]},"o":{"x":[0.288],"y":[-0.091]},"t":57,"s":[6.238],"e":[13.638]},{"t":61}],"ix":10},"p":{"a":0,"k":[512.75,128.781,0],"ix":2,"l":2},"a":{"a":0,"k":[512.75,128.781,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[23.55,-12.388],[19.797,-3.391],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":32,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.189,3.236]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-9.453,9.537],[-25.845,5.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.189,3.236]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-9.453,9.537],[-25.845,5.074]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":39,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.597,4.631]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[22.727,-12.089],[18.974,-3.092],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-11.345,8.292],[-26.477,3.551]],"c":false}],"e":[{"i":[[0,0],[2.607,-5.295],[4.789,-3.285],[1.276,-0.366],[2.374,0.068],[2.191,-0.055],[4.02,2.659]],"o":[[0,0],[-2.049,4.163],[-1.097,0.751],[-2.283,0.656],[-2.19,-0.063],[-4.638,0.114],[0,0]],"v":[[23.55,-12.388],[19.797,-3.391],[9.988,7.299],[4.933,9.546],[-2.109,10.434],[-8.67,10.052],[-22.727,9.43]],"c":false}]},{"t":61}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[490.034,140.787],"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":180,"st":0,"bm":0},{"ddd":0,"ind":54,"ty":1,"nm":"White Solid 6","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[277.75,148,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[24,1.25],[0,0],[0,0],[-0.375,-0.125],[0,0]],"o":[[-24,-1.25],[0,0],[0,0],[0.375,0.125],[0,0]],"v":[[1109.75,203.875],[1070.375,209.75],[1065.375,218.875],[1106.125,225.5],[1146.125,217.875]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":55,"ty":4,"nm":"3-hair","parent":58,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[522.75,92,0],"e":[522.219,91.437,0],"to":[-0.147,0.312,0],"ti":[0.347,0.562,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":61,"s":[522.219,91.437,0],"e":[522.219,91.437,0],"to":[-0.347,-0.562,0],"ti":[0.347,0.562,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":92,"s":[522.219,91.437,0],"e":[522.75,92,0],"to":[-0.347,-0.562,0],"ti":[0.147,-0.312,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[523,92,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":[[-2.499,-1.633],[-3.52,-1.797],[-1.583,-1.379],[0.014,-1.618],[0.658,-0.643],[4.145,-0.664],[0.138,0.004],[0.154,0.341],[-0.466,0.994],[-1.982,3.933]],"o":[[3.084,2.05],[1.49,0.76],[1.283,1.119],[-0.021,2.375],[-4.347,-2.116],[-0.136,0.022],[-1.483,-0.044],[-1.04,-2.301],[0.448,-0.956],[2.553,-5.067]],"v":[[-4.795,-10.246],[2.414,-2.43],[7.464,0.431],[9.546,5.324],[6.23,11.112],[-6.49,9.784],[-20.362,13.526],[-23.087,10.709],[-22.349,2.868],[-16.521,-7.446]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[537.002,94.638],"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":180,"st":0,"bm":0},{"ddd":0,"ind":57,"ty":4,"nm":"3-hand","parent":51,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[-28],"e":[9]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":28,"s":[9],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":34,"s":[0],"e":[9]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":52,"s":[9],"e":[-37]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[-37],"e":[-29]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[-29],"e":[-33]},{"t":71}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[466.349,141.8,0],"e":[466.244,140.304,0],"to":[-0.017,-0.249,0],"ti":[0.017,0.249,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[466.244,140.304,0],"e":[466.244,140.304,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[466.244,140.304,0],"e":[466.349,141.8,0],"to":[0.017,0.249,0],"ti":[-0.017,-0.249,0]},{"t":60}],"ix":2,"l":2},"a":{"a":0,"k":[610.244,296.429,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[0.475,-0.078],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[0,0],[-1.073,0.175],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[1.21,0.64],[0.054,1.629],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.604,-0.126],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.241,0.16],[-1.365,0.285],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[4.516,0.102],[1.347,1.622],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0.604,-0.126],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.241,0.16],[-1.365,0.285],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[4.516,0.102],[1.347,1.622],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.737,-0.176],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.488,0.324],[-1.666,0.398],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.56,0.39],[2.678,1.615],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0.737,-0.176],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.488,0.324],[-1.666,0.398],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.56,0.39],[2.678,1.615],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.823,-0.208],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.649,0.43],[-1.86,0.471],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.906,1.611],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":28,"s":[{"i":[[0,0],[0.823,-0.208],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.649,0.43],[-1.86,0.471],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.906,1.611],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":43,"s":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[0.892,-0.209],[1.945,0.142],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[-0.695,0.461],[-1.821,0.427],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[5.136,0.669],[2.728,1.655],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}],"e":[{"i":[[0,0],[0.475,-0.078],[2.009,0.147],[-0.394,1.658],[-1.357,0.116],[-1.497,0.265]],"o":[[0,0],[-1.073,0.175],[-0.48,-0.035],[0.481,-2.021],[1.494,-0.127],[0,0]],"v":[[1.211,0.64],[0.054,1.629],[-3.155,1.918],[-7.174,-0.511],[-2.774,-1.594],[-0.107,-1.7]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[605.756,302.103],"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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.798,1.708]],"c":false}],"e":[{"i":[[0,0],[1.731,-0.354],[0.964,-2.177]],"o":[[-1.43,-0.253],[-1.881,0.432],[-0.432,1.111]],"v":[[6.021,-4.551],[1.348,-5.117],[-4.604,-0.939]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[1.731,-0.354],[0.964,-2.177]],"o":[[-1.43,-0.253],[-1.881,0.432],[-0.432,1.111]],"v":[[6.021,-4.551],[1.348,-5.117],[-4.604,-0.939]],"c":false}],"e":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}],"e":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[2.015,-0.673],[0.504,-0.881]],"o":[[-1.43,-0.253],[-2.502,0.836],[-0.738,0.985]],"v":[[6.021,-4.551],[1.013,-5.38],[-4.218,-1.705]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[-0.41,-8.229]],"o":[[-1.43,-0.253],[-1.28,0.041],[0.062,1.238]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.995,4.443]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[1.456,-0.046],[-0.41,-8.229]],"o":[[-1.43,-0.253],[-1.28,0.041],[0.062,1.238]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.995,4.443]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.507,1.168]],"c":false}],"e":[{"i":[[0,0],[1.456,-0.046],[0.618,-5.633]],"o":[[-1.43,-0.253],[-1.28,0.041],[-0.135,1.233]],"v":[[6.021,-4.551],[1.672,-4.863],[-4.798,1.708]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[595.165,295.223],"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},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[13.346,-1.673],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.401,-3.388],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":20,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.401,-3.388],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[9.389,-3.1],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}],"e":[{"i":[[0,0],[3.471,0.317],[2.501,-2.475],[-0.137,-0.102]],"o":[[-3.336,-1.061],[-3.031,-0.278],[-1.522,1.506],[0,0]],"v":[[13.346,-1.673],[0.821,-5.183],[-6.786,-2.834],[-8.679,1.214]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[599.593,292.427],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.584,0.136],[0.203,0.316],[-0.868,0.632],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.805,0.158],[-0.427,-0.099],[-0.696,-1.359],[1.483,-1.08],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.935,1.4],[-8.385,2.586],[-10.524,2.652],[-11.492,2.04],[-9.349,-1.328],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.647,-0.209],[0.79,0.212],[0.644,0.445],[0.219,0.341],[-1.078,-0.33],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.45,-0.139],[-0.077,0.006],[-1.038,-0.315],[-0.471,-0.326],[-1.048,-1.931],[3.619,1.107],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-2.658,-2.095],[-7.045,-1.153],[-9.388,-1.49],[-11.934,-2.66],[-12.978,-3.671],[-10.795,-6.416],[-2.58,-7.056],[3.692,-5.593]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":28,"s":[{"i":[[0,0],[2.146,0.684],[2.647,-0.209],[0.79,0.212],[0.644,0.445],[0.219,0.341],[-1.078,-0.33],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.45,-0.139],[-0.077,0.006],[-1.038,-0.315],[-0.471,-0.326],[-1.048,-1.931],[3.619,1.107],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-2.658,-2.095],[-7.045,-1.153],[-9.388,-1.49],[-11.934,-2.66],[-12.978,-3.671],[-10.795,-6.416],[-2.58,-7.056],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[1.633,-1.271],[0.303,-0.077],[0.408,0.13],[0.203,0.316],[-0.757,0.762],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.075,0.059],[-0.7,0.179],[-0.298,-0.095],[-1.486,-2.406],[1.459,-1.468],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.113,-0.873],[-4.424,4.228],[-7.399,5.621],[-9.027,5.725],[-9.767,5.12],[-8.008,0.362],[-2.175,-5.868],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[0,0],[2.146,0.684],[1.633,-1.271],[0.303,-0.077],[0.408,0.13],[0.203,0.316],[-0.757,0.762],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.075,0.059],[-0.7,0.179],[-0.298,-0.095],[-1.486,-2.406],[1.459,-1.468],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.113,-0.873],[-4.424,4.228],[-7.399,5.621],[-9.027,5.725],[-9.767,5.12],[-8.008,0.362],[-2.175,-5.868],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.908,0.357],[0.095,0.615],[-1.613,-0.019],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.761,0.15],[-0.756,-0.297],[-0.107,-1.375],[1.834,0.022],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.903,1.045],[-8.319,1.921],[-11.124,1.597],[-12.573,0.221],[-9.713,-2.266],[-1.165,-6.413],[3.692,-5.593]],"c":false}],"e":[{"i":[[0,0],[2.146,0.684],[2.077,-0.958],[0.348,-0.068],[0.584,0.136],[0.203,0.316],[-0.868,0.632],[-1.492,0.069],[-1.445,-0.379]],"o":[[-2.734,-1.036],[-0.447,-0.138],[-0.096,0.044],[-0.805,0.158],[-0.427,-0.099],[-0.696,-1.359],[1.483,-1.08],[1.492,-0.069],[0,0]],"v":[[7.534,0.869],[-0.921,-1.137],[-4.935,1.4],[-8.385,2.586],[-10.524,2.652],[-11.492,2.04],[-9.349,-1.328],[-1.165,-6.413],[3.692,-5.593]],"c":false}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[598.116,299.533],"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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[-0.075,-0.037],[1.436,-3.994],[0.192,-0.127],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[0.35,0.803],[-1.285,0.553],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.901,-0.8]],"o":[[-0.673,4.021],[-0.293,0.14],[-0.823,0.544],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[-0.529,-1.213],[0.252,-0.109],[0.243,-0.45],[2.122,-0.528],[1.186,0.022],[1.373,0.379]],"v":[[12.97,-5.367],[6.979,6.533],[6.269,6.935],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.961,4.846],[-10.369,5.904],[-13.313,5.418],[-11.236,2.287],[-8.421,-5.551],[-5.697,-7.992],[0.314,-8.868],[8.995,-6.852]],"c":true}],"e":[{"i":[[-0.056,-0.027],[0.152,-5.929],[0.45,-0.196],[2.305,-0.04],[-0.635,1.275],[-1.774,-0.155],[-0.014,0.018],[3.055,0.997],[0.804,-0.264],[1.52,0.019],[0.172,0.826],[-2.594,0.179],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.404,-0.654]],"o":[[-0.214,4.15],[-0.412,0.23],[-1.714,0.747],[-1.022,0.018],[0.584,-1.349],[0.977,0.079],[-2.807,-0.801],[-1.951,0.942],[-0.471,0.196],[-1.498,-0.009],[-0.236,-1.878],[0.237,-0.05],[0.243,-0.45],[2.122,-0.528],[1.369,0.026],[0.962,0.263]],"v":[[10.353,-6.507],[10.254,5.94],[8.092,7.194],[2.953,7.85],[-1.352,5.289],[3.583,4.36],[5.401,4.314],[-4.348,1.446],[-7.248,2.64],[-10.513,3.136],[-14.839,0.737],[-9.932,-1.505],[-8.159,-5.627],[-4.881,-8.252],[0.314,-8.868],[8.515,-7.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-0.056,-0.027],[0.152,-5.929],[0.45,-0.196],[2.305,-0.04],[-0.635,1.275],[-1.774,-0.155],[-0.014,0.018],[3.055,0.997],[0.804,-0.264],[1.52,0.019],[0.172,0.826],[-2.594,0.179],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.404,-0.654]],"o":[[-0.214,4.15],[-0.412,0.23],[-1.714,0.747],[-1.022,0.018],[0.584,-1.349],[0.977,0.079],[-2.807,-0.801],[-1.951,0.942],[-0.471,0.196],[-1.498,-0.009],[-0.236,-1.878],[0.237,-0.05],[0.243,-0.45],[2.122,-0.528],[1.369,0.026],[0.962,0.263]],"v":[[10.353,-6.507],[10.254,5.94],[8.092,7.194],[2.953,7.85],[-1.352,5.289],[3.583,4.36],[5.401,4.314],[-4.348,1.446],[-7.248,2.64],[-10.513,3.136],[-14.839,0.737],[-9.932,-1.505],[-8.159,-5.627],[-4.881,-8.252],[0.314,-8.868],[8.515,-7.066]],"c":true}],"e":[{"i":[[-0.036,-0.018],[-0.221,-4.283],[0.483,-0.172],[2.359,-0.041],[-0.322,1.195],[-1.924,-0.115],[-0.016,0.021],[3.468,0.773],[0.804,-0.264],[1.595,0.356],[-0.012,0.849],[-3.949,-0.207],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.889,-0.502]],"o":[[0.26,4.284],[-0.461,0.281],[-2.066,0.738],[-1.022,0.018],[0.425,-1.646],[1.266,0.075],[-2.807,-0.801],[-2.509,0.875],[-0.477,0.199],[-1.532,-0.34],[0.066,-2.566],[0.22,0.012],[0.243,-0.45],[2.122,-0.528],[1.558,0.029],[0.538,0.143]],"v":[[8.939,-7.029],[11.139,6.457],[9.723,7.13],[3.043,7.774],[-1.519,5.62],[3.174,4.427],[5.64,4.178],[-4.78,1.276],[-7.946,2.312],[-11.41,2.101],[-15.072,-0.479],[-9.241,-2.452],[-7.887,-5.705],[-4.038,-8.522],[0.314,-8.868],[8.019,-7.288]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.036,-0.018],[-0.221,-4.283],[0.483,-0.172],[2.359,-0.041],[-0.322,1.195],[-1.924,-0.115],[-0.016,0.021],[3.468,0.773],[0.804,-0.264],[1.595,0.356],[-0.012,0.849],[-3.949,-0.207],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.889,-0.502]],"o":[[0.26,4.284],[-0.461,0.281],[-2.066,0.738],[-1.022,0.018],[0.425,-1.646],[1.266,0.075],[-2.807,-0.801],[-2.509,0.875],[-0.477,0.199],[-1.532,-0.34],[0.066,-2.566],[0.22,0.012],[0.243,-0.45],[2.122,-0.528],[1.558,0.029],[0.538,0.143]],"v":[[8.939,-7.029],[11.139,6.457],[9.723,7.13],[3.043,7.774],[-1.519,5.62],[3.174,4.427],[5.64,4.178],[-4.78,1.276],[-7.946,2.312],[-11.41,2.101],[-15.072,-0.479],[-9.241,-2.452],[-7.887,-5.705],[-4.038,-8.522],[0.314,-8.868],[8.019,-7.288]],"c":true}],"e":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.494,-0.177],[2.359,-0.041],[-0.289,1.187],[-1.939,-0.111],[-0.016,0.021],[3.512,0.749],[0.804,-0.264],[1.603,0.391],[-0.032,0.852],[-2.124,-0.606],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.849,-0.489]],"o":[[0.309,4.298],[-0.47,0.288],[-2.114,0.757],[-1.022,0.018],[0.408,-1.677],[1.296,0.074],[-2.807,-0.801],[-2.567,0.868],[-0.478,0.199],[-1.536,-0.375],[0.098,-2.638],[0.212,0.061],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.527,0.139]],"v":[[8.807,-7.076],[11.286,6.416],[9.84,7.107],[3.052,7.767],[-1.536,5.654],[3.132,4.434],[5.665,4.164],[-4.889,1.234],[-7.998,2.178],[-11.465,1.899],[-15.165,-0.792],[-10.801,-2.607],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[7.907,-7.328]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":28,"s":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.494,-0.177],[2.359,-0.041],[-0.289,1.187],[-1.939,-0.111],[-0.016,0.021],[3.512,0.749],[0.804,-0.264],[1.603,0.391],[-0.032,0.852],[-2.124,-0.606],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-1.849,-0.489]],"o":[[0.309,4.298],[-0.47,0.288],[-2.114,0.757],[-1.022,0.018],[0.408,-1.677],[1.296,0.074],[-2.807,-0.801],[-2.567,0.868],[-0.478,0.199],[-1.536,-0.375],[0.098,-2.638],[0.212,0.061],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.527,0.139]],"v":[[8.807,-7.076],[11.286,6.416],[9.84,7.107],[3.052,7.767],[-1.536,5.654],[3.132,4.434],[5.665,4.164],[-4.889,1.234],[-7.998,2.178],[-11.465,1.899],[-15.165,-0.792],[-10.801,-2.607],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[7.907,-7.328]],"c":true}],"e":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.468,-0.185],[2.359,-0.041],[-0.353,1.675],[-1.827,-0.215],[-0.012,0.016],[3.084,0.654],[1.007,-1.112],[1.317,-0.485],[0.439,0.731],[-1.279,1.101],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.266,-0.649]],"o":[[0.309,4.298],[-0.47,0.288],[-2.006,0.79],[-1.022,0.018],[0.309,-1.463],[0.783,0.092],[-2.807,-0.801],[-0.483,0.904],[-0.79,0.83],[-1.262,0.465],[-1.111,-1.851],[0.222,-0.191],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.646,0.185]],"v":[[10.36,-6.478],[10.97,6.629],[9.564,7.332],[3.171,8.112],[-1.383,5.348],[3.82,4.269],[5.17,4.447],[-2.222,2.507],[-5.31,6.559],[-8.835,8.776],[-11.706,8.591],[-10.524,4.216],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[9.265,-6.806]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":32,"s":[{"i":[[-0.035,-0.017],[-0.309,-4.298],[0.468,-0.185],[2.359,-0.041],[-0.353,1.675],[-1.827,-0.215],[-0.012,0.016],[3.084,0.654],[1.007,-1.112],[1.317,-0.485],[0.439,0.731],[-1.279,1.101],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.266,-0.649]],"o":[[0.309,4.298],[-0.47,0.288],[-2.006,0.79],[-1.022,0.018],[0.309,-1.463],[0.783,0.092],[-2.807,-0.801],[-0.483,0.904],[-0.79,0.83],[-1.262,0.465],[-1.111,-1.851],[0.222,-0.191],[0.243,-0.45],[2.122,-0.528],[1.569,0.03],[0.646,0.185]],"v":[[10.36,-6.478],[10.97,6.629],[9.564,7.332],[3.171,8.112],[-1.383,5.348],[3.82,4.269],[5.17,4.447],[-2.222,2.507],[-5.31,6.559],[-8.835,8.776],[-11.706,8.591],[-10.524,4.216],[-9.846,-5.519],[-6.182,-8.112],[0.314,-8.868],[9.265,-6.806]],"c":true}],"e":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.17,"y":0},"t":43,"s":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}],"e":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[-0.052,-0.025],[0.5,-4.291],[0.452,-0.118],[2.359,-0.041],[-0.938,1.351],[-1.628,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[-0.016,0.876],[-1.227,0.585],[-0.843,1.567],[-1.107,0.716],[-2.186,-0.041],[-1.985,-0.556]],"o":[[-0.673,4.021],[-0.293,0.14],[-1.937,0.506],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[0.055,-3.115],[0.147,-1.209],[0.243,-0.45],[1.836,-1.188],[1.359,0.026],[0.566,0.158]],"v":[[9.024,-6.857],[11.452,6.686],[10.322,7.073],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.888,4.401],[-10.171,5.234],[-14.474,3.822],[-9.423,0.388],[-8.261,-4.923],[-5.697,-7.991],[0.314,-8.868],[8.035,-7.153]],"c":true}],"e":[{"i":[[-0.075,-0.037],[1.436,-3.994],[0.192,-0.127],[2.359,-0.041],[-0.938,1.351],[-1.629,-0.194],[-0.012,0.016],[2.655,1.213],[0.804,-0.264],[1.448,-0.307],[0.35,0.803],[-1.285,0.553],[-0.843,1.567],[-1.015,0.253],[-2.186,-0.041],[-2.901,-0.8]],"o":[[-0.673,4.021],[-0.293,0.14],[-0.823,0.544],[-1.022,0.018],[0.738,-1.063],[0.698,0.083],[-2.807,-0.801],[-1.411,1.006],[-0.465,0.194],[-1.464,0.311],[-0.529,-1.213],[0.252,-0.109],[0.243,-0.45],[2.122,-0.528],[1.186,0.022],[1.373,0.379]],"v":[[12.97,-5.367],[6.979,6.533],[6.269,6.935],[2.865,7.923],[-1.19,4.97],[3.977,4.295],[5.17,4.447],[-2.717,2.064],[-6.961,4.846],[-10.369,5.904],[-13.313,5.418],[-11.236,2.287],[-8.421,-5.551],[-5.697,-7.992],[0.314,-8.868],[8.995,-6.852]],"c":true}]},{"t":60}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[600.066,296.117],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"3-skirt","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[-338.5,-217,0],"e":[-383,-217,0],"to":[-7.417,0,0],"ti":[7.417,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.167,"y":0.167},"t":20,"s":[-383,-217,0],"e":[-383,-217,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[-383,-217,0],"e":[-338.5,-217,0],"to":[7.417,0,0],"ti":[-7.417,0,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-0.732,-8.958],[-3.316,-10.363],[-0.374,-6.039],[0,0],[-5.352,26.968],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[1.74,5.441],[0,0],[0,0],[2.587,-13.033],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[12.945,-27.234],[20.74,-2.499],[25.198,29.801],[27.42,46.373],[-29.171,42.623],[-18.352,3.616],[-12.731,-26.973],[-14.28,-30.411],[-13.607,-34.367],[-14.156,-38.613],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[-0.732,-8.958],[-0.37,-11.753],[-1.741,-5.441],[0,0],[-8.172,30.023],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[0.151,4.788],[0,0],[0,0],[3.753,-13.786],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[11.195,-26.984],[20.49,-1.249],[22.198,30.051],[24.42,46.123],[-27.421,46.373],[-18.352,-11.884],[-14.356,-27.098],[-15.905,-30.536],[-15.232,-34.492],[-15.781,-38.738],[-14.938,-46.373]],"c":false}],"e":[{"i":[[0,0],[-0.732,-8.958],[-3.316,-10.363],[-0.374,-6.039],[0,0],[-5.352,26.968],[0,0],[-0.335,1.947],[-0.071,1.337],[0.212,1.415],[-0.931,2.416]],"o":[[4.847,7.659],[0.867,10.604],[1.74,5.441],[0,0],[0,0],[2.587,-13.033],[0,0],[0.228,-1.32],[0.076,-1.428],[-0.381,-2.56],[0,0]],"v":[[12.945,-27.234],[20.74,-2.499],[25.198,29.801],[27.42,46.373],[-29.171,42.623],[-18.352,3.616],[-12.731,-26.973],[-14.28,-30.411],[-13.607,-34.367],[-14.156,-38.613],[-14.938,-46.373]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[528.704,158.166],"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":180,"st":0,"bm":0},{"ddd":0,"ind":59,"ty":4,"nm":"3-leg-left1","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[549.642,194.407],[550.727,196.701],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.068,198.856],[551.737,200.502],[564.77,226.841]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.068,198.856],[551.737,200.502],[564.77,226.841]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.625,201.022],[552.48,203.3],[564.609,226.836]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.625,201.022],[552.48,203.3],[564.609,226.836]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.496,202.266],[553.185,205.952],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.532,199.63],[552.098,201.861],[564.989,226.847]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[551.532,199.63],[552.098,201.861],[564.989,226.847]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[549.642,194.407],[550.727,196.701],[564.989,226.847]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823528992896,0.890196018593,0.988234994926,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[560.376,215.488],"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":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":60,"ty":4,"nm":"3-leg-left2","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[-3.094,-6.943],[0,0]],"o":[[1.373,4.03],[3.134,7.032],[0,0]],"v":[[-7.86,-17.252],[0.449,2.539],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-2.234,-5.437],[0,0]],"o":[[0.737,3.621],[2.512,6.325],[0,0]],"v":[[-7.841,-16.423],[-2.667,-1.879],[6.382,15.609]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[-2.234,-5.437],[0,0]],"o":[[0.737,3.621],[2.512,6.325],[0,0]],"v":[[-7.841,-16.423],[-2.667,-1.879],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1.6,-4.328],[0,0]],"o":[[0.268,3.32],[2.054,5.804],[0,0]],"v":[[-7.981,-16.445],[-4.961,-5.131],[6.382,15.609]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[-1.6,-4.328],[0,0]],"o":[[0.268,3.32],[2.054,5.804],[0,0]],"v":[[-7.981,-16.445],[-4.961,-5.131],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[-1,-3.278],[0,0]],"o":[[-0.176,3.035],[1.621,5.31],[0,0]],"v":[[-8.347,-17.137],[-7.135,-8.213],[6.382,15.609]],"c":false}],"e":[{"i":[[0,0],[-1.932,-4.909],[0,0]],"o":[[0.514,3.478],[2.294,6.077],[0,0]],"v":[[-8.074,-16.481],[-3.995,-3.932],[6.759,16.415]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[-1.932,-4.909],[0,0]],"o":[[0.514,3.478],[2.294,6.077],[0,0]],"v":[[-8.074,-16.481],[-3.995,-3.932],[6.759,16.415]],"c":false}],"e":[{"i":[[0,0],[-3.094,-6.943],[0,0]],"o":[[1.373,4.03],[3.134,7.032],[0,0]],"v":[[-7.966,-17.479],[-0.079,1.406],[7.23,17.421]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[536.831,220.148],"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":180,"st":0,"bm":0},{"ddd":0,"ind":61,"ty":4,"nm":"3-leg-left","parent":62,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"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":[[-19.065,-17.71],[-13.53,-6.315],[-4.326,15.609],[17.09,6.287],[3.554,-22.697],[2.158,-25.686]],"c":true}],"e":[{"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}],"e":[{"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"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":[[-18.993,-17.139],[-18.377,-8.293],[-4.326,15.609],[17.09,6.287],[5.445,-13.988],[4.802,-17.481]],"c":true}],"e":[{"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":[[-19.065,-17.71],[-13.53,-6.315],[-4.326,15.609],[17.09,6.287],[3.554,-22.697],[2.158,-25.686]],"c":true}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[547.539,220.148],"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":180,"st":0,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"3-shoes-left","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[25],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[1],"e":[1]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[1],"e":[25]},{"t":67}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[166.131,-0.434,0],"e":[159.577,-26.053,0],"to":[-1.092,-4.27,0],"ti":[1.092,4.27,0]},{"i":{"x":0.437,"y":0.437},"o":{"x":0.329,"y":0.329},"t":20,"s":[159.577,-26.053,0],"e":[159.577,-26.053,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[159.577,-26.053,0],"e":[166.131,-0.434,0],"to":[1.092,4.27,0],"ti":[-1.092,-4.27,0]},{"t":67}],"ix":2,"l":2},"a":{"a":0,"k":[571.25,241.375,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0],[4.965,-2.56],[0.878,-0.45],[-0.283,1.234],[-0.64,0.653],[0.631,2.136],[1.755,4.091]],"o":[[0,0],[0,0],[0,0],[0.274,5.107],[-4.473,2.306],[-0.441,-0.757],[0.205,-0.888],[0.997,-1.019],[-0.388,-1.317],[0,0]],"v":[[7.531,-13.927],[13.885,0.927],[8.285,3.815],[4.585,-2.899],[-3.142,9.729],[-12.288,13.927],[-12.797,10.93],[-11.224,8.613],[-10.729,3.815],[-13.885,-4.714]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[557.098,240.471],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":63,"ty":4,"nm":"3-shoes-right","parent":66,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":0,"s":[22],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[0],"e":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0],"e":[22]},{"t":67}],"ix":10},"p":{"a":0,"k":[62.5,-0.5,0],"ix":2,"l":2},"a":{"a":0,"k":[522.75,256.25,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.283,-1.499],[0.856,-0.297],[0.58,-0.752],[-0.042,-0.946],[-4.941,-0.003],[-2.064,5.031],[0,0],[0,0],[0,0]],"o":[[-0.312,4.687],[-0.444,2.355],[-0.856,0.298],[-0.804,1.041],[0.968,0.003],[5.486,0.005],[0,0],[0,0],[0,0],[0,0]],"v":[[-8.22,-8.368],[-9.14,0.495],[-12.215,3.782],[-14.632,5.226],[-15.54,8.351],[-4.319,8.363],[8.117,0.083],[8.315,8.354],[14.503,8.357],[15.582,-8.368]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[507.294,248.097],"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}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":64,"ty":4,"nm":"3-leg-right","parent":63,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.523,-24.692]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.29,-20.404]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.29,-20.404]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.999,-17.162],[-13.206,17.921],[10.596,17.921],[13.196,-18.394]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.999,-17.162],[-13.206,17.921],[10.596,17.921],[13.196,-18.394]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.177,-17.541]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.346,-19.902]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.346,-19.902]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-1.076,14.919],[0,0],[0,0],[0,0]],"v":[[-10.969,-17.541],[-13.176,17.542],[10.625,17.542],[13.523,-24.692]],"c":false}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[512.251,222.188],"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":180,"st":0,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"3-left-right","parent":63,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.17,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.708,-24.848]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.177,-17.488]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.967,-17.595],[-12.357,3.675],[-13.176,17.595],[10.625,17.595],[13.708,-24.848]],"c":true}]},{"t":67}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[512.251,222.134],"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":180,"st":0,"bm":0},{"ddd":0,"ind":66,"ty":3,"nm":"character4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[384,219,0],"ix":2,"l":2},"a":{"a":0,"k":[0.564,1.926,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":67,"ty":1,"nm":"White Solid 10","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[288.5,142.5,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"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":[[610.633,461.5],[553.75,461.5],[553,482.053],[610.633,482.053]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"Shape Layer 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"Shape Layer 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,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]],"o":[[0,0]],"v":[[-42.5,54.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.125490196078,0.454901990704,0.901960844152,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":[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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"주머니","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.036,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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]],"o":[[0,0]],"v":[[225.75,233.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823528992896,0.890196018593,0.988234994926,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":"Shape 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":[[0,0],[0,0],[0,0],[0,0],[-1.515,-0.979],[0,0]],"o":[[0,0],[0,0],[0,0],[0.014,1.803],[0,0],[0,0]],"v":[[2.04,-6.254],[-2.041,-6.254],[-2.041,1.122],[-2.041,1.164],[0.525,5.589],[1.555,6.254]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[344.245,182.577],"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":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"2-phone","parent":74,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.83],"y":[0.622]},"o":{"x":[0.13],"y":[0.067]},"t":0,"s":[0],"e":[-6]},{"i":{"x":[0.88],"y":[0.987]},"o":{"x":[0.17],"y":[0]},"t":5,"s":[-6],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0],"e":[10]},{"t":9}],"ix":10},"p":{"a":0,"k":[290.091,137.132,0],"ix":2,"l":2},"a":{"a":0,"k":[290.091,137.132,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-8.111,-6.873],[8.111,6.873]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[282.181,130.296],"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":180,"st":0,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"2-thumb 2","parent":74,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.13,"y":0.03},"t":0,"s":[{"i":[[0,0],[0.189,0.59],[-0.617,0.75],[-0.734,-0.789],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.258,-0.807],[0.991,-1.205],[2.17,2.329],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-3.012,-6.135],[-3.846,-7.793],[-3.895,-10.586],[-0.672,-9.646],[4.387,-1.649],[6.49,3.131],[7.016,4.367]],"c":false}],"e":[{"i":[[0,0],[0.065,0.616],[-0.816,0.57],[0.104,-1.78],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.111,-1.057],[0.768,-0.974],[-0.179,3.074],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-1.432,-5.238],[-0.996,-9.537],[0.046,-12.836],[2.78,-10.92],[5.172,-1.735],[6.49,3.131],[7.016,4.367]],"c":false}]},{"i":{"x":0.88,"y":0.98},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0.065,0.616],[-0.816,0.57],[0.104,-1.78],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.111,-1.057],[0.768,-0.974],[-0.179,3.074],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-1.432,-5.238],[-0.996,-9.537],[0.046,-12.836],[2.78,-10.92],[5.172,-1.735],[6.49,3.131],[7.016,4.367]],"c":false}],"e":[{"i":[[0,0],[0.189,0.59],[-0.617,0.75],[-0.734,-0.789],[-1.351,-2.859],[-0.68,-1.602],[-0.176,-0.412]],"o":[[-0.378,-0.494],[-0.258,-0.807],[0.991,-1.205],[2.17,2.329],[0.744,1.575],[0.175,0.412],[-4.305,1.81]],"v":[[-3.012,-6.135],[-3.846,-7.793],[-3.895,-10.586],[-0.672,-9.646],[4.387,-1.649],[6.49,3.131],[7.016,4.367]],"c":false}]},{"t":8}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[294.542,144.929],"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":180,"st":0,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"2-finger","parent":74,"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],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0],"e":[12]},{"t":11}],"ix":10},"p":{"a":0,"k":[292,139,0],"ix":2,"l":2},"a":{"a":0,"k":[292,139,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],[2.072,1.585],[0.414,0.934],[-0.582,0.591],[-0.903,-0.389],[-1.031,-0.597],[-1.361,-0.923],[-0.702,-0.517],[0,0]],"o":[[-2.072,-1.584],[-0.791,-0.605],[-0.327,-0.74],[0.77,-0.784],[1.101,0.475],[1.424,0.823],[0.721,0.489],[1.433,1.054],[0,0]],"v":[[0.044,5.009],[-6.172,0.255],[-8.235,-1.959],[-7.896,-4.225],[-5.032,-4.341],[-1.968,-2.496],[2.21,0.124],[4.345,1.634],[8.562,4.805]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[287.185,137.16],"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":180,"st":0,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"2-hand","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.13],"y":[0.015]},"t":2,"s":[0],"e":[-9]},{"i":{"x":[0.88],"y":[0.99]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[-9],"e":[0]},{"t":12.5}],"ix":10},"p":{"a":0,"k":[295,152.25,0],"ix":2,"l":2},"a":{"a":0,"k":[295,152.25,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],[0.189,0.224],[0.998,1.673],[-0.79,1.701],[-0.345,0.47],[0.232,0.709]],"o":[[0,0],[-1.259,-1.49],[-0.831,-1.393],[0.245,-0.528],[0.344,-0.47],[0,0]],"v":[[4.053,7.929],[1.376,4.951],[-1.956,0.52],[-3.262,-4.547],[-2.251,-5.967],[-1.678,-7.93]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[285.775,147.703],"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":180,"st":0,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"2-arm 2","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.83],"y":[1]},"o":{"x":[0.13],"y":[0.02]},"t":0,"s":[0],"e":[-9]},{"i":{"x":[0.88],"y":[0.99]},"o":{"x":[0.17],"y":[0]},"t":5,"s":[-9],"e":[0]},{"t":10}],"ix":10},"p":{"a":0,"k":[313.629,165.755,0],"ix":2,"l":2},"a":{"a":0,"k":[313.629,165.755,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],[0,0]],"o":[[1.64,2.163],[0,0]],"v":[[-5.98,-8.058],[5.98,8.058]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[307.538,157.354],"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":180,"st":0,"bm":0},{"ddd":0,"ind":76,"ty":1,"nm":"White Solid 8","parent":98,"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":45,"s":[300,147.68,0],"e":[299.75,148.43,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[299.75,148.43,0],"e":[300,147.68,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83}],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[19.275,8.304],[12.988,-0.127],[2.376,-10.473],[0,0],[0,0],[-0.162,13.471]],"o":[[-11.23,-4.838],[-8.96,0.088],[-2.376,10.473],[0,0],[0,0],[0.162,-13.471]],"v":[[642.23,353.088],[588.512,341.877],[555.126,355.277],[569,377.25],[656.75,405.75],[689.588,385.471]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"2-body","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[-8],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.332],"y":[0]},"t":20,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[0],"e":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-5],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[0],"e":[-0.5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[-0.5],"e":[0]},{"i":{"x":[0.806],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":94,"s":[0],"e":[-7]},{"t":100}],"ix":10},"p":{"a":0,"k":[345.844,166.969,0],"ix":2,"l":2},"a":{"a":0,"k":[345.835,166.987,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],[0.795,5.068],[5.264,3.399],[3.889,-3.5],[3.429,-10.447]],"o":[[-0.053,-5.128],[-0.913,-5.816],[-4.452,-2.875],[-6.466,5.82],[0,0]],"v":[[17.855,17.616],[16.511,1.188],[8.904,-14.741],[-5.325,-13.399],[-17.855,11.476]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[327.944,149.303],"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":180,"st":0,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"2-belt","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[345.812,166.656,0],"ix":2,"l":2},"a":{"a":0,"k":[345.812,166.906,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[345.8,166.919],[331.205,166.9]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[345.8,166.919],[330.705,166.919]],"c":false}]},{"t":10}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"Layer 2 Outlines","parent":78,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[340.407,166.919],[340.407,169.56]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":80,"ty":4,"nm":"Layer 3 Outlines","parent":78,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[330.814,169.908],[345.799,169.923]],"c":true}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}],"e":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[329.939,169.923],[345.799,169.923]],"c":false}]},{"t":20}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":81,"ty":4,"nm":"some","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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.176,-0.412],[4.306,-1.81]],"o":[[-4.305,1.81],[0,0]],"v":[[7.016,4.367],[-7.016,11.791]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[294.542,144.929],"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":180,"st":0,"bm":0},{"ddd":0,"ind":82,"ty":4,"nm":"2-arm","parent":75,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.453,1.654]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.44,1.844]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[0.44,1.844]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[1.751,4.252]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[1.751,4.252]],"c":false}],"e":[{"i":[[0,0],[-1.316,-2.596]],"o":[[1.449,5.223],[0,0]],"v":[[-2.841,-6.632],[2.654,6.194]],"c":false}]},{"t":22}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[290.368,163.351],"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":180,"st":0,"bm":0},{"ddd":0,"ind":83,"ty":4,"nm":"2-arm-back","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[-0.757,2.881],[-1.219,8.152]],"o":[[2.319,-1.977],[1.967,-7.471],[0,0]],"v":[[-4.53,15.224],[-0.091,7.45],[4.529,-15.224]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[330.029,162.473],"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":180,"st":0,"bm":0},{"ddd":0,"ind":84,"ty":4,"nm":"2-head-hair","parent":86,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":3,"s":[1.446],"e":[41.446]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[41.446],"e":[41.446]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":27,"s":[41.446],"e":[1.446]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[1.446],"e":[1.446]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[1.446],"e":[1.446]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":3,"s":[329.626,116.245,0],"e":[332.984,116.955,0],"to":[0.56,0.118,0],"ti":[-0.56,-0.118,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[332.984,116.955,0],"e":[332.984,116.955,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":27,"s":[332.984,116.955,0],"e":[329.626,116.245,0],"to":[-0.56,-0.118,0],"ti":[0.56,0.118,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":50,"s":[329.626,116.245,0],"e":[329.626,116.245,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[329.626,116.245,0],"e":[329.626,116.245,0],"to":[0,0,0],"ti":[0,0,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[329.5,116.25,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],[0.109,0.671],[4.728,-0.092],[0.546,-4.455],[-0.677,0],[0,0],[-0.079,0.362],[0,0],[-0.071,-0.174],[0,0],[-0.477,0.015]],"o":[[0.68,-0.022],[-0.72,-4.426],[-4.732,0.092],[-0.082,0.672],[0,0],[0.371,0],[0,0],[0.06,-0.178],[0,0],[0.18,0.443],[0,0]],"v":[[8.172,4.372],[9.27,3.068],[-0.155,-4.608],[-9.297,3.438],[-8.157,4.7],[-1.442,4.7],[-0.672,4.079],[0.3,1.223],[0.68,1.212],[1.744,3.834],[2.837,4.545]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,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":[329.491,115.912],"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":180,"st":0,"bm":0},{"ddd":0,"ind":85,"ty":4,"nm":"2-mouse","parent":86,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":3,"s":[2.8],"e":[34.8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[34.8],"e":[34.8]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":27,"s":[34.8],"e":[2.8]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[2.8],"e":[2.8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[2.8],"e":[2.8]},{"t":100}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":3,"s":[322.848,125.48,0],"e":[322.069,121.563,0],"to":[-0.13,-0.653,0],"ti":[0.13,0.653,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[322.069,121.563,0],"e":[322.069,121.563,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":27,"s":[322.069,121.563,0],"e":[322.848,125.48,0],"to":[0.13,0.653,0],"ti":[-0.13,-0.653,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":50,"s":[322.848,125.48,0],"e":[322.848,125.48,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[322.848,125.48,0],"e":[322.848,125.48,0],"to":[0,0,0],"ti":[0,0,0]},{"t":100}],"ix":2,"l":2},"a":{"a":0,"k":[323.062,125.812,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],[-0.75,1.102]],"o":[[1.42,0.098],[0,0]],"v":[[-1.79,0.781],[1.79,-0.88]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[324.856,124.973],"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":180,"st":0,"bm":0},{"ddd":0,"ind":86,"ty":4,"nm":"2-head","parent":87,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[0.945]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[-15.8],"e":[0.9]},{"i":{"x":[0.732],"y":[1.162]},"o":{"x":[0.242],"y":[-0.226]},"t":22,"s":[0.9],"e":[0]},{"i":{"x":[0.64],"y":[1.073]},"o":{"x":[0.27],"y":[0.022]},"t":36,"s":[0],"e":[4]},{"i":{"x":[0.696],"y":[1.025]},"o":{"x":[0.522],"y":[0.089]},"t":43,"s":[4],"e":[-3]},{"i":{"x":[0.562],"y":[1]},"o":{"x":[0.384],"y":[0.081]},"t":50.2,"s":[-3],"e":[0]},{"i":{"x":[0.696],"y":[1.057]},"o":{"x":[0.167],"y":[0]},"t":57.399,"s":[0],"e":[-3]},{"i":{"x":[0.562],"y":[1]},"o":{"x":[0.384],"y":[0.081]},"t":64.6,"s":[-3],"e":[0]},{"i":{"x":[0.696],"y":[1.057]},"o":{"x":[0.167],"y":[0]},"t":71.8,"s":[0],"e":[-3]},{"i":{"x":[0.696],"y":[0.642]},"o":{"x":[0.384],"y":[0.508]},"t":79,"s":[-3],"e":[-3]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.384],"y":[-0.016]},"t":94,"s":[-3],"e":[-15.8]},{"t":100}],"ix":10},"p":{"a":0,"k":[329.75,121.25,0],"ix":2,"l":2},"a":{"a":0,"k":[329.75,121.25,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":[[-2.572,-3.669],[3.669,-2.572],[2.573,3.669],[-3.669,2.573]],"o":[[2.573,3.669],[-3.669,2.573],[-2.572,-3.669],[3.669,-2.573]],"v":[[6.642,-4.658],[4.658,6.643],[-6.644,4.658],[-4.659,-6.643]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[329.506,120.937],"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":180,"st":0,"bm":0},{"ddd":0,"ind":87,"ty":4,"nm":"2-neck-back","parent":77,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.9,"ix":10},"p":{"a":0,"k":[335.293,133.27,0],"ix":2,"l":2},"a":{"a":0,"k":[335.293,133.27,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],[0,0]],"o":[[0,0],[0,0]],"v":[[0.578,2.98],[-0.579,-2.98]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[334.743,130.56],"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":180,"st":0,"bm":0},{"ddd":0,"ind":88,"ty":4,"nm":"2-neck-front","parent":87,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.32,2.191],[0.32,-2.19]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[326.693,131.242],"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":180,"st":0,"bm":0},{"ddd":0,"ind":89,"ty":4,"nm":"2-shoes-acc-1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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":[[-2.14,-0.055],[2.14,0.055]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[268.457,245.384],"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":180,"st":0,"bm":0},{"ddd":0,"ind":90,"ty":4,"nm":"2-shoes-acc-2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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":[[-2.034,-0.011],[2.034,0.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[268.562,242.362],"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":180,"st":0,"bm":0},{"ddd":0,"ind":91,"ty":4,"nm":"2-leg-left","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.369,11.358],[-11.808,4.922],[-14.354,-6.626]],"o":[[0.152,-3.604],[1.272,-10.549],[13.701,-5.711],[0,0]],"v":[[-34.727,35.072],[-32.243,-1.637],[-15.114,-29.361],[34.727,-20.152]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[298.555,201.253],"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":180,"st":0,"bm":0},{"ddd":0,"ind":92,"ty":4,"nm":"2-leg-shoes","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.295,-3.069],[2.305,-1.052],[0.732,-1.055],[0.105,-0.853],[-6.322,0.002],[0,0],[0,0],[0,0]],"o":[[-0.192,3.076],[-0.216,2.247],[-1.123,0.513],[-0.508,0.732],[1.075,0.003],[0,0],[3.485,-0.001],[0,0],[0,0]],"v":[[-9.866,-9.767],[-10.498,-0.542],[-13.37,5.286],[-16.465,7.328],[-17.103,9.764],[-4.624,9.764],[7.511,9.761],[16.421,9.759],[17.103,-9.645]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[276.584,246.694],"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":180,"st":0,"bm":0},{"ddd":0,"ind":93,"ty":4,"nm":"2-leg-bottom-left","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.625,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-16.169,18.77],[14.461,18.77],[16.169,-18.77]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[279.998,217.555],"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":180,"st":0,"bm":0},{"ddd":0,"ind":94,"ty":4,"nm":"Layer 101 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.128,-19.302],[-8.588,9.449],[-0.529,25.238],[5.587,26.765],[6.178,9.449],[6.95,9.244],[8.588,-26.766]],"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":[287.509,227.081],"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":180,"st":0,"bm":0},{"ddd":0,"ind":95,"ty":4,"nm":"2-shoes-right-acc1","parent":102,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.921,-0.945],[1.921,0.945]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[230.248,235.586],"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":180,"st":0,"bm":0},{"ddd":0,"ind":96,"ty":4,"nm":"2-shoes-right-acc2","parent":102,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,148,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.843,-0.861],[1.844,0.861]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[231.607,232.884],"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":180,"st":0,"bm":0},{"ddd":0,"ind":97,"ty":1,"nm":"White Solid 8","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.75,148.43,0],"ix":2,"l":2},"a":{"a":0,"k":[600,296,0],"ix":1,"l":2},"s":{"a":0,"k":[50,50,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0.763],[0,0],[0,0],[-0.162,13.471]],"o":[[-2.512,0],[0,0],[0,0],[0.162,-13.471]],"v":[[481.512,417.877],[462.25,448],[517.125,473.5],[524.088,442.471]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1200,"sh":592,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":98,"ty":4,"nm":"2-leg-hip","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":0,"ix":3},"y":{"a":0,"k":0.5,"ix":4}},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.883,-1.175],[-4.882,-0.17],[-3.885,2.116],[-0.972,4.748],[0.736,8.684]],"o":[[4.883,1.178],[4.73,1.139],[4.347,0.151],[4.316,-2.35],[0.973,-4.75],[0,0]],"v":[[-25.338,13.475],[-10.668,16.915],[3.735,19.346],[16.587,16.678],[24.304,5.686],[24.041,-18.998]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[321.598,185.314],"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":180,"st":0,"bm":0},{"ddd":0,"ind":99,"ty":4,"nm":"2-pants-right","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[284.5,169.25,0],"ix":2,"l":2},"a":{"a":0,"k":[284.5,169.5,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],[-6.35,10.527],[-12.94,-0.125],[-2.26,-0.707]],"o":[[1.759,-3.459],[5.898,-9.777],[2.237,0.021],[0,0]],"v":[[-26.865,26.636],[-8.104,-8.202],[19.92,-28.136],[26.678,-27.008]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.156,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[256.601,197.973],"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":180,"st":0,"bm":0},{"ddd":0,"ind":100,"ty":4,"nm":"2-pants-right2","parent":98,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,147.214,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-17.27,-6.3],[11.807,7.251],[17.27,-4.251]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.115,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[247.099,231.722],"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":180,"st":0,"bm":0},{"ddd":0,"ind":101,"ty":4,"nm":"2-sofa","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[58.875,218.125,0],"ix":2,"l":2},"a":{"a":0,"k":[329.438,257.062,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.371,0],[0,0],[0,14.372],[-14.371,0],[0,0],[0,-14.37]],"o":[[0,0],[-14.371,0],[0,-14.37],[0,0],[14.371,0],[0,14.372]],"v":[[16.305,26.02],[-16.306,26.02],[-42.326,-0.001],[-16.306,-26.02],[16.305,-26.02],[42.326,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[329.495,231.078],"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":180,"st":0,"bm":0},{"ddd":0,"ind":102,"ty":4,"nm":"2-shoes-right","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-1,"ix":10},"p":{"a":0,"k":[-99.375,212.929,0],"ix":2,"l":2},"a":{"a":0,"k":[247.562,255,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.551,-2.664],[2.534,0.008],[1.107,-0.652],[0.452,-0.733],[-5.744,-2.641],[0,0],[0,0],[0,0]],"o":[[-1.459,2.714],[-1.135,1.951],[-1.235,-0.004],[-0.767,0.454],[0.976,0.452],[0,0],[3.167,1.455],[0,0],[0,0]],"v":[[-4.856,-14.363],[-9.285,-6.247],[-14.331,-2.152],[-17.997,-1.591],[-19.594,0.357],[-8.257,5.572],[2.769,10.641],[10.865,14.363],[19.594,-2.981]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[237.059,241.539],"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":180,"st":0,"bm":0},{"ddd":0,"ind":103,"ty":4,"nm":"square sky blue","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[0.2]},"o":{"x":[0.26],"y":[0]},"t":0,"s":[0],"e":[-5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.26],"y":[0]},"t":14,"s":[-5],"e":[5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":47,"s":[5],"e":[0]},{"t":100}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.74],"y":[1]},"o":{"x":[0.4],"y":[0.8]},"t":0,"s":[129],"e":[131]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":19,"s":[131],"e":[130]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":42,"s":[130],"e":[131]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":61,"s":[131],"e":[129]},{"t":100}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.74],"y":[1]},"o":{"x":[0.4],"y":[0.8]},"t":0,"s":[-9],"e":[-23]},{"i":{"x":[0.77],"y":[1.12]},"o":{"x":[0.56],"y":[0.52]},"t":19,"s":[-23],"e":[-18]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":42,"s":[-18],"e":[-22]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":61,"s":[-22],"e":[-9]},{"t":100}],"ix":4}},"a":{"a":0,"k":[364.5,143.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.732,-0.975],[0,0],[0.975,-0.733],[0,0],[0.734,0.975],[0,0],[-0.976,0.733],[0,0]],"o":[[0,0],[0.733,0.975],[0,0],[-0.975,0.733],[0,0],[-0.733,-0.975],[0,0],[0.976,-0.733]],"v":[[2.76,-8.047],[8.497,-0.412],[8.058,2.681],[0.332,8.486],[-2.761,8.047],[-8.497,0.412],[-8.058,-2.681],[-0.333,-8.486]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,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":[364.634,143.492],"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":180,"st":0,"bm":0},{"ddd":0,"ind":104,"ty":4,"nm":"Oval_character 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.95]},"o":{"x":[0.17],"y":[0.225]},"t":0,"s":[2.081],"e":[-5.919]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.07]},"t":20,"s":[-5.919],"e":[2.081]},{"t":98.7890625}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.57],"y":[1.029]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-514.596],"e":[-524.596]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":20,"s":[-524.596],"e":[-518.596]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.4],"y":[-0.236]},"t":48.736,"s":[-518.596],"e":[-514.596]},{"t":101}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.57],"y":[1.029]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[129.05],"e":[124.55]},{"i":{"x":[0.77],"y":[1.06]},"o":{"x":[0.56],"y":[0.26]},"t":20,"s":[124.55],"e":[127.3]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.4],"y":[-0.225]},"t":48.736,"s":[127.3],"e":[129.05]},{"t":101}],"ix":4}},"a":{"a":0,"k":[29,194.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,-0.836],[-3.307,-1.317],[0,0],[-1.639,4.127],[-0.05,0.842],[3.302,1.317],[0,0],[1.644,-4.127]],"o":[[-0.2,3.369],[0,0],[4.122,1.639],[0.327,-0.819],[0.198,-3.363],[0,0],[-4.127,-1.639],[-0.327,0.819]],"v":[[-16.988,-4.042],[-11.932,3.905],[5.991,11.039],[16.431,6.54],[16.99,4.036],[11.938,-3.905],[-5.985,-11.039],[-16.43,-6.54]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.173,193.797],"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":180,"st":0,"bm":0},{"ddd":0,"ind":105,"ty":4,"nm":"다이아","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.518],"y":[0.857]},"o":{"x":[0.467],"y":[-0.093]},"t":0,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.668],"y":[-0.211]},"o":{"x":[0.456],"y":[-0.108]},"t":29,"s":[10.446],"e":[2.081]},{"i":{"x":[0.515],"y":[0.918]},"o":{"x":[0.174],"y":[0.318]},"t":56,"s":[2.081],"e":[-9.548]},{"i":{"x":[0.518],"y":[0.926]},"o":{"x":[0.467],"y":[-0.048]},"t":72,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.845],"y":[0.92]},"o":{"x":[0.456],"y":[-0.056]},"t":87,"s":[10.446],"e":[2.081]},{"t":101}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.567],"y":[1.045]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-465.971],"e":[-511.971]},{"i":{"x":[0.768],"y":[1.075]},"o":{"x":[0.564],"y":[0.293]},"t":27,"s":[-511.971],"e":[-497.846]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":54,"s":[-497.846],"e":[-501.548]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":69,"s":[-501.548],"e":[-465.971]},{"t":101}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.567],"y":[1.04]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[100.8],"e":[95.3]},{"i":{"x":[0.768],"y":[1.055]},"o":{"x":[0.564],"y":[0.217]},"t":27,"s":[95.3],"e":[96.925]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":54,"s":[96.925],"e":[96.329]},{"i":{"x":[0.478],"y":[1]},"o":{"x":[0.356],"y":[-0.031]},"t":69,"s":[96.329],"e":[100.8]},{"t":101}],"ix":4}},"a":{"a":0,"k":[62.438,198.438,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.377,-0.316],[0,0],[0.317,-0.378],[0,0],[0.378,0.316],[0,0],[-0.317,0.377],[0,0]],"o":[[0,0],[0.377,0.316],[0,0],[-0.317,0.378],[0,0],[-0.378,-0.316],[0,0],[0.317,-0.377]],"v":[[0.351,-3.417],[3.305,-0.938],[3.414,0.318],[0.907,3.307],[-0.35,3.417],[-3.303,0.938],[-3.413,-0.317],[-0.906,-3.307]],"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":[62.422,198.476],"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":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":106,"ty":4,"nm":"세모","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.068]},"t":0,"s":[-17],"e":[-4]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.139]},"t":27.281,"s":[-4],"e":[-19]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.52]},"t":63.676,"s":[-19],"e":[-17]},{"t":99}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.038]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[-291.532],"e":[-274.532]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":23,"s":[-274.532],"e":[-280.532]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":46.55,"s":[-280.532],"e":[-278.032]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":61.535,"s":[-278.032],"e":[-291.532]},{"t":99}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.038]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[51.039],"e":[60.539]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":23,"s":[60.539],"e":[57.039]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":46.55,"s":[57.039],"e":[59.039]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":61.535,"s":[59.039],"e":[51.039]},{"t":99}],"ix":4}},"a":{"a":0,"k":[150.469,171.031,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.003,0.435],[-0.03,5.845],[-0.375,-0.23],[0,0],[0.371,-0.213],[0,0]],"o":[[0.054,-7.316],[0.002,-0.441],[0,0],[0.364,0.225],[0,0],[-0.378,0.216]],"v":[[-6.426,6.889],[-6.338,-6.891],[-5.477,-7.369],[6.065,-0.256],[6.05,0.714],[-5.581,7.383]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[150.527,171.076],"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":[{"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 2","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,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":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 2","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960849762,0.905882418156,0.917647123337,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 3","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":107,"ty":4,"nm":"Circle_character2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.515],"y":[0.98]},"o":{"x":[0.174],"y":[0.092]},"t":0,"s":[2.081],"e":[-9.548]},{"i":{"x":[0.518],"y":[0.854]},"o":{"x":[0.467],"y":[-0.095]},"t":7.332,"s":[-9.548],"e":[10.446]},{"i":{"x":[0.668],"y":[0.194]},"o":{"x":[0.456],"y":[-0.072]},"t":62.624,"s":[10.446],"e":[2.081]},{"t":96.1318359375}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":-14.271,"s":[-293.873],"e":[-293.873]},{"i":{"x":[0.488],"y":[1.053]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-293.873],"e":[-266.623]},{"i":{"x":[0.728],"y":[1.04]},"o":{"x":[0.462],"y":[0.124]},"t":24.62,"s":[-266.623],"e":[-277.873]},{"i":{"x":[0.561],"y":[1.159]},"o":{"x":[0.404],"y":[0.098]},"t":48.123,"s":[-277.873],"e":[-272.623]},{"i":{"x":[0.416],"y":[1]},"o":{"x":[0.346],"y":[0.078]},"t":61.554,"s":[-272.623],"e":[-293.873]},{"t":98.484375}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":-14.271,"s":[28.933],"e":[28.933]},{"i":{"x":[0.488],"y":[1.053]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[28.933],"e":[10.683]},{"i":{"x":[0.728],"y":[1.04]},"o":{"x":[0.462],"y":[0.124]},"t":24.62,"s":[10.683],"e":[18.183]},{"i":{"x":[0.561],"y":[1.159]},"o":{"x":[0.404],"y":[0.098]},"t":48.123,"s":[18.183],"e":[14.933]},{"i":{"x":[0.416],"y":[1]},"o":{"x":[0.346],"y":[0.078]},"t":61.554,"s":[14.933],"e":[28.933]},{"t":98.484375}],"ix":4}},"a":{"a":0,"k":[156.062,157.531,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.763],[1.763,0],[0,1.764],[-1.764,0]],"o":[[0,1.764],[-1.764,0],[0,-1.763],[1.763,0]],"v":[[3.193,-0.001],[0,3.193],[-3.193,-0.001],[0,-3.192]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.084,157.354],"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":180,"st":0,"bm":0},{"ddd":0,"ind":108,"ty":4,"nm":"Circle_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[191],"e":[191]},{"i":{"x":[0.73],"y":[1]},"o":{"x":[0.46],"y":[0]},"t":25,"s":[191],"e":[191]},{"i":{"x":[0.56],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":48,"s":[191],"e":[191]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0]},"t":62,"s":[191],"e":[191]},{"t":98}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.49],"y":[1.05]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[-13.25],"e":[-22.25]},{"i":{"x":[0.73],"y":[1.04]},"o":{"x":[0.46],"y":[0.12]},"t":25,"s":[-22.25],"e":[-13.25]},{"i":{"x":[0.56],"y":[1.16]},"o":{"x":[0.4],"y":[0.1]},"t":48,"s":[-13.25],"e":[-19.25]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.35],"y":[0.08]},"t":62,"s":[-19.25],"e":[-13.25]},{"t":98}],"ix":4}},"a":{"a":0,"k":[395.5,144.5,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.261],[5.26,0],[0,5.26],[-5.261,0]],"o":[[0,5.26],[-5.261,0],[0,-5.261],[5.26,0]],"v":[[9.526,0],[0,9.525],[-9.526,0],[0,-9.525]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[395.222,144.324],"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":180,"st":0,"bm":0},{"ddd":0,"ind":109,"ty":4,"nm":"Circle_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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]],"o":[[0,0],[0,0],[0,0]],"v":[[-18.783,-14.877],[-11.34,14.877],[18.782,14.877]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.204000001795,0.658999992819,0.325,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2.211,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[437.996,137.01],"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":180,"st":0,"bm":0},{"ddd":0,"ind":110,"ty":4,"nm":"Pinkdot_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96.231,"s":[100],"e":[0]},{"t":98}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":70,"s":[100],"e":[209]},{"t":98}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.017},"t":70,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":98}],"ix":2,"l":2},"a":{"a":0,"k":[436,123.5,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":70,"s":[25,25,100],"e":[200,200,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":76.19,"s":[200,200,100],"e":[200,200,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":91.222,"s":[200,200,100],"e":[25,25,100]},{"t":98}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.09],[2.09,0],[0,2.09],[-2.09,0]],"o":[[0,2.09],[-2.09,0],[0,-2.09],[2.09,0]],"v":[[3.784,0],[0,3.784],[-3.784,0],[0,-3.784]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.972999961703,0.510000011968,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":[435.901,123.423],"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":70,"op":192,"st":12,"bm":0},{"ddd":0,"ind":111,"ty":4,"nm":"Sqaure_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85.231,"s":[100],"e":[0]},{"t":87}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.981]},"o":{"x":[0.13],"y":[0.029]},"t":60,"s":[100],"e":[209]},{"t":87}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.989},"o":{"x":0.13,"y":0.018},"t":60,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":87}],"ix":2,"l":2},"a":{"a":0,"k":[468,95.5,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":60,"s":[25,25,100],"e":[200,200,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":66.19,"s":[200,200,100],"e":[200,200,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":81.222,"s":[200,200,100],"e":[25,25,100]},{"t":87}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.623,1.459],[0,0],[-1.46,-0.624],[0,0],[0.623,-1.46],[0,0],[1.46,0.623],[0,0]],"o":[[0,0],[0.623,-1.459],[0,0],[1.459,0.624],[0,0],[-0.623,1.46],[0,0],[-1.459,-0.623]],"v":[[-10.864,2.115],[-5.983,-9.311],[-2.212,-10.824],[9.35,-5.886],[10.864,-2.114],[5.983,9.311],[2.211,10.825],[-9.35,5.886]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"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":[1,1,1,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[467.936,95.276],"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}],"ip":60,"op":192,"st":12,"bm":0},{"ddd":0,"ind":112,"ty":4,"nm":"Redcircle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92.231,"s":[100],"e":[0]},{"t":94}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":66,"s":[100],"e":[209]},{"t":94}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":66,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":94}],"ix":2,"l":2},"a":{"a":0,"k":[278.5,87,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":66,"s":[25,25,100],"e":[130,130,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":72.19,"s":[130,130,100],"e":[130,130,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.222,"s":[130,130,100],"e":[25,25,100]},{"t":94}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.171,-7.644],[7.644,1.172],[-1.172,7.644],[-7.643,-1.171]],"o":[[-1.171,7.644],[-7.643,-1.171],[1.171,-7.643],[7.644,1.171]],"v":[[13.841,2.12],[-2.121,13.84],[-13.84,-2.122],[2.121,-13.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.263000009574,0.20800000359,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":[278.733,86.771],"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":66,"op":246,"st":66,"bm":0},{"ddd":0,"ind":113,"ty":4,"nm":"Yellowtriangle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.231,"s":[100],"e":[0]},{"t":84}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":56,"s":[100],"e":[209]},{"t":84}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":56,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":84}],"ix":2,"l":2},"a":{"a":0,"k":[455.062,105.5,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":56,"s":[25,25,100],"e":[200,200,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":62.19,"s":[200,200,100],"e":[200,200,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":77.222,"s":[200,200,100],"e":[25,25,100]},{"t":84}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.239,-0.561],[3.199,-7.533],[0.36,0.501],[0,0],[-0.595,0.074],[0,0]],"o":[[-4.023,9.419],[-0.24,0.567],[0,0],[-0.35,-0.488],[0,0],[0.604,-0.075]],"v":[[10.052,-8.616],[2.491,9.133],[1.121,9.285],[-9.94,-6.139],[-9.397,-7.383],[9.228,-9.71]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[454.931,105.475],"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":56,"op":188,"st":8,"bm":0},{"ddd":0,"ind":114,"ty":4,"nm":"Hemicircle_character3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49.769,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.231,"s":[100],"e":[0]},{"t":76}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":48,"s":[100],"e":[209]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.988},"o":{"x":0.13,"y":0.018},"t":48,"s":[253.75,-27.25,0],"e":[475,-187,0],"to":[1.667,-107,0],"ti":[-125.667,-22,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[479,62.5,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":48,"s":[25,25,100],"e":[200,200,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":54.19,"s":[200,200,100],"e":[200,200,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.222,"s":[200,200,100],"e":[25,25,100]},{"t":76}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.184,-0.564],[6.144,-2.607],[3.071,5.775],[-0.558,0.237]],"o":[[0.546,-0.231],[2.04,6.229],[-6.134,2.603],[-0.284,-0.535],[0,0]],"v":[[9.443,-9.338],[10.811,-8.73],[3.668,6.965],[-12.568,1.225],[-12.069,-0.212]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[479.459,63.014],"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":48,"op":188,"st":8,"bm":0},{"ddd":0,"ind":115,"ty":4,"nm":"Hexagon_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.6,"s":[100],"e":[0]},{"t":76}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":38,"s":[0],"e":[200]},{"t":76}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":38,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":76}],"ix":2,"l":2},"a":{"a":0,"k":[175.5,77.5,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":38,"s":[25,25,100],"e":[200,200,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":46.4,"s":[200,200,100],"e":[200,200,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":66.8,"s":[200,200,100],"e":[25,25,100]},{"t":76}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.38,1.121],[0,0],[0.781,0.889],[0,0],[1.16,-0.231],[0,0],[0.38,-1.12],[0,0],[-0.78,-0.89],[0,0],[-1.161,0.231],[0,0]],"o":[[0,0],[0.381,-1.121],[0,0],[-0.78,-0.889],[0,0],[-1.161,0.231],[0,0],[-0.38,1.121],[0,0],[0.78,0.889],[0,0],[1.16,-0.231]],"v":[[8.029,6.638],[10.41,-0.386],[9.762,-3.634],[4.87,-9.209],[1.734,-10.272],[-5.54,-8.822],[-8.029,-6.638],[-10.411,0.386],[-9.764,3.634],[-4.87,9.209],[-1.734,10.272],[5.539,8.823]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[175.614,77.028],"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":38,"op":186,"st":6,"bm":0},{"ddd":0,"ind":116,"ty":4,"nm":"Yellowtriangle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.6,"s":[100],"e":[0]},{"t":73}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":35,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":73}],"ix":2,"l":2},"a":{"a":0,"k":[183.25,63.5,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":35,"s":[25,25,100],"e":[200,200,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":43.4,"s":[200,200,100],"e":[200,200,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":63.8,"s":[200,200,100],"e":[25,25,100]},{"t":73}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.485,-0.258],[-6.52,-3.448],[0.477,-0.284],[0,0],[0.021,0.54],[0,0]],"o":[[8.15,4.333],[0.492,0.259],[0,0],[-0.464,0.276],[0,0],[-0.021,-0.55]],"v":[[-7.4,-9.08],[7.958,-0.934],[7.99,0.307],[-6.704,9.062],[-7.781,8.478],[-8.447,-8.423]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.736999990426,0.019999999626,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":[183.188,63.068],"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":35,"op":195,"st":15,"bm":0},{"ddd":0,"ind":117,"ty":4,"nm":"Greenoval_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.6,"s":[100],"e":[0]},{"t":64}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.871]},"o":{"x":[0.13],"y":[0.03]},"t":26,"s":[-73],"e":[22]},{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.167],"y":[0.213]},"t":42,"s":[22],"e":[101]},{"t":64}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":26,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":64}],"ix":2,"l":2},"a":{"a":0,"k":[213.75,48.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":26,"s":[25,25,100],"e":[200,200,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":34.4,"s":[200,200,100],"e":[200,200,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":54.8,"s":[200,200,100],"e":[25,25,100]},{"t":64}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.14,-0.687],[2.958,-0.355],[0,0],[0.438,3.691],[-0.141,0.691],[-2.954,0.356],[0,0],[-0.443,-3.692]],"o":[[-0.562,2.768],[0,0],[-3.686,0.44],[-0.088,-0.733],[0.561,-2.763],[0,0],[3.69,-0.439],[0.088,0.733]],"v":[[14.611,0.382],[8.812,5.725],[-7.219,7.641],[-14.697,1.758],[-14.609,-0.387],[-8.816,-5.725],[7.214,-7.643],[14.697,-1.759]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.204000001795,0.658999992819,0.325,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":[213.582,47.91],"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":26,"op":186,"st":6,"bm":0},{"ddd":0,"ind":118,"ty":4,"nm":"Pinkdiamond_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55.6,"s":[100],"e":[0]},{"t":58}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.88],"y":[0.98]},"o":{"x":[0.13],"y":[0.03]},"t":20,"s":[0],"e":[360]},{"t":58}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":20,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":58}],"ix":2,"l":2},"a":{"a":0,"k":[243.5,48.062,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":20,"s":[25,25,100],"e":[200,200,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":28.4,"s":[200,200,100],"e":[200,200,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":48.8,"s":[200,200,100],"e":[25,25,100]},{"t":58}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.377,-0.317],[0,0],[0.316,-0.377],[0,0],[0.377,0.317],[0,0],[-0.317,0.377],[0,0]],"o":[[0,0],[0.377,0.317],[0,0],[-0.317,0.378],[0,0],[-0.377,-0.316],[0,0],[0.316,-0.378]],"v":[[0.351,-3.417],[3.305,-0.939],[3.415,0.318],[0.907,3.307],[-0.35,3.417],[-3.303,0.939],[-3.413,-0.318],[-0.906,-3.307]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.972999961703,0.510000011968,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":[243.476,47.91],"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":20,"op":190,"st":10,"bm":0},{"ddd":0,"ind":119,"ty":4,"nm":"Whitepear_character1","parent":121,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[267.5,68.5,0],"ix":2,"l":2},"a":{"a":0,"k":[267.5,68.5,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-6.556,2.086],[0.46,1.009],[1.234,0.629],[2.98,0.257],[1.074,-0.355]],"o":[[-0.074,-0.009],[-0.817,-1.791],[-1.215,-0.619],[-1.756,-0.151],[-0.051,0.395]],"v":[[14.652,3.72],[13.904,0.866],[11.035,-2.875],[4.663,-5.19],[3.738,0.339]],"c":true}],"e":[{"i":[[-6.284,1.601],[0.017,1.383],[1.234,0.629],[2.893,0.547],[-0.12,-0.045]],"o":[[-0.074,-0.009],[0.21,-3.446],[-1.215,-0.619],[-1.123,-0.212],[-0.051,0.395]],"v":[[14.123,6.366],[14.093,3.891],[11.035,-2.875],[5.381,-5.076],[3.938,-5.37]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-6.284,1.601],[0.017,1.383],[1.234,0.629],[2.893,0.547],[-0.12,-0.045]],"o":[[-0.074,-0.009],[0.21,-3.446],[-1.215,-0.619],[-1.123,-0.212],[-0.051,0.395]],"v":[[14.123,6.366],[14.093,3.891],[11.035,-2.875],[5.381,-5.076],[3.938,-5.37]],"c":true}],"e":[{"i":[[-6.148,1.358],[0.076,1.658],[1.234,0.629],[2.875,0.538],[0.477,-0.2]],"o":[[-0.074,-0.009],[0.264,-4.78],[-1.215,-0.619],[-1.428,-0.267],[-0.051,0.395]],"v":[[14.171,7.752],[14.438,5.404],[11.035,-2.875],[5.741,-5.02],[3.536,-2.818]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[-6.148,1.358],[0.076,1.658],[1.234,0.629],[2.875,0.538],[0.477,-0.2]],"o":[[-0.074,-0.009],[0.264,-4.78],[-1.215,-0.619],[-1.428,-0.267],[-0.051,0.395]],"v":[[14.171,7.752],[14.438,5.404],[11.035,-2.875],[5.741,-5.02],[3.536,-2.818]],"c":true}],"e":[{"i":[[-10.762,-1.697],[-0.426,1.756],[1.234,0.629],[2.857,0.529],[1.074,-0.355]],"o":[[-0.074,-0.009],[1.237,-5.1],[-1.215,-0.619],[-1.733,-0.321],[-0.051,0.395]],"v":[[13.594,9.013],[14.283,6.916],[11.035,-2.875],[6.1,-4.963],[3.133,-0.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-10.762,-1.697],[-0.426,1.756],[1.234,0.629],[2.857,0.529],[1.074,-0.355]],"o":[[-0.074,-0.009],[1.237,-5.1],[-1.215,-0.619],[-1.733,-0.321],[-0.051,0.395]],"v":[[13.594,9.013],[14.283,6.916],[11.035,-2.875],[6.1,-4.963],[3.133,-0.266]],"c":true}],"e":[{"i":[[-7.41,-0.068],[-0.965,2.169],[1.254,1.561],[2.635,0.499],[-0.072,0.101]],"o":[[-0.011,-0.047],[1.833,-4.259],[-0.877,-0.59],[-1.55,-0.293],[-3.384,2.289]],"v":[[11.698,11.513],[13.762,8.458],[12.368,-1.479],[7.569,-4.574],[6.633,-4.766]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[-7.41,-0.068],[-0.965,2.169],[1.254,1.561],[2.635,0.499],[-0.072,0.101]],"o":[[-0.011,-0.047],[1.833,-4.259],[-0.877,-0.59],[-1.55,-0.293],[-3.384,2.289]],"v":[[11.698,11.513],[13.762,8.458],[12.368,-1.479],[7.569,-4.574],[6.633,-4.766]],"c":true}],"e":[{"i":[[-8.109,-0.659],[-1.235,2.375],[1.264,2.028],[2.524,0.484],[1.212,-0.506]],"o":[[0.02,-0.066],[2.132,-3.838],[-0.708,-0.576],[-1.458,-0.279],[-1.832,1.149]],"v":[[10.937,12.013],[13.501,9.229],[13.035,-0.781],[8.304,-4.38],[3.696,-0.36]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[-8.109,-0.659],[-1.235,2.375],[1.264,2.028],[2.524,0.484],[1.212,-0.506]],"o":[[0.02,-0.066],[2.132,-3.838],[-0.708,-0.576],[-1.458,-0.279],[-1.832,1.149]],"v":[[10.937,12.013],[13.501,9.229],[13.035,-0.781],[8.304,-4.38],[3.696,-0.36]],"c":true}],"e":[{"i":[[-7.201,-1.397],[-1.744,2.367],[1.274,2.494],[2.27,0.837],[1.258,-0.556]],"o":[[0.052,-0.085],[2.43,-3.417],[-0.539,-0.562],[-0.205,-0.039],[-2.426,1.401]],"v":[[9.739,13.055],[12.908,9.999],[13.368,-0.083],[8.789,-4.207],[3.55,-0.391]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[-7.201,-1.397],[-1.744,2.367],[1.274,2.494],[2.27,0.837],[1.258,-0.556]],"o":[[0.052,-0.085],[2.43,-3.417],[-0.539,-0.562],[-0.205,-0.039],[-2.426,1.401]],"v":[[9.739,13.055],[12.908,9.999],[13.368,-0.083],[8.789,-4.207],[3.55,-0.391]],"c":true}],"e":[{"i":[[-5.385,-2.872],[-2.762,2.35],[1.294,3.427],[2.137,0.063],[1.35,-0.657]],"o":[[0.115,-0.122],[3.027,-2.576],[-0.201,-0.534],[-1.215,-0.036],[-3.613,1.904]],"v":[[6.406,14.013],[11.72,11.541],[14.035,1.313],[9.759,-3.297],[3.258,-0.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-5.385,-2.872],[-2.762,2.35],[1.294,3.427],[2.137,0.063],[1.35,-0.657]],"o":[[0.115,-0.122],[3.027,-2.576],[-0.201,-0.534],[-1.215,-0.036],[-3.613,1.904]],"v":[[6.406,14.013],[11.72,11.541],[14.035,1.313],[9.759,-3.297],[3.258,-0.453]],"c":true}],"e":[{"i":[[0.013,0.004],[-3.05,2.782],[1.294,3.427],[0.671,0.557],[1.374,-0.861]],"o":[[1.95,1.067],[2.946,-2.666],[-0.188,-0.497],[-1.829,-0.568],[-3.453,2.206]],"v":[[2.219,13.701],[11.72,11.541],[14.035,1.313],[12.498,-1.603],[3.196,1.422]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[0.013,0.004],[-3.05,2.782],[1.294,3.427],[0.671,0.557],[1.374,-0.861]],"o":[[1.95,1.067],[2.946,-2.666],[-0.188,-0.497],[-1.829,-0.568],[-3.453,2.206]],"v":[[2.219,13.701],[11.72,11.541],[14.035,1.313],[12.498,-1.603],[3.196,1.422]],"c":true}],"e":[{"i":[[-0.394,-0.301],[-3.243,3.07],[1.294,3.427],[2.297,-0.278],[1.389,-0.996]],"o":[[3.11,2.226],[2.891,-2.726],[-0.179,-0.473],[-1.7,0.055],[-3.347,2.408]],"v":[[0.344,12.742],[11.72,11.541],[13.91,0.813],[9.408,0.277],[3.154,2.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.394,-0.301],[-3.243,3.07],[1.294,3.427],[2.297,-0.278],[1.389,-0.996]],"o":[[3.11,2.226],[2.891,-2.726],[-0.179,-0.473],[-1.7,0.055],[-3.347,2.408]],"v":[[0.344,12.742],[11.72,11.541],[13.91,0.813],[9.408,0.277],[3.154,2.672]],"c":true}],"e":[{"i":[[-0.597,-0.454],[-3.339,3.214],[1.294,3.427],[3.111,-0.696],[1.397,-1.064]],"o":[[3.69,2.806],[2.864,-2.756],[-0.174,-0.461],[-1.635,0.366],[-3.294,2.509]],"v":[[-0.594,12.263],[11.72,11.541],[14.035,1.313],[7.862,1.216],[3.133,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[-0.597,-0.454],[-3.339,3.214],[1.294,3.427],[3.111,-0.696],[1.397,-1.064]],"o":[[3.69,2.806],[2.864,-2.756],[-0.174,-0.461],[-1.635,0.366],[-3.294,2.509]],"v":[[-0.594,12.263],[11.72,11.541],[14.035,1.313],[7.862,1.216],[3.133,3.297]],"c":true}],"e":[{"i":[[-0.59,-0.463],[-3.314,3.24],[0.814,2.655],[3.111,-0.696],[1.397,-1.064]],"o":[[4.88,3.829],[2.441,-2.386],[-0.061,-0.033],[-1.635,0.366],[-3.294,2.509]],"v":[[-2.156,11.201],[11.72,11.541],[14.41,3.375],[7.862,1.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-0.59,-0.463],[-3.314,3.24],[0.814,2.655],[3.111,-0.696],[1.397,-1.064]],"o":[[4.88,3.829],[2.441,-2.386],[-0.061,-0.033],[-1.635,0.366],[-3.294,2.509]],"v":[[-2.156,11.201],[11.72,11.541],[14.41,3.375],[7.862,1.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.314,3.24],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[2.441,-2.386],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[14.535,5.938],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.068,0.015],[-3.314,3.24],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[2.441,-2.386],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[14.535,5.938],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.494,3.044],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[1.907,-1.661],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[13.91,8.25],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[0.068,0.015],[-3.494,3.044],[-0.248,0.903],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[1.907,-1.661],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.594,10.701],[11.72,11.541],[13.91,8.25],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-3.426,3.121],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[0.054,-0.045],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.156,10.951],[11.72,11.541],[12.785,10.5],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[0.068,0.015],[-3.426,3.121],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[4.818,4.89],[0.054,-0.045],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-2.156,10.951],[11.72,11.541],[12.785,10.5],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-2.613,1.013],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.942,3.042],[0.066,-0.025],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-1.28,11.889],[9.217,13.293],[10.72,12.252],[6.487,3.216],[2.258,3.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.068,0.015],[-2.613,1.013],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.942,3.042],[0.066,-0.025],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[-1.28,11.889],[9.217,13.293],[10.72,12.252],[6.487,3.216],[2.258,3.297]],"c":true}],"e":[{"i":[[0.068,0.015],[-1.175,0.164],[-0.198,0.184],[2.424,-3.251],[1.397,-1.064]],"o":[[3.393,2.155],[0.07,-0.01],[-0.061,-0.033],[-1.002,1.343],[-3.294,2.509]],"v":[[0.088,12.736],[6.415,14.14],[8.439,13.36],[6.487,3.216],[2.258,3.297]],"c":true}]},{"t":44}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[267.647,68.239],"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":19,"op":45,"st":9,"bm":0},{"ddd":0,"ind":120,"ty":4,"nm":"Redcircle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45.6,"s":[100],"e":[0]},{"t":48}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":10,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":48}],"ix":2,"l":2},"a":{"a":0,"k":[278.5,87,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":10,"s":[25,25,100],"e":[200,200,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":18.4,"s":[200,200,100],"e":[200,200,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":38.8,"s":[200,200,100],"e":[25,25,100]},{"t":48}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.171,-7.644],[7.644,1.172],[-1.172,7.644],[-7.643,-1.171]],"o":[[-1.171,7.644],[-7.643,-1.171],[1.171,-7.643],[7.644,1.171]],"v":[[13.841,2.12],[-2.121,13.84],[-13.84,-2.122],[2.121,-13.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.263000009574,0.20800000359,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":[278.733,86.771],"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":10,"op":190,"st":10,"bm":0},{"ddd":0,"ind":121,"ty":4,"nm":"Bluepear_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49.6,"s":[100],"e":[0]},{"t":52}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":14,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":52}],"ix":2,"l":2},"a":{"a":0,"k":[267.438,68.438,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":14,"s":[25,25,100],"e":[200,200,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.4,"s":[200,200,100],"e":[200,200,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":42.8,"s":[200,200,100],"e":[25,25,100]},{"t":52}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.185,0.414],[0,0],[0,0],[0.728,0.075],[0,0],[1.124,1.764],[0,0],[0,0],[0,0],[0.21,0.193],[2.485,-2.708],[-2.709,-2.485],[-0.227,-0.16],[0,0],[-0.029,-0.014],[0,0],[-0.627,-1.995],[0,0],[-0.303,-0.677],[0,0],[-1.332,-1.013],[-3.339,3.214],[4.016,3.686]],"o":[[0,0],[0,0],[-0.7,-0.244],[0,0],[-2.042,-0.455],[0,0],[-0.015,-0.027],[0,0],[-0.18,-0.212],[-2.708,-2.486],[-2.486,2.708],[0.209,0.193],[0,0],[0,0],[0,0],[1.855,0.969],[0,0],[0.138,0.719],[0,0],[0.628,1.401],[3.69,2.806],[3.99,-3.839],[-0.983,-0.903]],"v":[[8.279,-4.298],[8.279,-4.298],[8.276,-4.299],[6.127,-4.778],[3.82,-5.294],[-1.124,-8.76],[-2.56,-11.016],[-3.189,-12.004],[-3.241,-11.972],[-3.82,-12.583],[-13.224,-12.18],[-12.822,-2.776],[-12.164,-2.252],[-12.191,-2.196],[-11.153,-1.654],[-8.784,-0.416],[-4.908,4.213],[-4.198,6.468],[-3.536,8.569],[-3.535,8.572],[-0.594,12.263],[11.72,11.541],[11.57,-2.326]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.258999992819,0.522000002394,0.957000014361,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[267.647,68.239],"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":14,"op":194,"st":9,"bm":0},{"ddd":0,"ind":122,"ty":4,"nm":"Greyhemicircle_character1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[25],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.4,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37.6,"s":[100],"e":[0]},{"t":40}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.88,"y":0.986},"o":{"x":0.13,"y":0.021},"t":2,"s":[-250,-141,0],"e":[-32,-46,0],"to":[56.5,-113.833,0],"ti":[2.5,-163.167,0]},{"t":40}],"ix":2,"l":2},"a":{"a":0,"k":[288,116,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":2,"s":[25,25,100],"e":[200,200,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":10.4,"s":[200,200,100],"e":[200,200,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":30.8,"s":[200,200,100],"e":[25,25,100]},{"t":40}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.318,0.122],[-1.066,3.691],[-3.693,-0.726],[0.097,-0.335]],"o":[[-0.095,0.328],[-3.523,-1.351],[1.066,-3.684],[0.342,0.067],[0,0]],"v":[[1.209,6.939],[0.441,7.33],[-3.975,-1.561],[4.484,-6.725],[4.944,-5.982]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[286.818,115.984],"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":2,"op":182,"st":2,"bm":0},{"ddd":0,"ind":123,"ty":4,"nm":"Desk_character3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-27.225,52.04],[27.224,52.04],[27.224,-52.04],[-27.225,-52.04]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.902000038297,0.902000038297,0.902000038297,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":[440.046,205.058],"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":180,"st":0,"bm":0},{"ddd":0,"ind":124,"ty":4,"nm":"Bottom line","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[300,148,0],"ix":1,"l":2},"s":{"a":0,"k":[200,200,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.855,256.46],[587.162,256.46]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823999980852,0.889999988032,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.227,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":125,"ty":1,"nm":"Bkrnd","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[324,160,0],"ix":2,"l":2},"a":{"a":0,"k":[324,160,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":648,"sh":320,"sc":"#ffffff","ip":0,"op":180,"st":0,"bm":0}],"markers":[{"tm":71,"cm":"1","dr":0},{"tm":78,"cm":"2","dr":0},{"tm":85,"cm":"3","dr":0},{"tm":92,"cm":"4","dr":0},{"tm":112,"cm":"5","dr":0}]} \ No newline at end of file
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc index bb2e1b44..1852dff 100644 --- a/ui/views/controls/label.cc +++ b/ui/views/controls/label.cc
@@ -157,6 +157,10 @@ return; text_style_ = style; + ApplyBaselineTextStyle(); +} + +void Label::ApplyBaselineTextStyle() { full_text_->SetFontList(style::GetFont(text_context_, text_style_)); full_text_->SetMinLineHeight(GetLineHeight()); ClearDisplayText();
diff --git a/ui/views/controls/label.h b/ui/views/controls/label.h index 1642bff..59ea5d8 100644 --- a/ui/views/controls/label.h +++ b/ui/views/controls/label.h
@@ -117,6 +117,9 @@ // that vary from the global text style by anything besides weight. void SetTextStyleRange(int style, const gfx::Range& range); + // Apply the baseline style range across the entire label. + void ApplyBaselineTextStyle(); + // Enables or disables auto-color-readability (enabled by default). If this // is enabled, then calls to set any foreground or background color will // trigger an automatic mapper that uses color_utils::BlendForMinContrast()
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone.cc index 03257af..748a762f 100644 --- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone.cc +++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone.cc
@@ -260,7 +260,12 @@ // OnDragLeave and quit? drag_drop_delegate_->OnDragUpdated(*event); } - drag_drop_delegate_->OnPerformDrop(*event, std::move(data_to_drop_)); + auto drop_cb = drag_drop_delegate_->GetDropCallback(*event); + if (drop_cb) { + auto output_drag_op = ui::mojom::DragOperation::kNone; + std::move(drop_cb).Run(*event, std::move(data_to_drop_), + output_drag_op); + } } } ResetDragDropTarget(false);
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc index 892b96f..758bf99 100644 --- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc +++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc
@@ -216,9 +216,14 @@ void OnDragExited() override { ++num_exits_; } - DragOperation OnPerformDrop( - const ui::DropTargetEvent& event, - std::unique_ptr<ui::OSExchangeData> data) override { + DropCallback GetDropCallback(const ui::DropTargetEvent& event) override { + return base::BindOnce(&FakeDragDropDelegate::PerformDrop, + base::Unretained(this)); + } + + void PerformDrop(const ui::DropTargetEvent& event, + std::unique_ptr<ui::OSExchangeData> data, + ui::mojom::DragOperation& output_drag_op) { // The event must always have valid data. This will crash if it doesn't. // See crbug.com/1151836. auto dummy_copy = event.data().provider().Clone(); @@ -226,12 +231,7 @@ ++num_drops_; received_data_ = std::move(data); last_event_flags_ = event.flags(); - return destination_operation_; - } - - DropCallback GetDropCallback(const ui::DropTargetEvent& event) override { - NOTIMPLEMENTED(); - return base::NullCallback(); + output_drag_op = destination_operation_; } int num_enters_;
diff --git a/ui/views/widget/desktop_aura/desktop_drop_target_win.cc b/ui/views/widget/desktop_aura/desktop_drop_target_win.cc index 7e4a7f1..8df0a36d 100644 --- a/ui/views/widget/desktop_aura/desktop_drop_target_win.cc +++ b/ui/views/widget/desktop_aura/desktop_drop_target_win.cc
@@ -96,8 +96,11 @@ std::unique_ptr<ui::DropTargetEvent> event; DragDropDelegate* delegate; Translate(data_object, key_state, position, effect, &data, &event, &delegate); - if (delegate) - drag_operation = delegate->OnPerformDrop(*event, std::move(data)); + if (delegate) { + auto drop_cb = delegate->GetDropCallback(*event); + if (drop_cb) + std::move(drop_cb).Run(*event, std::move(data), drag_operation); + } if (target_window_) { target_window_->RemoveObserver(this); target_window_ = nullptr;
diff --git a/ui/webui/resources/cr_components/chromeos/bluetooth/bluetooth_pairing_device_item.html b/ui/webui/resources/cr_components/chromeos/bluetooth/bluetooth_pairing_device_item.html index b35427c..885bb8c 100644 --- a/ui/webui/resources/cr_components/chromeos/bluetooth/bluetooth_pairing_device_item.html +++ b/ui/webui/resources/cr_components/chromeos/bluetooth/bluetooth_pairing_device_item.html
@@ -3,8 +3,9 @@ color: var(--cros-text-color-alert); } - #container { - max-height: 32px; + bluetooth-icon { + align-self: center; + justify-self: center; } #deviceName { @@ -24,7 +25,7 @@ flex-direction: column; justify-content: center; margin-inline-start: 24px; - min-height: var(--settings-row-min-height); + max-height: 48px; } .cr-row {