From a00c144e85d51af9e5b1c5e691fcd28bf5b967a0 Mon Sep 17 00:00:00 2001 From: Nidhi Date: Thu, 17 Dec 2020 21:38:52 +0530 Subject: [PATCH 01/19] Subclassing authentication (#2215) * Sublcassing authentication * Removed TODO * Review changes --- .../external/annotations/DocumentType.java | 21 ++++ .../annotations/DocumentTypeMapper.java | 101 ++++++++++++++++++ .../appsmith/external/constants/AuthType.java | 6 ++ .../external/constants/FieldName.java | 8 ++ .../external/models/AuthenticationDTO.java | 47 +++++--- .../com/appsmith/external/models/DBAuth.java | 59 ++++++++++ .../com/appsmith/external/models/OAuth2.java | 84 +++++++++++++++ .../external/models/UpdatableConnection.java | 9 ++ .../com/external/plugins/DynamoPlugin.java | 6 +- .../external/plugins/DynamoPluginTest.java | 11 +- .../external/plugins/ElasticSearchPlugin.java | 4 +- .../plugins/ElasticSearchPluginTest.java | 1 - .../com/external/plugins/FirestorePlugin.java | 6 +- .../external/plugins/FirestorePluginTest.java | 9 +- .../com/external/plugins/MongoPlugin.java | 18 ++-- .../com/external/plugins/MssqlPlugin.java | 11 +- .../com/external/plugins/MssqlPluginTest.java | 11 +- .../com/external/plugins/MySqlPlugin.java | 93 ++++++++-------- .../com/external/plugins/MySqlPluginTest.java | 28 +++-- .../com/external/plugins/PostgresPlugin.java | 11 +- .../external/plugins/PostgresPluginTest.java | 5 +- .../com/external/plugins/RedisPlugin.java | 14 +-- .../com/external/plugins/RedisPluginTest.java | 10 +- .../server/configurations/MongoConfig.java | 37 +++++++ .../controllers/OrganizationController.java | 10 +- .../appsmith/server/domains/Organization.java | 2 - .../exceptions/GlobalExceptionHandler.java | 12 +-- .../server/helpers/BeanCopyUtils.java | 4 +- .../server/migrations/DatabaseChangelog.java | 91 +++++++++++++++- .../DatasourceContextServiceImpl.java | 14 ++- .../server/services/DatasourceService.java | 3 + .../services/DatasourceServiceImpl.java | 82 +++++++------- .../services/EncryptionServiceImpl.java | 2 - .../services/MarketplaceServiceImpl.java | 1 - .../server/services/NewActionServiceImpl.java | 74 +++++++------ .../services/UserOrganizationServiceImpl.java | 2 +- .../DatasourceStructureSolution.java | 22 ++-- .../DatasourceContextServiceTest.java | 14 +-- .../services/DatasourceServiceTest.java | 97 ++++++++++++++--- .../ExamplesOrganizationClonerTests.java | 9 +- 40 files changed, 786 insertions(+), 263 deletions(-) create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentType.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentTypeMapper.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/AuthType.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/FieldName.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/OAuth2.java create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/UpdatableConnection.java diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentType.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentType.java new file mode 100644 index 0000000000..3c737b3a34 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentType.java @@ -0,0 +1,21 @@ +package com.appsmith.external.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * This annotation is meant to introduce polymorphic behaviour in persistent objects. Since we do not expect Spring to + * be able to automatically detect such objects, objects marked with this annotation are specifically registered in the + * type mapper for {@link org.springframework.data.mongodb.core.MongoTemplate} + * + * The value associated to this annotation functions as an alias for the entity. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface DocumentType { + + public String value() default ""; + +} \ No newline at end of file diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentTypeMapper.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentTypeMapper.java new file mode 100644 index 0000000000..c595aa97a5 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/annotations/DocumentTypeMapper.java @@ -0,0 +1,101 @@ +package com.appsmith.external.annotations; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.type.filter.AnnotationTypeFilter; +import org.springframework.data.convert.TypeInformationMapper; +import org.springframework.data.mapping.Alias; +import org.springframework.data.util.ClassTypeInformation; +import org.springframework.data.util.TypeInformation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * This {@link TypeInformationMapper} implementation makes use of the {@link DocumentType} annotation to register all + * such entities as possible candidates for domain mapping. + */ +public class DocumentTypeMapper implements TypeInformationMapper { + + private final Map> aliasToTypeMap; + private final Map, String> typeToAliasMap; + + private DocumentTypeMapper(List basePackagesToScan) { + aliasToTypeMap = new HashMap<>(); + typeToAliasMap = new HashMap<>(); + + // Upon initialization, read all aliases from annotated entities + populateTypeMap(basePackagesToScan); + } + + private void populateTypeMap(List basePackagesToScan) { + ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); + + scanner.addIncludeFilter(new AnnotationTypeFilter(DocumentType.class)); + + for (String basePackage : basePackagesToScan) { + for (BeanDefinition bd : scanner.findCandidateComponents(basePackage)) { + try { + Class clazz = Class.forName(bd.getBeanClassName()); + DocumentType documentTypeAnnotation = clazz.getAnnotation(DocumentType.class); + + ClassTypeInformation type = ClassTypeInformation.from(clazz); + String alias = documentTypeAnnotation.value(); + + aliasToTypeMap.put(alias, type); + typeToAliasMap.put(type, alias); + + } catch (ClassNotFoundException e) { + throw new IllegalStateException(String.format("Class [%s] could not be loaded.", bd.getBeanClassName()), e); + } + } + } + } + + @Override + public TypeInformation resolveTypeFrom(Alias alias) { + if (aliasToTypeMap.containsKey((String) alias.getValue())) { + return aliasToTypeMap.get(alias.getValue()); + } + return null; + } + + @Override + public Alias createAliasFor(TypeInformation typeInformation) { + if (typeToAliasMap.containsKey(typeInformation)) { + return Alias.of(typeToAliasMap.get(typeInformation)); + } + return Alias.NONE; + } + + public static class Builder { + List basePackagesToScan; + + public Builder() { + basePackagesToScan = new ArrayList<>(); + } + + public Builder withBasePackage(String basePackage) { + basePackagesToScan.add(basePackage); + return this; + } + + public Builder withBasePackages(String[] basePackages) { + basePackagesToScan.addAll(Arrays.asList(basePackages)); + return this; + } + + public Builder withBasePackages(Collection< ? extends String> basePackages) { + basePackagesToScan.addAll(basePackages); + return this; + } + + public DocumentTypeMapper build() { + return new DocumentTypeMapper(basePackagesToScan); + } + } +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/AuthType.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/AuthType.java new file mode 100644 index 0000000000..81c58d9163 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/AuthType.java @@ -0,0 +1,6 @@ +package com.appsmith.external.constants; + +public class AuthType { + public static final String DB_AUTH = "dbAuth"; + public static final String OAUTH2 = "oAuth2"; +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/FieldName.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/FieldName.java new file mode 100644 index 0000000000..b1eb89d5ac --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/FieldName.java @@ -0,0 +1,8 @@ +package com.appsmith.external.constants; + +public class FieldName { + public static final String CLIENT_SECRET = "clientSecret"; + public static final String TOKEN = "token"; + + public static final String PASSWORD = "password"; +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java index e679ae347b..3adc10ed08 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java @@ -1,30 +1,45 @@ package com.appsmith.external.models; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; +import com.appsmith.external.constants.AuthType; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; -import lombok.ToString; + +import java.util.Collections; +import java.util.Map; +import java.util.Set; @Getter @Setter -@ToString -@NoArgsConstructor -@AllArgsConstructor +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.EXISTING_PROPERTY, + visible = true, + property = "type", + defaultImpl = DBAuth.class) +@JsonSubTypes({ + @JsonSubTypes.Type(value = DBAuth.class, name = AuthType.DB_AUTH), + @JsonSubTypes.Type(value = OAuth2.class, name = AuthType.OAUTH2) +}) public class AuthenticationDTO { - public enum Type { - SCRAM_SHA_1, SCRAM_SHA_256, MONGODB_CR, USERNAME_PASSWORD + @JsonIgnore + private boolean isEncrypted; + + @JsonIgnore + public Map getEncryptionFields() { + return Collections.emptyMap(); } - Type authType; + @JsonIgnore + public void setEncryptionFields(Map encryptedFields) { + } - String username; - - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) - String password; - - String databaseName; + @JsonIgnore + public Set getEmptyEncryptionFields() { + return Collections.emptySet(); + } } diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java new file mode 100644 index 0000000000..2a9687ab2e --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java @@ -0,0 +1,59 @@ +package com.appsmith.external.models; + +import com.appsmith.external.annotations.DocumentType; +import com.appsmith.external.constants.AuthType; +import com.appsmith.external.constants.FieldName; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.Map; +import java.util.Set; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@DocumentType(AuthType.DB_AUTH) +public class DBAuth extends AuthenticationDTO { + + public enum Type { + SCRAM_SHA_1, SCRAM_SHA_256, MONGODB_CR, USERNAME_PASSWORD + } + + Type authType; + + String username; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + String password; + + String databaseName; + + @Override + public Map getEncryptionFields() { + if (this.password != null) { + return Map.of(FieldName.PASSWORD, this.password); + } + return Map.of(); + } + + @Override + public void setEncryptionFields(Map encryptedFields) { + if (encryptedFields != null && encryptedFields.containsKey(FieldName.PASSWORD)) { + this.password = encryptedFields.get(FieldName.PASSWORD); + } + } + + @Override + public Set getEmptyEncryptionFields() { + if (this.password == null || this.password.isEmpty()) { + return Set.of(FieldName.PASSWORD, null); + } + return Set.of(); + } +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/OAuth2.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/OAuth2.java new file mode 100644 index 0000000000..72eb6c9dd3 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/OAuth2.java @@ -0,0 +1,84 @@ +package com.appsmith.external.models; + +import com.appsmith.external.annotations.DocumentType; +import com.appsmith.external.constants.AuthType; +import com.appsmith.external.constants.FieldName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.time.Instant; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@DocumentType(AuthType.OAUTH2) +public class OAuth2 extends AuthenticationDTO { + public enum Type { + CLIENT_CREDENTIALS, + } + + Type authType; + + String clientId; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + String clientSecret; + + String accessTokenUrl; + + String scope; + + @JsonIgnore + String token; + + @JsonIgnore + Instant expiresAt; + + @Override + public Map getEncryptionFields() { + Map map = new HashMap<>(); + if (this.clientSecret != null) { + map.put(FieldName.CLIENT_SECRET, this.clientSecret); + } + if (this.token != null) { + map.put(FieldName.TOKEN, this.token); + } + return map; + } + + @Override + public void setEncryptionFields(Map encryptedFields) { + if (encryptedFields != null) { + if (encryptedFields.containsKey(FieldName.CLIENT_SECRET)) { + this.clientSecret = encryptedFields.get(FieldName.CLIENT_SECRET); + } + if (encryptedFields.containsKey(FieldName.TOKEN)) { + this.token = encryptedFields.get(FieldName.TOKEN); + } + } + } + + @Override + public Set getEmptyEncryptionFields() { + Set set = new HashSet<>(); + if (this.clientSecret == null || this.clientSecret.isEmpty()) { + set.add(FieldName.CLIENT_SECRET); + } + if (this.token == null || this.token.isEmpty()) { + set.add(FieldName.TOKEN); + } + return set; + } + +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/UpdatableConnection.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/UpdatableConnection.java new file mode 100644 index 0000000000..fbe6ccd5f4 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/UpdatableConnection.java @@ -0,0 +1,9 @@ +package com.appsmith.external.models; + +public interface UpdatableConnection { + void updateDatasource(DatasourceConfiguration datasourceConfiguration); + + default boolean isUpdated() { + return false; + } +} diff --git a/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java b/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java index 775cea22fa..4bfa79fea9 100644 --- a/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java +++ b/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; @@ -138,7 +138,7 @@ public class DynamoPlugin extends BasePlugin { builder.endpointOverride(URI.create("http://" + endpoint.getHost() + ":" + endpoint.getPort())); } - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication == null || StringUtils.isEmpty(authentication.getDatabaseName())) { return Mono.error(new AppsmithPluginException( AppsmithPluginError.PLUGIN_ERROR, @@ -169,7 +169,7 @@ public class DynamoPlugin extends BasePlugin { public Set validateDatasource(@NonNull DatasourceConfiguration datasourceConfiguration) { Set invalids = new HashSet<>(); - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication == null) { invalids.add("Missing AWS Access Key ID and Secret Access Key."); } else { diff --git a/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java b/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java index cd55139d3d..0a1ad1350e 100644 --- a/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java +++ b/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Endpoint; import lombok.extern.log4j.Log4j; @@ -96,10 +96,11 @@ public class DynamoPluginTest { Endpoint endpoint = new Endpoint(); endpoint.setHost(host); endpoint.setPort(port.longValue()); - dsConfig.setAuthentication(new AuthenticationDTO()); - dsConfig.getAuthentication().setUsername("dummy"); - dsConfig.getAuthentication().setPassword("dummy"); - dsConfig.getAuthentication().setDatabaseName(Region.AP_SOUTH_1.toString()); + DBAuth auth = new DBAuth(); + auth.setUsername("dummy"); + auth.setPassword("dummy"); + auth.setDatabaseName(Region.AP_SOUTH_1.toString()); + dsConfig.setAuthentication(auth); dsConfig.setEndpoints(List.of(endpoint)); } diff --git a/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java b/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java index 3612e8ed1c..b0d99b4b52 100644 --- a/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java +++ b/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; @@ -137,7 +137,7 @@ public class ElasticSearchPlugin extends BasePlugin { final RestClientBuilder clientBuilder = RestClient.builder(hosts.toArray(new HttpHost[]{})); - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication != null && !StringUtils.isEmpty(authentication.getUsername()) && !StringUtils.isEmpty(authentication.getPassword())) { diff --git a/app/server/appsmith-plugins/elasticSearchPlugin/src/test/java/com/external/plugins/ElasticSearchPluginTest.java b/app/server/appsmith-plugins/elasticSearchPlugin/src/test/java/com/external/plugins/ElasticSearchPluginTest.java index 95cbf26660..0f4e748259 100644 --- a/app/server/appsmith-plugins/elasticSearchPlugin/src/test/java/com/external/plugins/ElasticSearchPluginTest.java +++ b/app/server/appsmith-plugins/elasticSearchPlugin/src/test/java/com/external/plugins/ElasticSearchPluginTest.java @@ -2,7 +2,6 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Endpoint; import lombok.extern.slf4j.Slf4j; diff --git a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java index 84c63a9d06..babf75f6f2 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java +++ b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.DatasourceTestResult; @@ -355,7 +355,7 @@ public class FirestorePlugin extends BasePlugin { @Override public Mono datasourceCreate(DatasourceConfiguration datasourceConfiguration) { - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); final Set errors = validateDatasource(datasourceConfiguration); if (!CollectionUtils.isEmpty(errors)) { @@ -405,7 +405,7 @@ public class FirestorePlugin extends BasePlugin { @Override public Set validateDatasource(DatasourceConfiguration datasourceConfiguration) { - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); Set invalids = new HashSet<>(); diff --git a/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java b/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java index fa2cc2c56d..f76044d967 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java +++ b/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Property; import com.google.cloud.NoCredentials; @@ -60,9 +60,10 @@ public class FirestorePluginTest { firestoreConnection.document("changing/to-delete").set(Map.of("value", 1)).get(); dsConfig.setUrl(emulator.getEmulatorEndpoint()); - dsConfig.setAuthentication(new AuthenticationDTO()); - dsConfig.getAuthentication().setUsername("test-project"); - dsConfig.getAuthentication().setPassword(""); + DBAuth auth = new DBAuth(); + auth.setUsername("test-project"); + auth.setPassword(""); + dsConfig.setAuthentication(auth); } @Test diff --git a/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/MongoPlugin.java b/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/MongoPlugin.java index e95782fce1..40e698401c 100644 --- a/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/MongoPlugin.java +++ b/app/server/appsmith-plugins/mongoPlugin/src/main/java/com/external/plugins/MongoPlugin.java @@ -2,8 +2,8 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.Connection; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.DatasourceTestResult; @@ -53,10 +53,10 @@ import java.util.stream.Collectors; public class MongoPlugin extends BasePlugin { - private static final Set VALID_AUTH_TYPES = Set.of( - AuthenticationDTO.Type.SCRAM_SHA_1, - AuthenticationDTO.Type.SCRAM_SHA_256, - AuthenticationDTO.Type.MONGODB_CR // NOTE: Deprecated in the driver. + private static final Set VALID_AUTH_TYPES = Set.of( + DBAuth.Type.SCRAM_SHA_1, + DBAuth.Type.SCRAM_SHA_256, + DBAuth.Type.MONGODB_CR // NOTE: Deprecated in the driver. ); private static final String VALID_AUTH_TYPES_STR = VALID_AUTH_TYPES.stream() @@ -180,7 +180,7 @@ public class MongoPlugin extends BasePlugin { String databaseName = datasourceConfiguration.getConnection().getDefaultDatabaseName(); // If that's not available, pick the authentication database. - final AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + final DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (StringUtils.isEmpty(databaseName) && authentication != null) { databaseName = authentication.getDatabaseName(); } @@ -221,7 +221,7 @@ public class MongoPlugin extends BasePlugin { builder.append("mongodb://"); } - AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication != null) { builder .append(urlEncode(authentication.getUsername())) @@ -293,12 +293,12 @@ public class MongoPlugin extends BasePlugin { } - AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication == null) { invalids.add("Missing authentication details."); } else { - AuthenticationDTO.Type authType = authentication.getAuthType(); + DBAuth.Type authType = authentication.getAuthType(); if (authType != null && VALID_AUTH_TYPES.contains(authType)) { diff --git a/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java b/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java index 583eadf3ba..2e02be6364 100644 --- a/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java +++ b/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; @@ -196,7 +196,7 @@ public class MssqlPlugin extends BasePlugin { )); } - AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); com.appsmith.external.models.Connection configurationConnection = datasourceConfiguration.getConnection(); @@ -282,15 +282,16 @@ public class MssqlPlugin extends BasePlugin { invalids.add("Missing Connection Mode."); } - if (datasourceConfiguration.getAuthentication() == null) { + DBAuth auth = (DBAuth) datasourceConfiguration.getAuthentication(); + if (auth == null) { invalids.add("Missing authentication details."); } else { - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getUsername())) { + if (StringUtils.isEmpty(auth.getUsername())) { invalids.add("Missing username for authentication."); } - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getPassword())) { + if (StringUtils.isEmpty(auth.getPassword())) { invalids.add("Missing password for authentication."); } diff --git a/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlPluginTest.java b/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlPluginTest.java index 8b15d04dd6..14072c7252 100644 --- a/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlPluginTest.java +++ b/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlPluginTest.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Endpoint; import com.appsmith.external.pluginExceptions.AppsmithPluginException; @@ -107,8 +107,8 @@ public class MssqlPluginTest { } private DatasourceConfiguration createDatasourceConfiguration() { - AuthenticationDTO authDTO = new AuthenticationDTO(); - authDTO.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth authDTO = new DBAuth(); + authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); authDTO.setUsername(username); authDTO.setPassword(password); @@ -208,8 +208,9 @@ public class MssqlPluginTest { DatasourceConfiguration dsConfig = createDatasourceConfiguration(); // Set up random username and password and try to connect - dsConfig.getAuthentication().setUsername(new ObjectId().toString()); - dsConfig.getAuthentication().setPassword(new ObjectId().toString()); + DBAuth auth = (DBAuth) dsConfig.getAuthentication(); + auth.setUsername(new ObjectId().toString()); + auth.setPassword(new ObjectId().toString()); Mono dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig); diff --git a/app/server/appsmith-plugins/mysqlPlugin/src/main/java/com/external/plugins/MySqlPlugin.java b/app/server/appsmith-plugins/mysqlPlugin/src/main/java/com/external/plugins/MySqlPlugin.java index cf24cd4247..f6d7b7b59e 100644 --- a/app/server/appsmith-plugins/mysqlPlugin/src/main/java/com/external/plugins/MySqlPlugin.java +++ b/app/server/appsmith-plugins/mysqlPlugin/src/main/java/com/external/plugins/MySqlPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.DatasourceTestResult; @@ -55,15 +55,15 @@ public class MySqlPlugin extends BasePlugin { private static final String TIMESTAMP_COLUMN_TYPE_NAME = "timestamp"; /** - Example output for COLUMNS_QUERY: - +------------+-----------+-------------+-------------+-------------+------------+----------------+ - | table_name | column_id | column_name | column_type | is_nullable | COLUMN_KEY | EXTRA | - +------------+-----------+-------------+-------------+-------------+------------+----------------+ - | test | 1 | id | int | 0 | PRI | auto_increment | - | test | 2 | firstname | varchar | 1 | | | - | test | 3 | middlename | varchar | 1 | | | - | test | 4 | lastname | varchar | 1 | | | - +------------+-----------+-------------+-------------+-------------+------------+----------------+ + * Example output for COLUMNS_QUERY: + * +------------+-----------+-------------+-------------+-------------+------------+----------------+ + * | table_name | column_id | column_name | column_type | is_nullable | COLUMN_KEY | EXTRA | + * +------------+-----------+-------------+-------------+-------------+------------+----------------+ + * | test | 1 | id | int | 0 | PRI | auto_increment | + * | test | 2 | firstname | varchar | 1 | | | + * | test | 3 | middlename | varchar | 1 | | | + * | test | 4 | lastname | varchar | 1 | | | + * +------------+-----------+-------------+-------------+-------------+------------+----------------+ */ private static final String COLUMNS_QUERY = "select tab.table_name as table_name,\n" + " col.ordinal_position as column_id,\n" + @@ -82,12 +82,12 @@ public class MySqlPlugin extends BasePlugin { " col.ordinal_position;"; /** - Example output for KEYS_QUERY: - +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ - | CONSTRAINT_NAME | self_schema | self_table | constraint_type | self_column | foreign_schema | foreign_table | foreign_column | - +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ - | PRIMARY | mytestdb | test | p | id | NULL | NULL | NULL | - +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ + * Example output for KEYS_QUERY: + * +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ + * | CONSTRAINT_NAME | self_schema | self_table | constraint_type | self_column | foreign_schema | foreign_table | foreign_column | + * +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ + * | PRIMARY | mytestdb | test | p | id | NULL | NULL | NULL | + * +-----------------+-------------+------------+-----------------+-------------+----------------+---------------+----------------+ */ private static final String KEYS_QUERY = "select i.constraint_name,\n" + " i.TABLE_SCHEMA as self_schema,\n" + @@ -123,18 +123,17 @@ public class MySqlPlugin extends BasePlugin { Iterator iterator = (Iterator) meta.getColumnMetadatas().iterator(); Map processedRow = new LinkedHashMap<>(); - while(iterator.hasNext()) { + while (iterator.hasNext()) { ColumnMetadata metaData = iterator.next(); String columnName = metaData.getName(); String typeName = metaData.getJavaType().toString(); Object columnValue = row.get(columnName); - if(java.time.LocalDate.class.toString().equalsIgnoreCase(typeName) + if (java.time.LocalDate.class.toString().equalsIgnoreCase(typeName) && columnValue != null) { columnValue = DateTimeFormatter.ISO_DATE.format(row.get(columnName, LocalDate.class)); - } - else if ((java.time.LocalDateTime.class.toString().equalsIgnoreCase(typeName)) + } else if ((java.time.LocalDateTime.class.toString().equalsIgnoreCase(typeName)) && columnValue != null) { columnValue = DateTimeFormatter.ISO_DATE_TIME.format( LocalDateTime.of( @@ -142,17 +141,14 @@ public class MySqlPlugin extends BasePlugin { row.get(columnName, LocalDateTime.class).toLocalTime() ) ) + "Z"; - } - else if(java.time.LocalTime.class.toString().equalsIgnoreCase(typeName) + } else if (java.time.LocalTime.class.toString().equalsIgnoreCase(typeName) && columnValue != null) { columnValue = DateTimeFormatter.ISO_TIME.format(row.get(columnName, LocalTime.class)); - } - else if (java.time.Year.class.toString().equalsIgnoreCase(typeName) + } else if (java.time.Year.class.toString().equalsIgnoreCase(typeName) && columnValue != null) { columnValue = row.get(columnName, LocalDate.class).getYear(); - } - else { + } else { columnValue = row.get(columnName); } @@ -165,10 +161,10 @@ public class MySqlPlugin extends BasePlugin { /** * 1. Check the type of sql query - i.e Select ... or Insert/Update/Drop * 2. In case sql queries are chained together, then decide the type based on the last query. i.e In case of - * query "select * from test; updated test ..." the type of query will be based on the update statement. + * query "select * from test; updated test ..." the type of query will be based on the update statement. * 3. This is used because the output returned to client is based on the type of the query. In case of a - * select query rows are returned, whereas, in case of any other query the number of updated rows is - * returned. + * select query rows are returned, whereas, in case of any other query the number of updated rows is + * returned. */ private boolean getIsSelectOrShowQuery(String query) { String[] queries = query.split(";"); @@ -189,17 +185,16 @@ public class MySqlPlugin extends BasePlugin { boolean isSelectOrShowQuery = getIsSelectOrShowQuery(query); final List> rowsList = new ArrayList<>(50); Flux resultFlux = Mono.from(connection.validate(ValidationDepth.REMOTE)) - .flatMapMany(isValid -> { - if(isValid) { - return connection.createStatement(query).execute(); - } - else { - return Flux.error(new StaleConnectionException()); - } - }); + .flatMapMany(isValid -> { + if (isValid) { + return connection.createStatement(query).execute(); + } else { + return Flux.error(new StaleConnectionException()); + } + }); Mono>> resultMono = null; - if(isSelectOrShowQuery) { + if (isSelectOrShowQuery) { resultMono = resultFlux .flatMap(result -> { return result.map((row, meta) -> { @@ -211,8 +206,7 @@ public class MySqlPlugin extends BasePlugin { .flatMap(execResult -> { return Mono.just(rowsList); }); - } - else { + } else { resultMono = resultFlux .flatMap(result -> result.getRowsUpdated()) .collectList() @@ -243,7 +237,7 @@ public class MySqlPlugin extends BasePlugin { @Override public Mono datasourceCreate(DatasourceConfiguration datasourceConfiguration) { - AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); com.appsmith.external.models.Connection configurationConnection = datasourceConfiguration.getConnection(); StringBuilder urlBuilder = new StringBuilder(); @@ -328,16 +322,17 @@ public class MySqlPlugin extends BasePlugin { if (datasourceConfiguration.getAuthentication() == null) { invalids.add("Missing authentication details."); } else { - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getUsername())) { + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); + if (StringUtils.isEmpty(authentication.getUsername())) { invalids.add("Missing username for authentication."); } - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getPassword())) { + if (StringUtils.isEmpty(authentication.getPassword())) { invalids.add("Missing password for authentication."); } - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getDatabaseName())) { - invalids.add("Missing database name"); + if (StringUtils.isEmpty(authentication.getDatabaseName())) { + invalids.add("Missing database name."); } } @@ -516,11 +511,11 @@ public class MySqlPlugin extends BasePlugin { .collectList() .thenMany(Flux.from(connection.createStatement(KEYS_QUERY).execute())) .flatMap(result -> { - return result.map((row, meta) -> { - getKeyInfo(row, meta, tablesByName, keyRegistry); + return result.map((row, meta) -> { + getKeyInfo(row, meta, tablesByName, keyRegistry); - return result; - }); + return result; + }); }) .collectList() .map(list -> { diff --git a/app/server/appsmith-plugins/mysqlPlugin/src/test/java/com/external/plugins/MySqlPluginTest.java b/app/server/appsmith-plugins/mysqlPlugin/src/test/java/com/external/plugins/MySqlPluginTest.java index cb1d28520f..a5f12cb1da 100644 --- a/app/server/appsmith-plugins/mysqlPlugin/src/test/java/com/external/plugins/MySqlPluginTest.java +++ b/app/server/appsmith-plugins/mysqlPlugin/src/test/java/com/external/plugins/MySqlPluginTest.java @@ -1,6 +1,12 @@ package com.external.plugins; -import com.appsmith.external.models.*; +import com.appsmith.external.models.ActionConfiguration; +import com.appsmith.external.models.ActionExecutionResult; +import com.appsmith.external.models.DBAuth; +import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStructure; +import com.appsmith.external.models.Endpoint; +import com.appsmith.external.models.Property; import com.appsmith.external.pluginExceptions.StaleConnectionException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -9,7 +15,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import io.r2dbc.spi.ConnectionFactoryOptions; import io.r2dbc.spi.Connection; import io.r2dbc.spi.ConnectionFactories; -import io.r2dbc.spi.Batch; import lombok.extern.log4j.Log4j; import org.junit.Assert; import org.junit.BeforeClass; @@ -119,8 +124,8 @@ public class MySqlPluginTest { } private static DatasourceConfiguration createDatasourceConfiguration() { - AuthenticationDTO authDTO = new AuthenticationDTO(); - authDTO.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth authDTO = new DBAuth(); + authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); authDTO.setUsername(username); authDTO.setPassword(password); authDTO.setDatabaseName(database); @@ -147,8 +152,8 @@ public class MySqlPluginTest { @Test public void testConnectMySQLContainerWithInvalidTimezone() { - AuthenticationDTO authDTO = new AuthenticationDTO(); - authDTO.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth authDTO = new DBAuth(); + authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); authDTO.setUsername(mySQLContainerWithInvalidTimezone.getUsername()); authDTO.setPassword(mySQLContainerWithInvalidTimezone.getPassword()); authDTO.setDatabaseName(mySQLContainerWithInvalidTimezone.getDatabaseName()); @@ -227,9 +232,10 @@ public class MySqlPluginTest { @Test public void testValidateDatasourceNullCredentials() { dsConfig.setConnection(new com.appsmith.external.models.Connection()); - dsConfig.getAuthentication().setUsername(null); - dsConfig.getAuthentication().setPassword(null); - dsConfig.getAuthentication().setDatabaseName("someDbName"); + DBAuth auth = (DBAuth) dsConfig.getAuthentication(); + auth.setUsername(null); + auth.setPassword(null); + auth.setDatabaseName("someDbName"); Set output = pluginExecutor.validateDatasource(dsConfig); assertTrue(output.contains("Missing username for authentication.")); assertTrue(output.contains("Missing password for authentication.")); @@ -237,10 +243,10 @@ public class MySqlPluginTest { @Test public void testValidateDatasourceMissingDBName() { - dsConfig.getAuthentication().setDatabaseName(""); + ((DBAuth) dsConfig.getAuthentication()).setDatabaseName(""); Set output = pluginExecutor.validateDatasource(dsConfig); assertEquals(output.size(), 1); - assertTrue(output.contains("Missing database name")); + assertTrue(output.contains("Missing database name.")); } @Test diff --git a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java index 33d582e2d6..e3ff0a0933 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.DatasourceTestResult; @@ -288,15 +288,16 @@ public class PostgresPlugin extends BasePlugin { invalids.add("Missing authentication details."); } else { - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getUsername())) { + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); + if (StringUtils.isEmpty(authentication.getUsername())) { invalids.add("Missing username for authentication."); } - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getPassword())) { + if (StringUtils.isEmpty(authentication.getPassword())) { invalids.add("Missing password for authentication."); } - if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getDatabaseName())) { + if (StringUtils.isEmpty(authentication.getDatabaseName())) { invalids.add("Missing database name."); } @@ -509,7 +510,7 @@ public class PostgresPlugin extends BasePlugin { config.addDataSourceProperty(SSL, isSslEnabled); // Set authentication properties - AuthenticationDTO authentication = datasourceConfiguration.getAuthentication(); + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); if (authentication.getUsername() != null) { config.setUsername(authentication.getUsername()); } diff --git a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java index e9ec5ecfdd..c312c123d4 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java @@ -3,6 +3,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.Endpoint; @@ -138,8 +139,8 @@ public class PostgresPluginTest { } private DatasourceConfiguration createDatasourceConfiguration() { - AuthenticationDTO authDTO = new AuthenticationDTO(); - authDTO.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth authDTO = new DBAuth(); + authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); authDTO.setUsername(username); authDTO.setPassword(password); authDTO.setDatabaseName("postgres"); diff --git a/app/server/appsmith-plugins/redisPlugin/src/main/java/com/external/plugins/RedisPlugin.java b/app/server/appsmith-plugins/redisPlugin/src/main/java/com/external/plugins/RedisPlugin.java index d2716dbb63..b862a7869f 100644 --- a/app/server/appsmith-plugins/redisPlugin/src/main/java/com/external/plugins/RedisPlugin.java +++ b/app/server/appsmith-plugins/redisPlugin/src/main/java/com/external/plugins/RedisPlugin.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; @@ -113,8 +113,8 @@ public class RedisPlugin extends BasePlugin { Integer port = (int) (long) ObjectUtils.defaultIfNull(endpoint.getPort(), DEFAULT_PORT); Jedis jedis = new Jedis(endpoint.getHost(), port); - AuthenticationDTO auth = datasourceConfiguration.getAuthentication(); - if (auth != null && AuthenticationDTO.Type.USERNAME_PASSWORD.equals(auth.getAuthType())) { + DBAuth auth = (DBAuth) datasourceConfiguration.getAuthentication(); + if (auth != null && DBAuth.Type.USERNAME_PASSWORD.equals(auth.getAuthType())) { jedis.auth(auth.getUsername(), auth.getPassword()); } @@ -158,13 +158,13 @@ public class RedisPlugin extends BasePlugin { } } - AuthenticationDTO auth = datasourceConfiguration.getAuthentication(); - if (auth != null && AuthenticationDTO.Type.USERNAME_PASSWORD.equals(auth.getAuthType())) { - if (StringUtils.isNullOrEmpty(datasourceConfiguration.getAuthentication().getUsername())) { + DBAuth auth = (DBAuth) datasourceConfiguration.getAuthentication(); + if (auth != null && DBAuth.Type.USERNAME_PASSWORD.equals(auth.getAuthType())) { + if (StringUtils.isNullOrEmpty(auth.getUsername())) { invalids.add("Missing username for authentication."); } - if (StringUtils.isNullOrEmpty(datasourceConfiguration.getAuthentication().getPassword())) { + if (StringUtils.isNullOrEmpty(auth.getPassword())) { invalids.add("Missing password for authentication."); } } diff --git a/app/server/appsmith-plugins/redisPlugin/src/test/java/com/external/plugins/RedisPluginTest.java b/app/server/appsmith-plugins/redisPlugin/src/test/java/com/external/plugins/RedisPluginTest.java index 419b699d36..f49085c6b7 100644 --- a/app/server/appsmith-plugins/redisPlugin/src/test/java/com/external/plugins/RedisPluginTest.java +++ b/app/server/appsmith-plugins/redisPlugin/src/test/java/com/external/plugins/RedisPluginTest.java @@ -2,7 +2,7 @@ package com.external.plugins; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; @@ -99,8 +99,8 @@ public class RedisPluginTest { Endpoint endpoint = new Endpoint(); endpoint.setHost("test-host"); - AuthenticationDTO invalidAuth = new AuthenticationDTO(); - invalidAuth.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth invalidAuth = new DBAuth(); + invalidAuth.setAuthType(DBAuth.Type.USERNAME_PASSWORD); invalidDatasourceConfiguration.setAuthentication(invalidAuth); invalidDatasourceConfiguration.setEndpoints(Collections.singletonList(endpoint)); @@ -115,8 +115,8 @@ public class RedisPluginTest { public void itShouldValidateDatasource() { DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); - AuthenticationDTO auth = new AuthenticationDTO(); - auth.setAuthType(AuthenticationDTO.Type.USERNAME_PASSWORD); + DBAuth auth = new DBAuth(); + auth.setAuthType(DBAuth.Type.USERNAME_PASSWORD); auth.setUsername("test-username"); auth.setPassword("test-password"); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/MongoConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/MongoConfig.java index 5c0580ee80..5568d0e5a4 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/MongoConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/MongoConfig.java @@ -1,5 +1,7 @@ package com.appsmith.server.configurations; +import com.appsmith.external.annotations.DocumentTypeMapper; +import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.server.configurations.mongo.SoftDeleteMongoRepositoryFactoryBean; import com.appsmith.server.repositories.BaseRepositoryImpl; import com.github.cloudyrock.mongock.SpringBootMongock; @@ -8,10 +10,21 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.convert.DefaultTypeMapper; +import org.springframework.data.convert.SimpleTypeInformationMapper; +import org.springframework.data.convert.TypeInformationMapper; +import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.config.EnableMongoAuditing; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.convert.MongoTypeMapper; +import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories; +import java.util.Arrays; + /** * This configures the JPA Mongo repositories. The default base implementation is defined in {@link BaseRepositoryImpl}. * This is required to add default clauses for default JPA queries defined by Spring Data. @@ -39,4 +52,28 @@ public class MongoConfig { .build(); } + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MappingMongoConverter mappingMongoConverter) { + return new MongoTemplate(mongoDbFactory, mappingMongoConverter); + } + + // Custom type mapper here includes our annotation based mapper that is meant to ensure correct mapping for sub-classes + // We have currently only included the package which contains the DTOs that need this mapping + @Bean + public DefaultTypeMapper typeMapper() { + TypeInformationMapper typeInformationMapper = new DocumentTypeMapper + .Builder() + .withBasePackages(new String[]{AuthenticationDTO.class.getPackageName()}) + .build(); + // This is a hack to include the default mapper as a fallback, because Spring seems to override its list instead of appending mappers + return new DefaultMongoTypeMapper(DefaultMongoTypeMapper.DEFAULT_TYPE_KEY, Arrays.asList(typeInformationMapper, new SimpleTypeInformationMapper())); + } + + @Bean + public MappingMongoConverter mappingMongoConverter(DefaultTypeMapper typeMapper, MongoMappingContext context) { + MappingMongoConverter converter = new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, context); + converter.setTypeMapper((MongoTypeMapper) typeMapper); + return converter; + } + } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/OrganizationController.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/OrganizationController.java index 127d883681..18d2269bb0 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/OrganizationController.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/OrganizationController.java @@ -9,17 +9,17 @@ import com.appsmith.server.services.UserOrganizationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.codec.multipart.Part; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; import java.util.List; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Organization.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Organization.java index eef0ba665a..3d9a45181a 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Organization.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Organization.java @@ -9,8 +9,6 @@ import lombok.Setter; import lombok.ToString; import org.springframework.data.mongodb.core.mapping.Document; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotBlank; import java.util.List; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/GlobalExceptionHandler.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/GlobalExceptionHandler.java index eb4dc34a81..e2a7ddc1ec 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/GlobalExceptionHandler.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/GlobalExceptionHandler.java @@ -2,8 +2,9 @@ package com.appsmith.server.exceptions; import com.appsmith.external.pluginExceptions.AppsmithPluginException; import com.appsmith.server.dtos.ResponseDTO; +import io.sentry.Sentry; +import io.sentry.SentryLevel; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; import org.springframework.validation.FieldError; @@ -13,17 +14,12 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.support.WebExchangeBindException; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebInputException; -import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; -import io.sentry.Sentry; -import io.sentry.SentryEvent; -import io.sentry.SentryOptions; -import io.sentry.SentryLevel; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.HashMap; import java.util.Map; -import java.io.StringWriter; -import java.io.PrintWriter; /** diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/BeanCopyUtils.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/BeanCopyUtils.java index 36f1e85d33..7ca08a737c 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/BeanCopyUtils.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/BeanCopyUtils.java @@ -74,7 +74,9 @@ public final class BeanCopyUtils { Object targetValue = targetBeanWrapper.getPropertyValue(name); - if (targetValue != null && isDomainModel(propertyDescriptor.getPropertyType())) { + if (targetValue != null + && sourceValue.getClass().isAssignableFrom(targetValue.getClass()) + && isDomainModel(propertyDescriptor.getPropertyType())) { // Go deeper *only* if the property belongs to Appsmith's models, and both the source and target values // are not null. copyNestedNonNullProperties(sourceValue, targetValue); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java index eb7553425d..89260f746e 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java @@ -1,7 +1,7 @@ package com.appsmith.server.migrations; -import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.BaseDomain; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.Policy; import com.appsmith.server.acl.AppsmithRole; import com.appsmith.server.constants.FieldName; @@ -38,14 +38,21 @@ import com.appsmith.server.services.OrganizationService; import com.github.cloudyrock.mongock.ChangeLog; import com.github.cloudyrock.mongock.ChangeSet; import com.google.gson.Gson; +import com.mongodb.MongoException; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.model.Filters; import lombok.extern.slf4j.Slf4j; import net.minidev.json.JSONObject; import org.apache.commons.lang.ObjectUtils; +import org.bson.Document; import org.bson.types.ObjectId; import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.dao.DataAccessException; import org.springframework.dao.DuplicateKeyException; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.UncategorizedMongoDbException; +import org.springframework.data.mongodb.core.CollectionCallback; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.index.CompoundIndexDefinition; import org.springframework.data.mongodb.core.index.Index; @@ -556,7 +563,7 @@ public class DatabaseChangelog { ); for (final Datasource datasource : datasources) { - AuthenticationDTO authentication = datasource.getDatasourceConfiguration().getAuthentication(); + DBAuth authentication = (DBAuth) datasource.getDatasourceConfiguration().getAuthentication(); authentication.setPassword(encryptionService.encryptString(authentication.getPassword())); mongoTemplate.save(datasource); } @@ -1408,4 +1415,84 @@ public class DatabaseChangelog { } } + @ChangeSet(order = "045", id = "update-authentication-type", author = "") + public void updateAuthenticationTypes(MongoTemplate mongoTemplate) { + mongoTemplate.execute("datasource", new CollectionCallback() { + @Override + public String doInCollection(MongoCollection collection) throws MongoException, DataAccessException { + // Only update _class for authentication objects that exist + MongoCursor cursor = collection.find(Filters.exists("datasourceConfiguration.authentication")).cursor(); + while (cursor.hasNext()) { + Document current = (Document) cursor.next(); + Document old = Document.parse(current.toJson()); + + // Extra precaution to only update _class for authentication objects that don't already have this + // Is this condition required? What does production datasource look like? + ((Document) ((Document) current.get("datasourceConfiguration")) + .get("authentication")) + .putIfAbsent("_class", "dbAuth"); + + // Replace old document with the new one + collection.findOneAndReplace(old, current); + } + return null; + } + }); + + mongoTemplate.execute("newAction", new CollectionCallback() { + @Override + public String doInCollection(MongoCollection collection) throws MongoException, DataAccessException { + // Only update _class for authentication objects that exist + MongoCursor cursor = collection + .find(Filters.and( + Filters.exists("unpublishedAction.datasource"), + Filters.exists("unpublishedAction.datasource.datasourceConfiguration"), + Filters.exists("unpublishedAction.datasource.datasourceConfiguration.authentication"))).cursor(); + while (cursor.hasNext()) { + Document current = (Document) cursor.next(); + Document old = Document.parse(current.toJson()); + + // Extra precaution to only update _class for authentication objects that don't already have this + // Is this condition required? What does production datasource look like? + ((Document) ((Document) ((Document) ((Document) current.get("unpublishedAction")) + .get("datasource")) + .get("datasourceConfiguration")) + .get("authentication")) + .putIfAbsent("_class", "dbAuth"); + + // Replace old document with the new one + collection.findOneAndReplace(old, current); + } + return null; + } + }); + + mongoTemplate.execute("newAction", new CollectionCallback() { + @Override + public String doInCollection(MongoCollection collection) throws MongoException, DataAccessException { + // Only update _class for authentication objects that exist + MongoCursor cursor = collection + .find(Filters.and( + Filters.exists("publishedAction.datasource"), + Filters.exists("publishedAction.datasource.datasourceConfiguration"), + Filters.exists("publishedAction.datasource.datasourceConfiguration.authentication"))).cursor(); + while (cursor.hasNext()) { + Document current = (Document) cursor.next(); + Document old = Document.parse(current.toJson()); + + // Extra precaution to only update _class for authentication objects that don't already have this + // Is this condition required? What does production datasource look like? + ((Document) ((Document) ((Document) ((Document) current.get("publishedAction")) + .get("datasource")) + .get("datasourceConfiguration")) + .get("authentication")) + .putIfAbsent("_class", "dbAuth"); + + // Replace old document with the new one + collection.findOneAndReplace(old, current); + } + return null; + } + }); + } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java index dd22618a22..31e2c68e91 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java @@ -15,6 +15,7 @@ import reactor.core.publisher.Mono; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; +import java.util.stream.Collectors; import static com.appsmith.server.acl.AclPermission.EXECUTE_DATASOURCES; @@ -170,10 +171,15 @@ public class DatasourceContextServiceImpl implements DatasourceContextService { } @Override - public AuthenticationDTO decryptSensitiveFields(AuthenticationDTO authenticationDTO) { - if (authenticationDTO != null && authenticationDTO.getPassword() != null) { - authenticationDTO.setPassword(encryptionService.decryptString(authenticationDTO.getPassword())); + public AuthenticationDTO decryptSensitiveFields(AuthenticationDTO authentication) { + if (authentication != null && authentication.isEncrypted()) { + Map decryptedFields = authentication.getEncryptionFields().entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> encryptionService.decryptString(e.getValue()))); + authentication.setEncryptionFields(decryptedFields); + authentication.setEncrypted(false); } - return authenticationDTO; + return authentication; } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceService.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceService.java index 1e15af6fa5..b78d67c45b 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceService.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceService.java @@ -1,5 +1,6 @@ package com.appsmith.server.services; +import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.server.acl.AclPermission; import com.appsmith.server.domains.Datasource; @@ -28,4 +29,6 @@ public interface DatasourceService extends CrudService { Flux findAllByOrganizationId(String organizationId, AclPermission readDatasources); Flux saveAll(List datasourceList); + + AuthenticationDTO encryptAuthenticationFields(AuthenticationDTO authentication); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java index 8ec077abd1..0f91302a9c 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java @@ -3,7 +3,6 @@ package com.appsmith.server.services; import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; -import com.appsmith.external.models.Endpoint; import com.appsmith.external.models.Policy; import com.appsmith.external.plugins.PluginExecutor; import com.appsmith.server.acl.AclPermission; @@ -12,7 +11,6 @@ import com.appsmith.server.constants.FieldName; import com.appsmith.server.domains.Datasource; import com.appsmith.server.domains.Organization; import com.appsmith.server.domains.Plugin; -import com.appsmith.server.domains.PluginType; import com.appsmith.server.domains.User; import com.appsmith.server.exceptions.AppsmithError; import com.appsmith.server.exceptions.AppsmithException; @@ -36,6 +34,7 @@ import javax.validation.Validator; import javax.validation.constraints.NotNull; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -111,23 +110,23 @@ public class DatasourceServiceImpl extends BaseService sessionUserService.getCurrentUser() - .flatMap(user -> { - // Create policies for this datasource -> This datasource should inherit its permissions and policies from - // the organization and this datasource should also allow the current user to crud this datasource. - return organizationService.findById(datasource1.getOrganizationId(), AclPermission.ORGANIZATION_MANAGE_APPLICATIONS) - .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ORGANIZATION, datasource1.getOrganizationId()))) - .map(org -> { - Set policySet = org.getPolicies().stream() - .filter(policy -> - policy.getPermission().equals(ORGANIZATION_MANAGE_APPLICATIONS.getValue()) || - policy.getPermission().equals(ORGANIZATION_READ_APPLICATIONS.getValue()) - ).collect(Collectors.toSet()); + .flatMap(user -> { + // Create policies for this datasource -> This datasource should inherit its permissions and policies from + // the organization and this datasource should also allow the current user to crud this datasource. + return organizationService.findById(datasource1.getOrganizationId(), AclPermission.ORGANIZATION_MANAGE_APPLICATIONS) + .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ORGANIZATION, datasource1.getOrganizationId()))) + .map(org -> { + Set policySet = org.getPolicies().stream() + .filter(policy -> + policy.getPermission().equals(ORGANIZATION_MANAGE_APPLICATIONS.getValue()) || + policy.getPermission().equals(ORGANIZATION_READ_APPLICATIONS.getValue()) + ).collect(Collectors.toSet()); - Set documentPolicies = policyGenerator.getAllChildPolicies(policySet, Organization.class, Datasource.class); - datasource1.setPolicies(documentPolicies); - return datasource1; - }); - }) + Set documentPolicies = policyGenerator.getAllChildPolicies(policySet, Organization.class, Datasource.class); + datasource1.setPolicies(documentPolicies); + return datasource1; + }); + }) ) .flatMap(this::validateAndSaveDatasourceToRepository); } @@ -157,10 +156,15 @@ public class DatasourceServiceImpl extends BaseService encryptedFields = authentication.getEncryptionFields().entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> encryptionService.encryptString(e.getValue()))); + authentication.setEncryptionFields(encryptedFields); + authentication.setEncrypted(true); } return authentication; } @@ -232,30 +236,32 @@ public class DatasourceServiceImpl extends BaseService testDatasource(Datasource datasource) { Mono datasourceMono = null; - // Fetch the password from the db if the datasource being tested does not have password set. + // Fetch any fields that maybe encrypted from the db if the datasource being tested does not have those fields set. // This scenario would happen whenever an existing datasource is being tested and no changes are present in the - // password field (because password is not sent over the network after encryption back to the client - if (datasource.getId() != null && datasource.getDatasourceConfiguration()!=null && - datasource.getDatasourceConfiguration().getAuthentication()!=null) { - String password = datasource.getDatasourceConfiguration().getAuthentication().getPassword(); - if (password == null || password.isEmpty()) { + // encrypted field (because encrypted fields are not sent over the network after encryption back to the client + if (datasource.getId() != null && datasource.getDatasourceConfiguration() != null && + datasource.getDatasourceConfiguration().getAuthentication() != null) { + Set emptyFields = datasource.getDatasourceConfiguration().getAuthentication().getEmptyEncryptionFields(); + if (emptyFields != null && !emptyFields.isEmpty()) { datasourceMono = getById(datasource.getId()) - // If datasource has encrypted password, decrypt and set it in the datasource which is being tested - .map(datasourceFromRepo-> { - if (datasourceFromRepo.getDatasourceConfiguration()!=null && datasourceFromRepo.getDatasourceConfiguration().getAuthentication()!=null) { + // If datasource has encrypted fields, decrypt and set it in the datasource which is being tested + .map(datasourceFromRepo -> { + if (datasourceFromRepo.getDatasourceConfiguration() != null && datasourceFromRepo.getDatasourceConfiguration().getAuthentication() != null) { AuthenticationDTO authentication = datasourceFromRepo.getDatasourceConfiguration().getAuthentication(); - if (authentication.getPassword() != null) { - String decryptedPassword = encryptionService.decryptString(authentication.getPassword()); - datasource.getDatasourceConfiguration().getAuthentication().setPassword(decryptedPassword); - } + Map decryptedFields = authentication.getEncryptionFields().entrySet().stream() + .filter(e -> !emptyFields.contains(e.getKey())) + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> encryptionService.decryptString(e.getValue()))); + datasource.getDatasourceConfiguration().getAuthentication().setEncryptionFields(decryptedFields); } return datasource; }) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/EncryptionServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/EncryptionServiceImpl.java index 03f63d3a6d..fad320571c 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/EncryptionServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/EncryptionServiceImpl.java @@ -7,8 +7,6 @@ import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.security.crypto.encrypt.TextEncryptor; import org.springframework.stereotype.Service; -import java.math.BigInteger; - @Service public class EncryptionServiceImpl implements EncryptionService { private final EncryptionConfig encryptionConfig; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/MarketplaceServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/MarketplaceServiceImpl.java index be2950f3cd..24aae60893 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/MarketplaceServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/MarketplaceServiceImpl.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/NewActionServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/NewActionServiceImpl.java index 549de280ef..7e8c53d101 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/NewActionServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/NewActionServiceImpl.java @@ -253,6 +253,17 @@ public class NewActionServiceImpl extends BaseService datasourceMono; if (action.getDatasource().getId() == null) { + if (action.getDatasource().getDatasourceConfiguration() != null && + action.getDatasource().getDatasourceConfiguration().getAuthentication() != null) { + action.getDatasource() + .getDatasourceConfiguration() + .setAuthentication(datasourceService.encryptAuthenticationFields(action + .getDatasource() + .getDatasourceConfiguration() + .getAuthentication() + )); + } + datasourceMono = Mono.just(action.getDatasource()) .flatMap(datasourceService::validateDatasource); } else { @@ -394,9 +405,6 @@ public class NewActionServiceImpl extends BaseService updatedActionMono = repository.findById(id, MANAGE_ACTIONS) .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ACTION, id))) .map(dbAction -> { @@ -412,7 +420,7 @@ public class NewActionServiceImpl extends BaseService analyticsUpdateMono = updatedActionMono .flatMap(analyticsService::sendUpdateEvent); - // First Update the Action + // First Update the Action return savedUpdatedActionMono // Now send the update event to analytics service .then(analyticsUpdateMono) @@ -438,38 +446,38 @@ public class NewActionServiceImpl extends BaseService actionMono = repository.findById(actionId, EXECUTE_ACTIONS) - .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ACTION, actionId))) - .flatMap(dbAction -> { - ActionDTO action; - if (TRUE.equals(executeActionDTO.getViewMode())) { - action = dbAction.getPublishedAction(); - // If the action has not been published, return error - if (action == null) { - return Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ACTION, actionId)); - } - } else { - action = dbAction.getUnpublishedAction(); + .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ACTION, actionId))) + .flatMap(dbAction -> { + ActionDTO action; + if (TRUE.equals(executeActionDTO.getViewMode())) { + action = dbAction.getPublishedAction(); + // If the action has not been published, return error + if (action == null) { + return Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.ACTION, actionId)); } + } else { + action = dbAction.getUnpublishedAction(); + } - // Now check for erroneous situations which would deter the execution of the action : + // Now check for erroneous situations which would deter the execution of the action : - // Error out with in case of an invalid action - if (Boolean.FALSE.equals(action.getIsValid())) { - return Mono.error(new AppsmithException( - AppsmithError.INVALID_ACTION, - action.getName(), - actionId, - ArrayUtils.toString(action.getInvalids().toArray()) - )); - } + // Error out with in case of an invalid action + if (Boolean.FALSE.equals(action.getIsValid())) { + return Mono.error(new AppsmithException( + AppsmithError.INVALID_ACTION, + action.getName(), + actionId, + ArrayUtils.toString(action.getInvalids().toArray()) + )); + } - // Error out in case of JS Plugin (this is currently client side execution only) - if (dbAction.getPluginType() == PluginType.JS) { - return Mono.error(new AppsmithException(AppsmithError.UNSUPPORTED_OPERATION)); - } - return Mono.just(action); - }) - .cache(); + // Error out in case of JS Plugin (this is currently client side execution only) + if (dbAction.getPluginType() == PluginType.JS) { + return Mono.error(new AppsmithException(AppsmithError.UNSUPPORTED_OPERATION)); + } + return Mono.just(action); + }) + .cache(); // 3. Instantiate the implementation class based on the query type @@ -683,7 +691,7 @@ public class NewActionServiceImpl extends BaseService getStructure(String datasourceId, boolean ignoreCache) { return datasourceService.getById(datasourceId) - .flatMap(datasource -> getStructure(datasource, ignoreCache)); + .flatMap(datasource -> getStructure(datasource, ignoreCache)); } public Mono getStructure(Datasource datasource, boolean ignoreCache) { // This mono, when computed, will yield the cached structure if applicable, or resolve to an empty mono. - // If the structure is `null` inside the datasource, this will resolve to empty as well. + // If the structure is `null` inside the datasource, this will resolve to empty as well. final Mono cachedStructureMono = - ignoreCache ? Mono.empty() : Mono.justOrEmpty(datasource.getStructure()); + ignoreCache ? Mono.empty() : Mono.justOrEmpty(datasource.getStructure()); - decryptPasswordInDatasource(datasource); + decryptEncryptedFieldsInDatasource(datasource); // This mono, when computed, will load the structure of the datasource by calling the plugin method. final Mono loadStructureMono = pluginExecutorHelper @@ -83,12 +85,16 @@ public class DatasourceStructureSolution { .defaultIfEmpty(new DatasourceStructure()); } - private Datasource decryptPasswordInDatasource(Datasource datasource) { - // If datasource has encrypted password, decrypt and set it in the datasource. + private Datasource decryptEncryptedFieldsInDatasource(Datasource datasource) { + // If datasource has encrypted fields, decrypt and set it in the datasource. if (datasource.getDatasourceConfiguration() != null) { AuthenticationDTO authentication = datasource.getDatasourceConfiguration().getAuthentication(); - if (authentication != null && authentication.getPassword() != null) { - authentication.setPassword(encryptionService.decryptString(authentication.getPassword())); + if (authentication != null) { + Map decryptedFields = authentication.getEncryptionFields().entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> encryptionService.decryptString(e.getValue()))); + authentication.setEncryptionFields(decryptedFields); } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java index 978e7059a2..474af7bfa8 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceContextServiceTest.java @@ -1,6 +1,6 @@ package com.appsmith.server.services; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.server.acl.AclPermission; import com.appsmith.server.domains.Datasource; @@ -64,7 +64,7 @@ public class DatasourceContextServiceTest { datasource.setName("test datasource name for authenticated fields decryption test"); DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); datasourceConfiguration.setUrl("http://test.com"); - AuthenticationDTO authenticationDTO = new AuthenticationDTO(); + DBAuth authenticationDTO = new DBAuth(); String username = "username"; String password = "password"; authenticationDTO.setUsername(username); @@ -81,8 +81,8 @@ public class DatasourceContextServiceTest { StepVerifier .create(datasourceMono) .assertNext(savedDatasource -> { - AuthenticationDTO authentication = savedDatasource.getDatasourceConfiguration().getAuthentication(); - AuthenticationDTO decryptedAuthentication = datasourceContextService.decryptSensitiveFields(authentication); + DBAuth authentication = (DBAuth) savedDatasource.getDatasourceConfiguration().getAuthentication(); + DBAuth decryptedAuthentication = (DBAuth) datasourceContextService.decryptSensitiveFields(authentication); assertThat(decryptedAuthentication.getPassword()).isEqualTo(password); }) .verifyComplete(); @@ -98,7 +98,7 @@ public class DatasourceContextServiceTest { datasource.setName("test datasource name for authenticated fields decryption test null password"); DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); datasourceConfiguration.setUrl("http://test.com"); - AuthenticationDTO authenticationDTO = new AuthenticationDTO(); + DBAuth authenticationDTO = new DBAuth(); datasourceConfiguration.setAuthentication(authenticationDTO); datasource.setDatasourceConfiguration(datasourceConfiguration); datasource.setOrganizationId(orgId); @@ -111,8 +111,8 @@ public class DatasourceContextServiceTest { StepVerifier .create(datasourceMono) .assertNext(savedDatasource -> { - AuthenticationDTO authentication = savedDatasource.getDatasourceConfiguration().getAuthentication(); - AuthenticationDTO decryptedAuthentication = datasourceContextService.decryptSensitiveFields(authentication); + DBAuth authentication = (DBAuth) savedDatasource.getDatasourceConfiguration().getAuthentication(); + DBAuth decryptedAuthentication = (DBAuth) datasourceContextService.decryptSensitiveFields(authentication); assertThat(decryptedAuthentication.getPassword()).isNull(); }) .verifyComplete(); diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java index 517ad8962b..21737b1116 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java @@ -1,11 +1,12 @@ package com.appsmith.server.services; import com.appsmith.external.models.ActionConfiguration; -import com.appsmith.external.models.AuthenticationDTO; import com.appsmith.external.models.Connection; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; +import com.appsmith.external.models.OAuth2; import com.appsmith.external.models.Policy; import com.appsmith.external.models.SSLDetails; import com.appsmith.external.models.UploadedFile; @@ -74,7 +75,7 @@ public class DatasourceServiceTest { @MockBean PluginExecutorHelper pluginExecutorHelper; - String orgId = ""; + String orgId = ""; @Before @WithUserDetails(value = "api_user") @@ -234,9 +235,10 @@ public class DatasourceServiceTest { Connection connection1 = new Connection(); SSLDetails ssl = new SSLDetails(); ssl.setKeyFile(new UploadedFile()); - ssl.getKeyFile().setName("ssl_key_file_id"); + ssl.getKeyFile().setName("ssl_key_file_id2"); connection1.setSsl(ssl); datasourceConfiguration1.setConnection(connection1); + updates.setDatasourceConfiguration(datasourceConfiguration1); return datasourceService.update(datasource1.getId(), updates); }); @@ -246,7 +248,72 @@ public class DatasourceServiceTest { assertThat(createdDatasource.getId()).isNotEmpty(); assertThat(createdDatasource.getPluginId()).isEqualTo(datasource.getPluginId()); assertThat(createdDatasource.getName()).isEqualTo(datasource.getName()); - assertThat(createdDatasource.getDatasourceConfiguration().getConnection().getSsl().getKeyFile().getName()).isEqualTo("ssl_key_file_id"); + assertThat(createdDatasource.getDatasourceConfiguration().getConnection().getSsl().getKeyFile().getName()).isEqualTo("ssl_key_file_id2"); + + }) + .verifyComplete(); + } + + @Test + @WithUserDetails(value = "api_user") + public void createAndUpdateDatasourceDifferentAuthentication() { + Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(new MockPluginExecutor())); + + Datasource datasource = new Datasource(); + datasource.setName("test db datasource1"); + datasource.setOrganizationId(orgId); + DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); + Connection connection = new Connection(); + connection.setMode(Connection.Mode.READ_ONLY); + connection.setType(Connection.Type.REPLICA_SET); + SSLDetails sslDetails = new SSLDetails(); + sslDetails.setAuthType(SSLDetails.AuthType.CA_CERTIFICATE); + sslDetails.setKeyFile(new UploadedFile("ssl_key_file_id", "")); + sslDetails.setCertificateFile(new UploadedFile("ssl_cert_file_id", "")); + connection.setSsl(sslDetails); + datasourceConfiguration.setConnection(connection); + DBAuth auth = new DBAuth(); + auth.setUsername("test"); + auth.setPassword("test"); + datasourceConfiguration.setAuthentication(auth); + datasource.setDatasourceConfiguration(datasourceConfiguration); + + datasource.setOrganizationId(orgId); + + Mono pluginMono = pluginService.findByName("Installed Plugin Name"); + + Mono datasourceMono = pluginMono + .map(plugin -> { + datasource.setPluginId(plugin.getId()); + return datasource; + }) + .flatMap(datasourceService::create) + .flatMap(datasource1 -> { + Datasource updates = new Datasource(); + DatasourceConfiguration datasourceConfiguration1 = new DatasourceConfiguration(); + Connection connection1 = new Connection(); + SSLDetails ssl = new SSLDetails(); + ssl.setKeyFile(new UploadedFile()); + ssl.getKeyFile().setName("ssl_key_file_id2"); + connection1.setSsl(ssl); + OAuth2 auth2 = new OAuth2(); + auth2.setClientId("test"); + auth2.setClientSecret("test"); + datasourceConfiguration1.setAuthentication(auth2); + datasourceConfiguration1.setConnection(connection1); + updates.setDatasourceConfiguration(datasourceConfiguration1); + + return datasourceService.update(datasource1.getId(), updates); + }); + + StepVerifier + .create(datasourceMono) + .assertNext(createdDatasource -> { + assertThat(createdDatasource.getId()).isNotEmpty(); + assertThat(createdDatasource.getPluginId()).isEqualTo(datasource.getPluginId()); + assertThat(createdDatasource.getName()).isEqualTo(datasource.getName()); + assertThat(createdDatasource.getDatasourceConfiguration().getConnection().getSsl().getKeyFile().getName()).isEqualTo("ssl_key_file_id2"); + assertThat(createdDatasource.getDatasourceConfiguration().getAuthentication() instanceof OAuth2).isTrue(); }) .verifyComplete(); } @@ -270,10 +337,10 @@ public class DatasourceServiceTest { final Mono> datasourcesMono = pluginMono .flatMap(plugin -> { - datasource1.setPluginId(plugin.getId()); - datasource2.setPluginId(plugin.getId()); - return datasourceService.create(datasource1); - }) + datasource1.setPluginId(plugin.getId()); + datasource2.setPluginId(plugin.getId()); + return datasourceService.create(datasource1); + }) .zipWhen(datasource -> datasourceService.create(datasource2)); StepVerifier @@ -424,13 +491,13 @@ public class DatasourceServiceTest { @WithUserDetails(value = "api_user") public void checkEncryptionOfAuthenticationDTOTest() { Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(new MockPluginExecutor())); - + Mono pluginMono = pluginService.findByName("Installed Plugin Name"); Datasource datasource = new Datasource(); datasource.setName("test datasource name for authenticated fields encryption test"); DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); datasourceConfiguration.setUrl("http://test.com"); - AuthenticationDTO authenticationDTO = new AuthenticationDTO(); + DBAuth authenticationDTO = new DBAuth(); String username = "username"; String password = "password"; authenticationDTO.setUsername(username); @@ -447,7 +514,7 @@ public class DatasourceServiceTest { StepVerifier .create(datasourceMono) .assertNext(savedDatasource -> { - AuthenticationDTO authentication = savedDatasource.getDatasourceConfiguration().getAuthentication(); + DBAuth authentication = (DBAuth) savedDatasource.getDatasourceConfiguration().getAuthentication(); assertThat(authentication.getUsername()).isEqualTo(username); assertThat(authentication.getPassword()).isEqualTo(encryptionService.encryptString(password)); }) @@ -464,7 +531,7 @@ public class DatasourceServiceTest { datasource.setName("test datasource name for authenticated fields encryption test null password."); DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); datasourceConfiguration.setUrl("http://test.com"); - AuthenticationDTO authenticationDTO = new AuthenticationDTO(); + DBAuth authenticationDTO = new DBAuth(); authenticationDTO.setDatabaseName("admin"); datasourceConfiguration.setAuthentication(authenticationDTO); datasource.setDatasourceConfiguration(datasourceConfiguration); @@ -478,7 +545,7 @@ public class DatasourceServiceTest { StepVerifier .create(datasourceMono) .assertNext(savedDatasource -> { - AuthenticationDTO authentication = savedDatasource.getDatasourceConfiguration().getAuthentication(); + DBAuth authentication = (DBAuth) savedDatasource.getDatasourceConfiguration().getAuthentication(); assertThat(authentication.getUsername()).isNull(); assertThat(authentication.getPassword()).isNull(); }) @@ -495,7 +562,7 @@ public class DatasourceServiceTest { datasource.setName("test datasource name for authenticated fields encryption test post update"); DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); datasourceConfiguration.setUrl("http://test.com"); - AuthenticationDTO authenticationDTO = new AuthenticationDTO(); + DBAuth authenticationDTO = new DBAuth(); String username = "username"; String password = "password"; authenticationDTO.setUsername(username); @@ -519,7 +586,7 @@ public class DatasourceServiceTest { StepVerifier .create(datasourceMono) .assertNext(updatedDatasource -> { - AuthenticationDTO authentication = updatedDatasource.getDatasourceConfiguration().getAuthentication(); + DBAuth authentication = (DBAuth) updatedDatasource.getDatasourceConfiguration().getAuthentication(); assertThat(authentication.getUsername()).isEqualTo(username); assertThat(authentication.getPassword()).isEqualTo(encryptionService.encryptString(password)); }) diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/ExamplesOrganizationClonerTests.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/ExamplesOrganizationClonerTests.java index edf494b74d..2012bbb83d 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/ExamplesOrganizationClonerTests.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/ExamplesOrganizationClonerTests.java @@ -1,7 +1,7 @@ package com.appsmith.server.solutions; import com.appsmith.external.models.ActionConfiguration; -import com.appsmith.external.models.AuthenticationDTO; +import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Property; import com.appsmith.server.constants.FieldName; @@ -361,8 +361,9 @@ public class ExamplesOrganizationClonerTests { ds2.setName("datasource 2"); ds2.setOrganizationId(organization.getId()); ds2.setDatasourceConfiguration(new DatasourceConfiguration()); - ds2.getDatasourceConfiguration().setAuthentication(new AuthenticationDTO()); - ds2.getDatasourceConfiguration().getAuthentication().setPassword("answer-to-life"); + DBAuth auth = new DBAuth(); + auth.setPassword("answer-to-life"); + ds2.getDatasourceConfiguration().setAuthentication(auth); return Mono.when( datasourceService.create(ds1), @@ -398,7 +399,7 @@ public class ExamplesOrganizationClonerTests { .findFirst() .orElseThrow(); assertThat(ds2.getDatasourceConfiguration().getAuthentication()).isNotNull(); - assertThat(ds2.getDatasourceConfiguration().getAuthentication().getPassword()) + assertThat(((DBAuth) ds2.getDatasourceConfiguration().getAuthentication()).getPassword()) .isEqualTo(encryptionService.encryptString("answer-to-life")); assertThat(data.applications).isEmpty(); From a6f602c33e0d7931c21016916d671fc516a35d71 Mon Sep 17 00:00:00 2001 From: vicky-primathon <67091118+vicky-primathon@users.noreply.github.com> Date: Fri, 18 Dec 2020 12:52:49 +0530 Subject: [PATCH 02/19] Fixed conversation of Unix timestamp in milliseconds (#2251) --- app/client/src/widgets/TableWidget.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/client/src/widgets/TableWidget.tsx b/app/client/src/widgets/TableWidget.tsx index c3c2328cdf..262084030d 100644 --- a/app/client/src/widgets/TableWidget.tsx +++ b/app/client/src/widgets/TableWidget.tsx @@ -239,7 +239,7 @@ class TableWidget extends BaseWidget { let inputFormat; try { const type = column.metaProperties.inputFormat; - if (type !== "EPOCH" && type !== "Milliseconds") { + if (type !== "Epoch" && type !== "Milliseconds") { inputFormat = type; moment(value, inputFormat); } else if (!isNumber(value)) { @@ -253,6 +253,8 @@ class TableWidget extends BaseWidget { outputFormat = inputFormat; } if (column.metaProperties.inputFormat === "Milliseconds") { + value = Number(value); + } else if (column.metaProperties.inputFormat === "Epoch") { value = 1000 * Number(value); } tableRow[accessor] = moment(value, inputFormat).format( From bd5d3d1d0febe91c700024f4290902a93443c1b4 Mon Sep 17 00:00:00 2001 From: Nikhil Nandagopal Date: Fri, 18 Dec 2020 14:33:13 +0530 Subject: [PATCH 03/19] Update install.sh --- deploy/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/install.sh b/deploy/install.sh index 34af6b42a9..3c5d0eea8a 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -524,8 +524,8 @@ echo "Installing Appsmith to '$install_dir'." mkdir -p "$install_dir" echo "" -if confirm y "Would you like to initialize the default database?"; then - echo "Appsmith needs to create a MongoDB instance." +echo "Appsmith needs a MongoDB instance to run" +if confirm y "Initialise a new database? (Recommended)"; then mongo_host="mongo" mongo_database="appsmith" From 5a36d17f7a29b91bd706915d8fc8dcc42947149a Mon Sep 17 00:00:00 2001 From: Nidhi Date: Fri, 18 Dec 2020 16:13:01 +0530 Subject: [PATCH 04/19] Fixed encryption related bugs for empty/new datasource (#2272) --- .../com/appsmith/external/models/DBAuth.java | 2 +- .../services/DatasourceServiceImpl.java | 20 ++++++++++++------- .../DatasourceStructureSolution.java | 3 ++- .../services/DatasourceServiceTest.java | 2 ++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java index 2a9687ab2e..e25b1d5e5b 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java @@ -52,7 +52,7 @@ public class DBAuth extends AuthenticationDTO { @Override public Set getEmptyEncryptionFields() { if (this.password == null || this.password.isEmpty()) { - return Set.of(FieldName.PASSWORD, null); + return Set.of(FieldName.PASSWORD); } return Set.of(); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java index 0f91302a9c..ff6a6c7f28 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java @@ -158,7 +158,7 @@ public class DatasourceServiceImpl extends BaseService encryptedFields = authentication.getEncryptionFields().entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, @@ -256,12 +256,18 @@ public class DatasourceServiceImpl extends BaseService { if (datasourceFromRepo.getDatasourceConfiguration() != null && datasourceFromRepo.getDatasourceConfiguration().getAuthentication() != null) { AuthenticationDTO authentication = datasourceFromRepo.getDatasourceConfiguration().getAuthentication(); - Map decryptedFields = authentication.getEncryptionFields().entrySet().stream() - .filter(e -> !emptyFields.contains(e.getKey())) - .collect(Collectors.toMap( - Map.Entry::getKey, - e -> encryptionService.decryptString(e.getValue()))); - datasource.getDatasourceConfiguration().getAuthentication().setEncryptionFields(decryptedFields); + + if(authentication.getEmptyEncryptionFields().isEmpty()){ + Map decryptedFields = authentication.getEncryptionFields(); + decryptedFields = decryptedFields.entrySet().stream() + .filter(e -> !emptyFields.contains(e.getKey())) + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> encryptionService.decryptString(e.getValue()))); + datasource.getDatasourceConfiguration().getAuthentication().setEncryptionFields(decryptedFields); + datasource.getDatasourceConfiguration().getAuthentication().setEncrypted(false); + } + } return datasource; }) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java index b97ad3aa4c..023e5608a5 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java @@ -89,12 +89,13 @@ public class DatasourceStructureSolution { // If datasource has encrypted fields, decrypt and set it in the datasource. if (datasource.getDatasourceConfiguration() != null) { AuthenticationDTO authentication = datasource.getDatasourceConfiguration().getAuthentication(); - if (authentication != null) { + if (authentication != null && authentication.getEmptyEncryptionFields().isEmpty() && authentication.isEncrypted()) { Map decryptedFields = authentication.getEncryptionFields().entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> encryptionService.decryptString(e.getValue()))); authentication.setEncryptionFields(decryptedFields); + authentication.setEncrypted(false); } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java index 21737b1116..3855c9cd1d 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java @@ -548,6 +548,7 @@ public class DatasourceServiceTest { DBAuth authentication = (DBAuth) savedDatasource.getDatasourceConfiguration().getAuthentication(); assertThat(authentication.getUsername()).isNull(); assertThat(authentication.getPassword()).isNull(); + assertThat(authentication.isEncrypted()).isFalse(); }) .verifyComplete(); } @@ -589,6 +590,7 @@ public class DatasourceServiceTest { DBAuth authentication = (DBAuth) updatedDatasource.getDatasourceConfiguration().getAuthentication(); assertThat(authentication.getUsername()).isEqualTo(username); assertThat(authentication.getPassword()).isEqualTo(encryptionService.encryptString(password)); + assertThat(authentication.isEncrypted()).isTrue(); }) .verifyComplete(); } From e84699e7ba9bef667d711014850529fd703bef68 Mon Sep 17 00:00:00 2001 From: akash-codemonk <67054171+akash-codemonk@users.noreply.github.com> Date: Fri, 18 Dec 2020 18:48:47 +0530 Subject: [PATCH 05/19] Onboarding flow (#1960) Co-authored-by: Hetu Nandu --- .../Onboarding/Onboarding_spec.js | 67 ++++ .../CreateDuplicateAppWithinOrg_spec.js | 1 + app/client/cypress/locators/Onboarding.json | 4 + app/client/cypress/support/commands.js | 14 +- app/client/package.json | 1 + app/client/src/actions/onboardingActions.ts | 43 +++ app/client/src/api/ActionAPI.tsx | 4 +- app/client/src/assets/lottie/confetti.json | 1 + .../editorComponents/Onboarding/Boxed.tsx | 30 ++ .../Onboarding/CompletionDialog.tsx | 213 +++++++++++ .../editorComponents/Onboarding/Tooltip.tsx | 238 ++++++++++++ .../src/constants/OnboardingConstants.tsx | 129 +++++++ .../src/constants/ReduxActionConstants.tsx | 19 + .../AppViewer/AppViewerPageContainer.tsx | 2 + .../pages/Editor/DataSourceEditor/DBForm.tsx | 30 +- .../Editor/DataSourceEditor/FormTitle.tsx | 12 +- .../pages/Editor/DataSourceEditor/index.tsx | 1 - app/client/src/pages/Editor/EditorHeader.tsx | 180 +++++---- .../pages/Editor/Explorer/Actions/helpers.tsx | 4 +- .../pages/Editor/Explorer/EntityExplorer.tsx | 112 ++++++ .../Explorer/Onboarding/DBQueryGroup.tsx | 57 +++ .../Editor/Explorer/Onboarding/Loading.tsx | 21 ++ .../Editor/Explorer/Onboarding/index.tsx | 40 ++ .../Explorer/PluginGroup/PluginGroup.tsx | 23 +- .../src/pages/Editor/Explorer/index.tsx | 117 +----- .../Editor/PropertyPane/PropertyControl.tsx | 26 +- .../pages/Editor/QueryEditor/TemplateMenu.tsx | 2 +- app/client/src/pages/Editor/Welcome.tsx | 139 +++++++ app/client/src/pages/Editor/WidgetSidebar.tsx | 14 +- app/client/src/pages/Editor/WidgetsEditor.tsx | 10 + app/client/src/pages/Editor/index.tsx | 74 +--- app/client/src/pages/UserAuth/SignUp.tsx | 2 + .../src/pages/UserAuth/ThirdPartyAuth.tsx | 4 + .../entityReducers/actionsReducer.tsx | 32 ++ app/client/src/reducers/index.tsx | 2 + app/client/src/reducers/uiReducers/index.tsx | 2 + .../reducers/uiReducers/onBoardingReducer.ts | 100 +++++ app/client/src/sagas/ActionSagas.ts | 4 +- app/client/src/sagas/ApplicationSagas.tsx | 24 +- app/client/src/sagas/OnboardingSagas.ts | 343 ++++++++++++++++++ app/client/src/sagas/index.tsx | 3 + app/client/src/selectors/entitiesSelector.ts | 4 + app/client/src/utils/AnalyticsUtil.tsx | 9 +- app/client/src/utils/helpers.tsx | 33 ++ app/client/src/utils/storage.ts | 20 + app/client/yarn.lock | 5 + 46 files changed, 1925 insertions(+), 290 deletions(-) create mode 100644 app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js create mode 100644 app/client/cypress/locators/Onboarding.json create mode 100644 app/client/src/actions/onboardingActions.ts create mode 100644 app/client/src/assets/lottie/confetti.json create mode 100644 app/client/src/components/editorComponents/Onboarding/Boxed.tsx create mode 100644 app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx create mode 100644 app/client/src/components/editorComponents/Onboarding/Tooltip.tsx create mode 100644 app/client/src/constants/OnboardingConstants.tsx create mode 100644 app/client/src/pages/Editor/Explorer/EntityExplorer.tsx create mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx create mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx create mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/index.tsx create mode 100644 app/client/src/pages/Editor/Welcome.tsx create mode 100644 app/client/src/reducers/uiReducers/onBoardingReducer.ts create mode 100644 app/client/src/sagas/OnboardingSagas.ts diff --git a/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js b/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js new file mode 100644 index 0000000000..db35cb3da7 --- /dev/null +++ b/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js @@ -0,0 +1,67 @@ +const onboarding = require("../../../locators/Onboarding.json"); +const explorer = require("../../../locators/explorerlocators.json"); +const homePage = require("../../../locators/HomePage.json"); +const loginPage = require("../../../locators/LoginPage.json"); + +describe("Onboarding", function() { + it("Onboarding flow", function() { + cy.LogOut(); + + cy.visit("/user/signup"); + cy.get("input[name='email']").type(Cypress.env("USERNAME")); + cy.get(loginPage.password).type(Cypress.env("PASSWORD")); + cy.get(loginPage.submitBtn).click(); + + cy.LogintoApp(Cypress.env("USERNAME"), Cypress.env("PASSWORD")); + + cy.get(homePage.createNew) + .first() + .click({ force: true }); + cy.wait("@createNewApplication").should( + "have.nested.property", + "response.body.responseMeta.status", + 201, + ); + cy.get("#loading").should("not.exist"); + + //Onboarding + cy.contains(".t--create-database", "Explore Appsmith").click(); + + cy.get(onboarding.tooltipAction).click(); + + // Add widget + cy.get(".t--add-widget").click(); + cy.dragAndDropToCanvas("tablewidget", { x: 30, y: -30 }); + + cy.get(onboarding.tooltipSnippet).click({ force: true }); + + cy.get(".t--property-control-tabledata" + " .CodeMirror textarea") + .first() + .focus({ force: true }) + .type("{uparrow}", { force: true }) + .type("{ctrl}{shift}{downarrow}", { force: true }); + cy.focused().then(() => { + cy.get(".t--property-control-tabledata" + " .CodeMirror") + .first() + .then(editor => { + editor[0].CodeMirror.setValue("{{ExampleQuery.data}}"); + }); + }); + cy.closePropertyPane(); + cy.get(explorer.closeWidgets).click(); + + cy.openPropertyPane("tablewidget"); + cy.get(onboarding.tooltipAction).click({ force: true }); + + cy.PublishtheApp(); + cy.get(".t--continue-on-my-own").click(); + }); + + after(() => { + localStorage.removeItem("OnboardingState"); + cy.window().then(window => { + window.indexedDB.deleteDatabase("Appsmith"); + }); + cy.log("Cleared"); + }); +}); diff --git a/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js b/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js index 41692b1e3c..9b906e31a2 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js +++ b/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js @@ -13,6 +13,7 @@ describe("Create new org and an app within the same", function() { cy.createOrg(orgid); cy.CreateAppForOrg(orgid, appid); cy.NavigateToHome(); + cy.CreateApp(appid); }); }); diff --git a/app/client/cypress/locators/Onboarding.json b/app/client/cypress/locators/Onboarding.json new file mode 100644 index 0000000000..a358a162af --- /dev/null +++ b/app/client/cypress/locators/Onboarding.json @@ -0,0 +1,4 @@ +{ + "tooltipAction": ".tooltip-action", + "tooltipSnippet": ".tooltip-snippet" +} \ No newline at end of file diff --git a/app/client/cypress/support/commands.js b/app/client/cypress/support/commands.js index 203448f987..8d74947026 100644 --- a/app/client/cypress/support/commands.js +++ b/app/client/cypress/support/commands.js @@ -249,6 +249,7 @@ Cypress.Commands.add("CreateApp", appname => { ); cy.get("#loading").should("not.exist"); cy.wait(1000); + cy.get(homePage.applicationName).type(appname + "{enter}"); cy.wait("@updateApplication").should( "have.nested.property", @@ -950,11 +951,18 @@ Cypress.Commands.add("PublishtheApp", () => { // Wait before publish cy.wait(2000); cy.assertPageSave(); + + // Stubbing window.open to open in the same tab + cy.window().then(window => { + cy.stub(window, "open").callsFake(url => { + window.location.href = Cypress.config().baseUrl + url.substring(1); + window.location.target = "_self"; + }); + }); + cy.get(homePage.publishButton).click(); cy.wait("@publishApp"); - cy.get('a[class="bp3-button"]') - .invoke("removeAttr", "target") - .click({ force: true }); + cy.url().should("include", "/pages"); cy.log("pagename: " + localStorage.getItem("PageName")); }); diff --git a/app/client/package.json b/app/client/package.json index 2edaaa4708..0b99883e20 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -70,6 +70,7 @@ "localforage": "^1.7.3", "lodash": "^4.17.19", "loglevel": "^1.6.7", + "lottie-web": "^5.7.4", "moment": "^2.24.0", "moment-timezone": "^0.5.27", "nanoid": "^2.0.4", diff --git a/app/client/src/actions/onboardingActions.ts b/app/client/src/actions/onboardingActions.ts new file mode 100644 index 0000000000..dc65018c76 --- /dev/null +++ b/app/client/src/actions/onboardingActions.ts @@ -0,0 +1,43 @@ +import { ReduxActionTypes } from "constants/ReduxActionConstants"; +import { Action } from "entities/Action"; + +export const createOnboardingActionInit = (payload: Partial) => { + return { + type: ReduxActionTypes.CREATE_ONBOARDING_ACTION_INIT, + payload, + }; +}; + +export const createOnboardingActionSuccess = (payload: Action) => { + return { + type: ReduxActionTypes.CREATE_ONBOARDING_ACTION_SUCCESS, + payload, + }; +}; + +export const showTooltip = (payload: number) => { + return { + type: ReduxActionTypes.SHOW_ONBOARDING_TOOLTIP, + payload, + }; +}; + +export const endOnboarding = () => { + return { + type: ReduxActionTypes.END_ONBOARDING, + }; +}; + +export const setCurrentStep = (payload: number) => { + return { + type: ReduxActionTypes.SET_CURRENT_STEP, + payload, + }; +}; + +export const setOnboardingState = (payload: boolean) => { + return { + type: ReduxActionTypes.SET_ONBOARDING_STATE, + payload, + }; +}; diff --git a/app/client/src/api/ActionAPI.tsx b/app/client/src/api/ActionAPI.tsx index cee1f8ee90..6dff6c434b 100644 --- a/app/client/src/api/ActionAPI.tsx +++ b/app/client/src/api/ActionAPI.tsx @@ -5,7 +5,7 @@ import { DEFAULT_EXECUTE_ACTION_TIMEOUT_MS, } from "constants/ApiConstants"; import axios, { AxiosPromise, CancelTokenSource } from "axios"; -import { RestAction } from "entities/Action"; +import { Action, RestAction } from "entities/Action"; export interface CreateActionRequest extends APIRequest { datasourceId: string; @@ -114,7 +114,7 @@ class ActionAPI extends API { } static createAPI( - apiConfig: RestAction, + apiConfig: Partial, ): AxiosPromise { return API.post(ActionAPI.url, apiConfig); } diff --git a/app/client/src/assets/lottie/confetti.json b/app/client/src/assets/lottie/confetti.json new file mode 100644 index 0000000000..ec96a84426 --- /dev/null +++ b/app/client/src/assets/lottie/confetti.json @@ -0,0 +1 @@ +{"v":"5.5.2","fr":60,"ip":0,"op":180,"w":1500,"h":2000,"nm":"Confetti Boom","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"T-35","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":14,"s":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[-135]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-156]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[-175]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":169,"s":[-174]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":182,"s":[-158]},{"t":193,"s":[-160]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[1769.453,2037.145,0],"to":[-47,-180.333,0],"ti":[80.667,212,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[1487.453,955.145,0],"to":[-80.667,-212,0],"ti":[72.667,-52,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[1285.453,765.145,0],"to":[-72.667,52,0],"ti":[15.667,-145,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1051.453,1267.145,0],"to":[-15.667,145,0],"ti":[51,-119.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":161,"s":[1191.453,1635.145,0],"to":[-51,119.333,0],"ti":[74.333,-58,0]},{"t":192,"s":[745.453,1983.145,0]}],"ix":2},"a":{"a":0,"k":[553.453,241.145,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[-87,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-107,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[111,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-78,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[98,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-79,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[88,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-72,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-99,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[73,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[73,61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[73,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[-81,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[-81,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[85,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":169,"s":[85,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":172,"s":[-81,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":182,"s":[85,-47,100]},{"t":193,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[30.906,74.289],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[553.453,241.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":194,"st":14,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"T-30","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":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-135]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[-156]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-175]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155,"s":[-174]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":168,"s":[-158]},{"t":179,"s":[-160]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1421.453,2079.145,0],"to":[-47,-180.333,0],"ti":[80.667,212,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1139.453,997.145,0],"to":[-80.667,-212,0],"ti":[72.667,-52,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[937.453,807.145,0],"to":[-72.667,52,0],"ti":[15.667,-145,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[703.453,1309.145,0],"to":[-15.667,145,0],"ti":[-7,-112.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":147,"s":[843.453,1677.145,0],"to":[7,112.333,0],"ti":[16.333,-51,0]},{"t":178,"s":[745.453,1983.145,0]}],"ix":2},"a":{"a":0,"k":[553.453,241.145,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[-87,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[-107,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[111,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-78,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[98,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-79,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[88,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[-72,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[-99,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[73,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[73,61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[73,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-81,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[-81,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[85,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155,"s":[85,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":158,"s":[-81,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":168,"s":[85,-47,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[30.906,74.289],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":[553.453,241.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"T-28","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":12,"s":[0]},{"t":59,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1569.317,1490.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[833.317,864.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[435.317,772.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":134,"s":[267.317,958.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":149,"s":[391.317,1092.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[303.317,1292.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":144,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":149,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":160,"s":[-56.08,-57.08,100]},{"t":166,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":192,"st":12,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"T-32","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-344.683,1100.398,0],"to":[81.333,-74.333,0],"ti":[-160.039,142.031,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[143.317,654.398,0],"to":[183.667,-163,0],"ti":[-134,-129,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[697.317,350.398,0],"to":[68.227,65.681,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[865.317,632.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[915.317,986.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"T-33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1539.317,1504.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[803.317,878.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[405.317,786.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[237.317,972.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[361.317,1106.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":153,"s":[273.317,1306.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"T-26","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1869.317,1058.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1133.317,432.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[735.317,340.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[567.317,526.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[691.317,660.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":153,"s":[603.317,860.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"T-25","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-150.359,921.641,0],"to":[74.833,-65.667,0],"ti":[-113.953,93.882,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[298.641,527.641,0],"to":[117.333,-96.667,0],"ti":[-67.5,-24,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[583.641,425.641,0],"to":[47.535,16.901,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[708.641,602.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[646.641,731.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[825.641,884.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":135,"s":[637.641,1070.641,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[701.641,1224.641,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"T-22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-150.359,921.641,0],"to":[74.833,-65.667,0],"ti":[-113.953,93.882,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[298.641,527.641,0],"to":[117.333,-96.667,0],"ti":[-67.5,-24,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[583.641,425.641,0],"to":[47.535,16.901,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[708.641,602.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[646.641,731.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[825.641,884.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":135,"s":[637.641,1070.641,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[701.641,1224.641,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"T-23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.393,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.381,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34.504,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.49,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.275,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.602,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81.129,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.521,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95.117,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103.51,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106.307,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111.902,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123.092,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139.877,"s":[476]},{"t":152,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1664.734,1236.447,0],"to":[-95.667,-138,0],"ti":[177,154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1090.734,408.447,0],"to":[-116.957,-101.759,0],"ti":[96.3,-22.398,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[744.271,350.806,0],"to":[-49.439,11.499,0],"ti":[43.534,-11.194,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[542.734,396.447,0],"to":[-128.333,33,0],"ti":[63,-79.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[278.734,602.447,0],"to":[-63,79.667,0],"ti":[8.333,-114,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[164.734,874.447,0],"to":[-8.333,114,0],"ti":[-10.667,-68.667,0]},{"t":162,"s":[228.734,1286.447,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[37.888,37.888,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22.381,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34.504,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.49,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55.018,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58.748,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.275,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.939,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.602,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81.129,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.521,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95.117,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103.51,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106.307,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111.902,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123.092,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139.877,"s":[48,58,100]},{"t":152,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.490196108351,0.231372563979,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":[98.357,57.459],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":10,"ty":4,"nm":"T-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.167],"y":[0.167]},"t":14,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":146,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":164,"s":[476]},{"t":177,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[1987,1395.5,0],"to":[-154.667,-108.667,0],"ti":[200,107.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[1059,743.5,0],"to":[-200,-107.333,0],"ti":[-48.026,-88.927,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[787,751.5,0],"to":[56.628,104.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[625,1097.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":143,"s":[571,1421.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":179,"s":[721,1705.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[-65.608,-38.114,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":146,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":164,"s":[48,58,100]},{"t":177,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.490196108351,0.231372563979,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":14,"op":194,"st":14,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"T-30","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":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":171,"s":[476]},{"t":184,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[-667,2107.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[85,1127.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[475,861.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[731,1125.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[683,1371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":186,"s":[721,1705.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":153,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":171,"s":[48,58,100]},{"t":184,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":21,"op":201,"st":21,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"T-34","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":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[331.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[305]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":147,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[476]},{"t":178,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[-449,2197.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[303,1217.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[693,951.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[949,1215.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[901,1461.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":180,"s":[941,1749.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-55,45.077,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-44.6,-47.154,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[34.2,-44,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-38,-44,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[40,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[56,38,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[16,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-31,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-20,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-32,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[35,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147,"s":[-42,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[-25,50,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":15,"op":195,"st":15,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"T-21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[476]},{"t":163,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-377,1757.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[375,777.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[765,511.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1021,775.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":129,"s":[973,1021.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[1013,1309.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[48,58,100]},{"t":163,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":14,"ty":4,"nm":"T-20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-72]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[-140]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[-31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[109]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[167]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[36]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[114]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":157,"s":[248]},{"t":164,"s":[413]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1893,1461,0],"to":[-153.667,-139.667,0],"ti":[204.333,165.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[971,623,0],"to":[-204.333,-165.333,0],"ti":[97.667,3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[667,469,0],"to":[-97.667,-3,0],"ti":[37.333,-80.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[385,605,0],"to":[-37.333,80.667,0],"ti":[-9.333,-105.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[443,953,0],"to":[9.333,105.333,0],"ti":[12.667,-79.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":141,"s":[441,1237,0],"to":[-12.667,79.667,0],"ti":[12.333,-32.333,0]},{"t":164,"s":[367,1431,0]}],"ix":2},"a":{"a":0,"k":[1143,461,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[111,84,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[111,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-62,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[50,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[72,81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[78,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[78,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[78,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-83,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[82,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-77,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[43,57,100]},{"t":164,"s":[0,0,100]}],"ix":6}},"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":[[1164,426],[1104,450],[1120,496],[1182,488]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[1143.633,461.5],"ix":2},"a":{"a":0,"k":[1143.633,461.5],"ix":1},"s":{"a":0,"k":[167.056,167.056],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":15,"ty":4,"nm":"O-13","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":11,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[288]},{"t":148,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[27.451,2118.312,0],"to":[46,-225.333,0],"ti":[-99.333,288,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[303.451,766.312,0],"to":[99.333,-288,0],"ti":[-130.204,22.562,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[623.451,390.312,0],"to":[319.333,-55.333,0],"ti":[-95.333,-100,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[1067.451,554.312,0],"to":[95.333,100,0],"ti":[-3.333,-107.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[1195.451,990.312,0],"to":[3.333,107.333,0],"ti":[14.667,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[1087.451,1198.312,0],"to":[-14.667,72.667,0],"ti":[-3.333,-38,0]},{"t":147,"s":[1107.451,1426.312,0]}],"ix":2},"a":{"a":0,"k":[-618.176,100.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-39.898,57.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[33.833,-48.684,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[59.192,-52,100]},{"t":148,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[123.125,123.125],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-620.438,87.562],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"O-27","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":30,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":148,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159,"s":[288]},{"t":167,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1355.451,2548.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[987.451,1408.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[727.451,1050.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[201.451,1146.312,0],"to":[-26.699,47.349,0],"ti":[-31.133,-76.012,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[265.91,1340.603,0],"to":[19.907,48.603,0],"ti":[1.09,-199.243,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[163.451,1512.312,0],"to":[180.333,212,0],"ti":[0,0,0]},{"t":167,"s":[215.451,1842.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":159,"s":[59.192,-52,100]},{"t":167,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":24,"op":204,"st":24,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"O-18","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":11,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[288]},{"t":148,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[1571.451,1968.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1203.451,828.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[943.451,470.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[417.451,566.312,0],"to":[-26.699,47.349,0],"ti":[-31.133,-76.012,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[481.91,760.603,0],"to":[19.907,48.603,0],"ti":[1.09,-199.243,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[379.451,932.312,0],"to":[180.333,212,0],"ti":[0,0,0]},{"t":148,"s":[431.451,1262.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[59.192,-52,100]},{"t":148,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":5,"op":185,"st":5,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"O-12","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":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1571.451,1968.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1203.451,828.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[943.451,470.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[417.451,566.312,0],"to":[-43.771,77.624,0],"ti":[-2.333,-116,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[495.451,906.312,0],"to":[14.333,190,0],"ti":[0,0,0]},{"t":143,"s":[431.451,1262.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"B-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[123]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[150]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[178]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[313]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[223]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[301]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151,"s":[344]},{"t":162,"s":[420]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1631.399,1895.598,0],"to":[-52.333,-188.333,0],"ti":[140,246.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1317.399,765.598,0],"to":[-140,-246.333,0],"ti":[126.667,10,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[791.399,417.598,0],"to":[-104.79,-8.273,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[538.399,536.598,0],"to":[0,0,0],"ti":[-114.278,-145.288,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":116,"s":[426.399,860.598,0],"to":[165.833,210.833,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[537.399,1225.598,0],"to":[0,0,0],"ti":[0,0,0]},{"t":161,"s":[463.399,1369.598,0]}],"ix":2},"a":{"a":0,"k":[-820,703.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[79.483,-54.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[79.483,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-45.517,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-51.517,-49.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[-51.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[43.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99,"s":[43.483,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-40.517,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-40.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[45.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[45.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[-34.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-34.517,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[42.483,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[42.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-50.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151,"s":[-50.517,35.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[59.483,35.483,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-617,569],[-690,595],[-670,674],[-604,645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":[-172.578,84.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":20,"ty":4,"nm":"B-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":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[123]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[150]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[178]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[313]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[223]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[301]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151,"s":[344]},{"t":162,"s":[420]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-54,1735.5,0],"to":[71.667,-160.333,0],"ti":[-115.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[376,773.5,0],"to":[115.333,-207.667,0],"ti":[-109.276,46.345,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[638,489.5,0],"to":[210.155,-89.13,0],"ti":[-89.667,-71.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[1066,543.5,0],"to":[89.667,71.333,0],"ti":[-10,-108.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[1176,917.5,0],"to":[10,108.333,0],"ti":[3,-80.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":141,"s":[1126,1193.5,0],"to":[-3,80.333,0],"ti":[0,0,0]},{"t":164,"s":[1158,1399.5,0]}],"ix":2},"a":{"a":0,"k":[-820,703.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[79.483,-54.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[79.483,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-45.517,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-51.517,-49.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[-51.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[43.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99,"s":[43.483,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-40.517,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-40.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[45.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[45.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[-34.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-34.517,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[42.483,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[42.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-50.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151,"s":[-50.517,35.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[59.483,35.483,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-617,569],[-690,595],[-670,674],[-604,645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-172.578,84.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":21,"ty":4,"nm":"O-10","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-774.056,1135.588,0],"to":[184,-83.333,0],"ti":[-264.333,99,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[329.944,635.588,0],"to":[264.333,-99,0],"ti":[-116,-38.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[811.944,541.588,0],"to":[116,38.667,0],"ti":[-29.333,-103,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[1025.944,867.588,0],"to":[29.333,103,0],"ti":[-7.333,-104.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[987.944,1159.588,0],"to":[7.333,104.333,0],"ti":[-13.667,-55.667,0]},{"t":162,"s":[1069.944,1493.588,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-1,"op":180,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"O-26","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":65.096,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.809,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80.342,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85.787,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91.232,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97.768,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109.746,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115.191,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122.814,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133.705,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151.131,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159.842,"s":[90]},{"t":174,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[-257.871,1754.129,0],"to":[127.667,-155.333,0],"ti":[-171,146.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[508.129,822.129,0],"to":[171,-146.667,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[768.129,874.129,0],"to":[-63.518,28.082,0],"ti":[11,-80.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[624.129,1120.129,0],"to":[-11,80.333,0],"ti":[0.667,-87,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[702.129,1356.129,0],"to":[-0.667,87,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[620.129,1642.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":189,"s":[696.129,1972.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33.514,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.65,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.096,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.809,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80.342,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85.787,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91.232,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97.768,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104.301,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109.746,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115.191,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122.814,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133.705,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141.328,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151.131,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":159.842,"s":[51,46,100]},{"t":174,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":192,"st":12,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"O-22","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1956.129,1516.129,0],"to":[-128.667,-103,0],"ti":[198,107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1184.129,898.129,0],"to":[-198,-107,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[768.129,874.129,0],"to":[-63.518,28.082,0],"ti":[14,-57,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[614.129,1050.129,0],"to":[-14,57,0],"ti":[-1.667,-69,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[684.129,1216.129,0],"to":[1.667,69,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":132,"s":[624.129,1464.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":177,"s":[668.129,1782.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"O-9","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1906.129,1248.129,0],"to":[-128.667,-103,0],"ti":[198,107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1134.129,630.129,0],"to":[-198,-107,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[718.129,606.129,0],"to":[-63.518,28.082,0],"ti":[14,-57,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[564.129,782.129,0],"to":[-14,57,0],"ti":[-1.667,-69,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[634.129,948.129,0],"to":[1.667,69,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":132,"s":[574.129,1196.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":179,"s":[618.129,1514.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"T-29","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":17,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":156,"s":[-25]},{"t":169,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[1697.36,1911.743,0],"to":[-114,-138,0],"ti":[170.333,176.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[1013.36,1083.743,0],"to":[-170.333,-176.667,0],"ti":[98,18.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[675.36,851.743,0],"to":[-98,-18.667,0],"ti":[60.333,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[425.36,971.743,0],"to":[-60.333,67.667,0],"ti":[9,-84.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[313.36,1257.743,0],"to":[-9,84.667,0],"ti":[-6.667,-78.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[371.36,1479.743,0],"to":[6.667,78.333,0],"ti":[3,-41.333,0]},{"t":177,"s":[353.36,1727.743,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":156,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":169,"s":[140,90.222,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":17,"op":197,"st":17,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"T-15","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":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[-25]},{"t":152,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1853.36,1615.743,0],"to":[-114,-138,0],"ti":[170.333,176.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1169.36,787.743,0],"to":[-170.333,-176.667,0],"ti":[98,18.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[831.36,555.743,0],"to":[-98,-18.667,0],"ti":[60.333,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[581.36,675.743,0],"to":[-60.333,67.667,0],"ti":[9,-84.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[469.36,961.743,0],"to":[-9,84.667,0],"ti":[-6.667,-78.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[527.36,1183.743,0],"to":[6.667,78.333,0],"ti":[3,-41.333,0]},{"t":160,"s":[509.36,1431.743,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[140,90.222,100]},{"t":161,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":27,"ty":4,"nm":"T-12","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":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[-25]},{"t":152,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-158,1606,0],"to":[94,-159.333,0],"ti":[-161,198,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[406,650,0],"to":[161,-198,0],"ti":[-94.667,0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[808,418,0],"to":[94.667,-0.333,0],"ti":[-14.667,-79.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[974,648,0],"to":[14.667,79.333,0],"ti":[2.333,-83,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[896,894,0],"to":[-2.333,83,0],"ti":[-4.333,-82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[960,1146,0],"to":[4.333,82.667,0],"ti":[6.333,-40.667,0]},{"t":162,"s":[922,1390,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[140,90.222,100]},{"t":161,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":28,"ty":4,"nm":"T-13","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":9,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[-48.25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[-190]},{"t":160,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[2046.977,884.031,0],"to":[-177.333,-67,0],"ti":[185,82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[982.977,482.031,0],"to":[-185,-82.667,0],"ti":[67.333,-43.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[650.977,508.031,0],"to":[-67.333,43.667,0],"ti":[4,-96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[578.977,744.031,0],"to":[-4,96.667,0],"ti":[15.333,-109.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":139,"s":[626.977,1088.031,0],"to":[-15.333,109.667,0],"ti":[23.333,-52.333,0]},{"t":176,"s":[486.977,1402.031,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-88,-73,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[99,73.214,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-90,-89,100]},{"t":160,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":29,"ty":4,"nm":"T-24","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":19,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44.809,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.295,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.021,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69.67,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81.559,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99.934,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125.875,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137.766,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152.896,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":162.625,"s":[-190]},{"t":172,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-152.042,731.431,0],"to":[61,-38.667,0],"ti":[-100.001,71.342,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[213.958,499.431,0],"to":[109.333,-78,0],"ti":[-82.333,-8.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[515.958,407.431,0],"to":[51.065,5.375,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[715.958,525.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[637.958,657.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":133,"s":[737.958,895.431,0],"to":[0,0,0],"ti":[0,0,0]},{"t":157,"s":[709.958,1205.431,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44.809,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.295,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61.021,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.67,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81.559,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.934,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109.662,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117.229,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125.875,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137.766,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152.896,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":162.625,"s":[-90,-89,100]},{"t":172,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":10,"op":190,"st":10,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"T-16","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34.809,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41.295,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.021,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59.67,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.559,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.934,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115.875,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127.766,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":142.896,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152.625,"s":[-190]},{"t":162,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-152.042,731.431,0],"to":[61,-38.667,0],"ti":[-100.001,71.342,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[213.958,499.431,0],"to":[109.333,-78,0],"ti":[-82.333,-8.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[515.958,407.431,0],"to":[51.065,5.375,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[715.958,525.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[637.958,657.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[737.958,895.431,0],"to":[0,0,0],"ti":[0,0,0]},{"t":147,"s":[709.958,1205.431,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34.809,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41.295,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.021,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.67,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.559,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.934,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.662,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107.229,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115.875,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127.766,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":142.896,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152.625,"s":[-90,-89,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":31,"ty":4,"nm":"T-18","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24.895,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35.49,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41.848,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.385,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59.861,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.516,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.529,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114.961,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126.615,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141.451,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150.986,"s":[-190]},{"t":169,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-57.348,2013.319,0],"to":[54,-202.333,0],"ti":[-95.667,254.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[266.652,799.319,0],"to":[95.667,-254.333,0],"ti":[-66.898,20.674,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[516.652,487.319,0],"to":[178.395,-55.13,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[976.652,523.319,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[1160.652,927.319,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[1116.652,1343.319,0],"to":[0,0,0],"ti":[0,0,0]},{"t":169,"s":[1136.652,1529.319,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24.895,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35.49,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41.848,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.385,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.861,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.516,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.529,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.066,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106.484,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114.961,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126.615,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141.451,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147.809,"s":[-90,-4.716,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150.986,"s":[-90,-89,100]},{"t":169,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":32,"ty":4,"nm":"T-11","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[-190]},{"t":160,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1736.5,1507.5,0],"to":[-108.667,-145.333,0],"ti":[168,181.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1084.5,635.5,0],"to":[-168,-181.333,0],"ti":[90,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[728.5,419.5,0],"to":[-90,-2,0],"ti":[19,-77.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[544.5,623.5,0],"to":[-19,77.333,0],"ti":[-3.333,-88,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[614.5,883.5,0],"to":[3.333,88,0],"ti":[1,-94.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[564.5,1151.5,0],"to":[-1,94.333,0],"ti":[-7.333,-49.667,0]},{"t":160,"s":[608.5,1449.5,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-90,-89,100]},{"t":160,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":33,"ty":4,"nm":"T-10","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":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[159]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[189]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[234]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[276]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[347]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[320]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[403]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[486]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[557]},{"t":147,"s":[648]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-522,933,0],"to":[156.667,-61,0],"ti":[-222.667,82.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[418,567,0],"to":[222.667,-82.833,0],"ti":[-158.716,35.142,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[814,436,0],"to":[105.995,-23.469,0],"ti":[-20.667,-62.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[988,650,0],"to":[20.667,62.333,0],"ti":[0,-60.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[938,810,0],"to":[0,60.333,0],"ti":[-1.333,-69.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[988,1012,0],"to":[1.333,69.667,0],"ti":[7,-36,0]},{"t":147,"s":[946,1228,0]}],"ix":2},"a":{"a":0,"k":[-642,-213,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-82,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-82,-75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[-82,106,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[93,106,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[93,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[-91,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-91,64,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[81,64,100]},{"t":147,"s":[0,0,100]}],"ix":6}},"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":[[-622,-237],[-663,-221],[-643,-189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":34,"ty":4,"nm":"S-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[16.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-31.4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[14.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[46.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[74.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[120.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[186.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[255.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[337.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[414.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[490.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[568.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[651.6]},{"t":136,"s":[724.6]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-321.388,1282.237,0],"to":[134.333,-113.667,0],"ti":[-191,139.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[484.612,600.237,0],"to":[191,-139.333,0],"ti":[-111,-22.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[824.612,446.237,0],"to":[75.267,15.144,0],"ti":[-13,-98,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[952.612,702.237,0],"to":[13,98,0],"ti":[-1.667,-93.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[902.612,1034.237,0],"to":[1.667,93.333,0],"ti":[-5.333,-77.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[962.612,1262.237,0],"to":[5.333,77.667,0],"ti":[0,0,0]},{"t":136,"s":[934.612,1500.237,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,-24.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[69.82,30.128,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[61.82,45.128,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[61.82,-39.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[-34.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[49.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[-42.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[40.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-39.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-36.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[52.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-34.18,-47.872,100]},{"t":136,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"S-3","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":5,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[-25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-155]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[-59]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-232]},{"t":129,"s":[-173]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-122.64,1491.443,0],"to":[88,-136.667,0],"ti":[-123.846,184.909,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[405.36,671.443,0],"to":[144,-215,0],"ti":[-86.667,-0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[717.36,453.443,0],"to":[86.667,0.333,0],"ti":[-16.333,-60.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[925.36,673.443,0],"to":[16.333,60.333,0],"ti":[0,-50.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[815.36,815.443,0],"to":[0,50.667,0],"ti":[-9.667,-52.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[925.36,977.443,0],"to":[9.667,52.333,0],"ti":[8.667,-25.333,0]},{"t":129,"s":[873.36,1129.443,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,58.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[58.82,43.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[58.82,-31.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[58.82,50.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[58.82,-57.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[58.82,40.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-58.18,56.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[-58.18,-35.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[55.82,-46.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[55.82,51.82,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":36,"ty":4,"nm":"S-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":5,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[-25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-155]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[-59]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-232]},{"t":129,"s":[-173]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1866,1056,0],"to":[-165.333,-100.333,0],"ti":[223.333,113.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[874,454,0],"to":[-223.333,-113.333,0],"ti":[86,-29,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[526,376,0],"to":[-86,29,0],"ti":[14.333,-93.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[358,628,0],"to":[-14.333,93.333,0],"ti":[-4.667,-101.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[440,936,0],"to":[4.667,101.333,0],"ti":[3.333,-85.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[386,1236,0],"to":[-3.333,85.667,0],"ti":[-5.667,-35.667,0]},{"t":129,"s":[420,1450,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,58.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[58.82,43.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[58.82,-31.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[58.82,50.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[58.82,-57.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[58.82,40.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-58.18,56.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[-58.18,-35.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[55.82,-46.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[55.82,51.82,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"T-17","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":[-237]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[-237]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[-267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-332]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[-365]},{"t":111,"s":[-339]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1957.298,1083.197,0],"to":[-139.333,-57.333,0],"ti":[224,73,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1121.298,739.197,0],"to":[-224,-73,0],"ti":[132.333,-40,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[613.298,645.197,0],"to":[-132.333,40,0],"ti":[58.667,-107.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[327.298,979.197,0],"to":[-58.667,107.667,0],"ti":[-5.667,-125.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[261.298,1291.197,0],"to":[5.063,112.274,0],"ti":[-1.385,-5.613,0]},{"t":138,"s":[347.298,1689.197,0]}],"ix":2},"a":{"a":0,"k":[-482.7,-91.902,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":38,"ty":4,"nm":"T-27","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":[-188]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-205]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-326]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-339]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-350]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[-372]},{"t":156,"s":[-354]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1357.853,2058.837,0],"to":[-30.667,-213.333,0],"ti":[76,222.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1173.853,778.837,0],"to":[-76,-222.333,0],"ti":[137.333,-201,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[901.853,724.837,0],"to":[-26.074,38.161,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[773.853,1208.837,0],"to":[0,0,0],"ti":[0,0,0]},{"t":157,"s":[805.853,1510.837,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[93,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-76,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[73,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-72,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-72,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-76,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[84,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-92,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[105,100,100]},{"t":156,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,1,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":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":4,"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":"T-19","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":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[-6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[3]},{"t":126,"s":[-10]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-386.382,1907.427,0],"to":[88.667,-196.667,0],"ti":[-129.768,244.335,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[145.618,727.427,0],"to":[153.667,-289.333,0],"ti":[-79,-31.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[559.618,543.427,0],"to":[70.189,27.839,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[807.618,821.427,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[829.618,1225.427,0],"to":[0,0,0],"ti":[0,0,0]},{"t":139,"s":[797.618,1497.427,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,1,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":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":4,"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":4,"nm":"T-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[-6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[3]},{"t":126,"s":[-10]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-295,857,0],"to":[124.167,-63.167,0],"ti":[-117,63.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[450,478,0],"to":[39.654,-21.409,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[650,453,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":[664,653,0],"to":[0,0,0],"ti":[0,0,0]},{"t":141,"s":[684,1217,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":41,"ty":4,"nm":"T-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0]},{"t":27,"s":[-61]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1528.5,791.5,0],"to":[-79.667,-31.333,0],"ti":[117.494,37.533,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[1050.5,603.5,0],"to":[-96,-30.667,0],"ti":[28.814,28.838,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[856.5,481.5,0],"to":[-63.051,-63.105,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[791.5,615.5,0],"to":[0,0,0],"ti":[-83.667,-15.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[876.5,712.5,0],"to":[-7.333,31.833,0],"ti":[99.167,-2.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[747.5,806.5,0],"to":[0.833,33.833,0],"ti":[-85.349,23.093,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[881.5,915.5,0],"to":[41.035,-11.103,0],"ti":[0,0,0]},{"t":134,"s":[826.5,1055.5,0]}],"ix":2},"a":{"a":0,"k":[596.5,-222.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[70.213,70.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":39,"s":[-51.787,70.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-51.787,-64.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-51.787,53.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-51.787,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[61.213,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[61.213,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61.213,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[-53.787,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-53.787,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[59.213,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[59.213,-48.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-52.787,-48.787,100]},{"t":134,"s":[0,0,100]}],"ix":6}},"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]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[583,-246],[570,-221],[588,-199],[619,-217],[616,-240]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":42,"ty":4,"nm":"O-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[51]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[301.357]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-27.83,766.17,0],"to":[68.5,-40.167,0],"ti":[-106.942,71.404,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[383.17,525.17,0],"to":[108.333,-72.333,0],"ti":[-70.333,-39.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[761.17,464.17,0],"to":[50.377,28.173,0],"ti":[-1.833,-66.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[723.17,664.17,0],"to":[1.833,66.167,0],"ti":[1.5,-85.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[772.17,861.17,0],"to":[-1.5,85.167,0],"ti":[0,0,0]},{"t":112,"s":[714.17,1175.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[-35.578,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[56.422,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-46.578,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[48.422,34.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[48.422,-53.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[48.422,59.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[-38.578,59.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-44.578,-52.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[46.422,-51.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[-45.578,-51.378,100]},{"t":113,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"O-8","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":12,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[137]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[188]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[215]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[170]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[226]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[341]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[379]},{"t":108,"s":[416]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-339.83,780.17,0],"to":[186.333,-47,0],"ti":[-258.434,84.531,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[778.17,498.17,0],"to":[231.333,-75.667,0],"ti":[-122.667,-72.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[1164.17,478.17,0],"to":[45.476,26.816,0],"ti":[-0.667,-77.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[1144.17,704.17,0],"to":[0.667,77.667,0],"ti":[0.333,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[1168.17,944.17,0],"to":[-0.333,72.667,0],"ti":[0.667,-65,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[1142.17,1140.17,0],"to":[-0.667,65,0],"ti":[0,0,0]},{"t":108,"s":[1164.17,1334.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-37.808,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[36.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-34.808,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[47.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[47.192,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[47.192,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76,"s":[47.192,-41,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[47.192,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[47.192,-39,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[47.192,49,100]},{"t":108,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"O-19","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":7.176,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14.699,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23.48,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[71.837]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56.088,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63.613,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.648,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.428,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102.494,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116.289,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126.322,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137.611,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155.17,"s":[264]},{"t":179,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-202.549,1698.312,0],"to":[112.333,-140.333,0],"ti":[-188,130.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[471.451,856.312,0],"to":[188,-130.667,0],"ti":[4,-96,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[925.451,914.312,0],"to":[-3.17,76.092,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[857.451,1266.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[989.451,1422.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":178,"s":[919.451,1602.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7.176,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[51.497,-58.369,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23.48,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-47.904,89.868,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56.088,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63.613,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.648,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.428,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102.494,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116.289,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126.322,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137.611,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155.17,"s":[59.192,75,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"O-14","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":7.176,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14.35,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.721,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53.811,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60.986,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.553,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78.924,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98.057,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111.209,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120.775,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131.539,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":148.279,"s":[264]},{"t":171,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-590.549,1004.312,0],"to":[158.667,-68.667,0],"ti":[-239.667,74.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.783,"s":[361.451,592.312,0],"to":[239.667,-74.333,0],"ti":[-123,-38,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33.482,"s":[847.451,558.312,0],"to":[123,38,0],"ti":[6,-57.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.377,"s":[1099.451,820.312,0],"to":[-6.27,60.262,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83.707,"s":[1063.451,1014.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106.426,"s":[1117.451,1242.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":145.888671875,"s":[1053.451,1462.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7.176,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22.721,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53.811,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60.986,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.553,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.924,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98.057,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111.209,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120.775,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131.539,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148.279,"s":[59.192,75,100]},{"t":171,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"O-12","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":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-590.549,1004.312,0],"to":[158.667,-68.667,0],"ti":[-239.667,74.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[361.451,592.312,0],"to":[239.667,-74.333,0],"ti":[-123,-38,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[847.451,558.312,0],"to":[123,38,0],"ti":[6,-57.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[1099.451,820.312,0],"to":[-6.27,60.262,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[1063.451,1014.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[1117.451,1242.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":152,"s":[1015.451,1716.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"O-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-35.83,864.17,0],"to":[88,-52,0],"ti":[-110.304,95.416,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[492.17,552.17,0],"to":[108.667,-94,0],"ti":[-78.667,-108,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[772.17,528.17,0],"to":[27.576,37.859,0],"ti":[-1.5,-59.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[729.17,689.17,0],"to":[1.5,59.833,0],"ti":[-0.167,-65.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[781.17,887.17,0],"to":[0.167,65.333,0],"ti":[2,-68.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[730.17,1081.17,0],"to":[-2,68.333,0],"ti":[0,0,0]},{"t":143,"s":[769.17,1297.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"R-8","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36.133,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.199,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54.23,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.744,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84.396,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108.529,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118.182,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130.248,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":142.314,"s":[-180]},{"t":158,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1987.397,721.767,0],"to":[-141,-65.667,0],"ti":[209.667,68,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[1141.397,327.767,0],"to":[-209.667,-68,0],"ti":[110.667,-40.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[729.397,313.767,0],"to":[-110.667,40.667,0],"ti":[60.667,-112.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[477.397,571.767,0],"to":[-60.667,112.667,0],"ti":[18.667,-69.667,0]},{"t":157,"s":[365.397,989.767,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42.166,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.199,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54.23,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63.885,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.744,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84.396,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98.877,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108.529,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118.182,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":130.248,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":142.314,"s":[87,89,100]},{"t":158,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":49,"ty":4,"nm":"R-4","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1486.155,2039.47,0],"to":[-37.667,-220.333,0],"ti":[75.667,274.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1260.155,717.47,0],"to":[-75.667,-274.333,0],"ti":[60.667,26,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[1032.155,393.47,0],"to":[-60.667,-26,0],"ti":[26,-106,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[896.155,561.47,0],"to":[-26,106,0],"ti":[-0.667,-135.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":128,"s":[876.155,1029.47,0],"to":[0.667,135.333,0],"ti":[-4,-57.333,0]},{"t":153,"s":[900.155,1373.47,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":50,"ty":4,"nm":"R-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[2265.189,1157.128,0],"to":[-248,-116.667,0],"ti":[328.333,103,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[777.189,457.128,0],"to":[-328.333,-103,0],"ti":[65,-55,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[295.189,539.128,0],"to":[-65,55,0],"ti":[10,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[387.189,787.128,0],"to":[-10,67.667,0],"ti":[13.333,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[235.189,945.128,0],"to":[-13.333,72.667,0],"ti":[-12,-46.333,0]},{"t":133,"s":[307.189,1223.128,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":51,"ty":4,"nm":"R-3","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[37.051,2047.851,0],"to":[42.333,-272.667,0],"ti":[-76,271.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[291.051,411.851,0],"to":[76,-271.667,0],"ti":[-48.333,-53.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[493.051,417.851,0],"to":[48.333,53.667,0],"ti":[-18.333,-106.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[581.051,733.851,0],"to":[18.333,106.333,0],"ti":[-3.667,-53.667,0]},{"t":133,"s":[603.051,1055.851,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":52,"ty":4,"nm":"R-7","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1927.842,1025.941,0],"to":[-126,-93.667,0],"ti":[209.618,146.832,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[1171.842,463.941,0],"to":[-210.333,-147.333,0],"ti":[98.573,-63.903,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[533.842,381.941,0],"to":[-198.691,128.809,0],"ti":[0,0,0]},{"t":133,"s":[329.842,823.941,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":53,"ty":4,"nm":"R-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[-180]},{"t":144,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[1522,626.5,0],"to":[-90,-39,0],"ti":[112.133,39.487,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[982,392.5,0],"to":[-73.833,-26,0],"ti":[18.167,-19.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[857,368.5,0],"to":[-18.167,19.167,0],"ti":[3.833,-46.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[873,507.5,0],"to":[-3.833,46.833,0],"ti":[-1.833,-50.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[834,649.5,0],"to":[1.833,50.167,0],"ti":[-2.667,-64.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[884,808.5,0],"to":[2.667,64.333,0],"ti":[3.667,-57.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[850,1035.5,0],"to":[-3.667,57.833,0],"ti":[-2,-20,0]},{"t":144,"s":[862,1155.5,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[87,89,100]},{"t":144,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":11,"op":191,"st":11,"bm":0},{"ddd":0,"ind":54,"ty":4,"nm":"R-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1522,626.5,0],"to":[-90,-39,0],"ti":[112.133,39.487,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[982,392.5,0],"to":[-73.833,-26,0],"ti":[18.167,-19.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[857,368.5,0],"to":[-18.167,19.167,0],"ti":[3.833,-46.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[873,507.5,0],"to":[-3.833,46.833,0],"ti":[-1.833,-50.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[834,649.5,0],"to":[1.833,50.167,0],"ti":[-2.667,-64.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[884,808.5,0],"to":[2.667,64.333,0],"ti":[3.667,-57.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[850,1035.5,0],"to":[-3.667,57.833,0],"ti":[-2,-20,0]},{"t":133,"s":[862,1155.5,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":55,"ty":4,"nm":"R-9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":19,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-42,1355,0],"to":[132.667,-45.333,0],"ti":[-150.444,66.616,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[754,1083,0],"to":[157.333,-69.667,0],"ti":[-40.948,-43.78,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[1088,1049,0],"to":[62.667,67,0],"ti":[9.021,-73.174,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[1046,1293,0],"to":[-15,121.667,0],"ti":[-4.42,-85.74,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[1076,1517,0],"to":[8.333,161.667,0],"ti":[3,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[1012,1807,0],"to":[-3,61.333,0],"ti":[-7.667,-13,0]},{"t":127,"s":[1058,1885,0]}],"ix":2},"a":{"a":0,"k":[-666.202,57.656,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[136.341,102.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[136.341,-61.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[136.341,86.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[136.341,-75.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[136.341,90.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[136.341,-97.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[136.341,98.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[136.341,-76.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[136.341,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-85.659,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-121.659,-74.936,100]},{"t":123,"s":[0,0,100]}],"ix":6}},"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":[[-663.5,41],[-686,48],[-676,72],[-653,65.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":56,"ty":4,"nm":"R-1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":19,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-210,613,0],"to":[132.667,-45.333,0],"ti":[-150.444,66.616,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[586,341,0],"to":[157.333,-69.667,0],"ti":[-40.948,-43.78,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[920,307,0],"to":[62.667,67,0],"ti":[9.021,-73.174,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[878,551,0],"to":[-15,121.667,0],"ti":[-4.42,-85.74,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[908,775,0],"to":[8.333,161.667,0],"ti":[3,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[844,1065,0],"to":[-3,61.333,0],"ti":[-7.667,-13,0]},{"t":127,"s":[890,1143,0]}],"ix":2},"a":{"a":0,"k":[-666.202,57.656,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[136.341,102.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[136.341,-61.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[136.341,86.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[136.341,-75.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[136.341,90.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[136.341,-97.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[136.341,98.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[136.341,-76.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[136.341,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-85.659,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-121.659,-74.936,100]},{"t":123,"s":[0,0,100]}],"ix":6}},"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":[[-663.5,41],[-686,48],[-676,72],[-653,65.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":57,"ty":4,"nm":"T-21","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":29,"s":[-28]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36.707,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.816,"s":[90]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55.422,"s":[107]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.33,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.137,"s":[104]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84.045,"s":[127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95.055,"s":[99]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108.266,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120.377,"s":[98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134.688,"s":[79]},{"t":149,"s":[110]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[-290.189,931.055,0],"to":[110,-82.667,0],"ti":[-159.04,103.808,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[369.811,435.055,0],"to":[159.333,-104,0],"ti":[-84.186,-15.812,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[835.811,343.055,0],"to":[306.178,57.506,0],"ti":[20.65,-228.196,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[1113.811,759.055,0],"to":[-35.926,396.999,0],"ti":[0,0,0]},{"t":149,"s":[1221.811,1333.055,0]}],"ix":2},"a":{"a":0,"k":[539,27,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-113.632,147.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36.707,"s":[100.368,184.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.816,"s":[-91.632,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55.422,"s":[86.368,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.33,"s":[-66.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.137,"s":[100.368,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84.045,"s":[-71.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95.055,"s":[85.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108.266,"s":[-65.632,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120.377,"s":[93.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134.688,"s":[-78.632,162.368,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"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":[[548,8],[525,24],[553,46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":9,"op":189,"st":9,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"T-4","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":20,"s":[-28]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[90]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[107]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[104]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[99]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[79]},{"t":129,"s":[110]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1670,1028,0],"to":[-139.167,-49.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[835,733,0],"to":[0,0,0],"ti":[10.667,-23.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[713,613,0],"to":[-10.667,23.333,0],"ti":[-6.667,-67.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[771,873,0],"to":[6.667,67.333,0],"ti":[-2,-53.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[753,1017,0],"to":[2,53.667,0],"ti":[-2,-54,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83,"s":[783,1195,0],"to":[2,54,0],"ti":[0.333,-40.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[765,1341,0],"to":[-0.333,40.667,0],"ti":[-2.667,-16.333,0]},{"t":129,"s":[781,1439,0]}],"ix":2},"a":{"a":0,"k":[539,27,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-113.632,147.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[100.368,184.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-91.632,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[86.368,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-66.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[100.368,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-71.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[85.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[-65.632,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[93.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-78.632,162.368,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"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":[[548,8],[525,24],[553,46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":59,"ty":4,"nm":"T-3","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":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-37.132,1450.841,0],"to":[88.5,-174,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[493.868,406.841,0],"to":[0,0,0],"ti":[-16.5,-48,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[631.868,328.841,0],"to":[16.5,48,0],"ti":[0.5,-122,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[592.868,694.841,0],"to":[-0.5,122,0],"ti":[-2,-109,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[628.868,1060.841,0],"to":[2,109,0],"ti":[-1,-82.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[604.868,1348.841,0],"to":[1,82.5,0],"ti":[-5,-34.5,0]},{"t":129,"s":[634.868,1555.841,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":60,"ty":4,"nm":"T-14","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":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-518.504,962.498,0],"to":[153.667,-68.667,0],"ti":[-226.667,77,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[403.496,550.498,0],"to":[226.667,-77,0],"ti":[-81.333,-36,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[841.496,500.498,0],"to":[81.333,36,0],"ti":[-9.333,-94,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[969.496,728.498,0],"to":[9.333,94,0],"ti":[3,-104,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[897.496,1064.498,0],"to":[-3,104,0],"ti":[0,0,0]},{"t":138,"s":[951.496,1352.498,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":61,"ty":4,"nm":"T-31","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":47,"s":[0]},{"t":149,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[1566.5,1321.5,0],"to":[-116,-54.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[870.5,993.5,0],"to":[0,0,0],"ti":[17.667,-27.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[752.5,943.5,0],"to":[-17.667,27.333,0],"ti":[0.333,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[764.5,1157.5,0],"to":[-0.333,59.333,0],"ti":[-4,-52.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[750.5,1299.5,0],"to":[4,52.667,0],"ti":[-1,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[788.5,1473.5,0],"to":[1,56,0],"ti":[5.333,-27,0]},{"t":149,"s":[756.5,1635.5,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[100,-54,100]},{"t":150,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":202,"st":22,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"T-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1526.5,675.5,0],"to":[-116,-54.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[830.5,347.5,0],"to":[0,0,0],"ti":[17.667,-27.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[712.5,297.5,0],"to":[-17.667,27.333,0],"ti":[0.333,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[724.5,511.5,0],"to":[-0.333,59.333,0],"ti":[-4,-52.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[710.5,653.5,0],"to":[4,52.667,0],"ti":[-1,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[748.5,827.5,0],"to":[1,56,0],"ti":[5.333,-27,0]},{"t":127,"s":[716.5,989.5,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":63,"ty":4,"nm":"T-1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"t":24,"s":[100]}],"ix":11},"r":{"a":0,"k":12,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[60,946,0],"to":[68,-89.333,0],"ti":[-90,100.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[468,410,0],"to":[90,-100.833,0],"ti":[-18,-28.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[600,341,0],"to":[18,28.5,0],"ti":[-4,-78.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[576,581,0],"to":[4,78.5,0],"ti":[-0.5,-78.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[624,812,0],"to":[0.5,78.5,0],"ti":[-1,-109,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[579,1052,0],"to":[1,109,0],"ti":[-26.5,-66,0]},{"t":179,"s":[630,1466,0]}],"ix":2},"a":{"a":0,"k":[-286,-54,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[71.429,56.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[71.429,-39.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[71.429,49.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[71.429,46.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[71.429,-49.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[71.429,53.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[71.429,38.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[71.429,52.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[71.429,-34.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":156,"s":[71.429,41.098,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"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":[[-251,-95],[-321,-60],[-282,-13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":64,"ty":4,"nm":"O-4","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[111]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[42.552]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[-29.25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[80.667]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[259.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":147,"s":[153.545]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[1]},{"t":166,"s":[30]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-47.06,1449.593,0],"to":[83.333,-114,0],"ti":[-107.333,59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[452.94,765.593,0],"to":[107.333,-59.333,0],"ti":[-11.333,-112.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[596.94,1093.593,0],"to":[11.333,112.333,0],"ti":[4.667,-107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[520.94,1439.593,0],"to":[-4.667,107,0],"ti":[-8,-49.333,0]},{"t":164,"s":[568.94,1735.593,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-103,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[84.286,-92.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[84.286,123.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-146.714,123.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-124.714,-82.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-124.714,90.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[100.286,90.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147,"s":[100.286,-63.286,100]},{"t":166,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254901961,0.207843137255,0.301960784314,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"O-24","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":11,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[46]},{"t":176,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[1662.603,932.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1130.603,280.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[1124.603,444.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[1072.603,644.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1144.603,796.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":147,"s":[1090.603,928.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":172,"s":[1114.603,1068.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":163,"s":[-29.939,40.939,100]},{"t":176,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":11,"op":191,"st":11,"bm":0},{"ddd":0,"ind":66,"ty":4,"nm":"O-23","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":18,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[46]},{"t":183,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1658.603,1608.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[1126.603,956.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[1120.603,1120.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[1068.603,1320.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":128,"s":[1140.603,1472.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":154,"s":[1086.603,1604.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":179,"s":[1110.603,1744.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":39,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":170,"s":[-29.939,40.939,100]},{"t":183,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":198,"st":18,"bm":0},{"ddd":0,"ind":67,"ty":4,"nm":"O-3","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1574.603,1402.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1042.603,750.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[1036.603,914.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[984.603,1114.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[1056.603,1266.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":136,"s":[1002.603,1398.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":162,"s":[1026.603,1538.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"O-17","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":20,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152,"s":[46]},{"t":185,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":174,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":172,"s":[-29.939,40.939,100]},{"t":185,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":200,"st":20,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"O-25","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":8,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[46]},{"t":173,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[-421.019,1828.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[287.981,812.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[319.981,1150.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[301.981,1536.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":162,"s":[315.981,1740.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":160,"s":[-29.939,40.939,100]},{"t":173,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":188,"st":8,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"O-21","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":13,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[46]},{"t":178,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":167,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":130,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[-29.939,40.939,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":193,"st":13,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"O-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":154,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"O-9","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":[62.83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[22.83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[-106.735]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-107.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[-68.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[-117.17]},{"t":143,"s":[-82.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1626.686,1627.702,0],"to":[-95.333,-150.333,0],"ti":[141.333,199.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1054.686,725.702,0],"to":[-141.333,-199.333,0],"ti":[55.725,30.712,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[778.686,431.702,0],"to":[-132.537,-73.045,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[572.686,629.702,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":[638.686,777.702,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[512.686,913.702,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[632.686,1089.702,0],"to":[0,0,0],"ti":[0,0,0]},{"t":144,"s":[568.686,1287.702,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,60.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,60.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-58.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[100,74.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[100,-69.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[100,69.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-74,69.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-74,-59.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[62,-59.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[62,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-62,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[68,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[68,-56.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[-61,-56.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[-61,62.385,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"O-16","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[-29.837]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-142.599]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[-23.98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[-86.17]},{"t":124,"s":[-166.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-696.875,1239.124,0],"to":[218.667,-124,0],"ti":[-291,127.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[615.125,495.124,0],"to":[291,-127.667,0],"ti":[-101,-48.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[1049.125,473.124,0],"to":[101,48.667,0],"ti":[-4.333,-69.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1221.125,787.124,0],"to":[4.333,69.667,0],"ti":[11,-50,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[1075.125,891.124,0],"to":[-11,50,0],"ti":[-8.667,-69.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1155.125,1087.124,0],"to":[8.667,69.333,0],"ti":[4.667,-36.667,0]},{"t":131,"s":[1127.125,1307.124,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"O-15","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"t":115,"s":[-86.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1999.125,1187.124,0],"to":[-202,-107.333,0],"ti":[278,104.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[787.125,543.124,0],"to":[-278,-104.667,0],"ti":[99.333,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[331.125,559.124,0],"to":[-99.333,56,0],"ti":[-2,-82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[191.125,879.124,0],"to":[2,82.667,0],"ti":[-9.333,-63.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[343.125,1055.124,0],"to":[9.333,63.333,0],"ti":[8,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[247.125,1259.124,0],"to":[-8,59.333,0],"ti":[-8,-25.333,0]},{"t":131,"s":[295.125,1411.124,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"O-7","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"t":115,"s":[-86.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1806.483,1154.389,0],"to":[-150,-99,0],"ti":[181.066,127.037,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[906.483,560.389,0],"to":[-206.339,-144.768,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[628.983,476.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[645.983,619.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[628.983,873.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[679.983,1137.889,0],"to":[0,0,0],"ti":[0,0,0]},{"t":134,"s":[679.983,1270.889,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":76,"ty":4,"nm":"O-20","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-35.84,1720.16,0],"to":[76,-186.333,0],"ti":[-129.333,181.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[420.16,602.16,0],"to":[129.333,-181.667,0],"ti":[-39,-41.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[740.16,630.16,0],"to":[39,41.667,0],"ti":[63.647,9.428,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[654.16,852.16,0],"to":[-71.674,-10.617,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[830.16,1050.16,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":138,"s":[676.16,1194.16,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[780.16,1384.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"O-11","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-151.84,1396.16,0],"to":[66.667,-126.667,0],"ti":[-110,161,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[248.16,636.16,0],"to":[110,-161,0],"ti":[-77.333,17.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[508.16,430.16,0],"to":[77.333,-17.333,0],"ti":[-28,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[712.16,532.16,0],"to":[28,61.333,0],"ti":[0,-84,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[676.16,798.16,0],"to":[0,84,0],"ti":[-5,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[712.16,1036.16,0],"to":[5,61.333,0],"ti":[1,-21.667,0]},{"t":151,"s":[706.16,1166.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"O-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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1570.16,1374.16,0],"to":[-52.667,-163,0],"ti":[138.667,143,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[990.16,504.16,0],"to":[-121.316,-125.107,0],"ti":[-28.643,-85.484,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[866.16,620.16,0],"to":[28.643,85.484,0],"ti":[71.84,-150.16,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[898.16,940.16,0],"to":[-71.84,150.16,0],"ti":[-1.667,-70.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":134,"s":[938.16,1274.16,0],"to":[1.667,70.333,0],"ti":[5,-14.667,0]},{"t":179,"s":[908.16,1362.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"X-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[72]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[79]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[97]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[87]},{"t":141,"s":[77]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1758.421,781.411,0],"to":[-146.5,-64,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[879.421,397.411,0],"to":[0,0,0],"ti":[36.421,-9.589,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[725.421,314.411,0],"to":[-93.661,24.659,0],"ti":[-25.417,-83.619,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[876.421,742.411,0],"to":[66.228,217.879,0],"ti":[9.5,-47,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[879.421,1111.411,0],"to":[-18.26,90.337,0],"ti":[0,0,0]},{"t":150,"s":[909.421,1294.411,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-61,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[77,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[-57,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[47,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[-60,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[63,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-58,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123,"s":[70,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-56,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[56,100,100]},{"t":150,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-4","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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-313.76,1406.401,0],"to":[100,-99.667,0],"ti":[-185.333,134.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[286.24,808.401,0],"to":[185.333,-134.667,0],"ti":[-138.808,-43.073,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[798.24,598.401,0],"to":[330.358,102.512,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1116.24,1150.401,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[1020.24,1492.401,0],"to":[0,0,0],"ti":[0,0,0]},{"t":133,"s":[1124.24,1720.401,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-3","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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-217.76,942.401,0],"to":[116.667,-80.333,0],"ti":[-188,101.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[482.24,460.401,0],"to":[188,-101.333,0],"ti":[-83.333,9,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[910.24,334.401,0],"to":[73.93,-7.984,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1090.24,514.401,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[1008.24,706.401,0],"to":[0,0,0],"ti":[0,0,0]},{"t":133,"s":[1042.24,846.401,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-320,1446,0],"to":[123.333,-131.333,0],"ti":[-177,166.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[420,658,0],"to":[177,-166.667,0],"ti":[-73.667,-0.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[742,446,0],"to":[64.251,0.581,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[862,626,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[828,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[906,1020,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[864,1300,0],"to":[0,0,0],"ti":[0,0,0]},{"t":144,"s":[888,1440,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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}],"markers":[]} \ No newline at end of file diff --git a/app/client/src/components/editorComponents/Onboarding/Boxed.tsx b/app/client/src/components/editorComponents/Onboarding/Boxed.tsx new file mode 100644 index 0000000000..e865ae6e3d --- /dev/null +++ b/app/client/src/components/editorComponents/Onboarding/Boxed.tsx @@ -0,0 +1,30 @@ +import { OnboardingStep } from "constants/OnboardingConstants"; +import React, { ReactNode } from "react"; +import { useSelector } from "react-redux"; +import { getCurrentStep, inOnboarding } from "sagas/OnboardingSagas"; + +type BoxedProps = { + // child nodes are not visible until this step is reached + step: OnboardingStep; + // Any additional conditions to hide the children + show?: boolean; + children: ReactNode; +}; + +// Boxed(or hidden). +const Boxed: React.FC = (props: BoxedProps) => { + const currentStep = useSelector(getCurrentStep); + const onboarding = useSelector(inOnboarding); + + if (onboarding && currentStep < props.step && !props.show) { + return null; + } + + return <>{props.children}; +}; + +Boxed.defaultProps = { + show: false, +}; + +export default Boxed; diff --git a/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx b/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx new file mode 100644 index 0000000000..b621c5a7ea --- /dev/null +++ b/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx @@ -0,0 +1,213 @@ +import { Dialog, Icon } from "@blueprintjs/core"; +import { IconWrapper } from "constants/IconConstants"; +import { DATA_SOURCES_EDITOR_URL } from "constants/routes"; +import { HeaderIcons } from "icons/HeaderIcons"; +import AppInviteUsersForm from "pages/organization/AppInviteUsersForm"; +import React, { useEffect, useState } from "react"; +import { useDispatch } from "react-redux"; +import { useSelector } from "store"; +import styled from "styled-components"; +import { ReactComponent as BookIcon } from "assets/icons/ads/app-icons/book.svg"; +import { FormDialogComponent } from "../form/FormDialogComponent"; +import { getCurrentOrgId } from "selectors/organizationSelectors"; +import { getCurrentApplication } from "selectors/applicationSelectors"; +import { getCurrentPageId } from "selectors/editorSelectors"; +import { endOnboarding } from "actions/onboardingActions"; +import { getQueryParams } from "utils/AppsmithUtils"; +import { getOnboardingState } from "utils/storage"; + +const StyledDialog = styled(Dialog)` + && { + width: 850px; + background-color: white; + } +`; + +const ApplicationPublishedWrapper = styled.div` + padding: 33px; +`; + +const Title = styled.div` + font-weight: bold; + font-size: 36px; +`; + +const ContentWrapper = styled.div` + display: flex; + margin-top: 18px; +`; + +const DescriptionWrapper = styled.div` + flex: 1; + font-size: 17px; +`; + +const DescriptionTitle = styled.div` + font-weight: 500; + font-size: 17px; +`; + +const DescriptionList = styled.div` + margin-top: 8px; +`; + +const DescriptionItem = styled.div` + margin-top: 12px; +`; + +const QuickLinksWrapper = styled.div` + margin-left: 83px; + color: #716e6e; +`; + +const QuickLinksTitle = styled.div` + font-size: 14px; +`; + +const QuickLinksItem = styled.div` + font-size: 17px; + border-bottom: 1px solid #716e6e; + display: flex; + align-items: center; + cursor: pointer; + margin-top: 13px; + + .text { + margin-left: 3px; + } +`; + +const StyledButton = styled.button` + color: white; + background-color: #f3672a; + font-weight: 600; + font-size: 17px; + padding: 12px 24px; + border: none; + cursor: pointer; + margin-top: 30px; +`; + +const CompletionDialog = () => { + const [isOpen, setIsOpen] = useState(false); + const orgId = useSelector(getCurrentOrgId); + const currentApplication = useSelector(getCurrentApplication); + const pageId = useSelector(getCurrentPageId); + const dispatch = useDispatch(); + + useEffect(() => { + const params = getQueryParams(); + const showCompletionDialog = async () => { + const inOnboarding = await getOnboardingState(); + if (params.onboardingComplete && inOnboarding) { + setIsOpen(true); + } + }; + + showCompletionDialog(); + }, []); + + const onClose = () => { + setIsOpen(false); + dispatch(endOnboarding()); + }; + + return ( + + + + <span role="img" aria-label="raising hands"> + 🙌 + </span>{" "} + You’re Awesome! + + + + + You’ve completed this tutorial. Here’s a quick recap of things you + learnt - + + + + + 👉 + {" "} + Querying a database + + + + 👉 + {" "} + Building UI using widgets. + + + + 👉 + {" "} + Connecting widgets to queries using {"{{}}"} bindings + + + + 👉 + {" "} + Deploying your application + + + + + Continue on my own + + + + Quick Links: + + window.open("https://docs.appsmith.com/", "_blank") + } + > + + + + Read our documentation + + + + Invite users to your app + + } + canOutsideClickClose={true} + Form={AppInviteUsersForm} + orgId={orgId} + applicationId={currentApplication?.id} + title={ + currentApplication + ? currentApplication.name + : "Share Application" + } + /> + { + window.open( + DATA_SOURCES_EDITOR_URL(currentApplication?.id, pageId), + "_blank", + ); + }} + > + + Connect your database + + + + + + ); +}; + +export default CompletionDialog; diff --git a/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx b/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx new file mode 100644 index 0000000000..cb598a5bac --- /dev/null +++ b/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx @@ -0,0 +1,238 @@ +import React, { + MutableRefObject, + ReactNode, + RefObject, + useEffect, + useRef, + useState, +} from "react"; +import { Classes, Icon, Popover, Position } from "@blueprintjs/core"; +import { useSelector } from "store"; +import { getTooltipConfig } from "sagas/OnboardingSagas"; +import { useDispatch } from "react-redux"; +import styled from "styled-components"; +import useClipboard from "utils/hooks/useClipboard"; +import { endOnboarding, showTooltip } from "actions/onboardingActions"; +import { Colors } from "constants/Colors"; +import { + OnboardingStep, + OnboardingTooltip, +} from "constants/OnboardingConstants"; + +enum TooltipClassNames { + TITLE = "tooltip-title", + DESCRIPTION = "tooltip-description", + SKIP = "tooltip-skip", + ACTION = "tooltip-action", + SNIPPET = "tooltip-snippet", +} + +const Wrapper = styled.div<{ isFinalStep: boolean }>` + width: 280px; + background-color: ${props => (props.isFinalStep ? "#F86A2B" : "#457ae6")}; + color: white; + padding: 10px; + + .${TooltipClassNames.TITLE} { + font-weight: 500; + font-size: 14px; + } + .${TooltipClassNames.DESCRIPTION} { + font-size: 12px; + margin-top: 8px; + } + .${TooltipClassNames.SKIP} { + font-size: 10px; + opacity: 0.7; + + span { + text-decoration: underline; + cursor: pointer; + } + } + .${TooltipClassNames.SNIPPET} { + background-color: #2c59b4; + color: white; + font-size: 12px; + display: flex; + justify-content: space-between; + align-items: center; + margin: 8px 0px; + position: relative; + cursor: pointer; + + & > span { + padding: 6px; + } + + & div.clipboard-message { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + position: absolute; + z-index: 1; + &.success { + background: #2c59b4; + } + &.error { + background: ${Colors.RED}; + } + } + .${Classes.ICON} { + opacity: 0.7; + } + } + .${TooltipClassNames.ACTION} { + padding: 6px 10px; + cursor: pointer; + color: white; + border: none; + font-size: 12px; + background-color: #2c59b4; + } +`; + +const Container = styled.div<{ isFinalStep: boolean }>` + div.${Classes.POPOVER_ARROW} { + display: block; + } + .bp3-popover-arrow-fill { + fill: ${props => (props.isFinalStep ? "#F86A2B" : "#457ae6")}; + } +`; + +const ActionWrapper = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 10px; +`; + +type OnboardingToolTipProps = { + step: OnboardingStep[]; + children: ReactNode; + show?: boolean; + position?: Position; +}; + +const OnboardingToolTip: React.FC = ( + props: OnboardingToolTipProps, +) => { + const [isOpen, setIsOpen] = useState(false); + const showingTooltip = useSelector( + state => state.ui.onBoarding.showingTooltip, + ); + const popoverRef: RefObject = useRef(null); + const tooltipConfig = useSelector(getTooltipConfig); + const { isFinalStep = false } = tooltipConfig; + + useEffect(() => { + if (props.step.includes(showingTooltip) && props.show) { + setIsOpen(true); + } else { + setIsOpen(false); + } + if (popoverRef.current) { + popoverRef.current.reposition(); + } + }, [props.step, props.show, showingTooltip, popoverRef]); + + if (isOpen) { + return ( + + + {props.children} + + + + ); + } + + return <>{props.children}; +}; + +OnboardingToolTip.defaultProps = { + show: true, +}; + +type ToolTipContentProps = { + details: OnboardingTooltip; +}; + +const ToolTipContent = (props: ToolTipContentProps) => { + const dispatch = useDispatch(); + const { + title, + description, + snippet, + action, + isFinalStep = false, + } = props.details; + const snippetRef: MutableRefObject = useRef(null); + const write = useClipboard(snippetRef); + + const copyBindingToClipboard = () => { + snippet && write(snippet); + }; + + const finishOnboarding = () => { + dispatch(endOnboarding()); + }; + + return ( + +
{title}
+
{description}
+ + {snippet && ( +
+ {snippet} + +
+ )} + + + Done? Click here to End + + + {action && ( + + )} + +
+ ); +}; + +export default OnboardingToolTip; diff --git a/app/client/src/constants/OnboardingConstants.tsx b/app/client/src/constants/OnboardingConstants.tsx new file mode 100644 index 0000000000..f1e18f084e --- /dev/null +++ b/app/client/src/constants/OnboardingConstants.tsx @@ -0,0 +1,129 @@ +import { setCurrentStep } from "actions/onboardingActions"; +import { ReduxAction, ReduxActionTypes } from "./ReduxActionConstants"; +import { EventName } from "../utils/AnalyticsUtil"; + +export enum OnboardingStep { + NONE = -1, + WELCOME = 0, + EXAMPLE_DATABASE = 1, + ADD_WIDGET = 2, + SUCCESSFUL_BINDING = 3, + DEPLOY = 4, +} + +export type OnboardingTooltip = { + title: string; + description: string; + action?: { + label: string; + action?: ReduxAction; + }; + snippet?: string; + isFinalStep?: boolean; +}; + +export type OnboardingStepConfig = { + setup: () => { type: string; payload?: any }[]; + tooltip: OnboardingTooltip; + eventName?: EventName; +}; + +export const OnboardingConfig: Record = { + [OnboardingStep.NONE]: { + setup: () => { + return []; + }, + tooltip: { + title: "", + description: "", + }, + }, + [OnboardingStep.WELCOME]: { + setup: () => { + // To setup the state if any + // Return action that needs to be dispatched + return [ + { + type: ReduxActionTypes.SHOW_WELCOME, + }, + ]; + }, + tooltip: { + title: "", + description: "", + }, + eventName: "ONBOARDING_WELCOME", + }, + [OnboardingStep.EXAMPLE_DATABASE]: { + setup: () => { + return [ + { + type: ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT, + }, + { + type: ReduxActionTypes.LISTEN_FOR_ADD_WIDGET, + }, + { + type: ReduxActionTypes.LISTEN_FOR_TABLE_WIDGET_BINDING, + }, + ]; + }, + tooltip: { + title: "Say hello to your example database", + description: + "Go ahead, check it out. You can also create a new query or connect to your own db as well.", + action: { + label: "Got It!", + }, + }, + eventName: "ONBOARDING_EXAMPLE_DATABASE", + }, + [OnboardingStep.ADD_WIDGET]: { + setup: () => { + return []; + }, + tooltip: { + title: + "Wohoo! Your first widget. 🎉 Go ahead and connect this to a Query", + description: + "Copy the example binding below and paste inside TableData input", + snippet: "{{ExampleQuery.data}}", + }, + eventName: "ONBOARDING_ADD_WIDGET", + }, + [OnboardingStep.SUCCESSFUL_BINDING]: { + setup: () => { + return [ + { + type: ReduxActionTypes.LISTEN_FOR_WIDGET_UNSELECTION, + }, + ]; + }, + tooltip: { + title: "This table is now connected to Example Query", + description: + "You can connect properties to variables on Appsmith with {{ }} bindings", + action: { + label: "Next", + action: setCurrentStep(OnboardingStep.DEPLOY), + }, + }, + eventName: "ONBOARDING_SUCCESSFUL_BINDING", + }, + [OnboardingStep.DEPLOY]: { + setup: () => { + return [ + { + type: ReduxActionTypes.LISTEN_FOR_DEPLOY, + }, + ]; + }, + tooltip: { + title: "You’re almost done! Just Hit Deploy", + description: + "Deploying your apps is a crucial step to building on appsmith.", + isFinalStep: true, + }, + eventName: "ONBOARDING_DEPLOY", + }, +}; diff --git a/app/client/src/constants/ReduxActionConstants.tsx b/app/client/src/constants/ReduxActionConstants.tsx index 1a57fe0980..bbfbfa26e0 100644 --- a/app/client/src/constants/ReduxActionConstants.tsx +++ b/app/client/src/constants/ReduxActionConstants.tsx @@ -72,6 +72,15 @@ export const ReduxActionTypes: { [key: string]: string } = { CANCEL_RUN_ACTION_CONFIRM_MODAL: "CANCEL_RUN_ACTION_CONFIRM_MODAL", ACCEPT_RUN_ACTION_CONFIRM_MODAL: "ACCEPT_RUN_ACTION_CONFIRM_MODAL", CREATE_QUERY_INIT: "CREATE_QUERY_INIT", + CREATE_ONBOARDING_ACTION_INIT: "CREATE_ONBOARDING_ACTION_INIT", + CREATE_ONBOARDING_ACTION_SUCCESS: "CREATE_ONBOARDING_ACTION_SUCCESS", + CREATE_ONBOARDING_DBQUERY_SUCCESS: "CREATE_ONBOARDING_DBQUERY_SUCCESS", + END_ONBOARDING: "END_ONBOARDING", + SET_CURRENT_STEP: "SET_CURRENT_STEP", + SET_ONBOARDING_STATE: "SET_ONBOARDING_STATE", + NEXT_ONBOARDING_STEP: "NEXT_ONBOARDING_STEP", + INCREMENT_STEP: "INCREMENT_STEP", + SHOW_WELCOME: "SHOW_WELCOME", FETCH_DATASOURCES_INIT: "FETCH_DATASOURCES_INIT", FETCH_DATASOURCES_SUCCESS: "FETCH_DATASOURCES_SUCCESS", SAVE_DATASOURCE_NAME: "SAVE_DATASOURCE_NAME", @@ -92,6 +101,14 @@ export const ReduxActionTypes: { [key: string]: string } = { TEST_DATASOURCE_SUCCESS: "TEST_DATASOURCE_SUCCESS", DELETE_DATASOURCE_DRAFT: "DELETE_DATASOURCE_DRAFT", UPDATE_DATASOURCE_DRAFT: "UPDATE_DATASOURCE_DRAFT", + SHOW_ONBOARDING_TOOLTIP: "SHOW_ONBOARDING_TOOLTIP", + SHOW_ONBOARDING_COMPLETION_DIALOG: "SHOW_ONBOARDING_COMPLETION_DIALOG", + CREATE_ONBOARDING_DBQUERY_INIT: "CREATE_ONBOARDING_DBQUERY_INIT", + ADD_WIDGET_COMPLETE: "ADD_WIDGET_COMPLETE", + LISTEN_FOR_ADD_WIDGET: "LISTEN_FOR_ADD_WIDGET", + LISTEN_FOR_WIDGET_UNSELECTION: "LISTEN_FOR_WIDGET_UNSELECTION", + LISTEN_FOR_DEPLOY: "LISTEN_FOR_DEPLOY", + LISTEN_FOR_TABLE_WIDGET_BINDING: "LISTEN_FOR_TABLE_WIDGET_BINDING", FETCH_PUBLISHED_PAGE_INIT: "FETCH_PUBLISHED_PAGE_INIT", FETCH_PUBLISHED_PAGE_SUCCESS: "FETCH_PUBLISHED_PAGE_SUCCESS", DELETE_DATASOURCE_INIT: "DELETE_DATASOURCE_INIT", @@ -323,6 +340,7 @@ export const ReduxActionErrorTypes: { [key: string]: string } = { DELETE_ACTION_ERROR: "DELETE_ACTION_ERROR", RUN_ACTION_ERROR: "RUN_ACTION_ERROR", EXECUTE_ACTION_ERROR: "EXECUTE_ACTION_ERROR", + CREATE_ONBOARDING_ACTION_ERROR: "CREATE_ONBOARDING_ACTION_ERROR", FETCH_DATASOURCES_ERROR: "FETCH_DATASOURCES_ERROR", SEARCH_APIORPROVIDERS_ERROR: "SEARCH_APIORPROVIDERS_ERROR", UPDATE_DATASOURCE_ERROR: "UPDATE_DATASOURCE_ERROR", @@ -331,6 +349,7 @@ export const ReduxActionErrorTypes: { [key: string]: string } = { DELETE_DATASOURCE_ERROR: "DELETE_DATASOURCE_ERROR", FETCH_DATASOURCE_STRUCTURE_ERROR: "FETCH_DATASOURCE_STRUCTURE_ERROR", REFRESH_DATASOURCE_STRUCTURE_ERROR: "REFRESH_DATASOURCE_STRUCTURE_ERROR", + CREATE_ONBOARDING_DBQUERY_ERROR: "CREATE_ONBOARDING_DBQUERY_ERROR", FETCH_PUBLISHED_PAGE_ERROR: "FETCH_PUBLISHED_PAGE_ERROR", PUBLISH_APPLICATION_ERROR: "PUBLISH_APPLICATION_ERROR", FETCH_USER_DETAILS_ERROR: "FETCH_USER_DETAILS_ERROR", diff --git a/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx b/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx index 31080a185b..a1c16197ba 100644 --- a/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx +++ b/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx @@ -15,6 +15,7 @@ import { getCanvasWidgetDsl, getCurrentPageName, } from "selectors/editorSelectors"; +import OnboardingCompletionDialog from "components/editorComponents/Onboarding/CompletionDialog"; import ConfirmRunModal from "pages/Editor/ConfirmRunModal"; import { getCurrentApplication } from "selectors/applicationSelectors"; import { @@ -114,6 +115,7 @@ class AppViewerPageContainer extends Component { pageName={this.props.currentPageName} /> + ); } diff --git a/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx b/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx index ad8c86f056..da7bd3b094 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx @@ -25,6 +25,8 @@ import AnalyticsUtil from "utils/AnalyticsUtil"; import { convertArrayToSentence } from "utils/helpers"; import BackButton from "./BackButton"; import { PluginType } from "entities/Action"; +import Boxed from "components/editorComponents/Onboarding/Boxed"; +import { OnboardingStep } from "constants/OnboardingConstants"; const { cloudHosting } = getAppsmithConfigs(); @@ -60,7 +62,7 @@ const DBForm = styled.div` padding: 20px; margin-left: 10px; margin-right: 0px; - max-height: 93vh; + height: calc(100vh - ${props => props.theme.headerHeight}); overflow: auto; .backBtn { padding-bottom: 1px; @@ -337,20 +339,22 @@ class DatasourceDBEditor extends React.Component< {viewMode && ( - { - this.props.setDatasourceEditorMode( - this.props.datasourceId, - false, - ); - }} - /> + + { + this.props.setDatasourceEditorMode( + this.props.datasourceId, + false, + ); + }} + /> + )} - {cloudHosting && pluginType === PluginType.DB && ( + {cloudHosting && pluginType === PluginType.DB && !viewMode && ( {`Whitelist the IP ${convertArrayToSentence( diff --git a/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx b/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx index 49cd9d25c0..6650681574 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx @@ -14,6 +14,7 @@ import { getDataTree } from "selectors/dataTreeSelectors"; import { isNameValid } from "utils/helpers"; import { saveDatasourceName } from "actions/datasourceActions"; import { Spinner } from "@blueprintjs/core"; +import { getCurrentStep, inOnboarding } from "sagas/OnboardingSagas"; const Wrapper = styled.div` margin-left: 10px; @@ -52,6 +53,14 @@ const FormTitle = (props: FormTitleProps) => { }; }); + // For onboarding + const hideEditIcon = useSelector((state: AppState) => { + const currentStep = getCurrentStep(state); + const isInOnboarding = inOnboarding(state); + + return isInOnboarding && currentStep < 3; + }); + const hasNameConflict = React.useCallback( (name: string) => { const datasourcesNames: Record = {}; @@ -104,13 +113,14 @@ const FormTitle = (props: FormTitleProps) => { {saveStatus.isSaving && } diff --git a/app/client/src/pages/Editor/DataSourceEditor/index.tsx b/app/client/src/pages/Editor/DataSourceEditor/index.tsx index 2a5a57ec57..bbba7137dc 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/index.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/index.tsx @@ -135,7 +135,6 @@ const mapStateToProps = (state: AppState, props: any): ReduxStateProps => { const formData = getFormValues(DATASOURCE_DB_FORM)(state) as Datasource; const pluginId = _.get(datasource, "pluginId", ""); const plugin = getPlugin(state, pluginId); - return { pluginImages: getPluginImages(state), formData, diff --git a/app/client/src/pages/Editor/EditorHeader.tsx b/app/client/src/pages/Editor/EditorHeader.tsx index fa71b343e7..af2771d2cc 100644 --- a/app/client/src/pages/Editor/EditorHeader.tsx +++ b/app/client/src/pages/Editor/EditorHeader.tsx @@ -36,6 +36,11 @@ import { getIsSavingAppName, } from "selectors/applicationSelectors"; import EditableTextWrapper from "components/ads/EditableTextWrapper"; +import Boxed from "components/editorComponents/Onboarding/Boxed"; +import OnboardingToolTip from "components/editorComponents/Onboarding/Tooltip"; +import { Position } from "@blueprintjs/core"; +import { inOnboarding } from "sagas/OnboardingSagas"; +import { OnboardingStep } from "constants/OnboardingConstants"; const HeaderWrapper = styled(StyledHeader)` background: ${Colors.BALTIC_SEA}; @@ -134,6 +139,7 @@ type EditorHeaderProps = { applicationId?: string; currentApplication?: ApplicationPayload; isSaving: boolean; + isInOnboarding: boolean; publishApplication: (appId: string) => void; }; @@ -148,6 +154,7 @@ export const EditorHeader = (props: EditorHeaderProps) => { applicationId, pageName, publishApplication, + isInOnboarding, } = props; const dispatch = useDispatch(); @@ -209,93 +216,109 @@ export const EditorHeader = (props: EditorHeaderProps) => { /> - - {currentApplication ? ( - el.id === applicationId).length > 0 - } - onBlur={(value: string) => - updateApplicationDispatch(applicationId || "", { - name: value, - currentApp: true, - }) - } - /> - ) : null} - {/* {pageName}  */} - - - - {saveStatusIcon} - - - } - /> - + + + {currentApplication ? ( + el.id === applicationId).length > 0 + } + onBlur={(value: string) => + updateApplicationDispatch(applicationId || "", { + name: value, + currentApp: true, + }) } /> - } - canOutsideClickClose={true} - Form={AppInviteUsersForm} - orgId={orgId} - applicationId={applicationId} - title={ - currentApplication ? currentApplication.name : "Share Application" - } - /> - - {pageName}  */} + + + + {saveStatusIcon} + + + } /> - + + } + /> + } + canOutsideClickClose={true} + Form={AppInviteUsersForm} + orgId={orgId} + applicationId={applicationId} + title={ + currentApplication ? currentApplication.name : "Share Application" } - link={getApplicationViewerPageURL(applicationId, pageId)} /> - - + + + + } + /> + + + } + link={getApplicationViewerPageURL(applicationId, pageId)} + /> + + + ); @@ -309,6 +332,7 @@ const mapStateToProps = (state: AppState) => ({ currentApplication: state.ui.applications.currentApplication, isPublishing: getIsPublishingApplication(state), pageId: getCurrentPageId(state), + isInOnboarding: inOnboarding(state), }); const mapDispatchToProps = (dispatch: any) => ({ diff --git a/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx b/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx index d7f89223a4..5d1234d21d 100644 --- a/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx +++ b/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx @@ -97,8 +97,9 @@ export const getPluginGroups = ( datasources: Datasource[], plugins: Plugin[], searchKeyword?: string, + actionPluginMap = ACTION_PLUGIN_MAP, ) => { - return ACTION_PLUGIN_MAP?.map((config?: ActionGroupConfig) => { + return actionPluginMap?.map((config?: ActionGroupConfig) => { if (!config) return null; const entries = actions?.filter( @@ -108,6 +109,7 @@ export const getPluginGroups = ( const filteredPlugins = plugins.filter( plugin => plugin.type === config.type, ); + const filteredPluginIds = filteredPlugins.map(plugin => plugin.id); const filteredDatasources = datasources.filter(datasource => { return filteredPluginIds.includes(datasource.pluginId); diff --git a/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx b/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx new file mode 100644 index 0000000000..9455efbac7 --- /dev/null +++ b/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx @@ -0,0 +1,112 @@ +import React, { useRef, MutableRefObject, useCallback, useEffect } from "react"; +import styled from "styled-components"; +import Divider from "components/editorComponents/Divider"; +import { + useFilteredEntities, + useWidgets, + useActions, + useFilteredDatasources, +} from "./hooks"; +import Search from "./ExplorerSearch"; +import ExplorerPageGroup from "./Pages/PageGroup"; +import { scrollbarDark } from "constants/DefaultTheme"; +import { NonIdealState, Classes, IPanelProps } from "@blueprintjs/core"; +import WidgetSidebar from "../WidgetSidebar"; +import { BUILDER_PAGE_URL } from "constants/routes"; +import history from "utils/history"; +import { useParams } from "react-router"; +import { ExplorerURLParams } from "./helpers"; +import JSDependencies from "./JSDependencies"; +import PerformanceTracker, { + PerformanceTransactionName, +} from "utils/PerformanceTracker"; +import { useSelector } from "react-redux"; +import { getPlugins } from "selectors/entitiesSelector"; + +const Wrapper = styled.div` + height: 100%; + overflow-y: scroll; + ${scrollbarDark}; +`; + +const NoResult = styled(NonIdealState)` + &.${Classes.NON_IDEAL_STATE} { + height: auto; + } +`; + +const StyledDivider = styled(Divider)` + border-bottom-color: rgba(255, 255, 255, 0.1); +`; + +const EntityExplorer = (props: IPanelProps) => { + const { applicationId } = useParams(); + const searchInputRef: MutableRefObject = useRef( + null, + ); + PerformanceTracker.startTracking(PerformanceTransactionName.ENTITY_EXPLORER); + useEffect(() => { + PerformanceTracker.stopTracking(); + }); + const explorerRef = useRef(null); + const { searchKeyword, clearSearch } = useFilteredEntities(searchInputRef); + const datasources = useFilteredDatasources(searchKeyword); + + const plugins = useSelector(getPlugins); + + const widgets = useWidgets(searchKeyword); + const actions = useActions(searchKeyword); + + let noResults = false; + if (searchKeyword) { + const noWidgets = Object.values(widgets).filter(Boolean).length === 0; + const noActions = + Object.values(actions).filter(actions => actions && actions.length > 0) + .length === 0; + const noDatasource = + Object.values(datasources).filter( + datasources => datasources && datasources.length > 0, + ).length === 0; + noResults = noWidgets && noActions && noDatasource; + } + const { openPanel } = props; + const showWidgetsSidebar = useCallback( + (pageId: string) => { + history.push(BUILDER_PAGE_URL(applicationId, pageId)); + openPanel({ component: WidgetSidebar }); + }, + [openPanel, applicationId], + ); + return ( + + + + {noResults && ( + + )} + + + + ); +}; + +EntityExplorer.displayName = "EntityExplorer"; + +EntityExplorer.whyDidYouRender = { + logOnDifferentValues: false, +}; + +export default EntityExplorer; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx new file mode 100644 index 0000000000..657f28efd6 --- /dev/null +++ b/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx @@ -0,0 +1,57 @@ +import { PluginType } from "entities/Action"; +import React from "react"; +import { useSelector } from "react-redux"; +import { AppState } from "reducers"; +import { getPlugins } from "selectors/entitiesSelector"; +import styled from "styled-components"; +import { getPluginGroups, ACTION_PLUGIN_MAP } from "../Actions/helpers"; +import { useActions, useFilteredDatasources } from "../hooks"; + +const AddWidget = styled.button` + margin: 25px 0px; + padding: 6px 38px; + background-color: transparent; + border: 1px solid #f3672a; + color: #f3672a; + font-weight: bold; + cursor: pointer; +`; + +const Wrapper = styled.div` + display: flex; + justify-content: center; +`; + +const DBQueryGroup = (props: any) => { + const pages = useSelector((state: AppState) => { + return state.entities.pageList.pages; + }); + const currentPage = pages[0]; + const actions = useActions(""); + const datasources = useFilteredDatasources(""); + const plugins = useSelector(getPlugins); + const dbPluginMap = ACTION_PLUGIN_MAP.filter( + plugin => plugin?.type === PluginType.DB, + ); + + return ( + <> + + + Add Widget + + + {getPluginGroups( + currentPage, + 0, + actions[currentPage.pageId] || [], + datasources[currentPage.pageId] || [], + plugins, + "", + dbPluginMap, + )} + + ); +}; + +export default DBQueryGroup; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx new file mode 100644 index 0000000000..60c57dd272 --- /dev/null +++ b/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx @@ -0,0 +1,21 @@ +import React from "react"; +import styled from "styled-components"; +import { Classes } from "@blueprintjs/core"; + +const SkeletonRows = styled.div<{ size: number }>` + height: 20px; + width: ${props => props.size}%; + margin-top: 12px; +`; + +const Loading = () => { + return ( + <> + + + + + ); +}; + +export default Loading; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx new file mode 100644 index 0000000000..60e088ba91 --- /dev/null +++ b/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx @@ -0,0 +1,40 @@ +import React, { useCallback } from "react"; +import styled from "styled-components"; +import { scrollbarDark } from "constants/DefaultTheme"; +import Loading from "./Loading"; +import DBQueryGroup from "./DBQueryGroup"; +import { useSelector } from "react-redux"; +import { AppState } from "reducers"; +import { IPanelProps } from "@blueprintjs/core"; +import { BUILDER_PAGE_URL } from "constants/routes"; +import WidgetSidebar from "pages/Editor/WidgetSidebar"; +import { useParams } from "react-router"; +import { ExplorerURLParams } from "../helpers"; +import history from "utils/history"; + +const Wrapper = styled.div` + height: 100%; + overflow-y: scroll; + ${scrollbarDark}; +`; + +const OnboardingExplorer = (props: IPanelProps) => { + let node = ; + const { applicationId, pageId } = useParams(); + const { openPanel } = props; + const showWidgetsSidebar = useCallback(() => { + history.push(BUILDER_PAGE_URL(applicationId, pageId)); + openPanel({ component: WidgetSidebar }); + }, [openPanel, applicationId, pageId]); + + const createdDBQuery = useSelector( + (state: AppState) => state.ui.onBoarding.createdDBQuery, + ); + if (createdDBQuery) { + node = ; + } + + return {node}; +}; + +export default OnboardingExplorer; diff --git a/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx b/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx index 2df18e8ff1..039e7f3c44 100644 --- a/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx +++ b/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx @@ -12,6 +12,8 @@ import ExplorerDatasourceEntity from "../Datasources/DatasourceEntity"; import Entity from "../Entity"; import EntityPlaceholder from "../Entity/Placeholder"; import { ExplorerURLParams } from "../helpers"; +import OnboardingTooltip from "components/editorComponents/Onboarding/Tooltip"; +import { OnboardingStep } from "constants/OnboardingConstants"; type ExplorerPluginGroupProps = { step: number; @@ -82,16 +84,21 @@ const ExplorerPluginGroup = memo((props: ExplorerPluginGroupProps) => { config={props.actionConfig} plugins={pluginGroups} /> - {props.datasources.map((datasource: Datasource) => { + {props.datasources.map((datasource: Datasource, index: number) => { return ( - + show={index === 0} + > + + ); })} diff --git a/app/client/src/pages/Editor/Explorer/index.tsx b/app/client/src/pages/Editor/Explorer/index.tsx index 126d2c7dac..24299d13ee 100644 --- a/app/client/src/pages/Editor/Explorer/index.tsx +++ b/app/client/src/pages/Editor/Explorer/index.tsx @@ -1,112 +1,19 @@ -import React, { useRef, MutableRefObject, useCallback, useEffect } from "react"; -import styled from "styled-components"; -import Divider from "components/editorComponents/Divider"; -import { - useFilteredEntities, - useWidgets, - useActions, - useFilteredDatasources, -} from "./hooks"; -import Search from "./ExplorerSearch"; -import ExplorerPageGroup from "./Pages/PageGroup"; -import { scrollbarDark } from "constants/DefaultTheme"; -import { NonIdealState, Classes, IPanelProps } from "@blueprintjs/core"; -import WidgetSidebar from "../WidgetSidebar"; -import { BUILDER_PAGE_URL } from "constants/routes"; -import history from "utils/history"; -import { useParams } from "react-router"; -import { ExplorerURLParams } from "./helpers"; -import JSDependencies from "./JSDependencies"; -import PerformanceTracker, { - PerformanceTransactionName, -} from "utils/PerformanceTracker"; +import { IPanelProps } from "@blueprintjs/core"; +import React from "react"; import { useSelector } from "react-redux"; -import { getPlugins } from "selectors/entitiesSelector"; +import { inOnboarding, isAddWidgetComplete } from "sagas/OnboardingSagas"; +import EntityExplorer from "./EntityExplorer"; +import OnboardingExplorer from "./Onboarding"; -const Wrapper = styled.div` - height: 100%; - overflow-y: scroll; - ${scrollbarDark}; -`; +const ExplorerContent = (props: IPanelProps) => { + const isInOnboarding = useSelector(inOnboarding); + const addWidgetComplete = useSelector(isAddWidgetComplete); -const NoResult = styled(NonIdealState)` - &.${Classes.NON_IDEAL_STATE} { - height: auto; + if (isInOnboarding && !addWidgetComplete) { + return ; } -`; -const StyledDivider = styled(Divider)` - border-bottom-color: rgba(255, 255, 255, 0.1); -`; - -const EntityExplorer = (props: IPanelProps) => { - const { applicationId, pageId } = useParams(); - const searchInputRef: MutableRefObject = useRef( - null, - ); - PerformanceTracker.startTracking(PerformanceTransactionName.ENTITY_EXPLORER); - useEffect(() => { - PerformanceTracker.stopTracking(); - }); - const explorerRef = useRef(null); - const { searchKeyword, clearSearch } = useFilteredEntities(searchInputRef); - const datasources = useFilteredDatasources(searchKeyword); - - const plugins = useSelector(getPlugins); - - const widgets = useWidgets(searchKeyword); - const actions = useActions(searchKeyword); - - let noResults = false; - if (searchKeyword) { - const noWidgets = Object.values(widgets).filter(Boolean).length === 0; - const noActions = - Object.values(actions).filter(actions => actions && actions.length > 0) - .length === 0; - const noDatasource = - Object.values(datasources).filter( - datasources => datasources && datasources.length > 0, - ).length === 0; - noResults = noWidgets && noActions && noDatasource; - } - const { openPanel } = props; - const showWidgetsSidebar = useCallback( - (pageId: string) => { - history.push(BUILDER_PAGE_URL(applicationId, pageId)); - openPanel({ component: WidgetSidebar }); - }, - [openPanel, applicationId], - ); - return ( - - - - {noResults && ( - - )} - - - - ); + return ; }; -EntityExplorer.displayName = "EntityExplorer"; - -EntityExplorer.whyDidYouRender = { - logOnDifferentValues: false, -}; - -export default EntityExplorer; +export default ExplorerContent; diff --git a/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx b/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx index a6b6a02d62..4c93e8e4a1 100644 --- a/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx +++ b/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx @@ -15,6 +15,9 @@ import { isPathADynamicProperty, isPathADynamicTrigger, } from "../../../utils/DynamicBindingUtils"; +import OnboardingToolTip from "components/editorComponents/Onboarding/Tooltip"; +import { Position } from "@blueprintjs/core"; +import { OnboardingStep } from "constants/OnboardingConstants"; type Props = { widgetProperties: WidgetProps; @@ -113,13 +116,22 @@ const PropertyControl = (props: Props) => { )} - {PropertyControlFactory.createControl( - config, - { - onPropertyChange: onPropertyChange, - }, - isDynamic, - )} + + {PropertyControlFactory.createControl( + config, + { + onPropertyChange: onPropertyChange, + }, + isDynamic, + )} + ); } catch (e) { diff --git a/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx b/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx index ba3b059b70..ce7b4c826f 100644 --- a/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx +++ b/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx @@ -84,7 +84,7 @@ class TemplateMenu extends React.Component { onClick={() => createTemplate("")} >
- Press enter to start with a blank state or select a template. + Click here to start with a blank state or select a template.
{Object.entries(pluginTemplates).map(template => { diff --git a/app/client/src/pages/Editor/Welcome.tsx b/app/client/src/pages/Editor/Welcome.tsx new file mode 100644 index 0000000000..87aab31fc8 --- /dev/null +++ b/app/client/src/pages/Editor/Welcome.tsx @@ -0,0 +1,139 @@ +import React from "react"; +import styled from "styled-components"; +import { useDispatch, useSelector } from "react-redux"; +import Spinner from "components/ads/Spinner"; +import { Classes } from "components/ads/common"; +import { AppState } from "reducers"; +import { endOnboarding, setCurrentStep } from "actions/onboardingActions"; + +const Wrapper = styled.div` + height: 100%; + padding: 85px 55px; + flex: 1; + display: flex; +`; + +const Container = styled.div` + align-self: stretch; + flex: 1; + display: flex; + background-color: white; + flex-direction: column; + justify-content: space-between; + align-items: center; + padding: 80px 0px; +`; + +const WelcomeText = styled.div` + font-size: 36px; + font-weight: bold; + color: #090707; + text-align: center; +`; + +const Description = styled.div` + font-size: 17px; + color: #716e6e; + margin-top: 16px; + text-align: center; +`; + +const NotNewUserText = styled.span` + color: #716e6e; + margin-top: 24px; + text-align: center; + + span { + color: #457ae6; + cursor: pointer; + } +`; + +const StyledButton = styled.button` + color: white; + background-color: #f3672a; + font-weight: bold; + font-size: 17px; + padding: 12px 24px; + border: none; + cursor: pointer; +`; + +const LoadingContainer = styled(Container)` + justify-content: center; + padding: 0px; + + .${Classes.SPINNER} { + width: 43px; + height: 43px; + + circle { + stroke: #f3672a; + } + } + + span { + font-size: 17px; + margin-top: 23px; + } +`; + +const Welcome = () => { + const dispatch = useDispatch(); + const creatingDatabase = useSelector( + (state: AppState) => state.ui.onBoarding.creatingDatabase, + ); + + if (creatingDatabase) { + return ( + + + + Creating Example Database + + + ); + } + + return ( + + +
+ + + 👋 + {" "} + Welcome + + + Appsmith helps you build quality internal tools, fast! + +
+
+ { + dispatch(setCurrentStep(1)); + }} + > + Explore Appsmith + + + Not your first time with Appsmith?{" "} + dispatch(endOnboarding())}> + Skip this tutorial + + +
+
+
+ ); +}; + +export default Welcome; diff --git a/app/client/src/pages/Editor/WidgetSidebar.tsx b/app/client/src/pages/Editor/WidgetSidebar.tsx index c97a579d59..4441dbad24 100644 --- a/app/client/src/pages/Editor/WidgetSidebar.tsx +++ b/app/client/src/pages/Editor/WidgetSidebar.tsx @@ -11,6 +11,8 @@ import ExplorerSearch from "./Explorer/ExplorerSearch"; import { debounce } from "lodash"; import produce from "immer"; import { WIDGET_SIDEBAR_CAPTION } from "constants/messages"; +import Boxed from "components/editorComponents/Onboarding/Boxed"; +import { OnboardingStep } from "constants/OnboardingConstants"; const MainWrapper = styled.div` text-transform: capitalize; @@ -143,10 +145,18 @@ const WidgetSidebar = (props: IPanelProps) => { {groups.map((group: string) => ( -
{group}
+ +
{group}
+
{filteredCards[group].map((card: WidgetCardProps) => ( - + + + ))}
diff --git a/app/client/src/pages/Editor/WidgetsEditor.tsx b/app/client/src/pages/Editor/WidgetsEditor.tsx index 31ea92a4e4..13c0e16d96 100644 --- a/app/client/src/pages/Editor/WidgetsEditor.tsx +++ b/app/client/src/pages/Editor/WidgetsEditor.tsx @@ -2,6 +2,7 @@ import React, { useEffect, ReactNode, useCallback } from "react"; import { useSelector, useDispatch } from "react-redux"; import styled from "styled-components"; import Canvas from "./Canvas"; +import Welcome from "./Welcome"; import { getIsFetchingPage, getCurrentPageId, @@ -21,6 +22,7 @@ import { fetchPage } from "actions/pageActions"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; +import { AppState } from "reducers"; import { getCurrentApplication } from "selectors/applicationSelectors"; const EditorWrapper = styled.div` @@ -60,6 +62,9 @@ const WidgetsEditor = () => { const currentPageId = useSelector(getCurrentPageId); const currentPageName = useSelector(getCurrentPageName); const currentApp = useSelector(getCurrentApplication); + const showWelcomeScreen = useSelector( + (state: AppState) => state.ui.onBoarding.showWelcomeScreen, + ); useEffect(() => { PerformanceTracker.stopTracking(PerformanceTransactionName.EDITOR_MOUNT); @@ -112,6 +117,11 @@ const WidgetsEditor = () => { if (!isFetchingPage && widgets) { node = ; } + + if (showWelcomeScreen) { + return ; + } + log.debug("Canvas rendered"); PerformanceTracker.stopTracking(); return ( diff --git a/app/client/src/pages/Editor/index.tsx b/app/client/src/pages/Editor/index.tsx index 07924eae7c..b404b3f339 100644 --- a/app/client/src/pages/Editor/index.tsx +++ b/app/client/src/pages/Editor/index.tsx @@ -2,10 +2,7 @@ import React, { Component } from "react"; import { Helmet } from "react-helmet"; import { connect } from "react-redux"; import { RouteComponentProps, withRouter } from "react-router-dom"; -import { - BuilderRouteParams, - getApplicationViewerPageURL, -} from "constants/routes"; +import { BuilderRouteParams } from "constants/routes"; import { AppState } from "reducers"; import MainContainer from "./MainContainer"; import { DndProvider } from "react-dnd"; @@ -18,14 +15,7 @@ import { getIsPublishingApplication, getPublishingError, } from "selectors/editorSelectors"; -import { - AnchorButton, - Classes, - Dialog, - Hotkey, - Hotkeys, - Spinner, -} from "@blueprintjs/core"; +import { Hotkey, Hotkeys, Spinner } from "@blueprintjs/core"; import { HotkeysTarget } from "@blueprintjs/core/lib/esnext/components/hotkeys/hotkeysTarget.js"; import { initEditor } from "actions/initActions"; import { editorInitializer } from "utils/EditorUtils"; @@ -90,7 +80,7 @@ class Editor extends Component { combo="mod + c" label="Copy Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { this.props.copySelectedWidget(); }} preventDefault @@ -101,7 +91,7 @@ class Editor extends Component { combo="mod + v" label="Paste Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { this.props.pasteCopiedWidget(); }} preventDefault @@ -112,7 +102,7 @@ class Editor extends Component { combo="del" label="Delete Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { if (!isMac()) this.props.deleteSelectedWidget(); }} preventDefault @@ -123,7 +113,7 @@ class Editor extends Component { combo="backspace" label="Delete Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { if (isMac()) this.props.deleteSelectedWidget(); }} preventDefault @@ -134,7 +124,7 @@ class Editor extends Component { combo="del" label="Delete Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { this.props.deleteSelectedWidget(); }} preventDefault @@ -145,7 +135,7 @@ class Editor extends Component { combo="mod + x" label="Cut Widget" group="Canvas" - onKeyDown={(e: any) => { + onKeyDown={() => { this.props.cutSelectedWidget(); }} preventDefault @@ -155,7 +145,6 @@ class Editor extends Component { ); } public state = { - isDialogOpen: false, registered: false, }; @@ -168,21 +157,8 @@ class Editor extends Component { this.props.initEditor(applicationId, pageId); } } - componentDidUpdate(previously: Props) { - if ( - previously.isPublishing && - !(this.props.isPublishing || this.props.errorPublishing) - ) { - this.setState({ - isDialogOpen: true, - }); - } - } - shouldComponentUpdate( - nextProps: Props, - nextState: { isDialogOpen: boolean; registered: boolean }, - ) { + shouldComponentUpdate(nextProps: Props, nextState: { registered: boolean }) { return ( nextProps.currentPageId !== this.props.currentPageId || nextProps.currentApplicationId !== this.props.currentApplicationId || @@ -192,16 +168,10 @@ class Editor extends Component { nextProps.errorPublishing !== this.props.errorPublishing || nextProps.isEditorInitializeError !== this.props.isEditorInitializeError || - nextState.isDialogOpen !== this.state.isDialogOpen || nextState.registered !== this.state.registered ); } - handleDialogClose = () => { - this.setState({ - isDialogOpen: false, - }); - }; public render() { if (!this.props.isEditorInitialized || !this.state.registered) { return ( @@ -223,32 +193,6 @@ class Editor extends Component { Editor | Appsmith - -
-

- {"Your application is now published with the current changes!"} -

-
-
-
- -
-
-
diff --git a/app/client/src/pages/UserAuth/SignUp.tsx b/app/client/src/pages/UserAuth/SignUp.tsx index 8ce7c87a9d..55fde3883f 100644 --- a/app/client/src/pages/UserAuth/SignUp.tsx +++ b/app/client/src/pages/UserAuth/SignUp.tsx @@ -53,6 +53,7 @@ import { AppState } from "reducers"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; +import { setOnboardingState } from "utils/storage"; const { enableGithubOAuth, enableGoogleOAuth, @@ -160,6 +161,7 @@ export const SignUp = (props: SignUpFormProps) => { PerformanceTracker.startTracking( PerformanceTransactionName.SIGN_UP, ); + setOnboardingState(true); }} /> diff --git a/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx b/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx index e32d637cfe..2ec6e6a3c4 100644 --- a/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx +++ b/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx @@ -10,6 +10,7 @@ import { useLocation } from "react-router-dom"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; +import { setOnboardingState } from "utils/storage"; const ThirdPartyAuthWrapper = styled.div` display: flex; @@ -86,6 +87,9 @@ const SocialLoginButton = (props: { let eventName: EventName = "LOGIN_CLICK"; if (props.type === "SIGNUP") { eventName = "SIGNUP_CLICK"; + + // Set onboarding flag on signup + setOnboardingState(true); } PerformanceTracker.startTracking( eventName === "SIGNUP_CLICK" diff --git a/app/client/src/reducers/entityReducers/actionsReducer.tsx b/app/client/src/reducers/entityReducers/actionsReducer.tsx index 798d79c33a..0325f14d11 100644 --- a/app/client/src/reducers/entityReducers/actionsReducer.tsx +++ b/app/client/src/reducers/entityReducers/actionsReducer.tsx @@ -397,6 +397,38 @@ const actionsReducer = createReducer(initialState, { return action; }); }, + [ReduxActionTypes.CREATE_ONBOARDING_ACTION_SUCCESS]: ( + state: ActionDataState, + action: ReduxAction, + ): ActionDataState => + state.map(a => { + if ( + a.config.pageId === action.payload.pageId && + a.config.id === action.payload.name + ) { + return { ...a, config: action.payload }; + } + return a; + }), + [ReduxActionTypes.CREATE_ONBOARDING_ACTION_INIT]: ( + state: ActionDataState, + action: ReduxAction, + ): ActionDataState => + state.concat([ + { + config: { ...action.payload, id: action.payload.name }, + isLoading: false, + }, + ]), + [ReduxActionTypes.CREATE_ONBOARDING_ACTION_ERROR]: ( + state: ActionDataState, + action: ReduxAction, + ): ActionDataState => + state.filter( + a => + a.config.name !== action.payload.name && + a.config.id !== action.payload.name, + ), }); export default actionsReducer; diff --git a/app/client/src/reducers/index.tsx b/app/client/src/reducers/index.tsx index b1fe49e2a0..aed7f0783b 100644 --- a/app/client/src/reducers/index.tsx +++ b/app/client/src/reducers/index.tsx @@ -38,6 +38,7 @@ import { DatasourceNameReduxState } from "./uiReducers/datasourceNameReducer"; import { EvaluatedTreeState } from "./evalutationReducers/treeReducer"; import { EvaluationDependencyState } from "./evalutationReducers/dependencyReducer"; import { PageWidgetsReduxState } from "./uiReducers/pageWidgetsReducer"; +import { OnboardingState } from "./uiReducers/onBoardingReducer"; const appReducer = combineReducers({ entities: entityReducer, @@ -74,6 +75,7 @@ export interface AppState { confirmRunAction: ConfirmRunActionReduxState; datasourceName: DatasourceNameReduxState; theme: ThemeState; + onBoarding: OnboardingState; }; entities: { canvasWidgets: CanvasWidgetsReduxState; diff --git a/app/client/src/reducers/uiReducers/index.tsx b/app/client/src/reducers/uiReducers/index.tsx index d03bb3dea8..876ed06d42 100644 --- a/app/client/src/reducers/uiReducers/index.tsx +++ b/app/client/src/reducers/uiReducers/index.tsx @@ -23,6 +23,7 @@ import themeReducer from "./themeReducer"; import datasourceNameReducer from "./datasourceNameReducer"; import pageCanvasStructureReducer from "./pageCanvasStructure"; import pageWidgetsReducer from "./pageWidgetsReducer"; +import onBoardingReducer from "./onBoardingReducer"; const uiReducer = combineReducers({ widgetSidebar: widgetSidebarReducer, @@ -49,5 +50,6 @@ const uiReducer = combineReducers({ pageWidgets: pageWidgetsReducer, theme: themeReducer, confirmRunAction: confirmRunActionReducer, + onBoarding: onBoardingReducer, }); export default uiReducer; diff --git a/app/client/src/reducers/uiReducers/onBoardingReducer.ts b/app/client/src/reducers/uiReducers/onBoardingReducer.ts new file mode 100644 index 0000000000..e62012889e --- /dev/null +++ b/app/client/src/reducers/uiReducers/onBoardingReducer.ts @@ -0,0 +1,100 @@ +import { OnboardingStep } from "constants/OnboardingConstants"; +import { + ReduxAction, + ReduxActionTypes, + ReduxActionErrorTypes, +} from "constants/ReduxActionConstants"; +import { createReducer } from "utils/AppsmithUtils"; + +const initialState: OnboardingState = { + currentStep: OnboardingStep.NONE, + showWelcomeScreen: false, + creatingDatabase: false, + showCompletionDialog: false, + inOnboarding: false, + createdDBQuery: false, + addedWidget: false, + showingTooltip: OnboardingStep.NONE, +}; + +export interface OnboardingState { + currentStep: OnboardingStep; + showWelcomeScreen: boolean; + creatingDatabase: boolean; + showCompletionDialog: boolean; + inOnboarding: boolean; + createdDBQuery: boolean; + addedWidget: boolean; + // Tooltip is shown when the step matches this value + showingTooltip: OnboardingStep; +} + +const onboardingReducer = createReducer(initialState, { + [ReduxActionTypes.SHOW_WELCOME]: (state: OnboardingState) => { + return { ...state, showWelcomeScreen: true }; + }, + [ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT]: ( + state: OnboardingState, + ) => { + return { ...state, creatingDatabase: true }; + }, + [ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_SUCCESS]: ( + state: OnboardingState, + ) => { + return { + ...state, + creatingDatabase: false, + showWelcomeScreen: false, + createdDBQuery: true, + }; + }, + [ReduxActionErrorTypes.CREATE_ONBOARDING_DBQUERY_ERROR]: ( + state: OnboardingState, + ) => { + return { ...state, creatingDatabase: false }; + }, + [ReduxActionTypes.INCREMENT_STEP]: (state: OnboardingState) => { + return { ...state, currentStep: state.currentStep + 1 }; + }, + [ReduxActionTypes.SET_CURRENT_STEP]: ( + state: OnboardingState, + action: ReduxAction, + ) => { + return { ...state, currentStep: action.payload }; + }, + [ReduxActionTypes.SET_ONBOARDING_STATE]: ( + state: OnboardingState, + action: ReduxAction, + ) => { + return { + ...initialState, + inOnboarding: action.payload, + }; + }, + [ReduxActionTypes.ADD_WIDGET_COMPLETE]: (state: OnboardingState) => { + return { + ...state, + addedWidget: true, + }; + }, + [ReduxActionTypes.SHOW_ONBOARDING_TOOLTIP]: ( + state: OnboardingState, + action: ReduxAction, + ) => { + return { + ...state, + showingTooltip: action.payload, + }; + }, + [ReduxActionTypes.SHOW_ONBOARDING_COMPLETION_DIALOG]: ( + state: OnboardingState, + action: ReduxAction, + ) => { + return { + ...state, + showCompletionDialog: action.payload, + }; + }, +}); + +export default onboardingReducer; diff --git a/app/client/src/sagas/ActionSagas.ts b/app/client/src/sagas/ActionSagas.ts index d17b44bd16..26c9f57d23 100644 --- a/app/client/src/sagas/ActionSagas.ts +++ b/app/client/src/sagas/ActionSagas.ts @@ -67,7 +67,9 @@ import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; -export function* createActionSaga(actionPayload: ReduxAction) { +export function* createActionSaga( + actionPayload: ReduxAction & { eventData: any }>, +) { try { const response: ActionCreateUpdateResponse = yield ActionAPI.createAPI( actionPayload.payload, diff --git a/app/client/src/sagas/ApplicationSagas.tsx b/app/client/src/sagas/ApplicationSagas.tsx index 002d9c7097..781148cce7 100644 --- a/app/client/src/sagas/ApplicationSagas.tsx +++ b/app/client/src/sagas/ApplicationSagas.tsx @@ -26,7 +26,10 @@ import { validateResponse } from "./ErrorSagas"; import { getUserApplicationsOrgsList } from "selectors/applicationSelectors"; import { ApiResponse } from "api/ApiResponses"; import history from "utils/history"; -import { BUILDER_PAGE_URL } from "constants/routes"; +import { + BUILDER_PAGE_URL, + getApplicationViewerPageURL, +} from "constants/routes"; import { AppState } from "reducers"; import { FetchApplicationPayload, @@ -43,6 +46,11 @@ import { Organization } from "constants/orgConstants"; import { Variant } from "components/ads/common"; import { AppIconName } from "components/ads/AppIcon"; import { AppColorCode } from "constants/DefaultTheme"; +import { + getCurrentApplicationId, + getCurrentPageId, +} from "selectors/editorSelectors"; +import { showCompletionDialog } from "./OnboardingSagas"; const getDefaultPageId = ( pages?: ApplicationPagePayload[], @@ -71,6 +79,20 @@ export function* publishApplicationSaga( yield put({ type: ReduxActionTypes.PUBLISH_APPLICATION_SUCCESS, }); + + const applicationId = yield select(getCurrentApplicationId); + const currentPageId = yield select(getCurrentPageId); + let appicationViewPageUrl = getApplicationViewerPageURL( + applicationId, + currentPageId, + ); + + const showOnboardingCompletionDialog = yield select(showCompletionDialog); + if (showOnboardingCompletionDialog) { + appicationViewPageUrl += "?onboardingComplete=true"; + } + + window.open(appicationViewPageUrl, "_blank"); } } catch (error) { yield put({ diff --git a/app/client/src/sagas/OnboardingSagas.ts b/app/client/src/sagas/OnboardingSagas.ts new file mode 100644 index 0000000000..a5b95d7a7b --- /dev/null +++ b/app/client/src/sagas/OnboardingSagas.ts @@ -0,0 +1,343 @@ +import { GenericApiResponse } from "api/ApiResponses"; +import DatasourcesApi, { Datasource } from "api/DatasourcesApi"; +import { Plugin } from "api/PluginApi"; +import { + ReduxActionErrorTypes, + ReduxActionTypes, +} from "constants/ReduxActionConstants"; +import { AppState } from "reducers"; +import { all, delay, put, select, take, takeEvery } from "redux-saga/effects"; +import { getCurrentPageId } from "selectors/editorSelectors"; +import { getDatasources, getPlugins } from "selectors/entitiesSelector"; +import { getDataTree } from "selectors/dataTreeSelectors"; +import { getCurrentOrgId } from "selectors/organizationSelectors"; +import { getOnboardingState, setOnboardingState } from "utils/storage"; +import { validateResponse } from "./ErrorSagas"; +import { getSelectedWidget } from "./selectors"; +import ActionAPI, { + ActionApiResponse, + ActionCreateUpdateResponse, +} from "api/ActionAPI"; +import { + createOnboardingActionInit, + createOnboardingActionSuccess, + setCurrentStep, + setOnboardingState as setOnboardingReduxState, + showTooltip, +} from "actions/onboardingActions"; +import { + changeDatasource, + expandDatasourceEntity, +} from "actions/datasourceActions"; +import { playOnboardingAnimation } from "utils/helpers"; +import { QueryAction } from "entities/Action"; +import { getActionTimeout } from "./ActionExecutionSagas"; +import { + OnboardingConfig, + OnboardingStep, +} from "constants/OnboardingConstants"; +import AnalyticsUtil from "../utils/AnalyticsUtil"; + +export const getCurrentStep = (state: AppState) => + state.ui.onBoarding.currentStep; +export const inOnboarding = (state: AppState) => + state.ui.onBoarding.inOnboarding; +export const isAddWidgetComplete = (state: AppState) => + state.ui.onBoarding.addedWidget; +export const getTooltipConfig = (state: AppState) => { + const currentStep = getCurrentStep(state); + if (currentStep >= 0) { + return OnboardingConfig[currentStep].tooltip; + } + + return OnboardingConfig[OnboardingStep.NONE].tooltip; +}; +export const showCompletionDialog = (state: AppState) => { + const isInOnboarding = inOnboarding(state); + const currentStep = getCurrentStep(state); + + return isInOnboarding && currentStep === OnboardingStep.DEPLOY; +}; + +function* listenForWidgetAdditions() { + while (true) { + yield take(); + const { payload } = yield take("WIDGET_ADD_CHILD"); + + if (payload.type === "TABLE_WIDGET") { + yield put(setCurrentStep(OnboardingStep.ADD_WIDGET)); + yield put({ + type: ReduxActionTypes.ADD_WIDGET_COMPLETE, + }); + yield put(showTooltip(OnboardingStep.ADD_WIDGET)); + + return; + } + } +} + +function* listenForSuccessfullBinding() { + while (true) { + yield take(); + + let bindSuccessfull = true; + const selectedWidget = yield select(getSelectedWidget); + if (selectedWidget && selectedWidget.type === "TABLE_WIDGET") { + const dataTree = yield select(getDataTree); + + if (dataTree[selectedWidget.widgetName]) { + const widgetProperties = dataTree[selectedWidget.widgetName]; + const dynamicBindingPathList = + dataTree[selectedWidget.widgetName].dynamicBindingPathList; + const hasBinding = !!dynamicBindingPathList.length; + + if (hasBinding) { + yield put(showTooltip(OnboardingStep.NONE)); + } + + bindSuccessfull = bindSuccessfull && hasBinding; + + if (widgetProperties.invalidProps) { + bindSuccessfull = + bindSuccessfull && !("tableData" in widgetProperties.invalidProps); + } + + if (bindSuccessfull) { + yield put(setCurrentStep(OnboardingStep.SUCCESSFUL_BINDING)); + + // Show tooltip now + yield put(showTooltip(OnboardingStep.SUCCESSFUL_BINDING)); + yield delay(1000); + playOnboardingAnimation(); + + return; + } + } + } + } +} + +function* hideDatabaseTooltip() { + yield take([ReduxActionTypes.QUERY_PANE_CHANGE]); + + yield put(showTooltip(OnboardingStep.NONE)); +} + +function* createOnboardingDatasource() { + try { + const organizationId = yield select(getCurrentOrgId); + const plugins = yield select(getPlugins); + const postgresPlugin = plugins.find( + (plugin: Plugin) => plugin.name === "PostgreSQL", + ); + const datasources: Datasource[] = yield select(getDatasources); + let onboardingDatasource = datasources.find( + datasource => datasource.name === "ExampleDatabase", + ); + + if (!onboardingDatasource) { + const datasourceConfig: any = { + pluginId: postgresPlugin.id, + name: "ExampleDatabase", + organizationId, + datasourceConfiguration: { + endpoints: [ + { + host: "fake-api.cvuydmurdlas.us-east-1.rds.amazonaws.com", + port: 5432, + }, + ], + authentication: { + databaseName: "fakeapi", + username: "fakeapi", + password: "LimitedAccess123#", + }, + }, + }; + + const datasourceResponse: GenericApiResponse = yield DatasourcesApi.createDatasource( + datasourceConfig, + ); + yield validateResponse(datasourceResponse); + yield put({ + type: ReduxActionTypes.CREATE_DATASOURCE_SUCCESS, + payload: datasourceResponse.data, + }); + + onboardingDatasource = datasourceResponse.data; + } + + const currentPageId = yield select(getCurrentPageId); + const queryactionConfiguration: Partial = { + actionConfiguration: { body: "select * from public.users limit 10" }, + }; + const actionPayload = { + name: "ExampleQuery", + pageId: currentPageId, + datasource: { + id: onboardingDatasource.id, + }, + ...queryactionConfiguration, + eventData: {}, + }; + yield put(createOnboardingActionInit(actionPayload)); + const response: ActionCreateUpdateResponse = yield ActionAPI.createAPI( + actionPayload, + ); + + const isValidResponse = yield validateResponse(response); + if (isValidResponse) { + const newAction = { + ...response.data, + datasource: onboardingDatasource, + }; + yield put(expandDatasourceEntity(onboardingDatasource.id)); + + yield put(createOnboardingActionSuccess(newAction)); + + // Run query + const timeout = yield select(getActionTimeout, newAction.id); + const executeActionResponse: ActionApiResponse = yield ActionAPI.executeAction( + { + actionId: newAction.id, + viewMode: false, + }, + timeout, + ); + yield validateResponse(response); + const payload = { + ...executeActionResponse.data, + ...executeActionResponse.clientMeta, + }; + yield put({ + type: ReduxActionTypes.RUN_ACTION_SUCCESS, + payload: { [newAction.id]: payload }, + }); + yield put({ + type: ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_SUCCESS, + }); + + // Navigate to that datasource page + yield put(changeDatasource(onboardingDatasource)); + + yield put(showTooltip(OnboardingStep.EXAMPLE_DATABASE)); + + // Need to hide this tooltip based on some events + yield hideDatabaseTooltip(); + } else { + yield put({ + type: ReduxActionErrorTypes.CREATE_ONBOARDING_ACTION_ERROR, + payload: actionPayload, + }); + } + } catch (error) { + yield put({ + type: ReduxActionErrorTypes.CREATE_ONBOARDING_DBQUERY_ERROR, + payload: { error }, + }); + } +} + +function* listenForWidgetUnselection() { + while (true) { + yield take(); + + yield take(ReduxActionTypes.HIDE_PROPERTY_PANE); + const currentStep = yield select(getCurrentStep); + const isinOnboarding = yield select(inOnboarding); + + if (!isinOnboarding || currentStep !== OnboardingStep.SUCCESSFUL_BINDING) + return; + + yield put(setCurrentStep(OnboardingStep.DEPLOY)); + + yield delay(1000); + yield put(showTooltip(OnboardingStep.DEPLOY)); + return; + } +} + +function* listenForDeploySaga() { + while (true) { + yield take(); + + yield take(ReduxActionTypes.PUBLISH_APPLICATION_SUCCESS); + yield put(showTooltip(OnboardingStep.NONE)); + yield put({ + type: ReduxActionTypes.SHOW_ONBOARDING_COMPLETION_DIALOG, + payload: true, + }); + yield put(setOnboardingReduxState(false)); + + return; + } +} + +function* initiateOnboarding() { + const currentOnboardingState = yield getOnboardingState(); + AnalyticsUtil.logEvent("ONBOARDING_WELCOME"); + if (currentOnboardingState) { + yield put(setOnboardingReduxState(true)); + yield put({ + type: ReduxActionTypes.NEXT_ONBOARDING_STEP, + }); + } +} + +function* proceedOnboardingSaga() { + const isInOnboarding = yield select(inOnboarding); + + if (isInOnboarding) { + yield put({ + type: ReduxActionTypes.INCREMENT_STEP, + }); + + yield setupOnboardingStep(); + } +} + +function* setupOnboardingStep() { + const currentStep: OnboardingStep = yield select(getCurrentStep); + const currentConfig = OnboardingConfig[currentStep]; + if (currentConfig.eventName) { + AnalyticsUtil.logEvent(currentConfig.eventName); + } + let actions = currentConfig.setup(); + + if (actions.length) { + actions = actions.map(action => put(action)); + yield all(actions); + } +} + +function* skipOnboardingSaga() { + AnalyticsUtil.logEvent("END_ONBOARDING"); + const set = yield setOnboardingState(false); + + if (set) { + yield put(setOnboardingReduxState(false)); + } +} + +export default function* onboardingSagas() { + yield all([ + takeEvery(ReduxActionTypes.CREATE_APPLICATION_SUCCESS, initiateOnboarding), + takeEvery( + ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT, + createOnboardingDatasource, + ), + takeEvery(ReduxActionTypes.NEXT_ONBOARDING_STEP, proceedOnboardingSaga), + takeEvery(ReduxActionTypes.END_ONBOARDING, skipOnboardingSaga), + takeEvery(ReduxActionTypes.LISTEN_FOR_ADD_WIDGET, listenForWidgetAdditions), + takeEvery( + ReduxActionTypes.LISTEN_FOR_TABLE_WIDGET_BINDING, + listenForSuccessfullBinding, + ), + takeEvery( + ReduxActionTypes.LISTEN_FOR_WIDGET_UNSELECTION, + listenForWidgetUnselection, + ), + takeEvery(ReduxActionTypes.SET_CURRENT_STEP, setupOnboardingStep), + takeEvery(ReduxActionTypes.LISTEN_FOR_DEPLOY, listenForDeploySaga), + ]); +} diff --git a/app/client/src/sagas/index.tsx b/app/client/src/sagas/index.tsx index bcbf8ed014..fcf5751021 100644 --- a/app/client/src/sagas/index.tsx +++ b/app/client/src/sagas/index.tsx @@ -20,6 +20,8 @@ import modalSagas from "./ModalSagas"; import batchSagas from "./BatchSagas"; import themeSagas from "./ThemeSaga"; import evaluationsSaga from "./evaluationsSaga"; +import onboardingSaga from "./OnboardingSagas"; + import log from "loglevel"; import * as sentry from "@sentry/react"; @@ -46,6 +48,7 @@ export function* rootSaga() { batchSagas, themeSagas, evaluationsSaga, + onboardingSaga, ]; yield all( sagas.map(saga => diff --git a/app/client/src/selectors/entitiesSelector.ts b/app/client/src/selectors/entitiesSelector.ts index be0ca0a4ea..39ae0f4811 100644 --- a/app/client/src/selectors/entitiesSelector.ts +++ b/app/client/src/selectors/entitiesSelector.ts @@ -15,6 +15,10 @@ import { CanvasWidgetsReduxState } from "../reducers/entityReducers/canvasWidget export const getEntities = (state: AppState): AppState["entities"] => state.entities; +export const getDatasources = (state: AppState): Datasource[] => { + return state.entities.datasources.list; +}; + export const getPluginIdsOfNames = ( state: AppState, names: Array, diff --git a/app/client/src/utils/AnalyticsUtil.tsx b/app/client/src/utils/AnalyticsUtil.tsx index 9ddd7a1d16..b0fc677eee 100644 --- a/app/client/src/utils/AnalyticsUtil.tsx +++ b/app/client/src/utils/AnalyticsUtil.tsx @@ -87,7 +87,13 @@ export type EventName = | "ROUTE_CHANGE" | "PROPERTY_PANE_CLOSE_CLICK" | "APPLICATIONS_PAGE_LOAD" - | "EXECUTE_ACTION"; + | "EXECUTE_ACTION" + | "ONBOARDING_WELCOME" + | "ONBOARDING_EXAMPLE_DATABASE" + | "ONBOARDING_ADD_WIDGET" + | "ONBOARDING_SUCCESSFUL_BINDING" + | "ONBOARDING_DEPLOY" + | "END_ONBOARDING"; function getApplicationId(location: Location) { const pathSplit = location.pathname.split("/"); @@ -203,6 +209,7 @@ class AnalyticsUtil { userData: user.userId === ANONYMOUS_USERNAME ? undefined : user, }; } + if (windowDoc.analytics) { log.debug("Event fired", eventName, finalEventData); windowDoc.analytics.track(eventName, finalEventData); diff --git a/app/client/src/utils/helpers.tsx b/app/client/src/utils/helpers.tsx index 6fd8462963..0ed83eb005 100644 --- a/app/client/src/utils/helpers.tsx +++ b/app/client/src/utils/helpers.tsx @@ -1,4 +1,6 @@ import { GridDefaults } from "constants/WidgetConstants"; +import lottie from "lottie-web"; +import confetti from "assets/lottie/confetti.json"; import { DATA_TREE_KEYWORDS, JAVASCRIPT_KEYWORDS, @@ -191,3 +193,34 @@ export const isNameValid = ( name in invalidNames ); }; + +export const playOnboardingAnimation = () => { + const container: Element = document.getElementById("root") as Element; + + const el = document.createElement("div"); + Object.assign(el.style, { + position: "absolute", + left: 0, + right: 0, + top: 0, + bottom: 0, + "z-index": 99, + width: "100%", + height: "100%", + }); + + container.appendChild(el); + + const animObj = lottie.loadAnimation({ + container: el, + animationData: confetti, + loop: false, + }); + const duration = (animObj.totalFrames / animObj.frameRate) * 1000; + + animObj.play(); + + setTimeout(() => { + container.removeChild(el); + }, duration); +}; diff --git a/app/client/src/utils/storage.ts b/app/client/src/utils/storage.ts index c7323cd570..c0dd07489e 100644 --- a/app/client/src/utils/storage.ts +++ b/app/client/src/utils/storage.ts @@ -6,6 +6,7 @@ const STORAGE_KEYS: { [id: string]: string } = { ROUTE_BEFORE_LOGIN: "RedirectPath", COPIED_WIDGET: "CopiedWidget", DELETED_WIDGET_PREFIX: "DeletedWidget-", + ONBOARDING_STATE: "OnboardingState", }; const store = localforage.createInstance({ @@ -91,3 +92,22 @@ export const flushDeletedWidgets = async (widgetId: string) => { console.log("An error occurred when flushing deleted widgets: ", error); } }; + +export const setOnboardingState = async (onboardingState: boolean) => { + try { + await store.setItem(STORAGE_KEYS.ONBOARDING_STATE, onboardingState); + return true; + } catch (error) { + console.log("An error occurred when setting onboarding state: ", error); + return false; + } +}; + +export const getOnboardingState = async () => { + try { + const onboardingState = await store.getItem(STORAGE_KEYS.ONBOARDING_STATE); + return onboardingState; + } catch (error) { + console.log("An error occurred when getting onboarding state: ", error); + } +}; diff --git a/app/client/yarn.lock b/app/client/yarn.lock index 624f33e174..993210a1fd 100644 --- a/app/client/yarn.lock +++ b/app/client/yarn.lock @@ -12492,6 +12492,11 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" +lottie-web@^5.7.4: + version "5.7.4" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.7.4.tgz#3b252148e904a0aa9833879ffb64924c85a0888c" + integrity sha512-LxqhXlHnHXOPmu+o2ipFKGv42jZLmn/GiEwXP0YC331fFwa+y96OUV22OF9r4i29uWKDciXiJr8tzy6jL8KygA== + loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" From 5e04ca5c9d9718d32d5448125713f920c68aa105 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Fri, 18 Dec 2020 20:45:08 +0530 Subject: [PATCH 06/19] Add ability to configure order of templates of plugins (#2279) --- .../src/main/resources/templates/meta.json | 16 ++++++ .../src/main/resources/templates/meta.json | 16 ++++++ .../src/main/resources/templates/meta.json | 16 ++++++ .../src/main/resources/templates/meta.json | 16 ++++++ .../server/services/PluginServiceImpl.java | 53 +++++++++++++------ 5 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 app/server/appsmith-plugins/mongoPlugin/src/main/resources/templates/meta.json create mode 100644 app/server/appsmith-plugins/mssqlPlugin/src/main/resources/templates/meta.json create mode 100644 app/server/appsmith-plugins/mysqlPlugin/src/main/resources/templates/meta.json create mode 100644 app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json diff --git a/app/server/appsmith-plugins/mongoPlugin/src/main/resources/templates/meta.json b/app/server/appsmith-plugins/mongoPlugin/src/main/resources/templates/meta.json new file mode 100644 index 0000000000..833afaa6ea --- /dev/null +++ b/app/server/appsmith-plugins/mongoPlugin/src/main/resources/templates/meta.json @@ -0,0 +1,16 @@ +{ + "templates": [ + { + "file": "CREATE.json" + }, + { + "file": "READ.json" + }, + { + "file": "UPDATE.json" + }, + { + "file": "DELETE.json" + } + ] +} diff --git a/app/server/appsmith-plugins/mssqlPlugin/src/main/resources/templates/meta.json b/app/server/appsmith-plugins/mssqlPlugin/src/main/resources/templates/meta.json new file mode 100644 index 0000000000..b05a592845 --- /dev/null +++ b/app/server/appsmith-plugins/mssqlPlugin/src/main/resources/templates/meta.json @@ -0,0 +1,16 @@ +{ + "templates": [ + { + "file": "CREATE.sql" + }, + { + "file": "SELECT.sql" + }, + { + "file": "UPDATE.sql" + }, + { + "file": "DELETE.sql" + } + ] +} diff --git a/app/server/appsmith-plugins/mysqlPlugin/src/main/resources/templates/meta.json b/app/server/appsmith-plugins/mysqlPlugin/src/main/resources/templates/meta.json new file mode 100644 index 0000000000..b05a592845 --- /dev/null +++ b/app/server/appsmith-plugins/mysqlPlugin/src/main/resources/templates/meta.json @@ -0,0 +1,16 @@ +{ + "templates": [ + { + "file": "CREATE.sql" + }, + { + "file": "SELECT.sql" + }, + { + "file": "UPDATE.sql" + }, + { + "file": "DELETE.sql" + } + ] +} diff --git a/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json b/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json new file mode 100644 index 0000000000..d7b42392fe --- /dev/null +++ b/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json @@ -0,0 +1,16 @@ +{ + "templates": [ + { + "filename": "CREATE.sql" + }, + { + "filename": "SELECT.sql" + }, + { + "filename": "UPDATE.sql" + }, + { + "filename": "DELETE.sql" + } + ] +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java index 47e421d18f..b4c15aecbd 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java @@ -13,6 +13,7 @@ import com.appsmith.server.exceptions.AppsmithException; import com.appsmith.server.repositories.PluginRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.pf4j.PluginManager; @@ -28,6 +29,7 @@ import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.util.StreamUtils; +import org.springframework.util.StringUtils; import reactor.core.Exceptions; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -44,6 +46,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -336,9 +339,13 @@ public class PluginServiceImpl extends BaseService new AppsmithException( - AppsmithError.PLUGIN_LOAD_TEMPLATES_FAIL, Exceptions.unwrap(throwable).getMessage()) - ) + .onErrorMap(throwable -> { + log.error("Error loading templates for plugin {}.", plugin.getPackageName(), throwable); + return new AppsmithException( + AppsmithError.PLUGIN_LOAD_TEMPLATES_FAIL, + Exceptions.unwrap(throwable).getMessage() + ); + }) .cache(); templateCache.put(pluginId, mono); @@ -354,31 +361,36 @@ public class PluginServiceImpl extends BaseService templates = new HashMap<>(); + final Map templates = new LinkedHashMap<>(); - Resource[] resources; + final PluginTemplatesMeta pluginTemplatesMeta; try { - resources = resolver.getResources("templates/*"); + pluginTemplatesMeta = objectMapper.readValue( + resolver.getResource("templates/meta.json").getInputStream(), + PluginTemplatesMeta.class + ); } catch (IOException e) { - log.error("Error resolving templates in plugin for id: " + plugin.getId()); + log.error("Error loading templates metadata in plugin for id: " + plugin.getId()); throw Exceptions.propagate(e); } - for (final Resource resource : resources) { - final String filename = resource.getFilename(); + for (final PluginTemplate template : pluginTemplatesMeta.getTemplates()) { + final Resource resource = resolver.getResource("templates/" + template.getFilename()); try { - final String templateContent = StreamUtils.copyToString( - resource.getInputStream(), Charset.defaultCharset()); - if (filename != null) { - templates.put(filename.replaceFirst("\\.\\w+$", ""), templateContent); - } + templates.put( + StringUtils.isEmpty(template.getTitle()) + ? template.getFilename().replaceFirst("\\.\\w+$", "") + : template.getTitle(), + StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset()) + ); } catch (IOException e) { - log.error("Error loading template {} for plugin {}", filename, plugin.getId()); + log.error("Error loading template {} for plugin {}", template.getFilename(), plugin.getId()); throw Exceptions.propagate(e); } } return templates; + } @Override @@ -403,4 +415,15 @@ public class PluginServiceImpl extends BaseService templates; + } + + @Data + static class PluginTemplate { + String filename; + String title = null; + } } From fdc4f7b200dc215d55dbc9f0f6ade0618470d314 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Sat, 19 Dec 2020 13:00:24 +0530 Subject: [PATCH 07/19] Fix invalid templates and API breaking on invalid templates (#2286) --- .../src/main/resources/templates/meta.json | 8 ++--- .../server/services/PluginServiceImpl.java | 35 ++++++++++++++----- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json b/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json index d7b42392fe..b05a592845 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json +++ b/app/server/appsmith-plugins/postgresPlugin/src/main/resources/templates/meta.json @@ -1,16 +1,16 @@ { "templates": [ { - "filename": "CREATE.sql" + "file": "CREATE.sql" }, { - "filename": "SELECT.sql" + "file": "SELECT.sql" }, { - "filename": "UPDATE.sql" + "file": "UPDATE.sql" }, { - "filename": "DELETE.sql" + "file": "DELETE.sql" } ] } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java index b4c15aecbd..4a3d685625 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/PluginServiceImpl.java @@ -361,36 +361,53 @@ public class PluginServiceImpl extends BaseService templates = new LinkedHashMap<>(); - final PluginTemplatesMeta pluginTemplatesMeta; try { pluginTemplatesMeta = objectMapper.readValue( resolver.getResource("templates/meta.json").getInputStream(), PluginTemplatesMeta.class ); + } catch (IOException e) { log.error("Error loading templates metadata in plugin for id: " + plugin.getId()); throw Exceptions.propagate(e); + } + if (pluginTemplatesMeta.getTemplates() == null) { + log.warn("Missing templates key in plugin templates meta."); + return Collections.emptyMap(); + } + + final Map templates = new LinkedHashMap<>(); + for (final PluginTemplate template : pluginTemplatesMeta.getTemplates()) { - final Resource resource = resolver.getResource("templates/" + template.getFilename()); + final String filename = template.getFile(); + + if (filename == null) { + log.warn("Empty or missing file for a template in plugin {}.", plugin.getPackageName()); + continue; + } + + final Resource resource = resolver.getResource("templates/" + filename); + final String title = StringUtils.isEmpty(template.getTitle()) + ? filename.replaceFirst("\\.\\w+$", "") + : template.getTitle(); + try { templates.put( - StringUtils.isEmpty(template.getTitle()) - ? template.getFilename().replaceFirst("\\.\\w+$", "") - : template.getTitle(), + title, StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset()) ); + } catch (IOException e) { - log.error("Error loading template {} for plugin {}", template.getFilename(), plugin.getId()); + log.error("Error loading template {} for plugin {}", filename, plugin.getId()); throw Exceptions.propagate(e); + } } return templates; - } @Override @@ -423,7 +440,7 @@ public class PluginServiceImpl extends BaseService Date: Mon, 21 Dec 2020 10:41:57 +0530 Subject: [PATCH 08/19] Fixed encryption related bugs for empty/new datasource (#2287) --- .../com/appsmith/external/models/DBAuth.java | 2 +- .../services/DatasourceServiceImpl.java | 4 +- .../services/DatasourceServiceTest.java | 48 +++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java index e25b1d5e5b..8f083d2658 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DBAuth.java @@ -36,7 +36,7 @@ public class DBAuth extends AuthenticationDTO { @Override public Map getEncryptionFields() { - if (this.password != null) { + if (this.password != null && !this.password.isEmpty()) { return Map.of(FieldName.PASSWORD, this.password); } return Map.of(); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java index ff6a6c7f28..63672deb5d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java @@ -242,7 +242,6 @@ public class DatasourceServiceImpl extends BaseService testDatasource(Datasource datasource) { Mono datasourceMono = null; - // Fetch any fields that maybe encrypted from the db if the datasource being tested does not have those fields set. // This scenario would happen whenever an existing datasource is being tested and no changes are present in the // encrypted field (because encrypted fields are not sent over the network after encryption back to the client @@ -257,10 +256,9 @@ public class DatasourceServiceImpl extends BaseService decryptedFields = authentication.getEncryptionFields(); decryptedFields = decryptedFields.entrySet().stream() - .filter(e -> !emptyFields.contains(e.getKey())) .collect(Collectors.toMap( Map.Entry::getKey, e -> encryptionService.decryptString(e.getValue()))); diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java index 3855c9cd1d..9169ef30c9 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java @@ -390,6 +390,54 @@ public class DatasourceServiceTest { .verifyComplete(); } + @Test + @WithUserDetails(value = "api_user") + public void testDatasourceEmptyFields() { + + Datasource datasource = new Datasource(); + datasource.setName("test db datasource empty"); + datasource.setOrganizationId(orgId); + DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); + Connection connection = new Connection(); + connection.setMode(Connection.Mode.READ_ONLY); + connection.setType(Connection.Type.REPLICA_SET); + SSLDetails sslDetails = new SSLDetails(); + sslDetails.setAuthType(SSLDetails.AuthType.CA_CERTIFICATE); + sslDetails.setKeyFile(new UploadedFile("ssl_key_file_id", "")); + sslDetails.setCertificateFile(new UploadedFile("ssl_cert_file_id", "")); + connection.setSsl(sslDetails); + datasourceConfiguration.setConnection(connection); + DBAuth auth = new DBAuth(); + auth.setUsername("test"); + auth.setPassword("test"); + datasourceConfiguration.setAuthentication(auth); + datasource.setDatasourceConfiguration(datasourceConfiguration); + + datasource.setOrganizationId(orgId); + + Mono pluginMono = pluginService.findByName("Installed Plugin Name"); + + Mono datasourceMono = pluginMono.map(plugin -> { + datasource.setPluginId(plugin.getId()); + return datasource; + }).flatMap(datasourceService::create); + + Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(new MockPluginExecutor())); + + Mono testResultMono = datasourceMono.flatMap(datasource1 -> { + ((DBAuth) datasource1.getDatasourceConfiguration().getAuthentication()).setPassword(null); + return datasourceService.testDatasource(datasource1); + }); + + StepVerifier + .create(testResultMono) + .assertNext(testResult -> { + assertThat(testResult).isNotNull(); + assertThat(testResult.getInvalids()).isEmpty(); + }) + .verifyComplete(); + } + @Test @WithUserDetails(value = "api_user") public void deleteDatasourceWithoutActions() { From 5408806bf131bb40d9492a731c1ec38a0d175e1a Mon Sep 17 00:00:00 2001 From: Piyush Mishra Date: Mon, 21 Dec 2020 11:44:20 +0530 Subject: [PATCH 09/19] Do not add objects to the DataTree (#2275) Co-authored-by: Hetu Nandu --- .../Binding/Bind_TableTextPagination_spec.js | 2 +- .../dependencyReducer.ts | 0 .../index.ts | 0 .../treeReducer.ts | 4 +-- app/client/src/reducers/index.tsx | 6 ++-- app/client/src/sagas/ActionExecutionSagas.ts | 31 +++++++++++++++++++ app/client/src/sagas/evaluationsSaga.ts | 5 +-- .../autocomplete/dataTreeTypeDefCreator.ts | 2 +- 8 files changed, 41 insertions(+), 9 deletions(-) rename app/client/src/reducers/{evalutationReducers => evaluationReducers}/dependencyReducer.ts (100%) rename app/client/src/reducers/{evalutationReducers => evaluationReducers}/index.ts (100%) rename app/client/src/reducers/{evalutationReducers => evaluationReducers}/treeReducer.ts (76%) diff --git a/app/client/cypress/integration/Smoke_TestSuite/Binding/Bind_TableTextPagination_spec.js b/app/client/cypress/integration/Smoke_TestSuite/Binding/Bind_TableTextPagination_spec.js index 19b06dddac..072e8d0019 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/Binding/Bind_TableTextPagination_spec.js +++ b/app/client/cypress/integration/Smoke_TestSuite/Binding/Bind_TableTextPagination_spec.js @@ -23,7 +23,7 @@ describe("Test Create Api and Bind to Table widget", function() { /**Bind Table with Textwidget with selected row */ cy.SearchEntityandOpen("Text1"); cy.testJsontext("text", "{{Table1.selectedRow.url}}"); - cy.get(commonlocators.editPropCrossButton).click(); + cy.SearchEntityandOpen("Table1"); cy.readTabledata("0", "0").then(tabData => { const tableData = tabData; localStorage.setItem("tableDataPage1", tableData); diff --git a/app/client/src/reducers/evalutationReducers/dependencyReducer.ts b/app/client/src/reducers/evaluationReducers/dependencyReducer.ts similarity index 100% rename from app/client/src/reducers/evalutationReducers/dependencyReducer.ts rename to app/client/src/reducers/evaluationReducers/dependencyReducer.ts diff --git a/app/client/src/reducers/evalutationReducers/index.ts b/app/client/src/reducers/evaluationReducers/index.ts similarity index 100% rename from app/client/src/reducers/evalutationReducers/index.ts rename to app/client/src/reducers/evaluationReducers/index.ts diff --git a/app/client/src/reducers/evalutationReducers/treeReducer.ts b/app/client/src/reducers/evaluationReducers/treeReducer.ts similarity index 76% rename from app/client/src/reducers/evalutationReducers/treeReducer.ts rename to app/client/src/reducers/evaluationReducers/treeReducer.ts index 1379cc14e2..5c95524c7e 100644 --- a/app/client/src/reducers/evalutationReducers/treeReducer.ts +++ b/app/client/src/reducers/evaluationReducers/treeReducer.ts @@ -1,4 +1,4 @@ -import { createReducer } from "utils/AppsmithUtils"; +import { createImmerReducer } from "utils/AppsmithUtils"; import { DataTree } from "entities/DataTree/dataTreeFactory"; import { ReduxAction, ReduxActionTypes } from "constants/ReduxActionConstants"; @@ -6,7 +6,7 @@ export type EvaluatedTreeState = DataTree; const initialState: EvaluatedTreeState = {}; -const evaluatedTreeReducer = createReducer(initialState, { +const evaluatedTreeReducer = createImmerReducer(initialState, { [ReduxActionTypes.SET_EVALUATED_TREE]: ( state: EvaluatedTreeState, action: ReduxAction, diff --git a/app/client/src/reducers/index.tsx b/app/client/src/reducers/index.tsx index aed7f0783b..1ac0dc4516 100644 --- a/app/client/src/reducers/index.tsx +++ b/app/client/src/reducers/index.tsx @@ -1,7 +1,7 @@ import { combineReducers } from "redux"; import entityReducer from "./entityReducers"; import uiReducer from "./uiReducers"; -import evaluationsReducer from "./evalutationReducers"; +import evaluationsReducer from "./evaluationReducers"; import { reducer as formReducer } from "redux-form"; import { CanvasWidgetsReduxState } from "./entityReducers/canvasWidgetsReducer"; import { EditorReduxState } from "./uiReducers/editorReducer"; @@ -35,8 +35,8 @@ import { PageCanvasStructureReduxState } from "./uiReducers/pageCanvasStructure" import { ConfirmRunActionReduxState } from "./uiReducers/confirmRunActionReducer"; import { AppDataState } from "reducers/entityReducers/appReducer"; import { DatasourceNameReduxState } from "./uiReducers/datasourceNameReducer"; -import { EvaluatedTreeState } from "./evalutationReducers/treeReducer"; -import { EvaluationDependencyState } from "./evalutationReducers/dependencyReducer"; +import { EvaluatedTreeState } from "./evaluationReducers/treeReducer"; +import { EvaluationDependencyState } from "./evaluationReducers/dependencyReducer"; import { PageWidgetsReduxState } from "./uiReducers/pageWidgetsReducer"; import { OnboardingState } from "./uiReducers/onBoardingReducer"; diff --git a/app/client/src/sagas/ActionExecutionSagas.ts b/app/client/src/sagas/ActionExecutionSagas.ts index 8aa9728775..2a9e03cd3f 100644 --- a/app/client/src/sagas/ActionExecutionSagas.ts +++ b/app/client/src/sagas/ActionExecutionSagas.ts @@ -249,11 +249,42 @@ export function* evaluateDynamicBoundValueSaga( const EXECUTION_PARAM_REFERENCE_REGEX = /this.params/g; +/** + * Api1 + * URL: https://example.com/{{Text1.text}} + * Body: { + * "name": "{{this.params.name}}", + * "age": {{this.params.age}}, + * "gender": {{Dropdown1.selectedOptionValue}} + * } + * + * If you call + * Api1.run(undefined, undefined, { name: "Hetu", age: Input1.text }); + * + * executionParams is { name: "Hetu", age: Input1.text } + * bindings is [ + * "Text1.text", + * "Dropdown1.selectedOptionValue", + * "this.params.name", + * "this.params.age", + * ] + * + * Return will be [ + * { key: "Text1.text", value: "updateUser" }, + * { key: "Dropdown1.selectedOptionValue", value: "M" }, + * { key: "this.params.name", value: "Hetu" }, + * { key: "this.params.age", value: 26 }, + * ] + * @param bindings + * @param executionParams + */ export function* getActionParams( bindings: string[] | undefined, executionParams?: Record, ) { if (_.isNil(bindings)) return []; + // This might look like a bug, but isn't. + // We send in stringified executionParams, but get back an object const evaluatedExecutionParams = yield evaluateDynamicBoundValueSaga( JSON.stringify(executionParams), ); diff --git a/app/client/src/sagas/evaluationsSaga.ts b/app/client/src/sagas/evaluationsSaga.ts index c7f7b3cbef..c4bcbc2b34 100644 --- a/app/client/src/sagas/evaluationsSaga.ts +++ b/app/client/src/sagas/evaluationsSaga.ts @@ -117,10 +117,11 @@ export function* evaluateSingleValue( ) { if (evaluationWorker) { const dataTree = yield select(getDataTree); - dataTree[EXECUTION_PARAM_KEY] = executionParams; evaluationWorker.postMessage({ action: EVAL_WORKER_ACTIONS.EVAL_SINGLE, - dataTree, + dataTree: Object.assign({}, dataTree, { + [EXECUTION_PARAM_KEY]: executionParams, + }), binding, }); const workerResponse = yield take(workerChannel); diff --git a/app/client/src/utils/autocomplete/dataTreeTypeDefCreator.ts b/app/client/src/utils/autocomplete/dataTreeTypeDefCreator.ts index c495a92908..b6460ce412 100644 --- a/app/client/src/utils/autocomplete/dataTreeTypeDefCreator.ts +++ b/app/client/src/utils/autocomplete/dataTreeTypeDefCreator.ts @@ -16,7 +16,7 @@ export const dataTreeTypeDefCreator = (dataTree: DataTree) => { }; Object.keys(dataTree).forEach(entityName => { const entity = dataTree[entityName]; - if ("ENTITY_TYPE" in entity) { + if (entity && "ENTITY_TYPE" in entity) { if (entity.ENTITY_TYPE === ENTITY_TYPE.WIDGET) { const widgetType = entity.type; if (widgetType in entityDefinitions) { From 9f0cc2f4bb6d0144eac56494efa4b104a2084905 Mon Sep 17 00:00:00 2001 From: Piyush Mishra Date: Mon, 21 Dec 2020 11:44:50 +0530 Subject: [PATCH 10/19] Wrap Query Table in ErrorBoundary (#2274) --- .../editorComponents/ErrorBoundry.tsx | 6 +- .../src/pages/Editor/QueryEditor/Table.tsx | 97 ++++++++++--------- app/client/src/widgets/BaseWidget.tsx | 14 +-- 3 files changed, 57 insertions(+), 60 deletions(-) diff --git a/app/client/src/components/editorComponents/ErrorBoundry.tsx b/app/client/src/components/editorComponents/ErrorBoundry.tsx index dd3a256695..caaa0cd71d 100644 --- a/app/client/src/components/editorComponents/ErrorBoundry.tsx +++ b/app/client/src/components/editorComponents/ErrorBoundry.tsx @@ -2,10 +2,10 @@ import React, { ReactNode } from "react"; import styled from "styled-components"; import * as Sentry from "@sentry/react"; -type Props = { isValid: boolean; children: ReactNode }; +type Props = { children: ReactNode }; type State = { hasError: boolean }; -const ErrorBoundaryContainer = styled.div<{ isValid: boolean }>` +const ErrorBoundaryContainer = styled.div` height: 100%; width: 100%; @@ -41,7 +41,7 @@ class ErrorBoundary extends React.Component { render() { return ( - + {this.state.hasError ? (

Oops, Something went wrong. diff --git a/app/client/src/pages/Editor/QueryEditor/Table.tsx b/app/client/src/pages/Editor/QueryEditor/Table.tsx index fc2e9b8687..e1c3a1e5fd 100644 --- a/app/client/src/pages/Editor/QueryEditor/Table.tsx +++ b/app/client/src/pages/Editor/QueryEditor/Table.tsx @@ -5,6 +5,7 @@ import styled from "styled-components"; import AutoToolTipComponent from "components/designSystems/appsmith/AutoToolTipComponent"; import { getType, Types } from "utils/TypeHelpers"; import { Colors } from "constants/Colors"; +import ErrorBoundary from "components/editorComponents/ErrorBoundry"; interface TableProps { data: Record[]; @@ -214,59 +215,61 @@ const Table = (props: TableProps) => { if (rows.length === 0 || headerGroups.length === 0) return null; return ( - -

-
- {headerGroups.map((headerGroup: any, index: number) => ( -
- {headerGroup.headers.map((column: any, columnIndex: number) => ( -
+ + +
+
+ {headerGroups.map((headerGroup: any, index: number) => ( +
+ {headerGroup.headers.map((column: any, columnIndex: number) => (
- {column.render("Header")} +
+ {column.render("Header")} +
-
- ))} + ))} +
+ ))} +
+ {rows.map((row: any, index: number) => { + prepareRow(row); + return ( +
+ {row.cells.map((cell: any, cellIndex: number) => { + return ( +
+ + {cell.render("Cell")} + +
+ ); + })} +
+ ); + })}
- ))} -
- {rows.map((row: any, index: number) => { - prepareRow(row); - return ( -
- {row.cells.map((cell: any, cellIndex: number) => { - return ( -
- - {cell.render("Cell")} - -
- ); - })} -
- ); - })}
-
- + + ); }; diff --git a/app/client/src/widgets/BaseWidget.tsx b/app/client/src/widgets/BaseWidget.tsx index 4f0be931e8..a6efc38aae 100644 --- a/app/client/src/widgets/BaseWidget.tsx +++ b/app/client/src/widgets/BaseWidget.tsx @@ -15,7 +15,6 @@ import { CSSUnit, CONTAINER_GRID_PADDING, } from "constants/WidgetConstants"; -import _ from "lodash"; import DraggableComponent from "components/editorComponents/DraggableComponent"; import ResizableComponent from "components/editorComponents/ResizableComponent"; import { ExecuteActionPayload } from "constants/ActionConstants"; @@ -205,8 +204,8 @@ abstract class BaseWidget< ); } - addErrorBoundary(content: ReactNode, isValid: boolean) { - return {content}; + addErrorBoundary(content: ReactNode) { + return {content}; } private getWidgetView(): ReactNode { @@ -226,7 +225,7 @@ abstract class BaseWidget< case RenderModes.PAGE: content = this.getPageView(); if (this.props.isVisible) { - content = this.addErrorBoundary(content, true); + content = this.addErrorBoundary(content); if (!this.props.detachFromLayout) { content = this.makePositioned(content); } @@ -241,13 +240,8 @@ abstract class BaseWidget< abstract getPageView(): ReactNode; getCanvasView(): ReactNode { - let isValid = true; - if (this.props.invalidProps) { - isValid = _.keys(this.props.invalidProps).length === 0; - } - if (this.props.isLoading) isValid = true; const content = this.getPageView(); - return this.addErrorBoundary(content, isValid); + return this.addErrorBoundary(content); } // TODO(abhinav): Maybe make this a pure component to bailout from updating altogether. From 851ae51c3ae6a5b5bfeb96b34adf9cfdd307529e Mon Sep 17 00:00:00 2001 From: devrk96 Date: Mon, 21 Dec 2020 14:35:58 +0530 Subject: [PATCH 11/19] Auto scroll to specific section on homepage when reloading with same url (#2115) --- app/client/src/components/ads/MenuItem.tsx | 91 ++++++++++++--------- app/client/src/pages/Applications/index.tsx | 24 +++++- 2 files changed, 76 insertions(+), 39 deletions(-) diff --git a/app/client/src/components/ads/MenuItem.tsx b/app/client/src/components/ads/MenuItem.tsx index d679ac5bc3..e778e62e0c 100644 --- a/app/client/src/components/ads/MenuItem.tsx +++ b/app/client/src/components/ads/MenuItem.tsx @@ -1,4 +1,4 @@ -import React, { ReactNode } from "react"; +import React, { forwardRef, ReactNode, Ref } from "react"; import { CommonComponentProps, Classes } from "./common"; import styled from "styled-components"; import Icon, { IconName, IconSize } from "./Icon"; @@ -13,22 +13,31 @@ export type MenuItemProps = CommonComponentProps & { href?: string; type?: "warning"; ellipsize?: number; + selected?: boolean; onSelect?: () => void; }; -const ItemRow = styled.a<{ disabled?: boolean }>` +const ItemRow = styled.a<{ disabled?: boolean; selected?: boolean }>` display: flex; align-items: center; justify-content: space-between; text-decoration: none; padding: 0px ${props => props.theme.spaces[6]}px; + background-color: ${props => + props.selected ? props.theme.colors.menuItem.hoverBg : "transparent"}; .${Classes.TEXT} { - color: ${props => props.theme.colors.menuItem.normalText}; + color: ${props => + props.selected + ? props.theme.colors.menuItem.hoverText + : props.theme.colors.menuItem.normalText}; } .${Classes.ICON} { svg { path { - fill: ${props => props.theme.colors.menuItem.normalIcon}; + fill: ${props => + props.selected + ? props.theme.colors.menuItem.hoverIcon + : props.theme.colors.menuItem.normalIcon}; } } } @@ -78,40 +87,46 @@ const IconContainer = styled.span` margin-right: ${props => props.theme.spaces[5]}px; } `; - -function MenuItem(props: MenuItemProps) { - return props.ellipsize && props.text.length > props.ellipsize ? ( - - - - ) : ( - - ); -} - -function MenuItemContent(props: MenuItemProps) { - return ( - - - {props.icon ? : null} - {props.text ? ( - - {props.ellipsize - ? ellipsize(props.ellipsize, props.text) - : props.text} - - ) : null} - - {props.label ? props.label : null} - - ); -} +const MenuItem = forwardRef( + (props: MenuItemProps, ref: Ref) => { + return props.ellipsize && props.text.length > props.ellipsize ? ( + + + + ) : ( + + ); + }, +); +const MenuItemContent = forwardRef( + (props: MenuItemProps, ref: Ref) => { + return ( + + + {props.icon ? : null} + {props.text ? ( + + {props.ellipsize + ? ellipsize(props.ellipsize, props.text) + : props.text} + + ) : null} + + {props.label ? props.label : null} + + ); + }, +); +MenuItemContent.displayName = "MenuItemContent"; +MenuItem.displayName = "MenuItem"; function ellipsize(length: number, text: string) { return text.length > length ? text.slice(0, length).concat(" ...") : text; diff --git a/app/client/src/pages/Applications/index.tsx b/app/client/src/pages/Applications/index.tsx index ef021eddc9..3621464441 100644 --- a/app/client/src/pages/Applications/index.tsx +++ b/app/client/src/pages/Applications/index.tsx @@ -1,4 +1,4 @@ -import React, { Component, Fragment, useState } from "react"; +import React, { Component, Fragment, useEffect, useRef, useState } from "react"; import styled from "styled-components"; import { connect, useSelector, useDispatch } from "react-redux"; import { AppState } from "reducers"; @@ -340,6 +340,8 @@ const ApplicationAddCardWrapper = styled(Card)` `; function LeftPane() { + const menuRef = useRef(null); + const [selectedOrg, setSelectedOrg] = useState(""); const fetchedUserOrgs = useSelector(getUserApplicationsOrgs); const isFetchingApplications = useSelector(getIsFetchingApplications); const NewWorkspaceTrigger = ( @@ -359,6 +361,20 @@ function LeftPane() { userOrgs = loadingUserOrgs as any; } + const urlHash = decodeURI( + window.location.hash.substring(1, window.location.hash.length), + ); + + useEffect(() => { + const timer = setTimeout(() => { + if (menuRef && menuRef.current) { + menuRef.current.scrollIntoView({ behavior: "smooth" }); + menuRef.current.click(); + } + }, 0); + return () => clearTimeout(timer); + }, [fetchedUserOrgs]); + return ( ( setSelectedOrg(org.organization.id)} + selected={ + selectedOrg === org.organization.id && + urlHash === org.organization.name + } /> ))} From 42173e92499b40f4f5e5f5097ed139353fa7ab87 Mon Sep 17 00:00:00 2001 From: Rishabh Saxena Date: Mon, 21 Dec 2020 15:22:58 +0530 Subject: [PATCH 12/19] fix tooltip boundary, don't show on target focus (#2250) --- .../designSystems/appsmith/header/DeployLinkButton.tsx | 3 ++- app/client/src/pages/Editor/PropertyPaneTitle.tsx | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/client/src/components/designSystems/appsmith/header/DeployLinkButton.tsx b/app/client/src/components/designSystems/appsmith/header/DeployLinkButton.tsx index 98fbcb4df9..711a42bbd6 100644 --- a/app/client/src/components/designSystems/appsmith/header/DeployLinkButton.tsx +++ b/app/client/src/components/designSystems/appsmith/header/DeployLinkButton.tsx @@ -88,11 +88,12 @@ export const DeployLinkButton = (props: Props) => { content={ diff --git a/app/client/src/pages/Editor/PropertyPaneTitle.tsx b/app/client/src/pages/Editor/PropertyPaneTitle.tsx index f1393f7aee..cd9abc18a6 100644 --- a/app/client/src/pages/Editor/PropertyPaneTitle.tsx +++ b/app/client/src/pages/Editor/PropertyPaneTitle.tsx @@ -156,6 +156,7 @@ const PropertyPaneTitle = memo((props: PropertyPaneTitleProps) => { } position={Position.TOP} hoverOpenDelay={200} + boundary="window" > From cfcd7aa0bb3e5cf3a1fe8030dcb094241856ef8c Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Mon, 21 Dec 2020 17:43:15 +0530 Subject: [PATCH 13/19] Fix Firestore datasources not encrypting secret key JSON when editing (#2296) * Fix encrypted field not being ignored in JSON * Don't mask error in decrypting * Revert masking of error in decrypting --- .../appsmith/external/models/AuthenticationDTO.java | 12 ++++++++++-- .../services/DatasourceContextServiceImpl.java | 2 +- .../server/services/DatasourceServiceImpl.java | 8 +++++--- .../solutions/DatasourceStructureSolution.java | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java index 3adc10ed08..f7fd6d5825 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/AuthenticationDTO.java @@ -24,17 +24,20 @@ import java.util.Set; @JsonSubTypes.Type(value = OAuth2.class, name = AuthType.OAUTH2) }) public class AuthenticationDTO { + // In principle, this class should've been abstract. However, when this class is abstract, Spring's deserialization + // routines choke on identifying the correct class to instantiate and ends up trying to instantiate this abstract + // class and fails. @JsonIgnore - private boolean isEncrypted; + private Boolean isEncrypted; @JsonIgnore public Map getEncryptionFields() { return Collections.emptyMap(); } - @JsonIgnore public void setEncryptionFields(Map encryptedFields) { + // This is supposed to be overridden by implementations. } @JsonIgnore @@ -42,4 +45,9 @@ public class AuthenticationDTO { return Collections.emptySet(); } + @JsonIgnore + public boolean isEncrypted() { + return Boolean.TRUE.equals(isEncrypted); + } + } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java index 31e2c68e91..150d42543d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceContextServiceImpl.java @@ -178,7 +178,7 @@ public class DatasourceContextServiceImpl implements DatasourceContextService { Map.Entry::getKey, e -> encryptionService.decryptString(e.getValue()))); authentication.setEncryptionFields(decryptedFields); - authentication.setEncrypted(false); + authentication.setIsEncrypted(false); } return authentication; } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java index 63672deb5d..a54f3b5317 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/DatasourceServiceImpl.java @@ -158,13 +158,15 @@ public class DatasourceServiceImpl extends BaseService encryptedFields = authentication.getEncryptionFields().entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> encryptionService.encryptString(e.getValue()))); authentication.setEncryptionFields(encryptedFields); - authentication.setEncrypted(true); + authentication.setIsEncrypted(true); } return authentication; } @@ -263,7 +265,7 @@ public class DatasourceServiceImpl extends BaseService encryptionService.decryptString(e.getValue()))); datasource.getDatasourceConfiguration().getAuthentication().setEncryptionFields(decryptedFields); - datasource.getDatasourceConfiguration().getAuthentication().setEncrypted(false); + datasource.getDatasourceConfiguration().getAuthentication().setIsEncrypted(false); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java index 023e5608a5..aa6f7dfb29 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/DatasourceStructureSolution.java @@ -95,7 +95,7 @@ public class DatasourceStructureSolution { Map.Entry::getKey, e -> encryptionService.decryptString(e.getValue()))); authentication.setEncryptionFields(decryptedFields); - authentication.setEncrypted(false); + authentication.setIsEncrypted(false); } } From 567f3a16fb8f64746dc054c75ec7628527a3ef72 Mon Sep 17 00:00:00 2001 From: vicky-primathon <67091118+vicky-primathon@users.noreply.github.com> Date: Tue, 22 Dec 2020 08:27:57 +0530 Subject: [PATCH 14/19] Fixed accessing length property of undefined selectedRowIndices (#2293) * Fixed accessing length property of undefined selectedRowIndices * Added getting selectedRowIndices when multiRowSelection is true --- app/client/src/widgets/TableWidget.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/client/src/widgets/TableWidget.tsx b/app/client/src/widgets/TableWidget.tsx index 262084030d..73062fee62 100644 --- a/app/client/src/widgets/TableWidget.tsx +++ b/app/client/src/widgets/TableWidget.tsx @@ -658,8 +658,10 @@ class TableWidget extends BaseWidget { }; handleRowClick = (rowData: Record, index: number) => { - const { selectedRowIndices } = this.props; if (this.props.multiRowSelection) { + const selectedRowIndices = this.props.selectedRowIndices + ? [...this.props.selectedRowIndices] + : []; if (selectedRowIndices.includes(index)) { const rowIndex = selectedRowIndices.indexOf(index); selectedRowIndices.splice(rowIndex, 1); From ea6e897dde47e9a3f56747ef2d97b5dfa8680668 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Tue, 22 Dec 2020 12:32:14 +0530 Subject: [PATCH 15/19] Firestore ADD_TO_COLLECTION command support (#2305) * Support ADD_TO_COLLECTION operation on Firestore * Add test for Firestore add-to-collection command --- .../com/external/plugins/FirestorePlugin.java | 74 +++++++++++++++---- .../java/com/external/plugins/Method.java | 1 + .../src/main/resources/editor.json | 4 + .../external/plugins/FirestorePluginTest.java | 24 ++++++ 4 files changed, 88 insertions(+), 15 deletions(-) diff --git a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java index babf75f6f2..76e0ebe7f5 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java +++ b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/FirestorePlugin.java @@ -17,6 +17,7 @@ import com.google.cloud.firestore.CollectionReference; import com.google.cloud.firestore.DocumentReference; import com.google.cloud.firestore.DocumentSnapshot; import com.google.cloud.firestore.Firestore; +import com.google.cloud.firestore.Query; import com.google.cloud.firestore.QueryDocumentSnapshot; import com.google.cloud.firestore.QuerySnapshot; import com.google.cloud.firestore.WriteResult; @@ -132,7 +133,7 @@ public class FirestorePlugin extends BasePlugin { if (method.isDocumentLevel()) { return handleDocumentLevelMethod(connection, path, method, mapBody); } else { - return handleCollectionLevelMethod(connection, path, method, properties); + return handleCollectionLevelMethod(connection, path, method, properties, mapBody); } }) .subscribeOn(scheduler); @@ -221,15 +222,33 @@ public class FirestorePlugin extends BasePlugin { Firestore connection, String path, com.external.plugins.Method method, - List properties + List properties, + Map mapBody ) { + final CollectionReference collection = connection.collection(path); + + if (method == Method.GET_COLLECTION) { + return methodGetCollection(collection, properties); + + } else if (method == Method.ADD_TO_COLLECTION) { + return methodAddToCollection(collection, mapBody); + + } + + return Mono.error(new AppsmithPluginException( + AppsmithPluginError.PLUGIN_ERROR, + "Unsupported collection-level command: " + method + )); + } + + private Mono methodGetCollection(CollectionReference query, List properties) { final String orderBy = properties.size() > 1 && properties.get(1) != null ? properties.get(1).getValue() : null; final int limit = properties.size() > 2 && properties.get(2) != null ? Integer.parseInt(properties.get(2).getValue()) : 10; final String queryFieldPath = properties.size() > 3 && properties.get(3) != null ? properties.get(3).getValue() : null; final Op operator = properties.size() > 4 && properties.get(4) != null ? Op.valueOf(properties.get(4).getValue()) : null; final String queryValue = properties.size() > 5 && properties.get(5) != null ? properties.get(5).getValue() : null; - return Mono.just(connection.collection(path)) + return Mono.just(query) // Apply ordering, if provided. .map(query1 -> StringUtils.isEmpty(orderBy) ? query1 : query1.orderBy(orderBy)) // Apply where condition, if provided. @@ -285,17 +304,7 @@ public class FirestorePlugin extends BasePlugin { // Apply limit, always provided, since without it we can inadvertently end up processing too much data. .map(query1 -> query1.limit(limit)) // Run the Firestore query to get a Future of the results. - .flatMap(query1 -> { - switch (method) { - case GET_COLLECTION: - return Mono.just(query1.get()); - default: - return Mono.error(new AppsmithPluginException( - AppsmithPluginError.PLUGIN_ERROR, - "Unknown collection method: " + method.toString() + "." - )); - } - }) + .map(Query::get) // Consume the future to get the actual results. .flatMap(resultFuture -> { try { @@ -315,7 +324,35 @@ public class FirestorePlugin extends BasePlugin { result.setIsExecutionSuccess(true); System.out.println( Thread.currentThread().getName() - + ": In the Firestore Plugin, got action execution result" + + ": In the Firestore Plugin, got action execution result for get collection" + ); + return Mono.just(result); + }); + } + + private Mono methodAddToCollection(CollectionReference collection, Map mapBody) { + return Mono.justOrEmpty(collection.add(mapBody)) + .flatMap(future -> { + try { + return Mono.just(future.get()); + } catch (InterruptedException | ExecutionException e) { + return Mono.error(new AppsmithPluginException( + AppsmithPluginError.PLUGIN_ERROR, + e.getMessage() + )); + } + }) + .flatMap(opResult -> { + ActionExecutionResult result = new ActionExecutionResult(); + try { + result.setBody(resultToMap(opResult)); + } catch (AppsmithPluginException e) { + return Mono.error(e); + } + result.setIsExecutionSuccess(true); + System.out.println( + Thread.currentThread().getName() + + ": In the Firestore Plugin, got action execution result for add to collection" ); return Mono.just(result); }); @@ -344,6 +381,13 @@ public class FirestorePlugin extends BasePlugin { } return documents; + } else if (objResult instanceof DocumentReference) { + DocumentReference documentReference = (DocumentReference) objResult; + Map resultMap = new HashMap<>(); + resultMap.put("id", documentReference.getId()); + resultMap.put("path", documentReference.getPath()); + return resultMap; + } else { throw new AppsmithPluginException( AppsmithPluginError.PLUGIN_ERROR, diff --git a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/Method.java b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/Method.java index 086bc8953f..c3a27ee743 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/Method.java +++ b/app/server/appsmith-plugins/firestorePlugin/src/main/java/com/external/plugins/Method.java @@ -5,6 +5,7 @@ public enum Method { GET_COLLECTION(false, false), SET_DOCUMENT(true, true), CREATE_DOCUMENT(true, true), + ADD_TO_COLLECTION(false, true), UPDATE_DOCUMENT(true, true), DELETE_DOCUMENT(true, false), ; diff --git a/app/server/appsmith-plugins/firestorePlugin/src/main/resources/editor.json b/app/server/appsmith-plugins/firestorePlugin/src/main/resources/editor.json index 38e261a5b0..97f2e828ee 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/main/resources/editor.json +++ b/app/server/appsmith-plugins/firestorePlugin/src/main/resources/editor.json @@ -34,6 +34,10 @@ "label": "Create Document", "value": "CREATE_DOCUMENT" }, + { + "label": "Add Document to Collection", + "value": "ADD_TO_COLLECTION" + }, { "label": "Update Document", "value": "UPDATE_DOCUMENT" diff --git a/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java b/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java index f76044d967..386d38ae9a 100644 --- a/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java +++ b/app/server/appsmith-plugins/firestorePlugin/src/test/java/com/external/plugins/FirestorePluginTest.java @@ -25,6 +25,7 @@ import java.util.concurrent.ExecutionException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** @@ -204,4 +205,27 @@ public class FirestorePluginTest { .verifyComplete(); } + @Test + public void testAddToCollection() { + ActionConfiguration actionConfiguration = new ActionConfiguration(); + actionConfiguration.setPath("changing"); + + actionConfiguration.setPluginSpecifiedTemplates(List.of(new Property("method", "ADD_TO_COLLECTION"))); + + actionConfiguration.setBody("{\n" + + " \"question\": \"What is the answer to life, universe and everything else?\",\n" + + " \"answer\": 42\n" + + "}"); + + Mono resultMono = pluginExecutor + .execute(firestoreConnection, dsConfig, actionConfiguration); + + StepVerifier.create(resultMono) + .assertNext(result -> { + assertTrue(result.getIsExecutionSuccess()); + assertNotNull(firestoreConnection.document("changing/" + ((Map) result.getBody()).get("id"))); + }) + .verifyComplete(); + } + } From a942dc198ef7b9b2df22fd9a622efad8941b8099 Mon Sep 17 00:00:00 2001 From: Arpit Mohan Date: Tue, 22 Dec 2020 13:02:02 +0530 Subject: [PATCH 16/19] Revert "Onboarding flow (#1960)" This reverts commit e84699e7ba9bef667d711014850529fd703bef68. Reverting this commit because this flow requires more changes before it's ready for prime-time. Will continue development on this feature in a different branch --- .../Onboarding/Onboarding_spec.js | 67 ---- .../CreateDuplicateAppWithinOrg_spec.js | 1 - app/client/cypress/locators/Onboarding.json | 4 - app/client/cypress/support/commands.js | 14 +- app/client/package.json | 1 - app/client/src/actions/onboardingActions.ts | 43 --- app/client/src/api/ActionAPI.tsx | 4 +- app/client/src/assets/lottie/confetti.json | 1 - .../editorComponents/Onboarding/Boxed.tsx | 30 -- .../Onboarding/CompletionDialog.tsx | 213 ----------- .../editorComponents/Onboarding/Tooltip.tsx | 238 ------------ .../src/constants/OnboardingConstants.tsx | 129 ------- .../src/constants/ReduxActionConstants.tsx | 19 - .../AppViewer/AppViewerPageContainer.tsx | 2 - .../pages/Editor/DataSourceEditor/DBForm.tsx | 30 +- .../Editor/DataSourceEditor/FormTitle.tsx | 12 +- .../pages/Editor/DataSourceEditor/index.tsx | 1 + app/client/src/pages/Editor/EditorHeader.tsx | 180 ++++----- .../pages/Editor/Explorer/Actions/helpers.tsx | 4 +- .../pages/Editor/Explorer/EntityExplorer.tsx | 112 ------ .../Explorer/Onboarding/DBQueryGroup.tsx | 57 --- .../Editor/Explorer/Onboarding/Loading.tsx | 21 -- .../Editor/Explorer/Onboarding/index.tsx | 40 -- .../Explorer/PluginGroup/PluginGroup.tsx | 23 +- .../src/pages/Editor/Explorer/index.tsx | 117 +++++- .../Editor/PropertyPane/PropertyControl.tsx | 26 +- .../pages/Editor/QueryEditor/TemplateMenu.tsx | 2 +- app/client/src/pages/Editor/Welcome.tsx | 139 ------- app/client/src/pages/Editor/WidgetSidebar.tsx | 14 +- app/client/src/pages/Editor/WidgetsEditor.tsx | 10 - app/client/src/pages/Editor/index.tsx | 74 +++- app/client/src/pages/UserAuth/SignUp.tsx | 2 - .../src/pages/UserAuth/ThirdPartyAuth.tsx | 4 - .../entityReducers/actionsReducer.tsx | 32 -- app/client/src/reducers/index.tsx | 2 - app/client/src/reducers/uiReducers/index.tsx | 2 - .../reducers/uiReducers/onBoardingReducer.ts | 100 ----- app/client/src/sagas/ActionSagas.ts | 4 +- app/client/src/sagas/ApplicationSagas.tsx | 24 +- app/client/src/sagas/OnboardingSagas.ts | 343 ------------------ app/client/src/sagas/index.tsx | 3 - app/client/src/selectors/entitiesSelector.ts | 4 - app/client/src/utils/AnalyticsUtil.tsx | 9 +- app/client/src/utils/helpers.tsx | 33 -- app/client/src/utils/storage.ts | 20 - app/client/yarn.lock | 5 - 46 files changed, 290 insertions(+), 1925 deletions(-) delete mode 100644 app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js delete mode 100644 app/client/cypress/locators/Onboarding.json delete mode 100644 app/client/src/actions/onboardingActions.ts delete mode 100644 app/client/src/assets/lottie/confetti.json delete mode 100644 app/client/src/components/editorComponents/Onboarding/Boxed.tsx delete mode 100644 app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx delete mode 100644 app/client/src/components/editorComponents/Onboarding/Tooltip.tsx delete mode 100644 app/client/src/constants/OnboardingConstants.tsx delete mode 100644 app/client/src/pages/Editor/Explorer/EntityExplorer.tsx delete mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx delete mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx delete mode 100644 app/client/src/pages/Editor/Explorer/Onboarding/index.tsx delete mode 100644 app/client/src/pages/Editor/Welcome.tsx delete mode 100644 app/client/src/reducers/uiReducers/onBoardingReducer.ts delete mode 100644 app/client/src/sagas/OnboardingSagas.ts diff --git a/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js b/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js deleted file mode 100644 index db35cb3da7..0000000000 --- a/app/client/cypress/integration/Smoke_TestSuite/Onboarding/Onboarding_spec.js +++ /dev/null @@ -1,67 +0,0 @@ -const onboarding = require("../../../locators/Onboarding.json"); -const explorer = require("../../../locators/explorerlocators.json"); -const homePage = require("../../../locators/HomePage.json"); -const loginPage = require("../../../locators/LoginPage.json"); - -describe("Onboarding", function() { - it("Onboarding flow", function() { - cy.LogOut(); - - cy.visit("/user/signup"); - cy.get("input[name='email']").type(Cypress.env("USERNAME")); - cy.get(loginPage.password).type(Cypress.env("PASSWORD")); - cy.get(loginPage.submitBtn).click(); - - cy.LogintoApp(Cypress.env("USERNAME"), Cypress.env("PASSWORD")); - - cy.get(homePage.createNew) - .first() - .click({ force: true }); - cy.wait("@createNewApplication").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - cy.get("#loading").should("not.exist"); - - //Onboarding - cy.contains(".t--create-database", "Explore Appsmith").click(); - - cy.get(onboarding.tooltipAction).click(); - - // Add widget - cy.get(".t--add-widget").click(); - cy.dragAndDropToCanvas("tablewidget", { x: 30, y: -30 }); - - cy.get(onboarding.tooltipSnippet).click({ force: true }); - - cy.get(".t--property-control-tabledata" + " .CodeMirror textarea") - .first() - .focus({ force: true }) - .type("{uparrow}", { force: true }) - .type("{ctrl}{shift}{downarrow}", { force: true }); - cy.focused().then(() => { - cy.get(".t--property-control-tabledata" + " .CodeMirror") - .first() - .then(editor => { - editor[0].CodeMirror.setValue("{{ExampleQuery.data}}"); - }); - }); - cy.closePropertyPane(); - cy.get(explorer.closeWidgets).click(); - - cy.openPropertyPane("tablewidget"); - cy.get(onboarding.tooltipAction).click({ force: true }); - - cy.PublishtheApp(); - cy.get(".t--continue-on-my-own").click(); - }); - - after(() => { - localStorage.removeItem("OnboardingState"); - cy.window().then(window => { - window.indexedDB.deleteDatabase("Appsmith"); - }); - cy.log("Cleared"); - }); -}); diff --git a/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js b/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js index 9b906e31a2..41692b1e3c 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js +++ b/app/client/cypress/integration/Smoke_TestSuite/OrganisationTests/CreateDuplicateAppWithinOrg_spec.js @@ -13,7 +13,6 @@ describe("Create new org and an app within the same", function() { cy.createOrg(orgid); cy.CreateAppForOrg(orgid, appid); cy.NavigateToHome(); - cy.CreateApp(appid); }); }); diff --git a/app/client/cypress/locators/Onboarding.json b/app/client/cypress/locators/Onboarding.json deleted file mode 100644 index a358a162af..0000000000 --- a/app/client/cypress/locators/Onboarding.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "tooltipAction": ".tooltip-action", - "tooltipSnippet": ".tooltip-snippet" -} \ No newline at end of file diff --git a/app/client/cypress/support/commands.js b/app/client/cypress/support/commands.js index 8d74947026..203448f987 100644 --- a/app/client/cypress/support/commands.js +++ b/app/client/cypress/support/commands.js @@ -249,7 +249,6 @@ Cypress.Commands.add("CreateApp", appname => { ); cy.get("#loading").should("not.exist"); cy.wait(1000); - cy.get(homePage.applicationName).type(appname + "{enter}"); cy.wait("@updateApplication").should( "have.nested.property", @@ -951,18 +950,11 @@ Cypress.Commands.add("PublishtheApp", () => { // Wait before publish cy.wait(2000); cy.assertPageSave(); - - // Stubbing window.open to open in the same tab - cy.window().then(window => { - cy.stub(window, "open").callsFake(url => { - window.location.href = Cypress.config().baseUrl + url.substring(1); - window.location.target = "_self"; - }); - }); - cy.get(homePage.publishButton).click(); cy.wait("@publishApp"); - + cy.get('a[class="bp3-button"]') + .invoke("removeAttr", "target") + .click({ force: true }); cy.url().should("include", "/pages"); cy.log("pagename: " + localStorage.getItem("PageName")); }); diff --git a/app/client/package.json b/app/client/package.json index 0b99883e20..2edaaa4708 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -70,7 +70,6 @@ "localforage": "^1.7.3", "lodash": "^4.17.19", "loglevel": "^1.6.7", - "lottie-web": "^5.7.4", "moment": "^2.24.0", "moment-timezone": "^0.5.27", "nanoid": "^2.0.4", diff --git a/app/client/src/actions/onboardingActions.ts b/app/client/src/actions/onboardingActions.ts deleted file mode 100644 index dc65018c76..0000000000 --- a/app/client/src/actions/onboardingActions.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ReduxActionTypes } from "constants/ReduxActionConstants"; -import { Action } from "entities/Action"; - -export const createOnboardingActionInit = (payload: Partial) => { - return { - type: ReduxActionTypes.CREATE_ONBOARDING_ACTION_INIT, - payload, - }; -}; - -export const createOnboardingActionSuccess = (payload: Action) => { - return { - type: ReduxActionTypes.CREATE_ONBOARDING_ACTION_SUCCESS, - payload, - }; -}; - -export const showTooltip = (payload: number) => { - return { - type: ReduxActionTypes.SHOW_ONBOARDING_TOOLTIP, - payload, - }; -}; - -export const endOnboarding = () => { - return { - type: ReduxActionTypes.END_ONBOARDING, - }; -}; - -export const setCurrentStep = (payload: number) => { - return { - type: ReduxActionTypes.SET_CURRENT_STEP, - payload, - }; -}; - -export const setOnboardingState = (payload: boolean) => { - return { - type: ReduxActionTypes.SET_ONBOARDING_STATE, - payload, - }; -}; diff --git a/app/client/src/api/ActionAPI.tsx b/app/client/src/api/ActionAPI.tsx index 6dff6c434b..cee1f8ee90 100644 --- a/app/client/src/api/ActionAPI.tsx +++ b/app/client/src/api/ActionAPI.tsx @@ -5,7 +5,7 @@ import { DEFAULT_EXECUTE_ACTION_TIMEOUT_MS, } from "constants/ApiConstants"; import axios, { AxiosPromise, CancelTokenSource } from "axios"; -import { Action, RestAction } from "entities/Action"; +import { RestAction } from "entities/Action"; export interface CreateActionRequest extends APIRequest { datasourceId: string; @@ -114,7 +114,7 @@ class ActionAPI extends API { } static createAPI( - apiConfig: Partial, + apiConfig: RestAction, ): AxiosPromise { return API.post(ActionAPI.url, apiConfig); } diff --git a/app/client/src/assets/lottie/confetti.json b/app/client/src/assets/lottie/confetti.json deleted file mode 100644 index ec96a84426..0000000000 --- a/app/client/src/assets/lottie/confetti.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.5.2","fr":60,"ip":0,"op":180,"w":1500,"h":2000,"nm":"Confetti Boom","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"T-35","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":14,"s":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[-135]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-156]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[-175]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":169,"s":[-174]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":182,"s":[-158]},{"t":193,"s":[-160]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[1769.453,2037.145,0],"to":[-47,-180.333,0],"ti":[80.667,212,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[1487.453,955.145,0],"to":[-80.667,-212,0],"ti":[72.667,-52,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[1285.453,765.145,0],"to":[-72.667,52,0],"ti":[15.667,-145,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1051.453,1267.145,0],"to":[-15.667,145,0],"ti":[51,-119.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":161,"s":[1191.453,1635.145,0],"to":[-51,119.333,0],"ti":[74.333,-58,0]},{"t":192,"s":[745.453,1983.145,0]}],"ix":2},"a":{"a":0,"k":[553.453,241.145,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[-87,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-107,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[111,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-78,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[98,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-79,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[88,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-72,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-99,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[73,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[73,61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[73,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[-81,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[-81,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[85,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":169,"s":[85,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":172,"s":[-81,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":182,"s":[85,-47,100]},{"t":193,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[30.906,74.289],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[553.453,241.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":194,"st":14,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"T-30","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":[-14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[-21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-135]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[-156]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-175]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155,"s":[-174]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":168,"s":[-158]},{"t":179,"s":[-160]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1421.453,2079.145,0],"to":[-47,-180.333,0],"ti":[80.667,212,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1139.453,997.145,0],"to":[-80.667,-212,0],"ti":[72.667,-52,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[937.453,807.145,0],"to":[-72.667,52,0],"ti":[15.667,-145,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[703.453,1309.145,0],"to":[-15.667,145,0],"ti":[-7,-112.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":147,"s":[843.453,1677.145,0],"to":[7,112.333,0],"ti":[16.333,-51,0]},{"t":178,"s":[745.453,1983.145,0]}],"ix":2},"a":{"a":0,"k":[553.453,241.145,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[-87,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[-107,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[111,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-78,71,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[98,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-79,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[88,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[-72,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[-99,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[73,-49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[73,61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[73,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-81,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[-81,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[85,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155,"s":[85,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":158,"s":[-81,-47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":168,"s":[85,-47,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[30.906,74.289],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":[553.453,241.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"T-28","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":12,"s":[0]},{"t":59,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1569.317,1490.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[833.317,864.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[435.317,772.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":134,"s":[267.317,958.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":149,"s":[391.317,1092.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[303.317,1292.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":144,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":149,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":160,"s":[-56.08,-57.08,100]},{"t":166,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":192,"st":12,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"T-32","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-344.683,1100.398,0],"to":[81.333,-74.333,0],"ti":[-160.039,142.031,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[143.317,654.398,0],"to":[183.667,-163,0],"ti":[-134,-129,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[697.317,350.398,0],"to":[68.227,65.681,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[865.317,632.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[915.317,986.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"T-33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1539.317,1504.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[803.317,878.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[405.317,786.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[237.317,972.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[361.317,1106.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":153,"s":[273.317,1306.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"T-26","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1869.317,1058.398,0],"to":[-122.667,-104.333,0],"ti":[189,119.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1133.317,432.398,0],"to":[-189,-119.667,0],"ti":[68.333,-16.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[735.317,340.398,0],"to":[-66.144,16.133,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[567.317,526.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[691.317,660.398,0],"to":[0,0,0],"ti":[0,0,0]},{"t":153,"s":[603.317,860.398,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"T-25","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-150.359,921.641,0],"to":[74.833,-65.667,0],"ti":[-113.953,93.882,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[298.641,527.641,0],"to":[117.333,-96.667,0],"ti":[-67.5,-24,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[583.641,425.641,0],"to":[47.535,16.901,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[708.641,602.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[646.641,731.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[825.641,884.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":135,"s":[637.641,1070.641,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[701.641,1224.641,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"T-22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":47,"s":[19]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-150.359,921.641,0],"to":[74.833,-65.667,0],"ti":[-113.953,93.882,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[298.641,527.641,0],"to":[117.333,-96.667,0],"ti":[-67.5,-24,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[583.641,425.641,0],"to":[47.535,16.901,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[708.641,602.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[646.641,731.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[825.641,884.641,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":135,"s":[637.641,1070.641,0],"to":[0,0,0],"ti":[0,0,0]},{"t":154,"s":[701.641,1224.641,0]}],"ix":2},"a":{"a":0,"k":[-687.359,170.641,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[48.92,48.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[48.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-48.08,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[63.92,-47.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[63.92,47.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[63.92,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-62.08,-62.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-62.08,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[61.92,64.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[61.92,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-55.08,-58.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-55.08,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[54.92,53.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[54.92,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-55.08,-63.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-55.08,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[46.92,54.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[46.92,-55.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[46.92,37.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[46.92,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-50.08,-51.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-50.08,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[51.92,55.92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[51.92,-57.08,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[-56.08,-57.08,100]},{"t":154,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.281,33.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-687.359,170.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"T-23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.393,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.381,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34.504,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.49,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.275,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.602,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81.129,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.521,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95.117,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103.51,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106.307,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111.902,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123.092,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139.877,"s":[476]},{"t":152,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1664.734,1236.447,0],"to":[-95.667,-138,0],"ti":[177,154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1090.734,408.447,0],"to":[-116.957,-101.759,0],"ti":[96.3,-22.398,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[744.271,350.806,0],"to":[-49.439,11.499,0],"ti":[43.534,-11.194,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[542.734,396.447,0],"to":[-128.333,33,0],"ti":[63,-79.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[278.734,602.447,0],"to":[-63,79.667,0],"ti":[8.333,-114,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[164.734,874.447,0],"to":[-8.333,114,0],"ti":[-10.667,-68.667,0]},{"t":162,"s":[228.734,1286.447,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[37.888,37.888,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22.381,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34.504,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.49,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55.018,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58.748,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.275,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.939,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.602,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81.129,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.521,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95.117,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103.51,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106.307,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111.902,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123.092,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139.877,"s":[48,58,100]},{"t":152,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.490196108351,0.231372563979,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":[98.357,57.459],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":10,"ty":4,"nm":"T-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.167],"y":[0.167]},"t":14,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":146,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":164,"s":[476]},{"t":177,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[1987,1395.5,0],"to":[-154.667,-108.667,0],"ti":[200,107.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[1059,743.5,0],"to":[-200,-107.333,0],"ti":[-48.026,-88.927,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[787,751.5,0],"to":[56.628,104.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[625,1097.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":143,"s":[571,1421.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":179,"s":[721,1705.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[-65.608,-38.114,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":146,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":164,"s":[48,58,100]},{"t":177,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862804936,0.490196108351,0.231372563979,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":14,"op":194,"st":14,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"T-30","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":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":171,"s":[476]},{"t":184,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[-667,2107.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[85,1127.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[475,861.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[731,1125.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[683,1371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":186,"s":[721,1705.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":153,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":171,"s":[48,58,100]},{"t":184,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":21,"op":201,"st":21,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"T-34","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":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[331.833]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[305]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":147,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[476]},{"t":178,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[-449,2197.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[303,1217.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[693,951.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[949,1215.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[901,1461.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":180,"s":[941,1749.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-55,45.077,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-44.6,-47.154,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[34.2,-44,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-38,-44,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[40,-55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[56,38,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[16,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-31,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-20,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-32,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[35,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147,"s":[-42,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[-25,50,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":15,"op":195,"st":15,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"T-21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[47]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[105]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[186]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[236]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[269]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[249]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[274]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[321]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[256]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[272]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[322]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[434]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[476]},{"t":163,"s":[558]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-377,1757.5,0],"to":[125.333,-163.333,0],"ti":[-190.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[375,777.5,0],"to":[190.333,-207.667,0],"ti":[-101.005,-3.537,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[765,511.5,0],"to":[138.628,4.854,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1021,775.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":129,"s":[973,1021.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[1013,1309.5,0]}],"ix":2},"a":{"a":0,"k":[-559,211.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[-75,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-75,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[51,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-55,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[62,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-53,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[59,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[59,58,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[59,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-51,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-51,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[63,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[-41,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[48,49,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-82,92,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[48,58,100]},{"t":163,"s":[0,0,100]}],"ix":6}},"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":[[-536,131],[-600,137],[-576,292],[-518,288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":14,"ty":4,"nm":"T-20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-72]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[-140]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[-31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[109]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[167]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[36]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[114]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":157,"s":[248]},{"t":164,"s":[413]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1893,1461,0],"to":[-153.667,-139.667,0],"ti":[204.333,165.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[971,623,0],"to":[-204.333,-165.333,0],"ti":[97.667,3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[667,469,0],"to":[-97.667,-3,0],"ti":[37.333,-80.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[385,605,0],"to":[-37.333,80.667,0],"ti":[-9.333,-105.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[443,953,0],"to":[9.333,105.333,0],"ti":[12.667,-79.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":141,"s":[441,1237,0],"to":[-12.667,79.667,0],"ti":[12.333,-32.333,0]},{"t":164,"s":[367,1431,0]}],"ix":2},"a":{"a":0,"k":[1143,461,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[111,84,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[111,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-62,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[50,-56,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[72,81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[78,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[78,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[78,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-83,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[82,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-77,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[43,57,100]},{"t":164,"s":[0,0,100]}],"ix":6}},"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":[[1164,426],[1104,450],[1120,496],[1182,488]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[1143.633,461.5],"ix":2},"a":{"a":0,"k":[1143.633,461.5],"ix":1},"s":{"a":0,"k":[167.056,167.056],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":15,"ty":4,"nm":"O-13","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":11,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[288]},{"t":148,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[27.451,2118.312,0],"to":[46,-225.333,0],"ti":[-99.333,288,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[303.451,766.312,0],"to":[99.333,-288,0],"ti":[-130.204,22.562,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[623.451,390.312,0],"to":[319.333,-55.333,0],"ti":[-95.333,-100,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[1067.451,554.312,0],"to":[95.333,100,0],"ti":[-3.333,-107.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[1195.451,990.312,0],"to":[3.333,107.333,0],"ti":[14.667,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[1087.451,1198.312,0],"to":[-14.667,72.667,0],"ti":[-3.333,-38,0]},{"t":147,"s":[1107.451,1426.312,0]}],"ix":2},"a":{"a":0,"k":[-618.176,100.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-39.898,57.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[33.833,-48.684,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[59.192,-52,100]},{"t":148,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[123.125,123.125],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-620.438,87.562],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"O-27","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":30,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":148,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159,"s":[288]},{"t":167,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1355.451,2548.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[987.451,1408.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[727.451,1050.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[201.451,1146.312,0],"to":[-26.699,47.349,0],"ti":[-31.133,-76.012,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[265.91,1340.603,0],"to":[19.907,48.603,0],"ti":[1.09,-199.243,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[163.451,1512.312,0],"to":[180.333,212,0],"ti":[0,0,0]},{"t":167,"s":[215.451,1842.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":159,"s":[59.192,-52,100]},{"t":167,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":24,"op":204,"st":24,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"O-18","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":11,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[288]},{"t":148,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[1571.451,1968.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1203.451,828.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[943.451,470.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[417.451,566.312,0],"to":[-26.699,47.349,0],"ti":[-31.133,-76.012,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[481.91,760.603,0],"to":[19.907,48.603,0],"ti":[1.09,-199.243,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[379.451,932.312,0],"to":[180.333,212,0],"ti":[0,0,0]},{"t":148,"s":[431.451,1262.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[59.192,-52,100]},{"t":148,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":5,"op":185,"st":5,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"O-12","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":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1571.451,1968.312,0],"to":[-61.333,-190,0],"ti":[104.667,249.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1203.451,828.312,0],"to":[-104.667,-249.667,0],"ti":[123.456,61.857,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[943.451,470.312,0],"to":[-159,-79.667,0],"ti":[67.667,-120,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[417.451,566.312,0],"to":[-43.771,77.624,0],"ti":[-2.333,-116,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[495.451,906.312,0],"to":[14.333,190,0],"ti":[0,0,0]},{"t":143,"s":[431.451,1262.312,0]}],"ix":2},"a":{"a":0,"k":[644.797,-218.203,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[712.917,-1181.636]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[85.594,85.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[644.797,-218.203],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"B-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[123]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[150]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[178]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[313]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[223]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[301]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151,"s":[344]},{"t":162,"s":[420]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1631.399,1895.598,0],"to":[-52.333,-188.333,0],"ti":[140,246.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1317.399,765.598,0],"to":[-140,-246.333,0],"ti":[126.667,10,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[791.399,417.598,0],"to":[-104.79,-8.273,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[538.399,536.598,0],"to":[0,0,0],"ti":[-114.278,-145.288,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":116,"s":[426.399,860.598,0],"to":[165.833,210.833,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[537.399,1225.598,0],"to":[0,0,0],"ti":[0,0,0]},{"t":161,"s":[463.399,1369.598,0]}],"ix":2},"a":{"a":0,"k":[-820,703.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[79.483,-54.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[79.483,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-45.517,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-51.517,-49.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[-51.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[43.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99,"s":[43.483,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-40.517,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-40.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[45.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[45.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[-34.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-34.517,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[42.483,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[42.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-50.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151,"s":[-50.517,35.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[59.483,35.483,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-617,569],[-690,595],[-670,674],[-604,645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":[-172.578,84.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":20,"ty":4,"nm":"B-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":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[123]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[150]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[178]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[313]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[223]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[301]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151,"s":[344]},{"t":162,"s":[420]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-54,1735.5,0],"to":[71.667,-160.333,0],"ti":[-115.333,207.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[376,773.5,0],"to":[115.333,-207.667,0],"ti":[-109.276,46.345,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[638,489.5,0],"to":[210.155,-89.13,0],"ti":[-89.667,-71.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[1066,543.5,0],"to":[89.667,71.333,0],"ti":[-10,-108.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[1176,917.5,0],"to":[10,108.333,0],"ti":[3,-80.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":141,"s":[1126,1193.5,0],"to":[-3,80.333,0],"ti":[0,0,0]},{"t":164,"s":[1158,1399.5,0]}],"ix":2},"a":{"a":0,"k":[-820,703.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[79.483,-54.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[79.483,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-45.517,79.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-51.517,-49.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[-51.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[43.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99,"s":[43.483,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[-40.517,-37.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-40.517,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[45.483,38.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[45.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[-34.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-34.517,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[42.483,41.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[42.483,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-50.517,-44.517,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151,"s":[-50.517,35.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[59.483,35.483,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-617,569],[-690,595],[-670,674],[-604,645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-172.578,84.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":21,"ty":4,"nm":"O-10","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-774.056,1135.588,0],"to":[184,-83.333,0],"ti":[-264.333,99,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[329.944,635.588,0],"to":[264.333,-99,0],"ti":[-116,-38.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[811.944,541.588,0],"to":[116,38.667,0],"ti":[-29.333,-103,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[1025.944,867.588,0],"to":[29.333,103,0],"ti":[-7.333,-104.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[987.944,1159.588,0],"to":[7.333,104.333,0],"ti":[-13.667,-55.667,0]},{"t":162,"s":[1069.944,1493.588,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-1,"op":180,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"O-26","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":65.096,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.809,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80.342,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85.787,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91.232,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97.768,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109.746,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115.191,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122.814,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133.705,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":151.131,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159.842,"s":[90]},{"t":174,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[-257.871,1754.129,0],"to":[127.667,-155.333,0],"ti":[-171,146.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[508.129,822.129,0],"to":[171,-146.667,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[768.129,874.129,0],"to":[-63.518,28.082,0],"ti":[11,-80.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[624.129,1120.129,0],"to":[-11,80.333,0],"ti":[0.667,-87,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[702.129,1356.129,0],"to":[-0.667,87,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[620.129,1642.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":189,"s":[696.129,1972.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33.514,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.65,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.096,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.809,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80.342,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85.787,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91.232,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97.768,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104.301,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109.746,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115.191,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122.814,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133.705,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141.328,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":151.131,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":159.842,"s":[51,46,100]},{"t":174,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":192,"st":12,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"O-22","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1956.129,1516.129,0],"to":[-128.667,-103,0],"ti":[198,107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1184.129,898.129,0],"to":[-198,-107,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[768.129,874.129,0],"to":[-63.518,28.082,0],"ti":[14,-57,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[614.129,1050.129,0],"to":[-14,57,0],"ti":[-1.667,-69,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[684.129,1216.129,0],"to":[1.667,69,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":132,"s":[624.129,1464.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":177,"s":[668.129,1782.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"O-9","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":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-23]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[-12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[90]},{"t":149,"s":[153]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1906.129,1248.129,0],"to":[-128.667,-103,0],"ti":[198,107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1134.129,630.129,0],"to":[-198,-107,0],"ti":[63.333,-28,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[718.129,606.129,0],"to":[-63.518,28.082,0],"ti":[14,-57,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[564.129,782.129,0],"to":[-14,57,0],"ti":[-1.667,-69,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[634.129,948.129,0],"to":[1.667,69,0],"ti":[1.333,-88.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":132,"s":[574.129,1196.129,0],"to":[-11.333,168.667,0],"ti":[0,0,0]},{"t":179,"s":[618.129,1514.129,0]}],"ix":2},"a":{"a":0,"k":[634.129,226.129,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[64,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[78.927,-78.488,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[89,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[81,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[81,54,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[81,-57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[61,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[70,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-65,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49,52,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[70,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-66,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-66,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":136,"s":[51,46,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[44.258,44.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[634.129,226.129],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"T-29","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":17,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":156,"s":[-25]},{"t":169,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[1697.36,1911.743,0],"to":[-114,-138,0],"ti":[170.333,176.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[1013.36,1083.743,0],"to":[-170.333,-176.667,0],"ti":[98,18.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[675.36,851.743,0],"to":[-98,-18.667,0],"ti":[60.333,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[425.36,971.743,0],"to":[-60.333,67.667,0],"ti":[9,-84.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[313.36,1257.743,0],"to":[-9,84.667,0],"ti":[-6.667,-78.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[371.36,1479.743,0],"to":[6.667,78.333,0],"ti":[3,-41.333,0]},{"t":177,"s":[353.36,1727.743,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":133,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":156,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":169,"s":[140,90.222,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":17,"op":197,"st":17,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"T-15","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":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[-25]},{"t":152,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1853.36,1615.743,0],"to":[-114,-138,0],"ti":[170.333,176.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1169.36,787.743,0],"to":[-170.333,-176.667,0],"ti":[98,18.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[831.36,555.743,0],"to":[-98,-18.667,0],"ti":[60.333,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[581.36,675.743,0],"to":[-60.333,67.667,0],"ti":[9,-84.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[469.36,961.743,0],"to":[-9,84.667,0],"ti":[-6.667,-78.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[527.36,1183.743,0],"to":[6.667,78.333,0],"ti":[3,-41.333,0]},{"t":160,"s":[509.36,1431.743,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[140,90.222,100]},{"t":161,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":27,"ty":4,"nm":"T-12","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":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-33]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[31]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[-41]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":139,"s":[-25]},{"t":152,"s":[-56]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-158,1606,0],"to":[94,-159.333,0],"ti":[-161,198,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[406,650,0],"to":[161,-198,0],"ti":[-94.667,0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[808,418,0],"to":[94.667,-0.333,0],"ti":[-14.667,-79.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[974,648,0],"to":[14.667,79.333,0],"ti":[2.333,-83,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[896,894,0],"to":[-2.333,83,0],"ti":[-4.333,-82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[960,1146,0],"to":[4.333,82.667,0],"ti":[6.333,-40.667,0]},{"t":162,"s":[922,1390,0]}],"ix":2},"a":{"a":0,"k":[-654,70,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[140,122.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[140,-115.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[140,-93.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[140,126.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[140,-88.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[140,96.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[140,-114.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[140,115.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107,"s":[140,97.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[140,-92.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[140,84.222,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":139,"s":[140,-95.778,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[140,90.222,100]},{"t":161,"s":[0,0,100]}],"ix":6}},"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":[[-634,52],[-681,73],[-675,88],[-629,68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-653.773,70.582],"ix":2},"a":{"a":0,"k":[-653.773,70.582],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":28,"ty":4,"nm":"T-13","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":9,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[-48.25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[-190]},{"t":160,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[2046.977,884.031,0],"to":[-177.333,-67,0],"ti":[185,82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[982.977,482.031,0],"to":[-185,-82.667,0],"ti":[67.333,-43.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[650.977,508.031,0],"to":[-67.333,43.667,0],"ti":[4,-96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[578.977,744.031,0],"to":[-4,96.667,0],"ti":[15.333,-109.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":139,"s":[626.977,1088.031,0],"to":[-15.333,109.667,0],"ti":[23.333,-52.333,0]},{"t":176,"s":[486.977,1402.031,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-88,-73,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[99,73.214,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-90,-89,100]},{"t":160,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":29,"ty":4,"nm":"T-24","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":19,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44.809,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.295,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61.021,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69.67,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81.559,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99.934,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125.875,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137.766,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152.896,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":162.625,"s":[-190]},{"t":172,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-152.042,731.431,0],"to":[61,-38.667,0],"ti":[-100.001,71.342,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[213.958,499.431,0],"to":[109.333,-78,0],"ti":[-82.333,-8.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[515.958,407.431,0],"to":[51.065,5.375,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[715.958,525.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[637.958,657.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":133,"s":[737.958,895.431,0],"to":[0,0,0],"ti":[0,0,0]},{"t":157,"s":[709.958,1205.431,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44.809,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.295,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61.021,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.67,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81.559,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.934,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109.662,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117.229,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125.875,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137.766,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152.896,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":162.625,"s":[-90,-89,100]},{"t":172,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":10,"op":190,"st":10,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"T-16","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34.809,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41.295,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.021,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59.67,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.559,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.934,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115.875,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127.766,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":142.896,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152.625,"s":[-190]},{"t":162,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-152.042,731.431,0],"to":[61,-38.667,0],"ti":[-100.001,71.342,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[213.958,499.431,0],"to":[109.333,-78,0],"ti":[-82.333,-8.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[515.958,407.431,0],"to":[51.065,5.375,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[715.958,525.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[637.958,657.431,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[737.958,895.431,0],"to":[0,0,0],"ti":[0,0,0]},{"t":147,"s":[709.958,1205.431,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34.809,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41.295,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.021,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.67,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.559,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.934,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.662,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":107.229,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115.875,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127.766,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":142.896,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152.625,"s":[-90,-89,100]},{"t":162,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":31,"ty":4,"nm":"T-18","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24.895,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35.49,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41.848,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51.385,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59.861,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71.516,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.529,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114.961,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126.615,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141.451,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150.986,"s":[-190]},{"t":169,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-57.348,2013.319,0],"to":[54,-202.333,0],"ti":[-95.667,254.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[266.652,799.319,0],"to":[95.667,-254.333,0],"ti":[-66.898,20.674,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[516.652,487.319,0],"to":[178.395,-55.13,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[976.652,523.319,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[1160.652,927.319,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[1116.652,1343.319,0],"to":[0,0,0],"ti":[0,0,0]},{"t":169,"s":[1136.652,1529.319,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24.895,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35.49,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41.848,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51.385,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59.861,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.516,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89.529,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99.066,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106.484,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114.961,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126.615,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141.451,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147.809,"s":[-90,-4.716,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150.986,"s":[-90,-89,100]},{"t":169,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":32,"ty":4,"nm":"T-11","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":9,"s":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[-22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[-88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[-149]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-173]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134,"s":[-204]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[-190]},{"t":160,"s":[-263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1736.5,1507.5,0],"to":[-108.667,-145.333,0],"ti":[168,181.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1084.5,635.5,0],"to":[-168,-181.333,0],"ti":[90,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[728.5,419.5,0],"to":[-90,-2,0],"ti":[19,-77.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[544.5,623.5,0],"to":[-19,77.333,0],"ti":[-3.333,-88,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[614.5,883.5,0],"to":[3.333,88,0],"ti":[1,-94.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[564.5,1151.5,0],"to":[-1,94.333,0],"ti":[-7.333,-49.667,0]},{"t":160,"s":[608.5,1449.5,0]}],"ix":2},"a":{"a":0,"k":[-531.5,-118.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[-102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[-90,-82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[-90,87,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-90,-95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[-90,111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[-90,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134,"s":[-90,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-90,-89,100]},{"t":160,"s":[0,0,100]}],"ix":6}},"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":[[-504,-134],[-564,-120],[-560,-103],[-499,-117]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":[-531.539,-116.938],"ix":2},"a":{"a":0,"k":[-531.539,-116.938],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":33,"ty":4,"nm":"T-10","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":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[159]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[189]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[234]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[276]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[347]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[320]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[403]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[486]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[557]},{"t":147,"s":[648]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-522,933,0],"to":[156.667,-61,0],"ti":[-222.667,82.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[418,567,0],"to":[222.667,-82.833,0],"ti":[-158.716,35.142,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[814,436,0],"to":[105.995,-23.469,0],"ti":[-20.667,-62.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[988,650,0],"to":[20.667,62.333,0],"ti":[0,-60.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[938,810,0],"to":[0,60.333,0],"ti":[-1.333,-69.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[988,1012,0],"to":[1.333,69.667,0],"ti":[7,-36,0]},{"t":147,"s":[946,1228,0]}],"ix":2},"a":{"a":0,"k":[-642,-213,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[-82,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-82,-75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[-82,106,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[93,106,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[93,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[-91,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-91,64,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[81,64,100]},{"t":147,"s":[0,0,100]}],"ix":6}},"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":[[-622,-237],[-663,-221],[-643,-189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980392157,0.662745098039,0.231372563979,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":34,"ty":4,"nm":"S-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[16.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-31.4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[14.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[46.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[74.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[120.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[186.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[255.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[337.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[414.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[490.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[568.6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[651.6]},{"t":136,"s":[724.6]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-321.388,1282.237,0],"to":[134.333,-113.667,0],"ti":[-191,139.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[484.612,600.237,0],"to":[191,-139.333,0],"ti":[-111,-22.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[824.612,446.237,0],"to":[75.267,15.144,0],"ti":[-13,-98,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[952.612,702.237,0],"to":[13,98,0],"ti":[-1.667,-93.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[902.612,1034.237,0],"to":[1.667,93.333,0],"ti":[-5.333,-77.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[962.612,1262.237,0],"to":[5.333,77.667,0],"ti":[0,0,0]},{"t":136,"s":[934.612,1500.237,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,-24.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[69.82,30.128,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[61.82,45.128,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[61.82,-39.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[-34.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[49.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[-42.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[40.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-39.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[49.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-36.18,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[52.82,-47.872,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":129,"s":[-34.18,-47.872,100]},{"t":136,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"S-3","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":5,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[-25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-155]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[-59]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-232]},{"t":129,"s":[-173]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-122.64,1491.443,0],"to":[88,-136.667,0],"ti":[-123.846,184.909,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[405.36,671.443,0],"to":[144,-215,0],"ti":[-86.667,-0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[717.36,453.443,0],"to":[86.667,0.333,0],"ti":[-16.333,-60.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[925.36,673.443,0],"to":[16.333,60.333,0],"ti":[0,-50.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[815.36,815.443,0],"to":[0,50.667,0],"ti":[-9.667,-52.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[925.36,977.443,0],"to":[9.667,52.333,0],"ti":[8.667,-25.333,0]},{"t":129,"s":[873.36,1129.443,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,58.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[58.82,43.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[58.82,-31.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[58.82,50.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[58.82,-57.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[58.82,40.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-58.18,56.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[-58.18,-35.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[55.82,-46.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[55.82,51.82,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":36,"ty":4,"nm":"S-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":5,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[-25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[-94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-155]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[-59]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-147]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-198]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-232]},{"t":129,"s":[-173]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1866,1056,0],"to":[-165.333,-100.333,0],"ti":[223.333,113.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[874,454,0],"to":[-223.333,-113.333,0],"ti":[86,-29,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[526,376,0],"to":[-86,29,0],"ti":[14.333,-93.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[358,628,0],"to":[-14.333,93.333,0],"ti":[-4.667,-101.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[440,936,0],"to":[4.667,101.333,0],"ti":[3.333,-85.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[386,1236,0],"to":[-3.333,85.667,0],"ti":[-5.667,-35.667,0]},{"t":129,"s":[420,1450,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[58.82,58.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[58.82,43.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[58.82,-31.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[58.82,50.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[58.82,-57.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[58.82,40.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[-58.18,56.82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[-58.18,-35.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[55.82,-46.18,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[55.82,51.82,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.724,-0.713],[0,0],[0,0],[2.43,1.422],[0,0],[0,0],[0.713,2.724],[0,0],[0,0],[-1.421,2.43],[0,0],[0,0],[-2.723,0.712],[0,0],[0,0],[-2.43,-1.421],[0,0],[0,0],[-0.713,-2.723],[0,0],[0,0],[1.422,-2.43],[0,0]],"o":[[1.422,2.43],[0,0],[0,0],[-0.713,2.724],[0,0],[0,0],[-2.43,1.422],[0,0],[0,0],[-2.723,-0.713],[0,0],[0,0],[-1.421,-2.43],[0,0],[0,0],[0.713,-2.723],[0,0],[0,0],[2.43,-1.421],[0,0],[0,0],[2.724,0.712],[0,0],[0,0]],"v":[[44.678,14.839],[42.085,21.098],[25.452,25.452],[21.098,42.085],[14.839,44.677],[-0.001,35.995],[-14.84,44.677],[-21.098,42.085],[-25.453,25.452],[-42.087,21.098],[-44.678,14.839],[-35.997,-0.001],[-44.678,-14.84],[-42.087,-21.098],[-25.453,-25.454],[-21.098,-42.087],[-14.84,-44.678],[-0.001,-35.997],[14.839,-44.678],[21.098,-42.087],[25.452,-25.454],[42.085,-21.098],[44.678,-14.84],[35.995,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[49.256,49.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"T-17","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":[-237]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[-237]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[-267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[-332]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[-365]},{"t":111,"s":[-339]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1957.298,1083.197,0],"to":[-139.333,-57.333,0],"ti":[224,73,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1121.298,739.197,0],"to":[-224,-73,0],"ti":[132.333,-40,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[613.298,645.197,0],"to":[-132.333,40,0],"ti":[58.667,-107.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[327.298,979.197,0],"to":[-58.667,107.667,0],"ti":[-5.667,-125.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[261.298,1291.197,0],"to":[5.063,112.274,0],"ti":[-1.385,-5.613,0]},{"t":138,"s":[347.298,1689.197,0]}],"ix":2},"a":{"a":0,"k":[-482.7,-91.902,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":38,"ty":4,"nm":"T-27","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":[-188]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[-205]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[-326]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-339]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-350]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[-372]},{"t":156,"s":[-354]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1357.853,2058.837,0],"to":[-30.667,-213.333,0],"ti":[76,222.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[1173.853,778.837,0],"to":[-76,-222.333,0],"ti":[137.333,-201,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[901.853,724.837,0],"to":[-26.074,38.161,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[773.853,1208.837,0],"to":[0,0,0],"ti":[0,0,0]},{"t":157,"s":[805.853,1510.837,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[93,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-76,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[73,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-72,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-72,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-76,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[88,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127,"s":[86,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[84,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-92,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[105,100,100]},{"t":156,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,1,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":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":4,"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":"T-19","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":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[-6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[3]},{"t":126,"s":[-10]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-386.382,1907.427,0],"to":[88.667,-196.667,0],"ti":[-129.768,244.335,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[145.618,727.427,0],"to":[153.667,-289.333,0],"ti":[-79,-31.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[559.618,543.427,0],"to":[70.189,27.839,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[807.618,821.427,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[829.618,1225.427,0],"to":[0,0,0],"ti":[0,0,0]},{"t":139,"s":[797.618,1497.427,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,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":"fl","c":{"a":0,"k":[0.090196078431,0.058823533152,1,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":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":4,"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":4,"nm":"T-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[-6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[3]},{"t":126,"s":[-10]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-295,857,0],"to":[124.167,-63.167,0],"ti":[-117,63.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[450,478,0],"to":[39.654,-21.409,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[650,453,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":[664,653,0],"to":[0,0,0],"ti":[0,0,0]},{"t":141,"s":[684,1217,0]}],"ix":2},"a":{"a":0,"k":[-478.586,-98.192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-112,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-90,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":86,"s":[101,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[-85,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[89,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[91,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[-96,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[90,100,100]},{"t":138,"s":[0,0,100]}],"ix":6}},"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":[[-480,-132],[-440,-40],[-408,-130],[-442,-114]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-481.074,-91.891],"ix":2},"a":{"a":0,"k":[-440.395,-89.223],"ix":1},"s":{"a":0,"k":[52.354,52.354],"ix":3},"r":{"a":0,"k":0,"ix":6},"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":41,"ty":4,"nm":"T-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0]},{"t":27,"s":[-61]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1528.5,791.5,0],"to":[-79.667,-31.333,0],"ti":[117.494,37.533,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[1050.5,603.5,0],"to":[-96,-30.667,0],"ti":[28.814,28.838,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[856.5,481.5,0],"to":[-63.051,-63.105,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[791.5,615.5,0],"to":[0,0,0],"ti":[-83.667,-15.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[876.5,712.5,0],"to":[-7.333,31.833,0],"ti":[99.167,-2.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[747.5,806.5,0],"to":[0.833,33.833,0],"ti":[-85.349,23.093,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[881.5,915.5,0],"to":[41.035,-11.103,0],"ti":[0,0,0]},{"t":134,"s":[826.5,1055.5,0]}],"ix":2},"a":{"a":0,"k":[596.5,-222.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[70.213,70.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":39,"s":[-51.787,70.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-51.787,-64.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[-51.787,53.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-51.787,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[61.213,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[61.213,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[61.213,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[-53.787,-51.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[-53.787,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[59.213,46.213,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[59.213,-48.787,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-52.787,-48.787,100]},{"t":134,"s":[0,0,100]}],"ix":6}},"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]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[583,-246],[570,-221],[588,-199],[619,-217],[616,-240]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":42,"ty":4,"nm":"O-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[51]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[301.357]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-27.83,766.17,0],"to":[68.5,-40.167,0],"ti":[-106.942,71.404,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[383.17,525.17,0],"to":[108.333,-72.333,0],"ti":[-70.333,-39.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[761.17,464.17,0],"to":[50.377,28.173,0],"ti":[-1.833,-66.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[723.17,664.17,0],"to":[1.833,66.167,0],"ti":[1.5,-85.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[772.17,861.17,0],"to":[-1.5,85.167,0],"ti":[0,0,0]},{"t":112,"s":[714.17,1175.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[-35.578,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[56.422,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-46.578,39.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[48.422,34.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[48.422,-53.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[48.422,59.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[-38.578,59.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-44.578,-52.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[46.422,-51.378,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[-45.578,-51.378,100]},{"t":113,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"O-8","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":12,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[137]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[188]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[215]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[170]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[226]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[341]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[379]},{"t":108,"s":[416]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-339.83,780.17,0],"to":[186.333,-47,0],"ti":[-258.434,84.531,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[778.17,498.17,0],"to":[231.333,-75.667,0],"ti":[-122.667,-72.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[1164.17,478.17,0],"to":[45.476,26.816,0],"ti":[-0.667,-77.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[1144.17,704.17,0],"to":[0.667,77.667,0],"ti":[0.333,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[1168.17,944.17,0],"to":[-0.333,72.667,0],"ti":[0.667,-65,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[1142.17,1140.17,0],"to":[-0.667,65,0],"ti":[0,0,0]},{"t":108,"s":[1164.17,1334.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-37.808,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[36.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-34.808,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[47.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[47.192,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[47.192,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76,"s":[47.192,-41,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[47.192,46,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[47.192,-39,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[47.192,49,100]},{"t":108,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"O-19","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":7.176,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14.699,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23.48,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[71.837]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56.088,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63.613,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.648,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.428,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102.494,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116.289,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126.322,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137.611,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155.17,"s":[264]},{"t":179,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-202.549,1698.312,0],"to":[112.333,-140.333,0],"ti":[-188,130.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[471.451,856.312,0],"to":[188,-130.667,0],"ti":[4,-96,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[925.451,914.312,0],"to":[-3.17,76.092,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[857.451,1266.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[989.451,1422.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":178,"s":[919.451,1602.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7.176,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[51.497,-58.369,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23.48,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-47.904,89.868,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56.088,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63.613,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.648,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.428,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102.494,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116.289,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126.322,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137.611,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155.17,"s":[59.192,75,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"O-14","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":7.176,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14.35,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22.721,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53.811,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60.986,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.553,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78.924,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98.057,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111.209,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120.775,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131.539,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":148.279,"s":[264]},{"t":171,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-590.549,1004.312,0],"to":[158.667,-68.667,0],"ti":[-239.667,74.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.783,"s":[361.451,592.312,0],"to":[239.667,-74.333,0],"ti":[-123,-38,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33.482,"s":[847.451,558.312,0],"to":[123,38,0],"ti":[6,-57.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.377,"s":[1099.451,820.312,0],"to":[-6.27,60.262,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83.707,"s":[1063.451,1014.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106.426,"s":[1117.451,1242.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":145.888671875,"s":[1053.451,1462.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7.176,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22.721,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53.811,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60.986,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.553,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.924,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98.057,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111.209,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120.775,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131.539,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":148.279,"s":[59.192,75,100]},{"t":171,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823559331,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"O-12","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":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-590.549,1004.312,0],"to":[158.667,-68.667,0],"ti":[-239.667,74.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[361.451,592.312,0],"to":[239.667,-74.333,0],"ti":[-123,-38,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[847.451,558.312,0],"to":[123,38,0],"ti":[6,-57.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[1099.451,820.312,0],"to":[-6.27,60.262,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[1063.451,1014.312,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[1117.451,1242.312,0],"to":[0,0,0],"ti":[0,0,0]},{"t":152,"s":[1015.451,1716.312,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"O-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[58]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[-2.424]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[154]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[290]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[270]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[239]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[267]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[303]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[281]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[264]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[288]},{"t":143,"s":[305]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-35.83,864.17,0],"to":[88,-52,0],"ti":[-110.304,95.416,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[492.17,552.17,0],"to":[108.667,-94,0],"ti":[-78.667,-108,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[772.17,528.17,0],"to":[27.576,37.859,0],"ti":[-1.5,-59.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[729.17,689.17,0],"to":[1.5,59.833,0],"ti":[-0.167,-65.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[781.17,887.17,0],"to":[0.167,65.333,0],"ti":[2,-68.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[730.17,1081.17,0],"to":[-2,68.333,0],"ti":[0,0,0]},{"t":143,"s":[769.17,1297.17,0]}],"ix":2},"a":{"a":0,"k":[-125.83,-257.83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[27.192,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[55.858,84.333,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[62.192,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[-62.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[73.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-44.808,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[76.192,78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[61.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-44.808,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[65.192,-83,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[59.192,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[59.192,-52,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56.34,56.34],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.956862745098,0.490196078431,0.23137254902,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":[-125.83,-257.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.891,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"R-8","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36.133,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.199,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54.23,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.744,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84.396,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108.529,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118.182,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130.248,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":142.314,"s":[-180]},{"t":158,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1987.397,721.767,0],"to":[-141,-65.667,0],"ti":[209.667,68,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[1141.397,327.767,0],"to":[-209.667,-68,0],"ti":[110.667,-40.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[729.397,313.767,0],"to":[-110.667,40.667,0],"ti":[60.667,-112.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[477.397,571.767,0],"to":[-60.667,112.667,0],"ti":[18.667,-69.667,0]},{"t":157,"s":[365.397,989.767,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42.166,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.199,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54.23,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63.885,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.744,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84.396,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98.877,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108.529,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118.182,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":130.248,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":142.314,"s":[87,89,100]},{"t":158,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":49,"ty":4,"nm":"R-4","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1486.155,2039.47,0],"to":[-37.667,-220.333,0],"ti":[75.667,274.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1260.155,717.47,0],"to":[-75.667,-274.333,0],"ti":[60.667,26,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[1032.155,393.47,0],"to":[-60.667,-26,0],"ti":[26,-106,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[896.155,561.47,0],"to":[-26,106,0],"ti":[-0.667,-135.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":128,"s":[876.155,1029.47,0],"to":[0.667,135.333,0],"ti":[-4,-57.333,0]},{"t":153,"s":[900.155,1373.47,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":50,"ty":4,"nm":"R-5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[2265.189,1157.128,0],"to":[-248,-116.667,0],"ti":[328.333,103,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[777.189,457.128,0],"to":[-328.333,-103,0],"ti":[65,-55,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[295.189,539.128,0],"to":[-65,55,0],"ti":[10,-67.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[387.189,787.128,0],"to":[-10,67.667,0],"ti":[13.333,-72.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[235.189,945.128,0],"to":[-13.333,72.667,0],"ti":[-12,-46.333,0]},{"t":133,"s":[307.189,1223.128,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":51,"ty":4,"nm":"R-3","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[37.051,2047.851,0],"to":[42.333,-272.667,0],"ti":[-76,271.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[291.051,411.851,0],"to":[76,-271.667,0],"ti":[-48.333,-53.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[493.051,417.851,0],"to":[48.333,53.667,0],"ti":[-18.333,-106.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[581.051,733.851,0],"to":[18.333,106.333,0],"ti":[-3.667,-53.667,0]},{"t":133,"s":[603.051,1055.851,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":52,"ty":4,"nm":"R-7","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":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1927.842,1025.941,0],"to":[-126,-93.667,0],"ti":[209.618,146.832,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[1171.842,463.941,0],"to":[-210.333,-147.333,0],"ti":[98.573,-63.903,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[533.842,381.941,0],"to":[-198.691,128.809,0],"ti":[0,0,0]},{"t":133,"s":[329.842,823.941,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":53,"ty":4,"nm":"R-6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[-180]},{"t":144,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[1522,626.5,0],"to":[-90,-39,0],"ti":[112.133,39.487,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[982,392.5,0],"to":[-73.833,-26,0],"ti":[18.167,-19.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[857,368.5,0],"to":[-18.167,19.167,0],"ti":[3.833,-46.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[873,507.5,0],"to":[-3.833,46.833,0],"ti":[-1.833,-50.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[834,649.5,0],"to":[1.833,50.167,0],"ti":[-2.667,-64.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[884,808.5,0],"to":[2.667,64.333,0],"ti":[3.667,-57.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[850,1035.5,0],"to":[-3.667,57.833,0],"ti":[-2,-20,0]},{"t":144,"s":[862,1155.5,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[87,89,100]},{"t":144,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":11,"op":191,"st":11,"bm":0},{"ddd":0,"ind":54,"ty":4,"nm":"R-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[-190]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-177]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-209]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-171]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[-212]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-162]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[-164]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[-180]},{"t":133,"s":[-269]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1522,626.5,0],"to":[-90,-39,0],"ti":[112.133,39.487,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[982,392.5,0],"to":[-73.833,-26,0],"ti":[18.167,-19.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[857,368.5,0],"to":[-18.167,19.167,0],"ti":[3.833,-46.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[873,507.5,0],"to":[-3.833,46.833,0],"ti":[-1.833,-50.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[834,649.5,0],"to":[1.833,50.167,0],"ti":[-2.667,-64.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[884,808.5,0],"to":[2.667,64.333,0],"ti":[3.667,-57.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[850,1035.5,0],"to":[-3.667,57.833,0],"ti":[-2,-20,0]},{"t":133,"s":[862,1155.5,0]}],"ix":2},"a":{"a":0,"k":[632,-399.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[-81,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[102,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[105,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-109,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[108,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[-103,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":110,"s":[87,-100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120,"s":[87,89,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"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":[[624,-413],[617,-395],[636,-386],[647,-398]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":55,"ty":4,"nm":"R-9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":19,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-42,1355,0],"to":[132.667,-45.333,0],"ti":[-150.444,66.616,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[754,1083,0],"to":[157.333,-69.667,0],"ti":[-40.948,-43.78,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[1088,1049,0],"to":[62.667,67,0],"ti":[9.021,-73.174,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[1046,1293,0],"to":[-15,121.667,0],"ti":[-4.42,-85.74,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[1076,1517,0],"to":[8.333,161.667,0],"ti":[3,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[1012,1807,0],"to":[-3,61.333,0],"ti":[-7.667,-13,0]},{"t":127,"s":[1058,1885,0]}],"ix":2},"a":{"a":0,"k":[-666.202,57.656,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[136.341,102.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[136.341,-61.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[136.341,86.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[136.341,-75.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[136.341,90.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[136.341,-97.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[136.341,98.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[136.341,-76.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[136.341,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-85.659,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-121.659,-74.936,100]},{"t":123,"s":[0,0,100]}],"ix":6}},"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":[[-663.5,41],[-686,48],[-676,72],[-653,65.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":56,"ty":4,"nm":"R-1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":19,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-210,613,0],"to":[132.667,-45.333,0],"ti":[-150.444,66.616,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[586,341,0],"to":[157.333,-69.667,0],"ti":[-40.948,-43.78,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[920,307,0],"to":[62.667,67,0],"ti":[9.021,-73.174,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[878,551,0],"to":[-15,121.667,0],"ti":[-4.42,-85.74,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[908,775,0],"to":[8.333,161.667,0],"ti":[3,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[844,1065,0],"to":[-3,61.333,0],"ti":[-7.667,-13,0]},{"t":127,"s":[890,1143,0]}],"ix":2},"a":{"a":0,"k":[-666.202,57.656,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[136.341,102.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[136.341,-61.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48,"s":[136.341,86.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[136.341,-75.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[136.341,90.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[136.341,-97.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[136.341,98.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[136.341,-76.936,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[136.341,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[-85.659,85.064,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-121.659,-74.936,100]},{"t":123,"s":[0,0,100]}],"ix":6}},"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":[[-663.5,41],[-686,48],[-676,72],[-653,65.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":57,"ty":4,"nm":"T-21","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":29,"s":[-28]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36.707,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48.816,"s":[90]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55.422,"s":[107]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.33,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.137,"s":[104]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84.045,"s":[127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95.055,"s":[99]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108.266,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120.377,"s":[98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":134.688,"s":[79]},{"t":149,"s":[110]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[-290.189,931.055,0],"to":[110,-82.667,0],"ti":[-159.04,103.808,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[369.811,435.055,0],"to":[159.333,-104,0],"ti":[-84.186,-15.812,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[835.811,343.055,0],"to":[306.178,57.506,0],"ti":[20.65,-228.196,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[1113.811,759.055,0],"to":[-35.926,396.999,0],"ti":[0,0,0]},{"t":149,"s":[1221.811,1333.055,0]}],"ix":2},"a":{"a":0,"k":[539,27,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-113.632,147.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36.707,"s":[100.368,184.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":48.816,"s":[-91.632,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55.422,"s":[86.368,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65.33,"s":[-66.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.137,"s":[100.368,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84.045,"s":[-71.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95.055,"s":[85.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108.266,"s":[-65.632,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":120.377,"s":[93.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":134.688,"s":[-78.632,162.368,100]},{"t":149,"s":[0,0,100]}],"ix":6}},"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":[[548,8],[525,24],[553,46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223529426724,0.478431402468,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":9,"op":189,"st":9,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"T-4","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":20,"s":[-28]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[90]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[107]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[104]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[127]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[99]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[79]},{"t":129,"s":[110]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1670,1028,0],"to":[-139.167,-49.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[835,733,0],"to":[0,0,0],"ti":[10.667,-23.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[713,613,0],"to":[-10.667,23.333,0],"ti":[-6.667,-67.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[771,873,0],"to":[6.667,67.333,0],"ti":[-2,-53.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[753,1017,0],"to":[2,53.667,0],"ti":[-2,-54,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83,"s":[783,1195,0],"to":[2,54,0],"ti":[0.333,-40.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[765,1341,0],"to":[-0.333,40.667,0],"ti":[-2.667,-16.333,0]},{"t":129,"s":[781,1439,0]}],"ix":2},"a":{"a":0,"k":[539,27,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-113.632,147.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[100.368,184.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-91.632,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[86.368,174.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-66.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":61,"s":[100.368,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-71.632,168.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[85.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[-65.632,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[93.368,162.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[-78.632,162.368,100]},{"t":129,"s":[0,0,100]}],"ix":6}},"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":[[548,8],[525,24],[553,46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317647058824,0.639215686275,0.458823529412,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":59,"ty":4,"nm":"T-3","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":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-37.132,1450.841,0],"to":[88.5,-174,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[493.868,406.841,0],"to":[0,0,0],"ti":[-16.5,-48,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[631.868,328.841,0],"to":[16.5,48,0],"ti":[0.5,-122,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[592.868,694.841,0],"to":[-0.5,122,0],"ti":[-2,-109,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[628.868,1060.841,0],"to":[2,109,0],"ti":[-1,-82.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[604.868,1348.841,0],"to":[1,82.5,0],"ti":[-5,-34.5,0]},{"t":129,"s":[634.868,1555.841,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":60,"ty":4,"nm":"T-14","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":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-518.504,962.498,0],"to":[153.667,-68.667,0],"ti":[-226.667,77,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[403.496,550.498,0],"to":[226.667,-77,0],"ti":[-81.333,-36,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[841.496,500.498,0],"to":[81.333,36,0],"ti":[-9.333,-94,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[969.496,728.498,0],"to":[9.333,94,0],"ti":[3,-104,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[897.496,1064.498,0],"to":[-3,104,0],"ti":[0,0,0]},{"t":138,"s":[951.496,1352.498,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.207843152214,0.301960784314,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":61,"ty":4,"nm":"T-31","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":47,"s":[0]},{"t":149,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[1566.5,1321.5,0],"to":[-116,-54.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[870.5,993.5,0],"to":[0,0,0],"ti":[17.667,-27.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[752.5,943.5,0],"to":[-17.667,27.333,0],"ti":[0.333,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[764.5,1157.5,0],"to":[-0.333,59.333,0],"ti":[-4,-52.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[750.5,1299.5,0],"to":[4,52.667,0],"ti":[-1,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[788.5,1473.5,0],"to":[1,56,0],"ti":[5.333,-27,0]},{"t":149,"s":[756.5,1635.5,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":105,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[100,-54,100]},{"t":150,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":202,"st":22,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"T-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":127,"s":[229]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1526.5,675.5,0],"to":[-116,-54.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[830.5,347.5,0],"to":[0,0,0],"ti":[17.667,-27.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[712.5,297.5,0],"to":[-17.667,27.333,0],"ti":[0.333,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[724.5,511.5,0],"to":[-0.333,59.333,0],"ti":[-4,-52.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[710.5,653.5,0],"to":[4,52.667,0],"ti":[-1,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[748.5,827.5,0],"to":[1,56,0],"ti":[5.333,-27,0]},{"t":127,"s":[716.5,989.5,0]}],"ix":2},"a":{"a":0,"k":[500.5,-16.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[100,-68,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[100,75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[100,79,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[100,-78,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,-67,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[100,-88,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,57,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":118,"s":[100,-54,100]},{"t":128,"s":[0,0,100]}],"ix":6}},"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":[[516,-30],[485,-27],[504,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"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":63,"ty":4,"nm":"T-1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"t":24,"s":[100]}],"ix":11},"r":{"a":0,"k":12,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[60,946,0],"to":[68,-89.333,0],"ti":[-90,100.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[468,410,0],"to":[90,-100.833,0],"ti":[-18,-28.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[600,341,0],"to":[18,28.5,0],"ti":[-4,-78.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[576,581,0],"to":[4,78.5,0],"ti":[-0.5,-78.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[624,812,0],"to":[0.5,78.5,0],"ti":[-1,-109,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[579,1052,0],"to":[1,109,0],"ti":[-26.5,-66,0]},{"t":179,"s":[630,1466,0]}],"ix":2},"a":{"a":0,"k":[-286,-54,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[71.429,56.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[71.429,-39.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[71.429,49.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[71.429,46.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[71.429,-49.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[71.429,53.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[71.429,38.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[71.429,-43.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[71.429,52.098,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[71.429,-34.902,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":156,"s":[71.429,41.098,100]},{"t":179,"s":[0,0,100]}],"ix":6}},"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":[[-251,-95],[-321,-60],[-282,-13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936228553922,0.209231582342,0.302645066205,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":64,"ty":4,"nm":"O-4","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[111]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[42.552]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[-29.25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[80.667]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[259.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":147,"s":[153.545]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[1]},{"t":166,"s":[30]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-47.06,1449.593,0],"to":[83.333,-114,0],"ti":[-107.333,59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[452.94,765.593,0],"to":[107.333,-59.333,0],"ti":[-11.333,-112.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[596.94,1093.593,0],"to":[11.333,112.333,0],"ti":[4.667,-107,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[520.94,1439.593,0],"to":[-4.667,107,0],"ti":[-8,-49.333,0]},{"t":164,"s":[568.94,1735.593,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-103,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[84.286,-92.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[84.286,123.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-146.714,123.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[-124.714,-82.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-124.714,90.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[100.286,90.714,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":147,"s":[100.286,-63.286,100]},{"t":166,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254901961,0.207843137255,0.301960784314,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"O-24","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":11,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":143,"s":[46]},{"t":176,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[1662.603,932.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1130.603,280.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[1124.603,444.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[1072.603,644.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1144.603,796.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":147,"s":[1090.603,928.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":172,"s":[1114.603,1068.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":104,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":112,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":143,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":163,"s":[-29.939,40.939,100]},{"t":176,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":11,"op":191,"st":11,"bm":0},{"ddd":0,"ind":66,"ty":4,"nm":"O-23","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":18,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":86,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[46]},{"t":183,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1658.603,1608.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[1126.603,956.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[1120.603,1120.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[1068.603,1320.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":128,"s":[1140.603,1472.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":154,"s":[1086.603,1604.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":179,"s":[1110.603,1744.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":39,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":85,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":98,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":135,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":150,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":170,"s":[-29.939,40.939,100]},{"t":183,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":198,"st":18,"bm":0},{"ddd":0,"ind":67,"ty":4,"nm":"O-3","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1574.603,1402.225,0],"to":[-48.667,-124.667,0],"ti":[142.667,96.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[1042.603,750.225,0],"to":[-116.108,-78.671,0],"ti":[-5.667,-124.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[1036.603,914.225,0],"to":[5.667,124.667,0],"ti":[26.667,-57.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[984.603,1114.225,0],"to":[-26.667,57.333,0],"ti":[-1.333,-46,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[1056.603,1266.225,0],"to":[1.333,74,0],"ti":[2.667,-64,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":136,"s":[1002.603,1398.225,0],"to":[27.333,82,0],"ti":[0,0,0]},{"t":162,"s":[1026.603,1538.225,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[32.964,32.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"O-17","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":20,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":137,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":152,"s":[46]},{"t":185,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":174,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":100,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":172,"s":[-29.939,40.939,100]},{"t":185,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":200,"st":20,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"O-25","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":8,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[46]},{"t":173,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[-421.019,1828.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[287.981,812.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[319.981,1150.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[301.981,1536.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":162,"s":[315.981,1740.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":140,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":160,"s":[-29.939,40.939,100]},{"t":173,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":188,"st":8,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"O-21","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":13,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[46]},{"t":178,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":167,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":106,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":130,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":145,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[-29.939,40.939,100]},{"t":178,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":193,"st":13,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"O-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[98.617]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[-12.283]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-239.019,1512.154,0],"to":[72.667,-170.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[469.981,496.154,0],"to":[0,0,0],"ti":[-63.981,-82.154,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[501.981,834.154,0],"to":[63.981,82.154,0],"ti":[0.667,-98.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[483.981,1220.154,0],"to":[-0.667,98.333,0],"ti":[0,0,0]},{"t":154,"s":[497.981,1424.154,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[59,-86,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[36,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[53.286,-62.286,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,70,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[72,94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[-83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"O-9","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":[62.83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[22.83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[-106.735]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[-107.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[-68.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[-117.17]},{"t":143,"s":[-82.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1626.686,1627.702,0],"to":[-95.333,-150.333,0],"ti":[141.333,199.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[1054.686,725.702,0],"to":[-141.333,-199.333,0],"ti":[55.725,30.712,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[778.686,431.702,0],"to":[-132.537,-73.045,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[572.686,629.702,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":[638.686,777.702,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[512.686,913.702,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[632.686,1089.702,0],"to":[0,0,0],"ti":[0,0,0]},{"t":144,"s":[568.686,1287.702,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,60.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[100,60.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-58.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[100,74.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[100,-69.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[100,69.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-74,69.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[-74,-59.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[62,-59.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":103,"s":[62,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-62,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[68,63.385,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[68,-56.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":131,"s":[-61,-56.615,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":137,"s":[-61,62.385,100]},{"t":143,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"O-16","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[-29.837]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-142.599]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[-23.98]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[-86.17]},{"t":124,"s":[-166.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-696.875,1239.124,0],"to":[218.667,-124,0],"ti":[-291,127.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[615.125,495.124,0],"to":[291,-127.667,0],"ti":[-101,-48.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[1049.125,473.124,0],"to":[101,48.667,0],"ti":[-4.333,-69.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1221.125,787.124,0],"to":[4.333,69.667,0],"ti":[11,-50,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103,"s":[1075.125,891.124,0],"to":[-11,50,0],"ti":[-8.667,-69.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[1155.125,1087.124,0],"to":[8.667,69.333,0],"ti":[4.667,-36.667,0]},{"t":131,"s":[1127.125,1307.124,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"O-15","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"t":115,"s":[-86.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1999.125,1187.124,0],"to":[-202,-107.333,0],"ti":[278,104.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[787.125,543.124,0],"to":[-278,-104.667,0],"ti":[99.333,-56,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[331.125,559.124,0],"to":[-99.333,56,0],"ti":[-2,-82.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[191.125,879.124,0],"to":[2,82.667,0],"ti":[-9.333,-63.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[343.125,1055.124,0],"to":[9.333,63.333,0],"ti":[8,-59.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[247.125,1259.124,0],"to":[-8,59.333,0],"ti":[-8,-25.333,0]},{"t":131,"s":[295.125,1411.124,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"O-7","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":35,"s":[-30.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[-96.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-81.17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[-97.17]},{"t":115,"s":[-86.17]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1806.483,1154.389,0],"to":[-150,-99,0],"ti":[181.066,127.037,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[906.483,560.389,0],"to":[-206.339,-144.768,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[628.983,476.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[645.983,619.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[628.983,873.889,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[679.983,1137.889,0],"to":[0,0,0],"ti":[0,0,0]},{"t":134,"s":[679.983,1270.889,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,55,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[100,62,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":52,"s":[100,47,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[100,66,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[100,-60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":83,"s":[100,53,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":87,"s":[100,-50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":102,"s":[100,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":109,"s":[100,-61,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,66,100]},{"t":131,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.252440927543,0.660968137255,0.230731320849,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":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":76,"ty":4,"nm":"O-20","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-35.84,1720.16,0],"to":[76,-186.333,0],"ti":[-129.333,181.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[420.16,602.16,0],"to":[129.333,-181.667,0],"ti":[-39,-41.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[740.16,630.16,0],"to":[39,41.667,0],"ti":[63.647,9.428,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[654.16,852.16,0],"to":[-71.674,-10.617,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[830.16,1050.16,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":138,"s":[676.16,1194.16,0],"to":[0,0,0],"ti":[0,0,0]},{"t":165,"s":[780.16,1384.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"O-11","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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-151.84,1396.16,0],"to":[66.667,-126.667,0],"ti":[-110,161,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[248.16,636.16,0],"to":[110,-161,0],"ti":[-77.333,17.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[508.16,430.16,0],"to":[77.333,-17.333,0],"ti":[-28,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[712.16,532.16,0],"to":[28,61.333,0],"ti":[0,-84,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[676.16,798.16,0],"to":[0,84,0],"ti":[-5,-61.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[712.16,1036.16,0],"to":[5,61.333,0],"ti":[1,-21.667,0]},{"t":151,"s":[706.16,1166.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"O-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":[-20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[62]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[131]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[238]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[132]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[46]},{"t":165,"s":[1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1570.16,1374.16,0],"to":[-52.667,-163,0],"ti":[138.667,143,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[990.16,504.16,0],"to":[-121.316,-125.107,0],"ti":[-28.643,-85.484,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[866.16,620.16,0],"to":[28.643,85.484,0],"ti":[71.84,-150.16,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[898.16,940.16,0],"to":[-71.84,150.16,0],"ti":[-1.667,-70.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":134,"s":[938.16,1274.16,0],"to":[1.667,70.333,0],"ti":[5,-14.667,0]},{"t":179,"s":[908.16,1362.16,0]}],"ix":2},"a":{"a":0,"k":[820.16,374.16,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-74,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-74,-81,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":68,"s":[-74,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[83,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[83,-76,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[83,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":117,"s":[-76,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":132,"s":[-76,-89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152,"s":[-29.939,40.939,100]},{"t":165,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[64.32,64.32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.806525795133,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[818.277,371.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[66.964,66.964],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"X-2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[72]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[79]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[97]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[87]},{"t":141,"s":[77]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1758.421,781.411,0],"to":[-146.5,-64,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[879.421,397.411,0],"to":[0,0,0],"ti":[36.421,-9.589,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[725.421,314.411,0],"to":[-93.661,24.659,0],"ti":[-25.417,-83.619,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[876.421,742.411,0],"to":[66.228,217.879,0],"ti":[9.5,-47,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":122,"s":[879.421,1111.411,0],"to":[-18.26,90.337,0],"ti":[0,0,0]},{"t":150,"s":[909.421,1294.411,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":49,"s":[-61,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[77,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[-57,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[46,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-54,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[47,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[-60,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":108,"s":[63,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":113,"s":[-58,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":123,"s":[70,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[-56,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":141,"s":[56,100,100]},{"t":150,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090000002992,0.059000000299,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-4","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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-313.76,1406.401,0],"to":[100,-99.667,0],"ti":[-185.333,134.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[286.24,808.401,0],"to":[185.333,-134.667,0],"ti":[-138.808,-43.073,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[798.24,598.401,0],"to":[330.358,102.512,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1116.24,1150.401,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[1020.24,1492.401,0],"to":[0,0,0],"ti":[0,0,0]},{"t":133,"s":[1124.24,1720.401,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-3","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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-217.76,942.401,0],"to":[116.667,-80.333,0],"ti":[-188,101.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[482.24,460.401,0],"to":[188,-101.333,0],"ti":[-83.333,9,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[910.24,334.401,0],"to":[73.93,-7.984,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[1090.24,514.401,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[1008.24,706.401,0],"to":[0,0,0],"ti":[0,0,0]},{"t":133,"s":[1042.24,846.401,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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":"X-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":[48]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[113]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[146]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[260]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[340]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[373]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[427]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[474]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[685]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[739]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[774]},{"t":133,"s":[871]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-320,1446,0],"to":[123.333,-131.333,0],"ti":[-177,166.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[420,658,0],"to":[177,-166.667,0],"ti":[-73.667,-0.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[742,446,0],"to":[64.251,0.581,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[862,626,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[828,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[906,1020,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[864,1300,0],"to":[0,0,0],"ti":[0,0,0]},{"t":144,"s":[888,1440,0]}],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[-51.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[-86.333,106.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[-86.333,-78.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[-86.333,91.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[-86.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[75.667,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[-68.333,70.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[-68.333,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":101,"s":[68.667,-77.152,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":114,"s":[68.667,67.848,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[68.667,-61.152,100]},{"t":133,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.097,5.254],[0,0],[2.867,-6.601],[0,0],[-5.254,-12.097],[0,0],[6.601,2.867],[0,0],[12.097,-5.254],[0,0],[-2.867,6.601],[0,0],[5.254,12.097],[0,0],[-6.601,-2.867],[0,0]],"o":[[0,0],[6.601,-2.867],[0,0],[-5.254,12.097],[0,0],[2.867,6.601],[0,0],[-12.097,-5.254],[0,0],[-6.601,2.867],[0,0],[5.254,-12.097],[0,0],[-2.867,-6.601],[0,0],[12.097,5.254]],"v":[[18.964,-36.523],[31.559,-41.993],[41.993,-31.559],[36.524,-18.964],[36.524,18.964],[41.993,31.559],[31.559,41.993],[18.964,36.523],[-18.964,36.523],[-31.559,41.993],[-41.993,31.559],[-36.523,18.964],[-36.523,-18.964],[-41.993,-31.559],[-31.559,-41.993],[-18.964,-36.523]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.221583961038,0.479934931736,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":[50,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[53,53],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"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}],"markers":[]} \ No newline at end of file diff --git a/app/client/src/components/editorComponents/Onboarding/Boxed.tsx b/app/client/src/components/editorComponents/Onboarding/Boxed.tsx deleted file mode 100644 index e865ae6e3d..0000000000 --- a/app/client/src/components/editorComponents/Onboarding/Boxed.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { OnboardingStep } from "constants/OnboardingConstants"; -import React, { ReactNode } from "react"; -import { useSelector } from "react-redux"; -import { getCurrentStep, inOnboarding } from "sagas/OnboardingSagas"; - -type BoxedProps = { - // child nodes are not visible until this step is reached - step: OnboardingStep; - // Any additional conditions to hide the children - show?: boolean; - children: ReactNode; -}; - -// Boxed(or hidden). -const Boxed: React.FC = (props: BoxedProps) => { - const currentStep = useSelector(getCurrentStep); - const onboarding = useSelector(inOnboarding); - - if (onboarding && currentStep < props.step && !props.show) { - return null; - } - - return <>{props.children}; -}; - -Boxed.defaultProps = { - show: false, -}; - -export default Boxed; diff --git a/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx b/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx deleted file mode 100644 index b621c5a7ea..0000000000 --- a/app/client/src/components/editorComponents/Onboarding/CompletionDialog.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import { Dialog, Icon } from "@blueprintjs/core"; -import { IconWrapper } from "constants/IconConstants"; -import { DATA_SOURCES_EDITOR_URL } from "constants/routes"; -import { HeaderIcons } from "icons/HeaderIcons"; -import AppInviteUsersForm from "pages/organization/AppInviteUsersForm"; -import React, { useEffect, useState } from "react"; -import { useDispatch } from "react-redux"; -import { useSelector } from "store"; -import styled from "styled-components"; -import { ReactComponent as BookIcon } from "assets/icons/ads/app-icons/book.svg"; -import { FormDialogComponent } from "../form/FormDialogComponent"; -import { getCurrentOrgId } from "selectors/organizationSelectors"; -import { getCurrentApplication } from "selectors/applicationSelectors"; -import { getCurrentPageId } from "selectors/editorSelectors"; -import { endOnboarding } from "actions/onboardingActions"; -import { getQueryParams } from "utils/AppsmithUtils"; -import { getOnboardingState } from "utils/storage"; - -const StyledDialog = styled(Dialog)` - && { - width: 850px; - background-color: white; - } -`; - -const ApplicationPublishedWrapper = styled.div` - padding: 33px; -`; - -const Title = styled.div` - font-weight: bold; - font-size: 36px; -`; - -const ContentWrapper = styled.div` - display: flex; - margin-top: 18px; -`; - -const DescriptionWrapper = styled.div` - flex: 1; - font-size: 17px; -`; - -const DescriptionTitle = styled.div` - font-weight: 500; - font-size: 17px; -`; - -const DescriptionList = styled.div` - margin-top: 8px; -`; - -const DescriptionItem = styled.div` - margin-top: 12px; -`; - -const QuickLinksWrapper = styled.div` - margin-left: 83px; - color: #716e6e; -`; - -const QuickLinksTitle = styled.div` - font-size: 14px; -`; - -const QuickLinksItem = styled.div` - font-size: 17px; - border-bottom: 1px solid #716e6e; - display: flex; - align-items: center; - cursor: pointer; - margin-top: 13px; - - .text { - margin-left: 3px; - } -`; - -const StyledButton = styled.button` - color: white; - background-color: #f3672a; - font-weight: 600; - font-size: 17px; - padding: 12px 24px; - border: none; - cursor: pointer; - margin-top: 30px; -`; - -const CompletionDialog = () => { - const [isOpen, setIsOpen] = useState(false); - const orgId = useSelector(getCurrentOrgId); - const currentApplication = useSelector(getCurrentApplication); - const pageId = useSelector(getCurrentPageId); - const dispatch = useDispatch(); - - useEffect(() => { - const params = getQueryParams(); - const showCompletionDialog = async () => { - const inOnboarding = await getOnboardingState(); - if (params.onboardingComplete && inOnboarding) { - setIsOpen(true); - } - }; - - showCompletionDialog(); - }, []); - - const onClose = () => { - setIsOpen(false); - dispatch(endOnboarding()); - }; - - return ( - - - - <span role="img" aria-label="raising hands"> - 🙌 - </span>{" "} - You’re Awesome! - - - - - You’ve completed this tutorial. Here’s a quick recap of things you - learnt - - - - - - 👉 - {" "} - Querying a database - - - - 👉 - {" "} - Building UI using widgets. - - - - 👉 - {" "} - Connecting widgets to queries using {"{{}}"} bindings - - - - 👉 - {" "} - Deploying your application - - - - - Continue on my own - - - - Quick Links: - - window.open("https://docs.appsmith.com/", "_blank") - } - > - - - - Read our documentation - - - - Invite users to your app - - } - canOutsideClickClose={true} - Form={AppInviteUsersForm} - orgId={orgId} - applicationId={currentApplication?.id} - title={ - currentApplication - ? currentApplication.name - : "Share Application" - } - /> - { - window.open( - DATA_SOURCES_EDITOR_URL(currentApplication?.id, pageId), - "_blank", - ); - }} - > - - Connect your database - - - - - - ); -}; - -export default CompletionDialog; diff --git a/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx b/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx deleted file mode 100644 index cb598a5bac..0000000000 --- a/app/client/src/components/editorComponents/Onboarding/Tooltip.tsx +++ /dev/null @@ -1,238 +0,0 @@ -import React, { - MutableRefObject, - ReactNode, - RefObject, - useEffect, - useRef, - useState, -} from "react"; -import { Classes, Icon, Popover, Position } from "@blueprintjs/core"; -import { useSelector } from "store"; -import { getTooltipConfig } from "sagas/OnboardingSagas"; -import { useDispatch } from "react-redux"; -import styled from "styled-components"; -import useClipboard from "utils/hooks/useClipboard"; -import { endOnboarding, showTooltip } from "actions/onboardingActions"; -import { Colors } from "constants/Colors"; -import { - OnboardingStep, - OnboardingTooltip, -} from "constants/OnboardingConstants"; - -enum TooltipClassNames { - TITLE = "tooltip-title", - DESCRIPTION = "tooltip-description", - SKIP = "tooltip-skip", - ACTION = "tooltip-action", - SNIPPET = "tooltip-snippet", -} - -const Wrapper = styled.div<{ isFinalStep: boolean }>` - width: 280px; - background-color: ${props => (props.isFinalStep ? "#F86A2B" : "#457ae6")}; - color: white; - padding: 10px; - - .${TooltipClassNames.TITLE} { - font-weight: 500; - font-size: 14px; - } - .${TooltipClassNames.DESCRIPTION} { - font-size: 12px; - margin-top: 8px; - } - .${TooltipClassNames.SKIP} { - font-size: 10px; - opacity: 0.7; - - span { - text-decoration: underline; - cursor: pointer; - } - } - .${TooltipClassNames.SNIPPET} { - background-color: #2c59b4; - color: white; - font-size: 12px; - display: flex; - justify-content: space-between; - align-items: center; - margin: 8px 0px; - position: relative; - cursor: pointer; - - & > span { - padding: 6px; - } - - & div.clipboard-message { - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - position: absolute; - z-index: 1; - &.success { - background: #2c59b4; - } - &.error { - background: ${Colors.RED}; - } - } - .${Classes.ICON} { - opacity: 0.7; - } - } - .${TooltipClassNames.ACTION} { - padding: 6px 10px; - cursor: pointer; - color: white; - border: none; - font-size: 12px; - background-color: #2c59b4; - } -`; - -const Container = styled.div<{ isFinalStep: boolean }>` - div.${Classes.POPOVER_ARROW} { - display: block; - } - .bp3-popover-arrow-fill { - fill: ${props => (props.isFinalStep ? "#F86A2B" : "#457ae6")}; - } -`; - -const ActionWrapper = styled.div` - display: flex; - align-items: center; - justify-content: space-between; - margin-top: 10px; -`; - -type OnboardingToolTipProps = { - step: OnboardingStep[]; - children: ReactNode; - show?: boolean; - position?: Position; -}; - -const OnboardingToolTip: React.FC = ( - props: OnboardingToolTipProps, -) => { - const [isOpen, setIsOpen] = useState(false); - const showingTooltip = useSelector( - state => state.ui.onBoarding.showingTooltip, - ); - const popoverRef: RefObject = useRef(null); - const tooltipConfig = useSelector(getTooltipConfig); - const { isFinalStep = false } = tooltipConfig; - - useEffect(() => { - if (props.step.includes(showingTooltip) && props.show) { - setIsOpen(true); - } else { - setIsOpen(false); - } - if (popoverRef.current) { - popoverRef.current.reposition(); - } - }, [props.step, props.show, showingTooltip, popoverRef]); - - if (isOpen) { - return ( - - - {props.children} - - - - ); - } - - return <>{props.children}; -}; - -OnboardingToolTip.defaultProps = { - show: true, -}; - -type ToolTipContentProps = { - details: OnboardingTooltip; -}; - -const ToolTipContent = (props: ToolTipContentProps) => { - const dispatch = useDispatch(); - const { - title, - description, - snippet, - action, - isFinalStep = false, - } = props.details; - const snippetRef: MutableRefObject = useRef(null); - const write = useClipboard(snippetRef); - - const copyBindingToClipboard = () => { - snippet && write(snippet); - }; - - const finishOnboarding = () => { - dispatch(endOnboarding()); - }; - - return ( - -
{title}
-
{description}
- - {snippet && ( -
- {snippet} - -
- )} - - - Done? Click here to End - - - {action && ( - - )} - -
- ); -}; - -export default OnboardingToolTip; diff --git a/app/client/src/constants/OnboardingConstants.tsx b/app/client/src/constants/OnboardingConstants.tsx deleted file mode 100644 index f1e18f084e..0000000000 --- a/app/client/src/constants/OnboardingConstants.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { setCurrentStep } from "actions/onboardingActions"; -import { ReduxAction, ReduxActionTypes } from "./ReduxActionConstants"; -import { EventName } from "../utils/AnalyticsUtil"; - -export enum OnboardingStep { - NONE = -1, - WELCOME = 0, - EXAMPLE_DATABASE = 1, - ADD_WIDGET = 2, - SUCCESSFUL_BINDING = 3, - DEPLOY = 4, -} - -export type OnboardingTooltip = { - title: string; - description: string; - action?: { - label: string; - action?: ReduxAction; - }; - snippet?: string; - isFinalStep?: boolean; -}; - -export type OnboardingStepConfig = { - setup: () => { type: string; payload?: any }[]; - tooltip: OnboardingTooltip; - eventName?: EventName; -}; - -export const OnboardingConfig: Record = { - [OnboardingStep.NONE]: { - setup: () => { - return []; - }, - tooltip: { - title: "", - description: "", - }, - }, - [OnboardingStep.WELCOME]: { - setup: () => { - // To setup the state if any - // Return action that needs to be dispatched - return [ - { - type: ReduxActionTypes.SHOW_WELCOME, - }, - ]; - }, - tooltip: { - title: "", - description: "", - }, - eventName: "ONBOARDING_WELCOME", - }, - [OnboardingStep.EXAMPLE_DATABASE]: { - setup: () => { - return [ - { - type: ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT, - }, - { - type: ReduxActionTypes.LISTEN_FOR_ADD_WIDGET, - }, - { - type: ReduxActionTypes.LISTEN_FOR_TABLE_WIDGET_BINDING, - }, - ]; - }, - tooltip: { - title: "Say hello to your example database", - description: - "Go ahead, check it out. You can also create a new query or connect to your own db as well.", - action: { - label: "Got It!", - }, - }, - eventName: "ONBOARDING_EXAMPLE_DATABASE", - }, - [OnboardingStep.ADD_WIDGET]: { - setup: () => { - return []; - }, - tooltip: { - title: - "Wohoo! Your first widget. 🎉 Go ahead and connect this to a Query", - description: - "Copy the example binding below and paste inside TableData input", - snippet: "{{ExampleQuery.data}}", - }, - eventName: "ONBOARDING_ADD_WIDGET", - }, - [OnboardingStep.SUCCESSFUL_BINDING]: { - setup: () => { - return [ - { - type: ReduxActionTypes.LISTEN_FOR_WIDGET_UNSELECTION, - }, - ]; - }, - tooltip: { - title: "This table is now connected to Example Query", - description: - "You can connect properties to variables on Appsmith with {{ }} bindings", - action: { - label: "Next", - action: setCurrentStep(OnboardingStep.DEPLOY), - }, - }, - eventName: "ONBOARDING_SUCCESSFUL_BINDING", - }, - [OnboardingStep.DEPLOY]: { - setup: () => { - return [ - { - type: ReduxActionTypes.LISTEN_FOR_DEPLOY, - }, - ]; - }, - tooltip: { - title: "You’re almost done! Just Hit Deploy", - description: - "Deploying your apps is a crucial step to building on appsmith.", - isFinalStep: true, - }, - eventName: "ONBOARDING_DEPLOY", - }, -}; diff --git a/app/client/src/constants/ReduxActionConstants.tsx b/app/client/src/constants/ReduxActionConstants.tsx index bbfbfa26e0..1a57fe0980 100644 --- a/app/client/src/constants/ReduxActionConstants.tsx +++ b/app/client/src/constants/ReduxActionConstants.tsx @@ -72,15 +72,6 @@ export const ReduxActionTypes: { [key: string]: string } = { CANCEL_RUN_ACTION_CONFIRM_MODAL: "CANCEL_RUN_ACTION_CONFIRM_MODAL", ACCEPT_RUN_ACTION_CONFIRM_MODAL: "ACCEPT_RUN_ACTION_CONFIRM_MODAL", CREATE_QUERY_INIT: "CREATE_QUERY_INIT", - CREATE_ONBOARDING_ACTION_INIT: "CREATE_ONBOARDING_ACTION_INIT", - CREATE_ONBOARDING_ACTION_SUCCESS: "CREATE_ONBOARDING_ACTION_SUCCESS", - CREATE_ONBOARDING_DBQUERY_SUCCESS: "CREATE_ONBOARDING_DBQUERY_SUCCESS", - END_ONBOARDING: "END_ONBOARDING", - SET_CURRENT_STEP: "SET_CURRENT_STEP", - SET_ONBOARDING_STATE: "SET_ONBOARDING_STATE", - NEXT_ONBOARDING_STEP: "NEXT_ONBOARDING_STEP", - INCREMENT_STEP: "INCREMENT_STEP", - SHOW_WELCOME: "SHOW_WELCOME", FETCH_DATASOURCES_INIT: "FETCH_DATASOURCES_INIT", FETCH_DATASOURCES_SUCCESS: "FETCH_DATASOURCES_SUCCESS", SAVE_DATASOURCE_NAME: "SAVE_DATASOURCE_NAME", @@ -101,14 +92,6 @@ export const ReduxActionTypes: { [key: string]: string } = { TEST_DATASOURCE_SUCCESS: "TEST_DATASOURCE_SUCCESS", DELETE_DATASOURCE_DRAFT: "DELETE_DATASOURCE_DRAFT", UPDATE_DATASOURCE_DRAFT: "UPDATE_DATASOURCE_DRAFT", - SHOW_ONBOARDING_TOOLTIP: "SHOW_ONBOARDING_TOOLTIP", - SHOW_ONBOARDING_COMPLETION_DIALOG: "SHOW_ONBOARDING_COMPLETION_DIALOG", - CREATE_ONBOARDING_DBQUERY_INIT: "CREATE_ONBOARDING_DBQUERY_INIT", - ADD_WIDGET_COMPLETE: "ADD_WIDGET_COMPLETE", - LISTEN_FOR_ADD_WIDGET: "LISTEN_FOR_ADD_WIDGET", - LISTEN_FOR_WIDGET_UNSELECTION: "LISTEN_FOR_WIDGET_UNSELECTION", - LISTEN_FOR_DEPLOY: "LISTEN_FOR_DEPLOY", - LISTEN_FOR_TABLE_WIDGET_BINDING: "LISTEN_FOR_TABLE_WIDGET_BINDING", FETCH_PUBLISHED_PAGE_INIT: "FETCH_PUBLISHED_PAGE_INIT", FETCH_PUBLISHED_PAGE_SUCCESS: "FETCH_PUBLISHED_PAGE_SUCCESS", DELETE_DATASOURCE_INIT: "DELETE_DATASOURCE_INIT", @@ -340,7 +323,6 @@ export const ReduxActionErrorTypes: { [key: string]: string } = { DELETE_ACTION_ERROR: "DELETE_ACTION_ERROR", RUN_ACTION_ERROR: "RUN_ACTION_ERROR", EXECUTE_ACTION_ERROR: "EXECUTE_ACTION_ERROR", - CREATE_ONBOARDING_ACTION_ERROR: "CREATE_ONBOARDING_ACTION_ERROR", FETCH_DATASOURCES_ERROR: "FETCH_DATASOURCES_ERROR", SEARCH_APIORPROVIDERS_ERROR: "SEARCH_APIORPROVIDERS_ERROR", UPDATE_DATASOURCE_ERROR: "UPDATE_DATASOURCE_ERROR", @@ -349,7 +331,6 @@ export const ReduxActionErrorTypes: { [key: string]: string } = { DELETE_DATASOURCE_ERROR: "DELETE_DATASOURCE_ERROR", FETCH_DATASOURCE_STRUCTURE_ERROR: "FETCH_DATASOURCE_STRUCTURE_ERROR", REFRESH_DATASOURCE_STRUCTURE_ERROR: "REFRESH_DATASOURCE_STRUCTURE_ERROR", - CREATE_ONBOARDING_DBQUERY_ERROR: "CREATE_ONBOARDING_DBQUERY_ERROR", FETCH_PUBLISHED_PAGE_ERROR: "FETCH_PUBLISHED_PAGE_ERROR", PUBLISH_APPLICATION_ERROR: "PUBLISH_APPLICATION_ERROR", FETCH_USER_DETAILS_ERROR: "FETCH_USER_DETAILS_ERROR", diff --git a/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx b/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx index a1c16197ba..31080a185b 100644 --- a/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx +++ b/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx @@ -15,7 +15,6 @@ import { getCanvasWidgetDsl, getCurrentPageName, } from "selectors/editorSelectors"; -import OnboardingCompletionDialog from "components/editorComponents/Onboarding/CompletionDialog"; import ConfirmRunModal from "pages/Editor/ConfirmRunModal"; import { getCurrentApplication } from "selectors/applicationSelectors"; import { @@ -115,7 +114,6 @@ class AppViewerPageContainer extends Component { pageName={this.props.currentPageName} /> - ); } diff --git a/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx b/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx index da7bd3b094..ad8c86f056 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/DBForm.tsx @@ -25,8 +25,6 @@ import AnalyticsUtil from "utils/AnalyticsUtil"; import { convertArrayToSentence } from "utils/helpers"; import BackButton from "./BackButton"; import { PluginType } from "entities/Action"; -import Boxed from "components/editorComponents/Onboarding/Boxed"; -import { OnboardingStep } from "constants/OnboardingConstants"; const { cloudHosting } = getAppsmithConfigs(); @@ -62,7 +60,7 @@ const DBForm = styled.div` padding: 20px; margin-left: 10px; margin-right: 0px; - height: calc(100vh - ${props => props.theme.headerHeight}); + max-height: 93vh; overflow: auto; .backBtn { padding-bottom: 1px; @@ -339,22 +337,20 @@ class DatasourceDBEditor extends React.Component< {viewMode && ( - - { - this.props.setDatasourceEditorMode( - this.props.datasourceId, - false, - ); - }} - /> - + { + this.props.setDatasourceEditorMode( + this.props.datasourceId, + false, + ); + }} + /> )} - {cloudHosting && pluginType === PluginType.DB && !viewMode && ( + {cloudHosting && pluginType === PluginType.DB && ( {`Whitelist the IP ${convertArrayToSentence( diff --git a/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx b/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx index 6650681574..49cd9d25c0 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/FormTitle.tsx @@ -14,7 +14,6 @@ import { getDataTree } from "selectors/dataTreeSelectors"; import { isNameValid } from "utils/helpers"; import { saveDatasourceName } from "actions/datasourceActions"; import { Spinner } from "@blueprintjs/core"; -import { getCurrentStep, inOnboarding } from "sagas/OnboardingSagas"; const Wrapper = styled.div` margin-left: 10px; @@ -53,14 +52,6 @@ const FormTitle = (props: FormTitleProps) => { }; }); - // For onboarding - const hideEditIcon = useSelector((state: AppState) => { - const currentStep = getCurrentStep(state); - const isInOnboarding = inOnboarding(state); - - return isInOnboarding && currentStep < 3; - }); - const hasNameConflict = React.useCallback( (name: string) => { const datasourcesNames: Record = {}; @@ -113,14 +104,13 @@ const FormTitle = (props: FormTitleProps) => { {saveStatus.isSaving && } diff --git a/app/client/src/pages/Editor/DataSourceEditor/index.tsx b/app/client/src/pages/Editor/DataSourceEditor/index.tsx index bbba7137dc..2a5a57ec57 100644 --- a/app/client/src/pages/Editor/DataSourceEditor/index.tsx +++ b/app/client/src/pages/Editor/DataSourceEditor/index.tsx @@ -135,6 +135,7 @@ const mapStateToProps = (state: AppState, props: any): ReduxStateProps => { const formData = getFormValues(DATASOURCE_DB_FORM)(state) as Datasource; const pluginId = _.get(datasource, "pluginId", ""); const plugin = getPlugin(state, pluginId); + return { pluginImages: getPluginImages(state), formData, diff --git a/app/client/src/pages/Editor/EditorHeader.tsx b/app/client/src/pages/Editor/EditorHeader.tsx index af2771d2cc..fa71b343e7 100644 --- a/app/client/src/pages/Editor/EditorHeader.tsx +++ b/app/client/src/pages/Editor/EditorHeader.tsx @@ -36,11 +36,6 @@ import { getIsSavingAppName, } from "selectors/applicationSelectors"; import EditableTextWrapper from "components/ads/EditableTextWrapper"; -import Boxed from "components/editorComponents/Onboarding/Boxed"; -import OnboardingToolTip from "components/editorComponents/Onboarding/Tooltip"; -import { Position } from "@blueprintjs/core"; -import { inOnboarding } from "sagas/OnboardingSagas"; -import { OnboardingStep } from "constants/OnboardingConstants"; const HeaderWrapper = styled(StyledHeader)` background: ${Colors.BALTIC_SEA}; @@ -139,7 +134,6 @@ type EditorHeaderProps = { applicationId?: string; currentApplication?: ApplicationPayload; isSaving: boolean; - isInOnboarding: boolean; publishApplication: (appId: string) => void; }; @@ -154,7 +148,6 @@ export const EditorHeader = (props: EditorHeaderProps) => { applicationId, pageName, publishApplication, - isInOnboarding, } = props; const dispatch = useDispatch(); @@ -216,109 +209,93 @@ export const EditorHeader = (props: EditorHeaderProps) => { /> - - - {currentApplication ? ( - el.id === applicationId).length > 0 - } - onBlur={(value: string) => - updateApplicationDispatch(applicationId || "", { - name: value, - currentApp: true, - }) + + {currentApplication ? ( + el.id === applicationId).length > 0 + } + onBlur={(value: string) => + updateApplicationDispatch(applicationId || "", { + name: value, + currentApp: true, + }) + } + /> + ) : null} + {/* {pageName}  */} + + + + {saveStatusIcon} + + + } + /> + } /> - ) : null} - {/* {pageName}  */} - - - - {saveStatusIcon} - - + + + } /> - - } - /> - } - canOutsideClickClose={true} - Form={AppInviteUsersForm} - orgId={orgId} - applicationId={applicationId} - title={ - currentApplication ? currentApplication.name : "Share Application" + } + link={getApplicationViewerPageURL(applicationId, pageId)} /> - - - - } - /> - - - } - link={getApplicationViewerPageURL(applicationId, pageId)} - /> - - - + + ); @@ -332,7 +309,6 @@ const mapStateToProps = (state: AppState) => ({ currentApplication: state.ui.applications.currentApplication, isPublishing: getIsPublishingApplication(state), pageId: getCurrentPageId(state), - isInOnboarding: inOnboarding(state), }); const mapDispatchToProps = (dispatch: any) => ({ diff --git a/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx b/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx index 5d1234d21d..d7f89223a4 100644 --- a/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx +++ b/app/client/src/pages/Editor/Explorer/Actions/helpers.tsx @@ -97,9 +97,8 @@ export const getPluginGroups = ( datasources: Datasource[], plugins: Plugin[], searchKeyword?: string, - actionPluginMap = ACTION_PLUGIN_MAP, ) => { - return actionPluginMap?.map((config?: ActionGroupConfig) => { + return ACTION_PLUGIN_MAP?.map((config?: ActionGroupConfig) => { if (!config) return null; const entries = actions?.filter( @@ -109,7 +108,6 @@ export const getPluginGroups = ( const filteredPlugins = plugins.filter( plugin => plugin.type === config.type, ); - const filteredPluginIds = filteredPlugins.map(plugin => plugin.id); const filteredDatasources = datasources.filter(datasource => { return filteredPluginIds.includes(datasource.pluginId); diff --git a/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx b/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx deleted file mode 100644 index 9455efbac7..0000000000 --- a/app/client/src/pages/Editor/Explorer/EntityExplorer.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import React, { useRef, MutableRefObject, useCallback, useEffect } from "react"; -import styled from "styled-components"; -import Divider from "components/editorComponents/Divider"; -import { - useFilteredEntities, - useWidgets, - useActions, - useFilteredDatasources, -} from "./hooks"; -import Search from "./ExplorerSearch"; -import ExplorerPageGroup from "./Pages/PageGroup"; -import { scrollbarDark } from "constants/DefaultTheme"; -import { NonIdealState, Classes, IPanelProps } from "@blueprintjs/core"; -import WidgetSidebar from "../WidgetSidebar"; -import { BUILDER_PAGE_URL } from "constants/routes"; -import history from "utils/history"; -import { useParams } from "react-router"; -import { ExplorerURLParams } from "./helpers"; -import JSDependencies from "./JSDependencies"; -import PerformanceTracker, { - PerformanceTransactionName, -} from "utils/PerformanceTracker"; -import { useSelector } from "react-redux"; -import { getPlugins } from "selectors/entitiesSelector"; - -const Wrapper = styled.div` - height: 100%; - overflow-y: scroll; - ${scrollbarDark}; -`; - -const NoResult = styled(NonIdealState)` - &.${Classes.NON_IDEAL_STATE} { - height: auto; - } -`; - -const StyledDivider = styled(Divider)` - border-bottom-color: rgba(255, 255, 255, 0.1); -`; - -const EntityExplorer = (props: IPanelProps) => { - const { applicationId } = useParams(); - const searchInputRef: MutableRefObject = useRef( - null, - ); - PerformanceTracker.startTracking(PerformanceTransactionName.ENTITY_EXPLORER); - useEffect(() => { - PerformanceTracker.stopTracking(); - }); - const explorerRef = useRef(null); - const { searchKeyword, clearSearch } = useFilteredEntities(searchInputRef); - const datasources = useFilteredDatasources(searchKeyword); - - const plugins = useSelector(getPlugins); - - const widgets = useWidgets(searchKeyword); - const actions = useActions(searchKeyword); - - let noResults = false; - if (searchKeyword) { - const noWidgets = Object.values(widgets).filter(Boolean).length === 0; - const noActions = - Object.values(actions).filter(actions => actions && actions.length > 0) - .length === 0; - const noDatasource = - Object.values(datasources).filter( - datasources => datasources && datasources.length > 0, - ).length === 0; - noResults = noWidgets && noActions && noDatasource; - } - const { openPanel } = props; - const showWidgetsSidebar = useCallback( - (pageId: string) => { - history.push(BUILDER_PAGE_URL(applicationId, pageId)); - openPanel({ component: WidgetSidebar }); - }, - [openPanel, applicationId], - ); - return ( - - - - {noResults && ( - - )} - - - - ); -}; - -EntityExplorer.displayName = "EntityExplorer"; - -EntityExplorer.whyDidYouRender = { - logOnDifferentValues: false, -}; - -export default EntityExplorer; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx deleted file mode 100644 index 657f28efd6..0000000000 --- a/app/client/src/pages/Editor/Explorer/Onboarding/DBQueryGroup.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { PluginType } from "entities/Action"; -import React from "react"; -import { useSelector } from "react-redux"; -import { AppState } from "reducers"; -import { getPlugins } from "selectors/entitiesSelector"; -import styled from "styled-components"; -import { getPluginGroups, ACTION_PLUGIN_MAP } from "../Actions/helpers"; -import { useActions, useFilteredDatasources } from "../hooks"; - -const AddWidget = styled.button` - margin: 25px 0px; - padding: 6px 38px; - background-color: transparent; - border: 1px solid #f3672a; - color: #f3672a; - font-weight: bold; - cursor: pointer; -`; - -const Wrapper = styled.div` - display: flex; - justify-content: center; -`; - -const DBQueryGroup = (props: any) => { - const pages = useSelector((state: AppState) => { - return state.entities.pageList.pages; - }); - const currentPage = pages[0]; - const actions = useActions(""); - const datasources = useFilteredDatasources(""); - const plugins = useSelector(getPlugins); - const dbPluginMap = ACTION_PLUGIN_MAP.filter( - plugin => plugin?.type === PluginType.DB, - ); - - return ( - <> - - - Add Widget - - - {getPluginGroups( - currentPage, - 0, - actions[currentPage.pageId] || [], - datasources[currentPage.pageId] || [], - plugins, - "", - dbPluginMap, - )} - - ); -}; - -export default DBQueryGroup; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx deleted file mode 100644 index 60c57dd272..0000000000 --- a/app/client/src/pages/Editor/Explorer/Onboarding/Loading.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import { Classes } from "@blueprintjs/core"; - -const SkeletonRows = styled.div<{ size: number }>` - height: 20px; - width: ${props => props.size}%; - margin-top: 12px; -`; - -const Loading = () => { - return ( - <> - - - - - ); -}; - -export default Loading; diff --git a/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx b/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx deleted file mode 100644 index 60e088ba91..0000000000 --- a/app/client/src/pages/Editor/Explorer/Onboarding/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React, { useCallback } from "react"; -import styled from "styled-components"; -import { scrollbarDark } from "constants/DefaultTheme"; -import Loading from "./Loading"; -import DBQueryGroup from "./DBQueryGroup"; -import { useSelector } from "react-redux"; -import { AppState } from "reducers"; -import { IPanelProps } from "@blueprintjs/core"; -import { BUILDER_PAGE_URL } from "constants/routes"; -import WidgetSidebar from "pages/Editor/WidgetSidebar"; -import { useParams } from "react-router"; -import { ExplorerURLParams } from "../helpers"; -import history from "utils/history"; - -const Wrapper = styled.div` - height: 100%; - overflow-y: scroll; - ${scrollbarDark}; -`; - -const OnboardingExplorer = (props: IPanelProps) => { - let node = ; - const { applicationId, pageId } = useParams(); - const { openPanel } = props; - const showWidgetsSidebar = useCallback(() => { - history.push(BUILDER_PAGE_URL(applicationId, pageId)); - openPanel({ component: WidgetSidebar }); - }, [openPanel, applicationId, pageId]); - - const createdDBQuery = useSelector( - (state: AppState) => state.ui.onBoarding.createdDBQuery, - ); - if (createdDBQuery) { - node = ; - } - - return {node}; -}; - -export default OnboardingExplorer; diff --git a/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx b/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx index 039e7f3c44..2df18e8ff1 100644 --- a/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx +++ b/app/client/src/pages/Editor/Explorer/PluginGroup/PluginGroup.tsx @@ -12,8 +12,6 @@ import ExplorerDatasourceEntity from "../Datasources/DatasourceEntity"; import Entity from "../Entity"; import EntityPlaceholder from "../Entity/Placeholder"; import { ExplorerURLParams } from "../helpers"; -import OnboardingTooltip from "components/editorComponents/Onboarding/Tooltip"; -import { OnboardingStep } from "constants/OnboardingConstants"; type ExplorerPluginGroupProps = { step: number; @@ -84,21 +82,16 @@ const ExplorerPluginGroup = memo((props: ExplorerPluginGroupProps) => { config={props.actionConfig} plugins={pluginGroups} /> - {props.datasources.map((datasource: Datasource, index: number) => { + {props.datasources.map((datasource: Datasource) => { return ( - - - + datasource={datasource} + step={props.step + 1} + searchKeyword={props.searchKeyword} + pageId={props.page.pageId} + /> ); })} diff --git a/app/client/src/pages/Editor/Explorer/index.tsx b/app/client/src/pages/Editor/Explorer/index.tsx index 24299d13ee..126d2c7dac 100644 --- a/app/client/src/pages/Editor/Explorer/index.tsx +++ b/app/client/src/pages/Editor/Explorer/index.tsx @@ -1,19 +1,112 @@ -import { IPanelProps } from "@blueprintjs/core"; -import React from "react"; +import React, { useRef, MutableRefObject, useCallback, useEffect } from "react"; +import styled from "styled-components"; +import Divider from "components/editorComponents/Divider"; +import { + useFilteredEntities, + useWidgets, + useActions, + useFilteredDatasources, +} from "./hooks"; +import Search from "./ExplorerSearch"; +import ExplorerPageGroup from "./Pages/PageGroup"; +import { scrollbarDark } from "constants/DefaultTheme"; +import { NonIdealState, Classes, IPanelProps } from "@blueprintjs/core"; +import WidgetSidebar from "../WidgetSidebar"; +import { BUILDER_PAGE_URL } from "constants/routes"; +import history from "utils/history"; +import { useParams } from "react-router"; +import { ExplorerURLParams } from "./helpers"; +import JSDependencies from "./JSDependencies"; +import PerformanceTracker, { + PerformanceTransactionName, +} from "utils/PerformanceTracker"; import { useSelector } from "react-redux"; -import { inOnboarding, isAddWidgetComplete } from "sagas/OnboardingSagas"; -import EntityExplorer from "./EntityExplorer"; -import OnboardingExplorer from "./Onboarding"; +import { getPlugins } from "selectors/entitiesSelector"; -const ExplorerContent = (props: IPanelProps) => { - const isInOnboarding = useSelector(inOnboarding); - const addWidgetComplete = useSelector(isAddWidgetComplete); +const Wrapper = styled.div` + height: 100%; + overflow-y: scroll; + ${scrollbarDark}; +`; - if (isInOnboarding && !addWidgetComplete) { - return ; +const NoResult = styled(NonIdealState)` + &.${Classes.NON_IDEAL_STATE} { + height: auto; } +`; - return ; +const StyledDivider = styled(Divider)` + border-bottom-color: rgba(255, 255, 255, 0.1); +`; + +const EntityExplorer = (props: IPanelProps) => { + const { applicationId, pageId } = useParams(); + const searchInputRef: MutableRefObject = useRef( + null, + ); + PerformanceTracker.startTracking(PerformanceTransactionName.ENTITY_EXPLORER); + useEffect(() => { + PerformanceTracker.stopTracking(); + }); + const explorerRef = useRef(null); + const { searchKeyword, clearSearch } = useFilteredEntities(searchInputRef); + const datasources = useFilteredDatasources(searchKeyword); + + const plugins = useSelector(getPlugins); + + const widgets = useWidgets(searchKeyword); + const actions = useActions(searchKeyword); + + let noResults = false; + if (searchKeyword) { + const noWidgets = Object.values(widgets).filter(Boolean).length === 0; + const noActions = + Object.values(actions).filter(actions => actions && actions.length > 0) + .length === 0; + const noDatasource = + Object.values(datasources).filter( + datasources => datasources && datasources.length > 0, + ).length === 0; + noResults = noWidgets && noActions && noDatasource; + } + const { openPanel } = props; + const showWidgetsSidebar = useCallback( + (pageId: string) => { + history.push(BUILDER_PAGE_URL(applicationId, pageId)); + openPanel({ component: WidgetSidebar }); + }, + [openPanel, applicationId], + ); + return ( + + + + {noResults && ( + + )} + + + + ); }; -export default ExplorerContent; +EntityExplorer.displayName = "EntityExplorer"; + +EntityExplorer.whyDidYouRender = { + logOnDifferentValues: false, +}; + +export default EntityExplorer; diff --git a/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx b/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx index 4c93e8e4a1..a6b6a02d62 100644 --- a/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx +++ b/app/client/src/pages/Editor/PropertyPane/PropertyControl.tsx @@ -15,9 +15,6 @@ import { isPathADynamicProperty, isPathADynamicTrigger, } from "../../../utils/DynamicBindingUtils"; -import OnboardingToolTip from "components/editorComponents/Onboarding/Tooltip"; -import { Position } from "@blueprintjs/core"; -import { OnboardingStep } from "constants/OnboardingConstants"; type Props = { widgetProperties: WidgetProps; @@ -116,22 +113,13 @@ const PropertyControl = (props: Props) => { )} - - {PropertyControlFactory.createControl( - config, - { - onPropertyChange: onPropertyChange, - }, - isDynamic, - )} - + {PropertyControlFactory.createControl( + config, + { + onPropertyChange: onPropertyChange, + }, + isDynamic, + )} ); } catch (e) { diff --git a/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx b/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx index ce7b4c826f..ba3b059b70 100644 --- a/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx +++ b/app/client/src/pages/Editor/QueryEditor/TemplateMenu.tsx @@ -84,7 +84,7 @@ class TemplateMenu extends React.Component { onClick={() => createTemplate("")} >
- Click here to start with a blank state or select a template. + Press enter to start with a blank state or select a template.
{Object.entries(pluginTemplates).map(template => { diff --git a/app/client/src/pages/Editor/Welcome.tsx b/app/client/src/pages/Editor/Welcome.tsx deleted file mode 100644 index 87aab31fc8..0000000000 --- a/app/client/src/pages/Editor/Welcome.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import { useDispatch, useSelector } from "react-redux"; -import Spinner from "components/ads/Spinner"; -import { Classes } from "components/ads/common"; -import { AppState } from "reducers"; -import { endOnboarding, setCurrentStep } from "actions/onboardingActions"; - -const Wrapper = styled.div` - height: 100%; - padding: 85px 55px; - flex: 1; - display: flex; -`; - -const Container = styled.div` - align-self: stretch; - flex: 1; - display: flex; - background-color: white; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 80px 0px; -`; - -const WelcomeText = styled.div` - font-size: 36px; - font-weight: bold; - color: #090707; - text-align: center; -`; - -const Description = styled.div` - font-size: 17px; - color: #716e6e; - margin-top: 16px; - text-align: center; -`; - -const NotNewUserText = styled.span` - color: #716e6e; - margin-top: 24px; - text-align: center; - - span { - color: #457ae6; - cursor: pointer; - } -`; - -const StyledButton = styled.button` - color: white; - background-color: #f3672a; - font-weight: bold; - font-size: 17px; - padding: 12px 24px; - border: none; - cursor: pointer; -`; - -const LoadingContainer = styled(Container)` - justify-content: center; - padding: 0px; - - .${Classes.SPINNER} { - width: 43px; - height: 43px; - - circle { - stroke: #f3672a; - } - } - - span { - font-size: 17px; - margin-top: 23px; - } -`; - -const Welcome = () => { - const dispatch = useDispatch(); - const creatingDatabase = useSelector( - (state: AppState) => state.ui.onBoarding.creatingDatabase, - ); - - if (creatingDatabase) { - return ( - - - - Creating Example Database - - - ); - } - - return ( - - -
- - - 👋 - {" "} - Welcome - - - Appsmith helps you build quality internal tools, fast! - -
-
- { - dispatch(setCurrentStep(1)); - }} - > - Explore Appsmith - - - Not your first time with Appsmith?{" "} - dispatch(endOnboarding())}> - Skip this tutorial - - -
-
-
- ); -}; - -export default Welcome; diff --git a/app/client/src/pages/Editor/WidgetSidebar.tsx b/app/client/src/pages/Editor/WidgetSidebar.tsx index 4441dbad24..c97a579d59 100644 --- a/app/client/src/pages/Editor/WidgetSidebar.tsx +++ b/app/client/src/pages/Editor/WidgetSidebar.tsx @@ -11,8 +11,6 @@ import ExplorerSearch from "./Explorer/ExplorerSearch"; import { debounce } from "lodash"; import produce from "immer"; import { WIDGET_SIDEBAR_CAPTION } from "constants/messages"; -import Boxed from "components/editorComponents/Onboarding/Boxed"; -import { OnboardingStep } from "constants/OnboardingConstants"; const MainWrapper = styled.div` text-transform: capitalize; @@ -145,18 +143,10 @@ const WidgetSidebar = (props: IPanelProps) => { {groups.map((group: string) => ( - -
{group}
-
+
{group}
{filteredCards[group].map((card: WidgetCardProps) => ( - - - + ))}
diff --git a/app/client/src/pages/Editor/WidgetsEditor.tsx b/app/client/src/pages/Editor/WidgetsEditor.tsx index 13c0e16d96..31ea92a4e4 100644 --- a/app/client/src/pages/Editor/WidgetsEditor.tsx +++ b/app/client/src/pages/Editor/WidgetsEditor.tsx @@ -2,7 +2,6 @@ import React, { useEffect, ReactNode, useCallback } from "react"; import { useSelector, useDispatch } from "react-redux"; import styled from "styled-components"; import Canvas from "./Canvas"; -import Welcome from "./Welcome"; import { getIsFetchingPage, getCurrentPageId, @@ -22,7 +21,6 @@ import { fetchPage } from "actions/pageActions"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; -import { AppState } from "reducers"; import { getCurrentApplication } from "selectors/applicationSelectors"; const EditorWrapper = styled.div` @@ -62,9 +60,6 @@ const WidgetsEditor = () => { const currentPageId = useSelector(getCurrentPageId); const currentPageName = useSelector(getCurrentPageName); const currentApp = useSelector(getCurrentApplication); - const showWelcomeScreen = useSelector( - (state: AppState) => state.ui.onBoarding.showWelcomeScreen, - ); useEffect(() => { PerformanceTracker.stopTracking(PerformanceTransactionName.EDITOR_MOUNT); @@ -117,11 +112,6 @@ const WidgetsEditor = () => { if (!isFetchingPage && widgets) { node = ; } - - if (showWelcomeScreen) { - return ; - } - log.debug("Canvas rendered"); PerformanceTracker.stopTracking(); return ( diff --git a/app/client/src/pages/Editor/index.tsx b/app/client/src/pages/Editor/index.tsx index b404b3f339..07924eae7c 100644 --- a/app/client/src/pages/Editor/index.tsx +++ b/app/client/src/pages/Editor/index.tsx @@ -2,7 +2,10 @@ import React, { Component } from "react"; import { Helmet } from "react-helmet"; import { connect } from "react-redux"; import { RouteComponentProps, withRouter } from "react-router-dom"; -import { BuilderRouteParams } from "constants/routes"; +import { + BuilderRouteParams, + getApplicationViewerPageURL, +} from "constants/routes"; import { AppState } from "reducers"; import MainContainer from "./MainContainer"; import { DndProvider } from "react-dnd"; @@ -15,7 +18,14 @@ import { getIsPublishingApplication, getPublishingError, } from "selectors/editorSelectors"; -import { Hotkey, Hotkeys, Spinner } from "@blueprintjs/core"; +import { + AnchorButton, + Classes, + Dialog, + Hotkey, + Hotkeys, + Spinner, +} from "@blueprintjs/core"; import { HotkeysTarget } from "@blueprintjs/core/lib/esnext/components/hotkeys/hotkeysTarget.js"; import { initEditor } from "actions/initActions"; import { editorInitializer } from "utils/EditorUtils"; @@ -80,7 +90,7 @@ class Editor extends Component { combo="mod + c" label="Copy Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { this.props.copySelectedWidget(); }} preventDefault @@ -91,7 +101,7 @@ class Editor extends Component { combo="mod + v" label="Paste Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { this.props.pasteCopiedWidget(); }} preventDefault @@ -102,7 +112,7 @@ class Editor extends Component { combo="del" label="Delete Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { if (!isMac()) this.props.deleteSelectedWidget(); }} preventDefault @@ -113,7 +123,7 @@ class Editor extends Component { combo="backspace" label="Delete Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { if (isMac()) this.props.deleteSelectedWidget(); }} preventDefault @@ -124,7 +134,7 @@ class Editor extends Component { combo="del" label="Delete Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { this.props.deleteSelectedWidget(); }} preventDefault @@ -135,7 +145,7 @@ class Editor extends Component { combo="mod + x" label="Cut Widget" group="Canvas" - onKeyDown={() => { + onKeyDown={(e: any) => { this.props.cutSelectedWidget(); }} preventDefault @@ -145,6 +155,7 @@ class Editor extends Component { ); } public state = { + isDialogOpen: false, registered: false, }; @@ -157,8 +168,21 @@ class Editor extends Component { this.props.initEditor(applicationId, pageId); } } + componentDidUpdate(previously: Props) { + if ( + previously.isPublishing && + !(this.props.isPublishing || this.props.errorPublishing) + ) { + this.setState({ + isDialogOpen: true, + }); + } + } - shouldComponentUpdate(nextProps: Props, nextState: { registered: boolean }) { + shouldComponentUpdate( + nextProps: Props, + nextState: { isDialogOpen: boolean; registered: boolean }, + ) { return ( nextProps.currentPageId !== this.props.currentPageId || nextProps.currentApplicationId !== this.props.currentApplicationId || @@ -168,10 +192,16 @@ class Editor extends Component { nextProps.errorPublishing !== this.props.errorPublishing || nextProps.isEditorInitializeError !== this.props.isEditorInitializeError || + nextState.isDialogOpen !== this.state.isDialogOpen || nextState.registered !== this.state.registered ); } + handleDialogClose = () => { + this.setState({ + isDialogOpen: false, + }); + }; public render() { if (!this.props.isEditorInitialized || !this.state.registered) { return ( @@ -193,6 +223,32 @@ class Editor extends Component { Editor | Appsmith + +
+

+ {"Your application is now published with the current changes!"} +

+
+
+
+ +
+
+
diff --git a/app/client/src/pages/UserAuth/SignUp.tsx b/app/client/src/pages/UserAuth/SignUp.tsx index 55fde3883f..8ce7c87a9d 100644 --- a/app/client/src/pages/UserAuth/SignUp.tsx +++ b/app/client/src/pages/UserAuth/SignUp.tsx @@ -53,7 +53,6 @@ import { AppState } from "reducers"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; -import { setOnboardingState } from "utils/storage"; const { enableGithubOAuth, enableGoogleOAuth, @@ -161,7 +160,6 @@ export const SignUp = (props: SignUpFormProps) => { PerformanceTracker.startTracking( PerformanceTransactionName.SIGN_UP, ); - setOnboardingState(true); }} /> diff --git a/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx b/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx index 2ec6e6a3c4..e32d637cfe 100644 --- a/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx +++ b/app/client/src/pages/UserAuth/ThirdPartyAuth.tsx @@ -10,7 +10,6 @@ import { useLocation } from "react-router-dom"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; -import { setOnboardingState } from "utils/storage"; const ThirdPartyAuthWrapper = styled.div` display: flex; @@ -87,9 +86,6 @@ const SocialLoginButton = (props: { let eventName: EventName = "LOGIN_CLICK"; if (props.type === "SIGNUP") { eventName = "SIGNUP_CLICK"; - - // Set onboarding flag on signup - setOnboardingState(true); } PerformanceTracker.startTracking( eventName === "SIGNUP_CLICK" diff --git a/app/client/src/reducers/entityReducers/actionsReducer.tsx b/app/client/src/reducers/entityReducers/actionsReducer.tsx index 0325f14d11..798d79c33a 100644 --- a/app/client/src/reducers/entityReducers/actionsReducer.tsx +++ b/app/client/src/reducers/entityReducers/actionsReducer.tsx @@ -397,38 +397,6 @@ const actionsReducer = createReducer(initialState, { return action; }); }, - [ReduxActionTypes.CREATE_ONBOARDING_ACTION_SUCCESS]: ( - state: ActionDataState, - action: ReduxAction, - ): ActionDataState => - state.map(a => { - if ( - a.config.pageId === action.payload.pageId && - a.config.id === action.payload.name - ) { - return { ...a, config: action.payload }; - } - return a; - }), - [ReduxActionTypes.CREATE_ONBOARDING_ACTION_INIT]: ( - state: ActionDataState, - action: ReduxAction, - ): ActionDataState => - state.concat([ - { - config: { ...action.payload, id: action.payload.name }, - isLoading: false, - }, - ]), - [ReduxActionTypes.CREATE_ONBOARDING_ACTION_ERROR]: ( - state: ActionDataState, - action: ReduxAction, - ): ActionDataState => - state.filter( - a => - a.config.name !== action.payload.name && - a.config.id !== action.payload.name, - ), }); export default actionsReducer; diff --git a/app/client/src/reducers/index.tsx b/app/client/src/reducers/index.tsx index 1ac0dc4516..86e972cbad 100644 --- a/app/client/src/reducers/index.tsx +++ b/app/client/src/reducers/index.tsx @@ -38,7 +38,6 @@ import { DatasourceNameReduxState } from "./uiReducers/datasourceNameReducer"; import { EvaluatedTreeState } from "./evaluationReducers/treeReducer"; import { EvaluationDependencyState } from "./evaluationReducers/dependencyReducer"; import { PageWidgetsReduxState } from "./uiReducers/pageWidgetsReducer"; -import { OnboardingState } from "./uiReducers/onBoardingReducer"; const appReducer = combineReducers({ entities: entityReducer, @@ -75,7 +74,6 @@ export interface AppState { confirmRunAction: ConfirmRunActionReduxState; datasourceName: DatasourceNameReduxState; theme: ThemeState; - onBoarding: OnboardingState; }; entities: { canvasWidgets: CanvasWidgetsReduxState; diff --git a/app/client/src/reducers/uiReducers/index.tsx b/app/client/src/reducers/uiReducers/index.tsx index 876ed06d42..d03bb3dea8 100644 --- a/app/client/src/reducers/uiReducers/index.tsx +++ b/app/client/src/reducers/uiReducers/index.tsx @@ -23,7 +23,6 @@ import themeReducer from "./themeReducer"; import datasourceNameReducer from "./datasourceNameReducer"; import pageCanvasStructureReducer from "./pageCanvasStructure"; import pageWidgetsReducer from "./pageWidgetsReducer"; -import onBoardingReducer from "./onBoardingReducer"; const uiReducer = combineReducers({ widgetSidebar: widgetSidebarReducer, @@ -50,6 +49,5 @@ const uiReducer = combineReducers({ pageWidgets: pageWidgetsReducer, theme: themeReducer, confirmRunAction: confirmRunActionReducer, - onBoarding: onBoardingReducer, }); export default uiReducer; diff --git a/app/client/src/reducers/uiReducers/onBoardingReducer.ts b/app/client/src/reducers/uiReducers/onBoardingReducer.ts deleted file mode 100644 index e62012889e..0000000000 --- a/app/client/src/reducers/uiReducers/onBoardingReducer.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { OnboardingStep } from "constants/OnboardingConstants"; -import { - ReduxAction, - ReduxActionTypes, - ReduxActionErrorTypes, -} from "constants/ReduxActionConstants"; -import { createReducer } from "utils/AppsmithUtils"; - -const initialState: OnboardingState = { - currentStep: OnboardingStep.NONE, - showWelcomeScreen: false, - creatingDatabase: false, - showCompletionDialog: false, - inOnboarding: false, - createdDBQuery: false, - addedWidget: false, - showingTooltip: OnboardingStep.NONE, -}; - -export interface OnboardingState { - currentStep: OnboardingStep; - showWelcomeScreen: boolean; - creatingDatabase: boolean; - showCompletionDialog: boolean; - inOnboarding: boolean; - createdDBQuery: boolean; - addedWidget: boolean; - // Tooltip is shown when the step matches this value - showingTooltip: OnboardingStep; -} - -const onboardingReducer = createReducer(initialState, { - [ReduxActionTypes.SHOW_WELCOME]: (state: OnboardingState) => { - return { ...state, showWelcomeScreen: true }; - }, - [ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT]: ( - state: OnboardingState, - ) => { - return { ...state, creatingDatabase: true }; - }, - [ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_SUCCESS]: ( - state: OnboardingState, - ) => { - return { - ...state, - creatingDatabase: false, - showWelcomeScreen: false, - createdDBQuery: true, - }; - }, - [ReduxActionErrorTypes.CREATE_ONBOARDING_DBQUERY_ERROR]: ( - state: OnboardingState, - ) => { - return { ...state, creatingDatabase: false }; - }, - [ReduxActionTypes.INCREMENT_STEP]: (state: OnboardingState) => { - return { ...state, currentStep: state.currentStep + 1 }; - }, - [ReduxActionTypes.SET_CURRENT_STEP]: ( - state: OnboardingState, - action: ReduxAction, - ) => { - return { ...state, currentStep: action.payload }; - }, - [ReduxActionTypes.SET_ONBOARDING_STATE]: ( - state: OnboardingState, - action: ReduxAction, - ) => { - return { - ...initialState, - inOnboarding: action.payload, - }; - }, - [ReduxActionTypes.ADD_WIDGET_COMPLETE]: (state: OnboardingState) => { - return { - ...state, - addedWidget: true, - }; - }, - [ReduxActionTypes.SHOW_ONBOARDING_TOOLTIP]: ( - state: OnboardingState, - action: ReduxAction, - ) => { - return { - ...state, - showingTooltip: action.payload, - }; - }, - [ReduxActionTypes.SHOW_ONBOARDING_COMPLETION_DIALOG]: ( - state: OnboardingState, - action: ReduxAction, - ) => { - return { - ...state, - showCompletionDialog: action.payload, - }; - }, -}); - -export default onboardingReducer; diff --git a/app/client/src/sagas/ActionSagas.ts b/app/client/src/sagas/ActionSagas.ts index 26c9f57d23..d17b44bd16 100644 --- a/app/client/src/sagas/ActionSagas.ts +++ b/app/client/src/sagas/ActionSagas.ts @@ -67,9 +67,7 @@ import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; -export function* createActionSaga( - actionPayload: ReduxAction & { eventData: any }>, -) { +export function* createActionSaga(actionPayload: ReduxAction) { try { const response: ActionCreateUpdateResponse = yield ActionAPI.createAPI( actionPayload.payload, diff --git a/app/client/src/sagas/ApplicationSagas.tsx b/app/client/src/sagas/ApplicationSagas.tsx index 781148cce7..002d9c7097 100644 --- a/app/client/src/sagas/ApplicationSagas.tsx +++ b/app/client/src/sagas/ApplicationSagas.tsx @@ -26,10 +26,7 @@ import { validateResponse } from "./ErrorSagas"; import { getUserApplicationsOrgsList } from "selectors/applicationSelectors"; import { ApiResponse } from "api/ApiResponses"; import history from "utils/history"; -import { - BUILDER_PAGE_URL, - getApplicationViewerPageURL, -} from "constants/routes"; +import { BUILDER_PAGE_URL } from "constants/routes"; import { AppState } from "reducers"; import { FetchApplicationPayload, @@ -46,11 +43,6 @@ import { Organization } from "constants/orgConstants"; import { Variant } from "components/ads/common"; import { AppIconName } from "components/ads/AppIcon"; import { AppColorCode } from "constants/DefaultTheme"; -import { - getCurrentApplicationId, - getCurrentPageId, -} from "selectors/editorSelectors"; -import { showCompletionDialog } from "./OnboardingSagas"; const getDefaultPageId = ( pages?: ApplicationPagePayload[], @@ -79,20 +71,6 @@ export function* publishApplicationSaga( yield put({ type: ReduxActionTypes.PUBLISH_APPLICATION_SUCCESS, }); - - const applicationId = yield select(getCurrentApplicationId); - const currentPageId = yield select(getCurrentPageId); - let appicationViewPageUrl = getApplicationViewerPageURL( - applicationId, - currentPageId, - ); - - const showOnboardingCompletionDialog = yield select(showCompletionDialog); - if (showOnboardingCompletionDialog) { - appicationViewPageUrl += "?onboardingComplete=true"; - } - - window.open(appicationViewPageUrl, "_blank"); } } catch (error) { yield put({ diff --git a/app/client/src/sagas/OnboardingSagas.ts b/app/client/src/sagas/OnboardingSagas.ts deleted file mode 100644 index a5b95d7a7b..0000000000 --- a/app/client/src/sagas/OnboardingSagas.ts +++ /dev/null @@ -1,343 +0,0 @@ -import { GenericApiResponse } from "api/ApiResponses"; -import DatasourcesApi, { Datasource } from "api/DatasourcesApi"; -import { Plugin } from "api/PluginApi"; -import { - ReduxActionErrorTypes, - ReduxActionTypes, -} from "constants/ReduxActionConstants"; -import { AppState } from "reducers"; -import { all, delay, put, select, take, takeEvery } from "redux-saga/effects"; -import { getCurrentPageId } from "selectors/editorSelectors"; -import { getDatasources, getPlugins } from "selectors/entitiesSelector"; -import { getDataTree } from "selectors/dataTreeSelectors"; -import { getCurrentOrgId } from "selectors/organizationSelectors"; -import { getOnboardingState, setOnboardingState } from "utils/storage"; -import { validateResponse } from "./ErrorSagas"; -import { getSelectedWidget } from "./selectors"; -import ActionAPI, { - ActionApiResponse, - ActionCreateUpdateResponse, -} from "api/ActionAPI"; -import { - createOnboardingActionInit, - createOnboardingActionSuccess, - setCurrentStep, - setOnboardingState as setOnboardingReduxState, - showTooltip, -} from "actions/onboardingActions"; -import { - changeDatasource, - expandDatasourceEntity, -} from "actions/datasourceActions"; -import { playOnboardingAnimation } from "utils/helpers"; -import { QueryAction } from "entities/Action"; -import { getActionTimeout } from "./ActionExecutionSagas"; -import { - OnboardingConfig, - OnboardingStep, -} from "constants/OnboardingConstants"; -import AnalyticsUtil from "../utils/AnalyticsUtil"; - -export const getCurrentStep = (state: AppState) => - state.ui.onBoarding.currentStep; -export const inOnboarding = (state: AppState) => - state.ui.onBoarding.inOnboarding; -export const isAddWidgetComplete = (state: AppState) => - state.ui.onBoarding.addedWidget; -export const getTooltipConfig = (state: AppState) => { - const currentStep = getCurrentStep(state); - if (currentStep >= 0) { - return OnboardingConfig[currentStep].tooltip; - } - - return OnboardingConfig[OnboardingStep.NONE].tooltip; -}; -export const showCompletionDialog = (state: AppState) => { - const isInOnboarding = inOnboarding(state); - const currentStep = getCurrentStep(state); - - return isInOnboarding && currentStep === OnboardingStep.DEPLOY; -}; - -function* listenForWidgetAdditions() { - while (true) { - yield take(); - const { payload } = yield take("WIDGET_ADD_CHILD"); - - if (payload.type === "TABLE_WIDGET") { - yield put(setCurrentStep(OnboardingStep.ADD_WIDGET)); - yield put({ - type: ReduxActionTypes.ADD_WIDGET_COMPLETE, - }); - yield put(showTooltip(OnboardingStep.ADD_WIDGET)); - - return; - } - } -} - -function* listenForSuccessfullBinding() { - while (true) { - yield take(); - - let bindSuccessfull = true; - const selectedWidget = yield select(getSelectedWidget); - if (selectedWidget && selectedWidget.type === "TABLE_WIDGET") { - const dataTree = yield select(getDataTree); - - if (dataTree[selectedWidget.widgetName]) { - const widgetProperties = dataTree[selectedWidget.widgetName]; - const dynamicBindingPathList = - dataTree[selectedWidget.widgetName].dynamicBindingPathList; - const hasBinding = !!dynamicBindingPathList.length; - - if (hasBinding) { - yield put(showTooltip(OnboardingStep.NONE)); - } - - bindSuccessfull = bindSuccessfull && hasBinding; - - if (widgetProperties.invalidProps) { - bindSuccessfull = - bindSuccessfull && !("tableData" in widgetProperties.invalidProps); - } - - if (bindSuccessfull) { - yield put(setCurrentStep(OnboardingStep.SUCCESSFUL_BINDING)); - - // Show tooltip now - yield put(showTooltip(OnboardingStep.SUCCESSFUL_BINDING)); - yield delay(1000); - playOnboardingAnimation(); - - return; - } - } - } - } -} - -function* hideDatabaseTooltip() { - yield take([ReduxActionTypes.QUERY_PANE_CHANGE]); - - yield put(showTooltip(OnboardingStep.NONE)); -} - -function* createOnboardingDatasource() { - try { - const organizationId = yield select(getCurrentOrgId); - const plugins = yield select(getPlugins); - const postgresPlugin = plugins.find( - (plugin: Plugin) => plugin.name === "PostgreSQL", - ); - const datasources: Datasource[] = yield select(getDatasources); - let onboardingDatasource = datasources.find( - datasource => datasource.name === "ExampleDatabase", - ); - - if (!onboardingDatasource) { - const datasourceConfig: any = { - pluginId: postgresPlugin.id, - name: "ExampleDatabase", - organizationId, - datasourceConfiguration: { - endpoints: [ - { - host: "fake-api.cvuydmurdlas.us-east-1.rds.amazonaws.com", - port: 5432, - }, - ], - authentication: { - databaseName: "fakeapi", - username: "fakeapi", - password: "LimitedAccess123#", - }, - }, - }; - - const datasourceResponse: GenericApiResponse = yield DatasourcesApi.createDatasource( - datasourceConfig, - ); - yield validateResponse(datasourceResponse); - yield put({ - type: ReduxActionTypes.CREATE_DATASOURCE_SUCCESS, - payload: datasourceResponse.data, - }); - - onboardingDatasource = datasourceResponse.data; - } - - const currentPageId = yield select(getCurrentPageId); - const queryactionConfiguration: Partial = { - actionConfiguration: { body: "select * from public.users limit 10" }, - }; - const actionPayload = { - name: "ExampleQuery", - pageId: currentPageId, - datasource: { - id: onboardingDatasource.id, - }, - ...queryactionConfiguration, - eventData: {}, - }; - yield put(createOnboardingActionInit(actionPayload)); - const response: ActionCreateUpdateResponse = yield ActionAPI.createAPI( - actionPayload, - ); - - const isValidResponse = yield validateResponse(response); - if (isValidResponse) { - const newAction = { - ...response.data, - datasource: onboardingDatasource, - }; - yield put(expandDatasourceEntity(onboardingDatasource.id)); - - yield put(createOnboardingActionSuccess(newAction)); - - // Run query - const timeout = yield select(getActionTimeout, newAction.id); - const executeActionResponse: ActionApiResponse = yield ActionAPI.executeAction( - { - actionId: newAction.id, - viewMode: false, - }, - timeout, - ); - yield validateResponse(response); - const payload = { - ...executeActionResponse.data, - ...executeActionResponse.clientMeta, - }; - yield put({ - type: ReduxActionTypes.RUN_ACTION_SUCCESS, - payload: { [newAction.id]: payload }, - }); - yield put({ - type: ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_SUCCESS, - }); - - // Navigate to that datasource page - yield put(changeDatasource(onboardingDatasource)); - - yield put(showTooltip(OnboardingStep.EXAMPLE_DATABASE)); - - // Need to hide this tooltip based on some events - yield hideDatabaseTooltip(); - } else { - yield put({ - type: ReduxActionErrorTypes.CREATE_ONBOARDING_ACTION_ERROR, - payload: actionPayload, - }); - } - } catch (error) { - yield put({ - type: ReduxActionErrorTypes.CREATE_ONBOARDING_DBQUERY_ERROR, - payload: { error }, - }); - } -} - -function* listenForWidgetUnselection() { - while (true) { - yield take(); - - yield take(ReduxActionTypes.HIDE_PROPERTY_PANE); - const currentStep = yield select(getCurrentStep); - const isinOnboarding = yield select(inOnboarding); - - if (!isinOnboarding || currentStep !== OnboardingStep.SUCCESSFUL_BINDING) - return; - - yield put(setCurrentStep(OnboardingStep.DEPLOY)); - - yield delay(1000); - yield put(showTooltip(OnboardingStep.DEPLOY)); - return; - } -} - -function* listenForDeploySaga() { - while (true) { - yield take(); - - yield take(ReduxActionTypes.PUBLISH_APPLICATION_SUCCESS); - yield put(showTooltip(OnboardingStep.NONE)); - yield put({ - type: ReduxActionTypes.SHOW_ONBOARDING_COMPLETION_DIALOG, - payload: true, - }); - yield put(setOnboardingReduxState(false)); - - return; - } -} - -function* initiateOnboarding() { - const currentOnboardingState = yield getOnboardingState(); - AnalyticsUtil.logEvent("ONBOARDING_WELCOME"); - if (currentOnboardingState) { - yield put(setOnboardingReduxState(true)); - yield put({ - type: ReduxActionTypes.NEXT_ONBOARDING_STEP, - }); - } -} - -function* proceedOnboardingSaga() { - const isInOnboarding = yield select(inOnboarding); - - if (isInOnboarding) { - yield put({ - type: ReduxActionTypes.INCREMENT_STEP, - }); - - yield setupOnboardingStep(); - } -} - -function* setupOnboardingStep() { - const currentStep: OnboardingStep = yield select(getCurrentStep); - const currentConfig = OnboardingConfig[currentStep]; - if (currentConfig.eventName) { - AnalyticsUtil.logEvent(currentConfig.eventName); - } - let actions = currentConfig.setup(); - - if (actions.length) { - actions = actions.map(action => put(action)); - yield all(actions); - } -} - -function* skipOnboardingSaga() { - AnalyticsUtil.logEvent("END_ONBOARDING"); - const set = yield setOnboardingState(false); - - if (set) { - yield put(setOnboardingReduxState(false)); - } -} - -export default function* onboardingSagas() { - yield all([ - takeEvery(ReduxActionTypes.CREATE_APPLICATION_SUCCESS, initiateOnboarding), - takeEvery( - ReduxActionTypes.CREATE_ONBOARDING_DBQUERY_INIT, - createOnboardingDatasource, - ), - takeEvery(ReduxActionTypes.NEXT_ONBOARDING_STEP, proceedOnboardingSaga), - takeEvery(ReduxActionTypes.END_ONBOARDING, skipOnboardingSaga), - takeEvery(ReduxActionTypes.LISTEN_FOR_ADD_WIDGET, listenForWidgetAdditions), - takeEvery( - ReduxActionTypes.LISTEN_FOR_TABLE_WIDGET_BINDING, - listenForSuccessfullBinding, - ), - takeEvery( - ReduxActionTypes.LISTEN_FOR_WIDGET_UNSELECTION, - listenForWidgetUnselection, - ), - takeEvery(ReduxActionTypes.SET_CURRENT_STEP, setupOnboardingStep), - takeEvery(ReduxActionTypes.LISTEN_FOR_DEPLOY, listenForDeploySaga), - ]); -} diff --git a/app/client/src/sagas/index.tsx b/app/client/src/sagas/index.tsx index fcf5751021..bcbf8ed014 100644 --- a/app/client/src/sagas/index.tsx +++ b/app/client/src/sagas/index.tsx @@ -20,8 +20,6 @@ import modalSagas from "./ModalSagas"; import batchSagas from "./BatchSagas"; import themeSagas from "./ThemeSaga"; import evaluationsSaga from "./evaluationsSaga"; -import onboardingSaga from "./OnboardingSagas"; - import log from "loglevel"; import * as sentry from "@sentry/react"; @@ -48,7 +46,6 @@ export function* rootSaga() { batchSagas, themeSagas, evaluationsSaga, - onboardingSaga, ]; yield all( sagas.map(saga => diff --git a/app/client/src/selectors/entitiesSelector.ts b/app/client/src/selectors/entitiesSelector.ts index 39ae0f4811..be0ca0a4ea 100644 --- a/app/client/src/selectors/entitiesSelector.ts +++ b/app/client/src/selectors/entitiesSelector.ts @@ -15,10 +15,6 @@ import { CanvasWidgetsReduxState } from "../reducers/entityReducers/canvasWidget export const getEntities = (state: AppState): AppState["entities"] => state.entities; -export const getDatasources = (state: AppState): Datasource[] => { - return state.entities.datasources.list; -}; - export const getPluginIdsOfNames = ( state: AppState, names: Array, diff --git a/app/client/src/utils/AnalyticsUtil.tsx b/app/client/src/utils/AnalyticsUtil.tsx index b0fc677eee..9ddd7a1d16 100644 --- a/app/client/src/utils/AnalyticsUtil.tsx +++ b/app/client/src/utils/AnalyticsUtil.tsx @@ -87,13 +87,7 @@ export type EventName = | "ROUTE_CHANGE" | "PROPERTY_PANE_CLOSE_CLICK" | "APPLICATIONS_PAGE_LOAD" - | "EXECUTE_ACTION" - | "ONBOARDING_WELCOME" - | "ONBOARDING_EXAMPLE_DATABASE" - | "ONBOARDING_ADD_WIDGET" - | "ONBOARDING_SUCCESSFUL_BINDING" - | "ONBOARDING_DEPLOY" - | "END_ONBOARDING"; + | "EXECUTE_ACTION"; function getApplicationId(location: Location) { const pathSplit = location.pathname.split("/"); @@ -209,7 +203,6 @@ class AnalyticsUtil { userData: user.userId === ANONYMOUS_USERNAME ? undefined : user, }; } - if (windowDoc.analytics) { log.debug("Event fired", eventName, finalEventData); windowDoc.analytics.track(eventName, finalEventData); diff --git a/app/client/src/utils/helpers.tsx b/app/client/src/utils/helpers.tsx index 0ed83eb005..6fd8462963 100644 --- a/app/client/src/utils/helpers.tsx +++ b/app/client/src/utils/helpers.tsx @@ -1,6 +1,4 @@ import { GridDefaults } from "constants/WidgetConstants"; -import lottie from "lottie-web"; -import confetti from "assets/lottie/confetti.json"; import { DATA_TREE_KEYWORDS, JAVASCRIPT_KEYWORDS, @@ -193,34 +191,3 @@ export const isNameValid = ( name in invalidNames ); }; - -export const playOnboardingAnimation = () => { - const container: Element = document.getElementById("root") as Element; - - const el = document.createElement("div"); - Object.assign(el.style, { - position: "absolute", - left: 0, - right: 0, - top: 0, - bottom: 0, - "z-index": 99, - width: "100%", - height: "100%", - }); - - container.appendChild(el); - - const animObj = lottie.loadAnimation({ - container: el, - animationData: confetti, - loop: false, - }); - const duration = (animObj.totalFrames / animObj.frameRate) * 1000; - - animObj.play(); - - setTimeout(() => { - container.removeChild(el); - }, duration); -}; diff --git a/app/client/src/utils/storage.ts b/app/client/src/utils/storage.ts index c0dd07489e..c7323cd570 100644 --- a/app/client/src/utils/storage.ts +++ b/app/client/src/utils/storage.ts @@ -6,7 +6,6 @@ const STORAGE_KEYS: { [id: string]: string } = { ROUTE_BEFORE_LOGIN: "RedirectPath", COPIED_WIDGET: "CopiedWidget", DELETED_WIDGET_PREFIX: "DeletedWidget-", - ONBOARDING_STATE: "OnboardingState", }; const store = localforage.createInstance({ @@ -92,22 +91,3 @@ export const flushDeletedWidgets = async (widgetId: string) => { console.log("An error occurred when flushing deleted widgets: ", error); } }; - -export const setOnboardingState = async (onboardingState: boolean) => { - try { - await store.setItem(STORAGE_KEYS.ONBOARDING_STATE, onboardingState); - return true; - } catch (error) { - console.log("An error occurred when setting onboarding state: ", error); - return false; - } -}; - -export const getOnboardingState = async () => { - try { - const onboardingState = await store.getItem(STORAGE_KEYS.ONBOARDING_STATE); - return onboardingState; - } catch (error) { - console.log("An error occurred when getting onboarding state: ", error); - } -}; diff --git a/app/client/yarn.lock b/app/client/yarn.lock index 993210a1fd..624f33e174 100644 --- a/app/client/yarn.lock +++ b/app/client/yarn.lock @@ -12492,11 +12492,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -lottie-web@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.7.4.tgz#3b252148e904a0aa9833879ffb64924c85a0888c" - integrity sha512-LxqhXlHnHXOPmu+o2ipFKGv42jZLmn/GiEwXP0YC331fFwa+y96OUV22OF9r4i29uWKDciXiJr8tzy6jL8KygA== - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" From 91125ebc26914118b647bd34f3f33c280fa2d692 Mon Sep 17 00:00:00 2001 From: prapullac <71753653+prapullac@users.noreply.github.com> Date: Tue, 22 Dec 2020 14:06:52 +0530 Subject: [PATCH 17/19] Manual test Ideas for home page (#2208) --- .../Deletion _of_Duplicate_App.js | 19 ++++++++++ .../cypress/manual_TestSuite/Duplicate_App.js | 15 ++++++++ .../manual_TestSuite/Duplicate_App_Spec.js | 28 +++++++++++++++ .../cypress/manual_TestSuite/Org_Logo_Del.js | 19 ++++++++++ .../cypress/manual_TestSuite/Org_Logo_Set.js | 18 ++++++++++ .../manual_TestSuite/Organisation_Name.js | 15 ++++++++ .../Organisation_Name_Spec.js | 36 +++++++++++++++++++ .../Reusing_Name_of_Deleted_App.js | 18 ++++++++++ .../manual_TestSuite/Share_User_Icon.js | 17 +++++++++ .../manual_TestSuite/Spl_Chracter_Org_Name.js | 15 ++++++++ 10 files changed, 200 insertions(+) create mode 100644 app/client/cypress/manual_TestSuite/Deletion _of_Duplicate_App.js create mode 100644 app/client/cypress/manual_TestSuite/Duplicate_App.js create mode 100644 app/client/cypress/manual_TestSuite/Duplicate_App_Spec.js create mode 100644 app/client/cypress/manual_TestSuite/Org_Logo_Del.js create mode 100644 app/client/cypress/manual_TestSuite/Org_Logo_Set.js create mode 100644 app/client/cypress/manual_TestSuite/Organisation_Name.js create mode 100644 app/client/cypress/manual_TestSuite/Organisation_Name_Spec.js create mode 100644 app/client/cypress/manual_TestSuite/Reusing_Name_of_Deleted_App.js create mode 100644 app/client/cypress/manual_TestSuite/Share_User_Icon.js create mode 100644 app/client/cypress/manual_TestSuite/Spl_Chracter_Org_Name.js diff --git a/app/client/cypress/manual_TestSuite/Deletion _of_Duplicate_App.js b/app/client/cypress/manual_TestSuite/Deletion _of_Duplicate_App.js new file mode 100644 index 0000000000..bc2aa2edfa --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Deletion _of_Duplicate_App.js @@ -0,0 +1,19 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Duplicate an application must duplicate every API ,Query widget and Datasource", function() { + it("Duplicating an application", function() + { + // Navigate to home Page + // Click on any application action icon (Three dots) + // Click on "Duplicate" option + // Ensure the application gets copied + // Click on "Appsmith" to navigate to homepage + // Click on action icon + // Click on Delete option + // Click on "Are You Sure?" option + // Ensure the App gets deleted + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Duplicate_App.js b/app/client/cypress/manual_TestSuite/Duplicate_App.js new file mode 100644 index 0000000000..46134860f6 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Duplicate_App.js @@ -0,0 +1,15 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Duplicate an application must duplicate every API ,Query widget and Datasource", function() { + it("Duplicating an application", function() + { + // Navigate to home Page + // Click on any application action icon (Three dots) + // Click on "Duplicate" option + // Ensure the application gets copied + // Ensure the name is appended with the word "Copy" + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Duplicate_App_Spec.js b/app/client/cypress/manual_TestSuite/Duplicate_App_Spec.js new file mode 100644 index 0000000000..c724d651c8 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Duplicate_App_Spec.js @@ -0,0 +1,28 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Duplicate an application must duplicate every API ,Query widget and Datasource", function() { + it("Duplicating an application", function() + { + // Navigate to home Page + // Click on any application action icon (Three dots) + // Click on "Duplicate" option + // Ensure the application gets copied + // Ensure the name is appended with the word "Copy" + } + ) + it("Deleting the duplicated Application ", function() + { + // Navigate to home Page + // Click on any application action icon (Three dots) + // Click on "Duplicate" option + // Ensure the application gets copied + // Click on "Appsmith" to navigate to homepage + // Click on action icon + // Click on Delete option + // Click on "Are You Sure?" option + // Ensure the App gets deleted + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Org_Logo_Del.js b/app/client/cypress/manual_TestSuite/Org_Logo_Del.js new file mode 100644 index 0000000000..9f90bcf735 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Org_Logo_Del.js @@ -0,0 +1,19 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Deletion of organisational Logo ", function() { + it(" org logo upload ", function() + { + //Click on the dropdown next to organisational Name + // Navigate between tabs + // Naviagte to General Tab + // Add an Organisational Logo + // Wait until it loads + // Switch between Tabs + // Click on the remove Icon + //Ensure the organisational Logo is deleted + } + ) +} +) + diff --git a/app/client/cypress/manual_TestSuite/Org_Logo_Set.js b/app/client/cypress/manual_TestSuite/Org_Logo_Set.js new file mode 100644 index 0000000000..9ef5c824ef --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Org_Logo_Set.js @@ -0,0 +1,18 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("insert organisational Logo ", function() { + it(" org logo upload ", function() + { + //Click on the dropdown next to organisational Name + // Navigate between tabs + // Naviagte to General Tab + // Add an Organisational Logo + //Wait until it loads + // Switch between Tabs + // Navigate to General Tab and ensure the logo exsits + //navigate back to Homepage + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Organisation_Name.js b/app/client/cypress/manual_TestSuite/Organisation_Name.js new file mode 100644 index 0000000000..f4314ed760 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Organisation_Name.js @@ -0,0 +1,15 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Checking for error message on Organisation Name ", function() { + it("Ensure of Inactive Submit button ", function() + { + // Navigate to home Page + // Click on Create Organisation + // Type "Space" as first character + // Ensure "Submit" button does not get Active + // Now click on "X" (Close icon) ensure the pop up closes + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Organisation_Name_Spec.js b/app/client/cypress/manual_TestSuite/Organisation_Name_Spec.js new file mode 100644 index 0000000000..88ca89850f --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Organisation_Name_Spec.js @@ -0,0 +1,36 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Checking for error message on Organisation Name ", function() { + it("Ensure of Inactive Submit button ", function() + { + // Navigate to home Page + // Click on Create Organisation + // Type "Space" as first character + // Ensure "Submit" button does not get Active + // Now click on "X" (Close icon) ensure the pop up closes + } + ) + it("Reuse the name of the deleted application name ", function() + { + // Navigate to home Page + // Create an Application by name "XYZ" + // Add some widgets + // Navigate back to the application + // Delete the Application + // Click on "Create New" option under samee organisation + // Enter the name "XYZ" + // Ensure the application can be created with the same name + } + ) + it("Adding Special Character ", function() + { + // Navigate to home Page + // Click on Create Organisation + // Add special as first character + // Ensure "Submit" get Active + // Now click outside and ensure the pop up closes + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Reusing_Name_of_Deleted_App.js b/app/client/cypress/manual_TestSuite/Reusing_Name_of_Deleted_App.js new file mode 100644 index 0000000000..186ba3b586 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Reusing_Name_of_Deleted_App.js @@ -0,0 +1,18 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Reuse the name of the deleted application name inside the same organisation", function() { + it("Reuse the name of the deleted application name ", function() + { + // Navigate to home Page + // Create an Application by name "XYZ" + // Add some widgets + // Navigate back to the application + // Delete the Application + // Click on "Create New" option under samee organisation + // Enter the name "XYZ" + // Ensure the application can be created with the same name + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Share_User_Icon.js b/app/client/cypress/manual_TestSuite/Share_User_Icon.js new file mode 100644 index 0000000000..dd662a021b --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Share_User_Icon.js @@ -0,0 +1,17 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Shared user icon ", function() { + it(" User Icon is disaplyed to user ", function() + { + // Navigate to home Page + //Click on Share Icon + // Click on Field to add an Email Id + // Click on the Roles field + // Add an role from the Dropdown + // CLick on Invite + //Now observe the icon next to the Share Icon + } + ) +} +) \ No newline at end of file diff --git a/app/client/cypress/manual_TestSuite/Spl_Chracter_Org_Name.js b/app/client/cypress/manual_TestSuite/Spl_Chracter_Org_Name.js new file mode 100644 index 0000000000..195fc06229 --- /dev/null +++ b/app/client/cypress/manual_TestSuite/Spl_Chracter_Org_Name.js @@ -0,0 +1,15 @@ +const homePage = require("../../../locators/HomePage.json"); + + +describe("Adding Special Character ", function() { + it("Adding Special Character ", function() + { + // Navigate to home Page + // Click on Create Organisation + // Add special as first character + // Ensure "Submit" get Active + // Now click outside and ensure the pop up closes + } + ) +} +) \ No newline at end of file From 708ca7fedf3fb8dd876f2fb2e90ec50564401a60 Mon Sep 17 00:00:00 2001 From: Sumit Kumar Date: Tue, 22 Dec 2020 15:35:25 +0530 Subject: [PATCH 18/19] Redshift plugin (#2112) 1. Add new plugin to connect to AWS Redshift cluster and run query. 2. Add unit test cases. --- app/server/appsmith-plugins/pom.xml | 1 + .../redshiftPlugin/plugin.properties | 5 + .../appsmith-plugins/redshiftPlugin/pom.xml | 152 +++++ .../com/external/plugins/RedshiftPlugin.java | 621 ++++++++++++++++++ .../src/main/resources/editor.json | 15 + .../src/main/resources/form.json | 155 +++++ .../src/main/resources/templates/CREATE.sql | 8 + .../src/main/resources/templates/DELETE.sql | 1 + .../src/main/resources/templates/SELECT.sql | 1 + .../src/main/resources/templates/UPDATE.sql | 4 + .../external/plugins/RedshiftPluginTest.java | 446 +++++++++++++ .../server/migrations/DatabaseChangelog.java | 20 + 12 files changed, 1429 insertions(+) create mode 100644 app/server/appsmith-plugins/redshiftPlugin/plugin.properties create mode 100644 app/server/appsmith-plugins/redshiftPlugin/pom.xml create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql create mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java diff --git a/app/server/appsmith-plugins/pom.xml b/app/server/appsmith-plugins/pom.xml index 608773285d..4dd5ace902 100644 --- a/app/server/appsmith-plugins/pom.xml +++ b/app/server/appsmith-plugins/pom.xml @@ -24,5 +24,6 @@ redisPlugin mssqlPlugin firestorePlugin + redshiftPlugin \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/plugin.properties b/app/server/appsmith-plugins/redshiftPlugin/plugin.properties new file mode 100644 index 0000000000..f8c7748b53 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/plugin.properties @@ -0,0 +1,5 @@ +plugin.id=redshift-plugin +plugin.class=com.external.plugins.RedshiftPlugin +plugin.version=1.0-SNAPSHOT +plugin.provider=tech@appsmith.com +plugin.dependencies= \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/pom.xml b/app/server/appsmith-plugins/redshiftPlugin/pom.xml new file mode 100644 index 0000000000..b1e43673bf --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/pom.xml @@ -0,0 +1,152 @@ + + + + 4.0.0 + + com.external.plugins + redshiftPlugin + 1.0-SNAPSHOT + + redshiftPlugin + + + UTF-8 + 11 + ${java.version} + ${java.version} + redshift-plugin + com.external.plugins.RedshiftPlugin + 1.0-SNAPSHOT + tech@appsmith.com + + + + + + redshift + http://redshift-maven-repository.s3-website-us-east-1.amazonaws.com/release + + + + + + + org.pf4j + pf4j-spring + 0.6.0 + provided + + + + com.appsmith + interfaces + 1.0-SNAPSHOT + provided + + + + org.projectlombok + lombok + 1.18.8 + provided + + + + com.amazon.redshift + redshift-jdbc42 + 2.0.0.1 + runtime + + + + + junit + junit + 4.13.1 + test + + + + org.hamcrest + hamcrest-all + 1.3 + test + + + + io.projectreactor + reactor-test + 3.2.11.RELEASE + test + + + + org.mockito + mockito-core + 3.1.0 + test + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + false + + + + ${plugin.id} + ${plugin.class} + ${plugin.version} + ${plugin.provider} + + + + + + + package + + shade + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + runtime + ${project.build.directory}/lib + + + + + + + + diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java b/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java new file mode 100644 index 0000000000..feb43bad15 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java @@ -0,0 +1,621 @@ +package com.external.plugins; + +import com.appsmith.external.models.ActionConfiguration; +import com.appsmith.external.models.ActionExecutionResult; +import com.appsmith.external.models.DBAuth; +import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStructure; +import com.appsmith.external.models.DatasourceTestResult; +import com.appsmith.external.models.Endpoint; +import com.appsmith.external.models.SSLDetails; +import com.appsmith.external.pluginExceptions.AppsmithPluginError; +import com.appsmith.external.pluginExceptions.AppsmithPluginException; +import com.appsmith.external.pluginExceptions.StaleConnectionException; +import com.appsmith.external.plugins.BasePlugin; +import com.appsmith.external.plugins.PluginExecutor; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.ObjectUtils; +import org.pf4j.Extension; +import org.pf4j.PluginWrapper; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Scheduler; +import reactor.core.scheduler.Schedulers; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Map; +import java.util.LinkedHashMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.HashSet; +import java.util.Comparator; +import java.util.HashMap; +import java.util.stream.Collectors; + +import static com.appsmith.external.models.Connection.Mode.READ_ONLY; + + +public class RedshiftPlugin extends BasePlugin { + static final String JDBC_DRIVER = "com.amazon.redshift.jdbc.Driver"; + private static final String JDBC_PROTOCOL = "jdbc:redshift://"; + private static final String USER = "user"; + private static final String PASSWORD = "password"; + private static final String SSL = "ssl"; + private static final int VALIDITY_CHECK_TIMEOUT = 5; /* must be positive, otherwise may receive exception */ + private static final String DATE_COLUMN_TYPE_NAME = "date"; + + public RedshiftPlugin(PluginWrapper wrapper) { + super(wrapper); + } + + @Slf4j + @Extension + public static class RedshiftPluginExecutor implements PluginExecutor { + + private final Scheduler scheduler = Schedulers.elastic(); + + private static final String TABLES_QUERY = + "select a.attname as name,\n" + + " t1.typname as column_type,\n" + + " case when a.atthasdef then pg_get_expr(d.adbin, d.adrelid) end as default_expr,\n" + + " c.relkind as kind,\n" + + " c.relname as table_name,\n" + + " n.nspname as schema_name\n" + + "from pg_catalog.pg_attribute a\n" + + " left join pg_catalog.pg_type t1 on t1.oid = a.atttypid\n" + + " inner join pg_catalog.pg_class c on a.attrelid = c.oid\n" + + " left join pg_catalog.pg_namespace n on c.relnamespace = n.oid\n" + + " left join pg_catalog.pg_attrdef d on d.adrelid = c.oid and d.adnum = a.attnum\n" + + "where a.attnum > 0\n" + + " and not a.attisdropped\n" + + " and n.nspname not in ('information_schema', 'pg_catalog')\n" + + " and c.relkind in ('r', 'v')\n" + + " and pg_catalog.pg_table_is_visible(a.attrelid)\n" + + "order by c.relname, a.attnum;"; + + private static final String KEYS_QUERY_PRIMARY_KEY = "select tco.constraint_schema as self_schema,\n" + + " tco.constraint_name,\n" + + " kcu.column_name as self_column,\n" + + " kcu.table_name as self_table,\n" + + " 'p' as constraint_type\n" + + "from information_schema.table_constraints tco\n" + + "join information_schema.key_column_usage kcu \n" + + " on kcu.constraint_name = tco.constraint_name\n" + + " and kcu.constraint_schema = tco.constraint_schema\n" + + " and kcu.constraint_name = tco.constraint_name\n" + + "where tco.constraint_type = 'PRIMARY KEY'\n" + + "order by tco.constraint_schema,\n" + + " tco.constraint_name,\n" + + " kcu.ordinal_position;"; + + private static final String KEYS_QUERY_FOREIGN_KEY = "select kcu.table_schema as self_schema,\n" + + "\t kcu.table_name as self_table,\n" + + " rel_kcu.table_schema as foreign_schema,\n" + + " rel_kcu.table_name as foreign_table,\n" + + " kcu.column_name as self_column,\n" + + " rel_kcu.column_name as foreign_column,\n" + + " kcu.constraint_name,\n" + + " 'f' as constraint_type\n" + + "from information_schema.table_constraints tco\n" + + "left join information_schema.key_column_usage kcu\n" + + " on tco.constraint_schema = kcu.constraint_schema\n" + + " and tco.constraint_name = kcu.constraint_name\n" + + "left join information_schema.referential_constraints rco\n" + + " on tco.constraint_schema = rco.constraint_schema\n" + + " and tco.constraint_name = rco.constraint_name\n" + + "left join information_schema.key_column_usage rel_kcu\n" + + " on rco.unique_constraint_schema = rel_kcu.constraint_schema\n" + + " and rco.unique_constraint_name = rel_kcu.constraint_name\n" + + " and kcu.ordinal_position = rel_kcu.ordinal_position\n" + + "where tco.constraint_type = 'FOREIGN KEY'\n" + + "order by kcu.table_schema,\n" + + " kcu.table_name,\n" + + " kcu.ordinal_position;\n"; + + private void checkResultSetValidity(ResultSet resultSet) throws AppsmithPluginException { + if(resultSet == null) { + System.out.println( + Thread.currentThread().getName() + ": " + + "Redshift plugin: getRow: driver failed to fetch result: resultSet is null." + ); + throw new AppsmithPluginException( + AppsmithPluginError.PLUGIN_ERROR, + "redshift driver failed to fetch result: resultSet is null." + ); + } + } + + private Map getRow(ResultSet resultSet) throws SQLException, AppsmithPluginException { + checkResultSetValidity(resultSet); + + ResultSetMetaData metaData = resultSet.getMetaData(); + + /* + * 1. Ideally metaData is never supposed to be null. Redshift JDBC driver does null check before returning + * ResultSetMetaData. + */ + if(metaData == null) { + System.out.println( + Thread.currentThread().getName() + ": " + + "Redshift plugin: getRow: metaData is null. Ideally this is never supposed to " + + "happen as the Redshift JDBC driver does a null check before passing this object. This means " + + "that something has gone wrong while processing the query result." + ); + throw new AppsmithPluginException( + AppsmithPluginError.PLUGIN_ERROR, + "metaData is null. Ideally this is never supposed to happen as the Redshift JDBC driver " + + "does a null check before passing this object. This means that something has gone wrong " + + "while processing the query result" + ); + } + + int colCount = metaData.getColumnCount(); + // Use `LinkedHashMap` here so that the column ordering is preserved in the response. + Map row = new LinkedHashMap<>(colCount); + + for (int i = 1; i <= colCount; i++) { + Object value; + final String typeName = metaData.getColumnTypeName(i); + + if (resultSet.getObject(i) == null) { + value = null; + + } else if (DATE_COLUMN_TYPE_NAME.equalsIgnoreCase(typeName)) { + value = DateTimeFormatter.ISO_DATE.format(resultSet.getDate(i).toLocalDate()); + + } else if ("timestamp".equalsIgnoreCase(typeName)) { + value = DateTimeFormatter.ISO_DATE_TIME.format( + LocalDateTime.of( + resultSet.getDate(i).toLocalDate(), + resultSet.getTime(i).toLocalTime() + ) + ) + "Z"; + + } else if ("timestamptz".equalsIgnoreCase(typeName)) { + value = DateTimeFormatter.ISO_DATE_TIME.format( + resultSet.getObject(i, OffsetDateTime.class) + ); + } + else if ("time".equalsIgnoreCase(typeName) || "timetz".equalsIgnoreCase(typeName)) { + value = resultSet.getString(i); + } else { + value = resultSet.getObject(i); + } + + row.put(metaData.getColumnName(i), value); + } + + return row; + } + + /* + * 1. This method can throw SQLException via connection.isClosed() or connection.isValid(...) + * 2. StaleConnectionException thrown by this method needs to be propagated to upper layers so that a retry + * can be triggered. + */ + private void checkConnectionValidity(Connection connection) throws SQLException { + if (connection == null || connection.isClosed() || !connection.isValid(VALIDITY_CHECK_TIMEOUT)) { + throw new StaleConnectionException(); + } + } + + @Override + public Mono execute(Connection connection, + DatasourceConfiguration datasourceConfiguration, + ActionConfiguration actionConfiguration) { + String query = actionConfiguration.getBody(); + + if (query == null) { + return Mono.error( + new AppsmithPluginException( + AppsmithPluginError.PLUGIN_ERROR, + "Missing required parameter: Query." + ) + ); + } + + return (Mono) Mono.fromCallable(() -> { + /* + * 1. StaleConnectionException thrown by checkConnectionValidity(...) needs to be propagated to upper + * layers so that a retry can be triggered. + */ + try { + checkConnectionValidity(connection); + } catch (SQLException error) { + String error_msg = "Error checking validity of Redshift connection. " + error; + System.out.println(Thread.currentThread().getName() + ": " + error_msg); + + return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, error_msg)); + } + + List> rowsList = new ArrayList<>(50); + Statement statement = null; + ResultSet resultSet = null; + + try { + statement = connection.createStatement(); + boolean isResultSet = statement.execute(query); + + if (isResultSet) { + resultSet = statement.getResultSet(); + + while (resultSet.next()) { + Map row = getRow(resultSet); + rowsList.add(row); + } + } else { + rowsList.add(Map.of( + "affectedRows", + ObjectUtils.defaultIfNull(statement.getUpdateCount(), 0)) + ); + + } + } catch (SQLException | AppsmithPluginException e) { + return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, e.getMessage())); + } finally { + if (resultSet != null) { + try { + resultSet.close(); + } catch (SQLException e) { + log.warn("Error closing Redshift ResultSet", e); + } + } + + if (statement != null) { + try { + statement.close(); + } catch (SQLException e) { + log.warn("Error closing Redshift Statement", e); + } + } + } + + ActionExecutionResult result = new ActionExecutionResult(); + result.setBody(objectMapper.valueToTree(rowsList)); + result.setIsExecutionSuccess(true); + System.out.println( + Thread.currentThread().getName() + ": " + + "In RedshiftPlugin, got action execution result" + ); + return Mono.just(result); + }) + .flatMap(obj -> obj) + .subscribeOn(scheduler); + } + + @Override + public Mono datasourceCreate(DatasourceConfiguration datasourceConfiguration) { + try { + Class.forName(JDBC_DRIVER); + } catch (ClassNotFoundException e) { + return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error loading Redshift JDBC Driver class.")); + } + + String url; + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); + + com.appsmith.external.models.Connection configurationConnection = datasourceConfiguration.getConnection(); + + final boolean isSslEnabled = configurationConnection != null + && configurationConnection.getSsl() != null + && !SSLDetails.AuthType.NO_SSL.equals(configurationConnection.getSsl().getAuthType()); + + Properties properties = new Properties(); + properties.put(SSL, isSslEnabled); + if (authentication.getUsername() != null) { + properties.put(USER, authentication.getUsername()); + } + if (authentication.getPassword() != null) { + properties.put(PASSWORD, authentication.getPassword()); + } + + if (CollectionUtils.isEmpty(datasourceConfiguration.getEndpoints())) { + url = datasourceConfiguration.getUrl(); + + } else { + StringBuilder urlBuilder = new StringBuilder(JDBC_PROTOCOL); + for (Endpoint endpoint : datasourceConfiguration.getEndpoints()) { + urlBuilder + .append(endpoint.getHost()) + .append(':') + .append(ObjectUtils.defaultIfNull(endpoint.getPort(), 5439L)) + .append('/'); + + if (!StringUtils.isEmpty(authentication.getDatabaseName())) { + urlBuilder.append(authentication.getDatabaseName()); + } + } + url = urlBuilder.toString(); + } + + return Mono.fromCallable(() -> { + try { + System.out.println(Thread.currentThread().getName() + ": Connecting to Redshift db"); + Connection connection = DriverManager.getConnection(url, properties); + connection.setReadOnly( + configurationConnection != null && READ_ONLY.equals(configurationConnection.getMode())); + return Mono.just(connection); + } catch (SQLException e) { + return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error connecting" + + " to Redshift.", e)); + } + }) + .flatMap(obj -> obj) + .map(conn -> (Connection) conn) + .subscribeOn(scheduler); + } + + @Override + public void datasourceDestroy(Connection connection) { + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + System.out.println(Thread.currentThread().getName() + ": Error closing Redshift Connection. " + e); + log.error("Error closing Redshift Connection.", e); + } + } + + @Override + public Set validateDatasource(@NonNull DatasourceConfiguration datasourceConfiguration) { + Set invalids = new HashSet<>(); + + if (CollectionUtils.isEmpty(datasourceConfiguration.getEndpoints())) { + invalids.add("Missing endpoint."); + } else { + for (final Endpoint endpoint : datasourceConfiguration.getEndpoints()) { + if (StringUtils.isEmpty(endpoint.getHost())) { + invalids.add("Missing hostname."); + } else if (endpoint.getHost().contains("/") || endpoint.getHost().contains(":")) { + invalids.add("Host value cannot contain `/` or `:` characters. Found `" + endpoint.getHost() + "`."); + } + } + } + + if (datasourceConfiguration.getConnection() != null + && datasourceConfiguration.getConnection().getMode() == null) { + invalids.add("Missing Connection Mode."); + } + + if (datasourceConfiguration.getAuthentication() == null) { + invalids.add("Missing authentication details."); + + } else { + DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); + if (StringUtils.isEmpty(authentication.getUsername())) { + invalids.add("Missing username for authentication."); + } + + if (StringUtils.isEmpty(authentication.getPassword())) { + invalids.add("Missing password for authentication."); + } + + if (StringUtils.isEmpty(authentication.getDatabaseName())) { + invalids.add("Missing database name."); + } + } + + return invalids; + } + + @Override + public Mono testDatasource(DatasourceConfiguration datasourceConfiguration) { + return datasourceCreate(datasourceConfiguration) + .map(connection -> { + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + log.warn("Error closing Redshift connection that was made for testing.", e); + } + + return new DatasourceTestResult(); + }) + .onErrorResume(error -> Mono.just(new DatasourceTestResult(error.getMessage()))); + } + + private void getTablesInfo(ResultSet columnsResultSet, Map tablesByName) + throws SQLException, AppsmithPluginException { + checkResultSetValidity(columnsResultSet); + + while (columnsResultSet.next()) { + final char kind = columnsResultSet.getString("kind").charAt(0); + final String schemaName = columnsResultSet.getString("schema_name"); + final String tableName = columnsResultSet.getString("table_name"); + final String fullTableName = schemaName + "." + tableName; + if (!tablesByName.containsKey(fullTableName)) { + tablesByName.put(fullTableName, new DatasourceStructure.Table( + kind == 'r' ? DatasourceStructure.TableType.TABLE : DatasourceStructure.TableType.VIEW, + fullTableName, + new ArrayList<>(), + new ArrayList<>(), + new ArrayList<>() + )); + } + final DatasourceStructure.Table table = tablesByName.get(fullTableName); + table.getColumns().add(new DatasourceStructure.Column( + columnsResultSet.getString("name"), + columnsResultSet.getString("column_type"), + columnsResultSet.getString("default_expr") + )); + } + } + + private void getKeysInfo(ResultSet constraintsResultSet, Map tablesByName, + Map keyRegistry) throws SQLException, AppsmithPluginException { + checkResultSetValidity(constraintsResultSet); + + while (constraintsResultSet.next()) { + final String constraintName = constraintsResultSet.getString("constraint_name"); + final char constraintType = constraintsResultSet.getString("constraint_type").charAt(0); + final String selfSchema = constraintsResultSet.getString("self_schema"); + final String tableName = constraintsResultSet.getString("self_table"); + final String fullTableName = selfSchema + "." + tableName; + + if (!tablesByName.containsKey(fullTableName)) { + /* do nothing */ + return; + } + + final DatasourceStructure.Table table = tablesByName.get(fullTableName); + final String keyFullName = tableName + "." + constraintName; + + if (constraintType == 'p') { + if (!keyRegistry.containsKey(keyFullName)) { + final DatasourceStructure.PrimaryKey key = new DatasourceStructure.PrimaryKey( + constraintName, + new ArrayList<>() + ); + keyRegistry.put(keyFullName, key); + table.getKeys().add(key); + } + ((DatasourceStructure.PrimaryKey) keyRegistry.get(keyFullName)).getColumnNames() + .add(constraintsResultSet.getString("self_column")); + } else if (constraintType == 'f') { + final String foreignSchema = constraintsResultSet.getString("foreign_schema"); + final String prefix = (foreignSchema.equalsIgnoreCase(selfSchema) ? "" : foreignSchema + ".") + + constraintsResultSet.getString("foreign_table") + "."; + + if (!keyRegistry.containsKey(keyFullName)) { + final DatasourceStructure.ForeignKey key = new DatasourceStructure.ForeignKey( + constraintName, + new ArrayList<>(), + new ArrayList<>() + ); + keyRegistry.put(keyFullName, key); + table.getKeys().add(key); + } + + ((DatasourceStructure.ForeignKey) keyRegistry.get(keyFullName)).getFromColumns() + .add(constraintsResultSet.getString("self_column")); + ((DatasourceStructure.ForeignKey) keyRegistry.get(keyFullName)).getToColumns() + .add(prefix + constraintsResultSet.getString("foreign_column")); + } + } + } + + private void getTemplates(Map tablesByName) { + for (DatasourceStructure.Table table : tablesByName.values()) { + final List columnsWithoutDefault = table.getColumns() + .stream() + .filter(column -> column.getDefaultValue() == null) + .collect(Collectors.toList()); + + final List columnNames = new ArrayList<>(); + final List columnValues = new ArrayList<>(); + final StringBuilder setFragments = new StringBuilder(); + + for (DatasourceStructure.Column column : columnsWithoutDefault) { + final String name = column.getName(); + final String type = column.getType(); + String value; + + if (type == null) { + value = "null"; + } else if ("text".equals(type) || "varchar".equals(type)) { + value = "''"; + } else if (type.startsWith("int")) { + value = "1"; + } else if ("date".equals(type)) { + value = "'2019-07-01'"; + } else if ("time".equals(type)) { + value = "'18:32:45'"; + } else if ("timetz".equals(type)) { + value = "'04:05:06 PST'"; + } else if ("timestamp".equals(type)) { + value = "TIMESTAMP '2019-07-01 10:00:00'"; + } else if ("timestamptz".equals(type)) { + value = "TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET'"; + } else { + value = "''"; + } + + columnNames.add("\"" + name + "\""); + columnValues.add(value); + setFragments.append("\n \"").append(name).append("\" = ").append(value); + } + + final String quotedTableName = table.getName().replaceFirst("\\.(\\w+)", ".\"$1\""); + table.getTemplates().addAll(List.of( + new DatasourceStructure.Template("SELECT", "SELECT * FROM " + quotedTableName + " LIMIT 10;"), + new DatasourceStructure.Template("INSERT", "INSERT INTO " + quotedTableName + + " (" + String.join(", ", columnNames) + ")\n" + + " VALUES (" + String.join(", ", columnValues) + ");"), + new DatasourceStructure.Template("UPDATE", "UPDATE " + quotedTableName + " SET" + + setFragments.toString() + "\n" + + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), + new DatasourceStructure.Template("DELETE", "DELETE FROM " + quotedTableName + + "\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!") + )); + } + } + + @Override + public Mono getStructure(Connection connection, DatasourceConfiguration datasourceConfiguration) { + /* + * 1. StaleConnectionException thrown by checkConnectionValidity(...) needs to be propagated to upper + * layers so that a retry can be triggered. + */ + try { + checkConnectionValidity(connection); + } catch (SQLException error) { + String error_msg = "Error checking validity of Redshift connection. " + error; + System.out.println(Thread.currentThread().getName() + ": " + error_msg); + + return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, error_msg)); + } + + final DatasourceStructure structure = new DatasourceStructure(); + final Map tablesByName = new LinkedHashMap<>(); + final Map keyRegistry = new HashMap<>(); + + return Mono.fromSupplier(() -> { + // Ref: . + System.out.println(Thread.currentThread().getName() + ": Getting Redshift Db structure"); + try (Statement statement = connection.createStatement()) { + + // Get tables' schema and fill up their columns. + ResultSet columnsResultSet = statement.executeQuery(TABLES_QUERY); + getTablesInfo(columnsResultSet, tablesByName); + + // Get tables' primary key constraints and fill those up. + ResultSet primaryKeyConstraintsResultSet = statement.executeQuery(KEYS_QUERY_PRIMARY_KEY); + getKeysInfo(primaryKeyConstraintsResultSet, tablesByName, keyRegistry); + + // Get tables' foreign key constraints and fill those up. + ResultSet foreignKeyConstraintsResultSet = statement.executeQuery(KEYS_QUERY_FOREIGN_KEY); + getKeysInfo(foreignKeyConstraintsResultSet, tablesByName, keyRegistry); + + // Get templates for each table and put those in. + getTemplates(tablesByName); + } catch (SQLException | AppsmithPluginException throwable) { + return Mono.error(throwable); + } + + structure.setTables(new ArrayList<>(tablesByName.values())); + + for (DatasourceStructure.Table table : structure.getTables()) { + table.getKeys().sort(Comparator.naturalOrder()); + } + + return structure; + }) + .map(resultStructure -> (DatasourceStructure) resultStructure) + .subscribeOn(scheduler); + } + } +} diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json new file mode 100644 index 0000000000..7896a10ac6 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json @@ -0,0 +1,15 @@ +{ + "editor": [ + { + "sectionName": "", + "id": 1, + "children": [ + { + "label": "", + "configProperty": "actionConfiguration.body", + "controlType": "QUERY_DYNAMIC_TEXT" + } + ] + } + ] +} \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json new file mode 100644 index 0000000000..eb58eb62e8 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json @@ -0,0 +1,155 @@ +{ + "form": [ + { + "sectionName": "Connection", + "id": 1, + "children": [ + { + "label": "Connection Mode", + "configProperty": "datasourceConfiguration.connection.mode", + "controlType": "DROP_DOWN", + "isRequired": true, + "initialValue": "READ_WRITE", + "options": [ + { + "label": "Read Only", + "value": "READ_ONLY" + }, + { + "label": "Read / Write", + "value": "READ_WRITE" + } + ] + }, + { + "sectionName": null, + "children": [ + { + "label": "Host Address", + "configProperty": "datasourceConfiguration.endpoints[*].host", + "controlType": "KEYVALUE_ARRAY", + "validationMessage": "Please enter a valid host", + "validationRegex": "^((?![/:]).)*$" + }, + { + "label": "Port", + "configProperty": "datasourceConfiguration.endpoints[*].port", + "dataType": "NUMBER", + "controlType": "KEYVALUE_ARRAY" + } + ] + }, + { + "label": "Database Name", + "configProperty": "datasourceConfiguration.authentication.databaseName", + "controlType": "INPUT_TEXT", + "placeholderText": "Database name", + "initialValue": "admin" + } + ] + }, + { + "sectionName": "Authentication", + "id": 2, + "children": [ + { + "sectionName": null, + "children": [ + { + "label": "Username", + "configProperty": "datasourceConfiguration.authentication.username", + "controlType": "INPUT_TEXT", + "placeholderText": "Username" + }, + { + "label": "Password", + "configProperty": "datasourceConfiguration.authentication.password", + "dataType": "PASSWORD", + "controlType": "INPUT_TEXT", + "placeholderText": "Password", + "encrypted": true + } + ] + } + ] + }, + { + "id": 3, + "sectionName": "SSL (optional)", + "children": [ + { + "label": "SSL Mode", + "configProperty": "datasourceConfiguration.connection.ssl.authType", + "controlType": "DROP_DOWN", + "options": [ + { + "label": "No SSL", + "value": "NO_SSL" + }, + { + "label": "Allow", + "value": "ALLOW" + }, + { + "label": "Prefer", + "value": "PREFER" + }, + { + "label": "Require", + "value": "REQUIRE" + }, + { + "label": "Disable", + "value": "DISABLE" + }, + { + "label": "Verify-CA", + "value": "VERIFY_CA" + }, + { + "label": "Verify-Full", + "value": "VERIFY_FULL" + } + ] + }, + { + "sectionName": null, + "children": [ + { + "label": "Key File", + "configProperty": "datasourceConfiguration.connection.ssl.keyFile", + "controlType": "FILE_PICKER" + }, + { + "label": "Certificate", + "configProperty": "datasourceConfiguration.connection.ssl.certificateFile", + "controlType": "FILE_PICKER" + } + ] + }, + { + "sectionName": null, + "children": [ + { + "label": "CA Certificate", + "configProperty": "datasourceConfiguration.connection.ssl.caCertificateFile", + "controlType": "FILE_PICKER" + }, + { + "label": "PEM Certificate", + "configProperty": "datasourceConfiguration.connection.ssl.pemCertificate.file", + "controlType": "FILE_PICKER" + }, + { + "label": "PEM Passphrase", + "configProperty": "datasourceConfiguration.connection.ssl.pemCertificate.password", + "dataType": "PASSWORD", + "controlType": "INPUT_TEXT", + "placeholderText": "PEM Passphrase" + } + ] + } + ] + } + ] +} diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql new file mode 100644 index 0000000000..5a7c082ce9 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql @@ -0,0 +1,8 @@ +INSERT INTO users + (name, gender, email) +VALUES + ( + '{{ nameInput.text }}', + '{{ genderDropdown.selectedOptionValue }}', + '{{ nameInput.text }}' + ); -- nameInput and genderDropdown are example widgets, replace them with your widget names. Read more at http://bit.ly/postgres-widget-docs diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql new file mode 100644 index 0000000000..9e871189b6 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql @@ -0,0 +1 @@ +DELETE FROM users WHERE id = -1; -- Use widget data in a query by replacing static values with {{ widgetName.property }}. Read more at http://bit.ly/postgres-widget-docs diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql new file mode 100644 index 0000000000..4f38a30a09 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql @@ -0,0 +1 @@ +SELECT * FROM users where role = 'Admin' ORDER BY id LIMIT 10; -- Use widget data in a query using {{ widgetName.property }}. Read more at http://bit.ly/postgres-widget-docs \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql new file mode 100644 index 0000000000..fdba4616e1 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql @@ -0,0 +1,4 @@ +UPDATE users + SET status = 'APPROVED' + WHERE id = '{{ usersTable.selectedRow.id }}'; -- usersTable is an example table widget from where the id is being read. Replace it with your own Table widget or a static value. Read more at http://bit.ly/postgres-widget-docs + diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java b/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java new file mode 100644 index 0000000000..cf47b69281 --- /dev/null +++ b/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java @@ -0,0 +1,446 @@ +package com.external.plugins; + +import com.appsmith.external.models.ActionConfiguration; +import com.appsmith.external.models.ActionExecutionResult; +import com.appsmith.external.models.DBAuth; +import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStructure; +import com.appsmith.external.models.Endpoint; +import com.appsmith.external.pluginExceptions.AppsmithPluginError; +import com.appsmith.external.pluginExceptions.AppsmithPluginException; +import com.appsmith.external.pluginExceptions.StaleConnectionException; +import com.appsmith.external.plugins.PluginExecutor; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; +import org.mockito.Mockito; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.mock; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Set; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Date; +import java.sql.Time; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +/** + * Unit tests for the RedshiftPlugin + */ +@Slf4j +public class RedshiftPluginTest { + PluginExecutor pluginExecutor = new RedshiftPlugin.RedshiftPluginExecutor(); + + private static String address; + private static Integer port; + private static String username; + private static String password; + private static String dbName; + + @BeforeClass + public static void setUp() { + address = "address"; + port = 5439; + username = "username"; + password = "password"; + dbName = "dbName"; + } + + private DatasourceConfiguration createDatasourceConfiguration() { + DBAuth authDTO = new DBAuth(); + authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); + authDTO.setUsername(username); + authDTO.setPassword(password); + authDTO.setDatabaseName(dbName); + + Endpoint endpoint = new Endpoint(); + endpoint.setHost(address); + endpoint.setPort(port.longValue()); + + DatasourceConfiguration dsConfig = new DatasourceConfiguration(); + dsConfig.setAuthentication(authDTO); + dsConfig.setEndpoints(List.of(endpoint)); + return dsConfig; + } + + @Test + public void testDatasourceCreateConnectionFailure() { + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + Mono dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig); + + StepVerifier.create(dsConnectionMono) + .expectErrorMatches(throwable -> throwable instanceof AppsmithPluginException && throwable.getMessage() + .equals(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error connecting" + + " to Redshift.").getMessage())) + .verify(); + } + + @Test + public void testStaleConnectionCheck() throws SQLException { + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + ActionConfiguration actionConfiguration = new ActionConfiguration(); + actionConfiguration.setBody("show databases"); + + /* Mock java.sql.Connection: + * a. isClosed(): return true + * b. isValid() : return false + */ + Connection mockConnection = mock(Connection.class); + when(mockConnection.isClosed()).thenReturn(true); + when(mockConnection.isValid(Mockito.anyInt())).thenReturn(false); + + Mono resultMono = pluginExecutor.execute(mockConnection, dsConfig, actionConfiguration); + + StepVerifier.create(resultMono) + .expectErrorMatches(throwable -> throwable instanceof StaleConnectionException) + .verify(); + } + + @Test + public void itShouldValidateDatasourceWithEmptyEndpoints() { + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + dsConfig.setEndpoints(new ArrayList<>()); + + Assert.assertEquals(Set.of("Missing endpoint."), + pluginExecutor.validateDatasource(dsConfig)); + } + + @Test + public void itShouldValidateDatasourceWithEmptyHost() { + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + dsConfig.getEndpoints().get(0).setHost(""); + + Assert.assertEquals(Set.of("Missing hostname."), + pluginExecutor.validateDatasource(dsConfig)); + } + + @Test + public void itShouldValidateDatasourceWithInvalidHostname() { + String hostname = "jdbc://localhost"; + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + dsConfig.getEndpoints().get(0).setHost("jdbc://localhost"); + + Assert.assertEquals(Set.of("Host value cannot contain `/` or `:` characters. Found `" + hostname + "`."), + pluginExecutor.validateDatasource(dsConfig)); + } + + /* 1. CREATE TABLE users ( + * id INTEGER PRIMARY KEY IDENTITY(1,1), + * username VARCHAR (50) UNIQUE NOT NULL, + * password VARCHAR (50) NOT NULL, + * email VARCHAR (355) UNIQUE NOT NULL, + * spouse_dob DATE, + * dob DATE NOT NULL, + * time1 TIME NOT NULL, + * time_tz TIME WITH TIME ZONE NOT NULL, + * created_on TIMESTAMP NOT NULL, + * created_on_tz TIMESTAMP WITH TIME ZONE NOT NULL + * ); + * 2. INSERT INTO users VALUES ( + * 1, + * 'Jack', + * 'jill', + * 'jack@exemplars.com', + * NULL, + * '2018-12-31', + * '18:32:45', + * '04:05:06 PST', + * TIMESTAMP '2018-11-30 20:45:15', + * TIMESTAMP WITH TIME ZONE '2018-11-30 20:45:15 CET' + * ); + * 3. SELECT * FROM users WHERE id = 1; + */ + @Test + public void testExecute() throws SQLException { + /* Mock java.sql.Connection: + * a. isClosed() + * b. isValid() + */ + Connection mockConnection = mock(Connection.class); + when(mockConnection.isClosed()).thenReturn(false); + when(mockConnection.isValid(Mockito.anyInt())).thenReturn(true); + + /* Mock java.sql.Statement: + * a. execute(...) + * b. close() + */ + Statement mockStatement = mock(Statement.class); + when(mockConnection.createStatement()).thenReturn(mockStatement); + when(mockStatement.execute(Mockito.any())).thenReturn(true); + doNothing().when(mockStatement).close(); + + /* Mock java.sql.ResultSet: + * a. getObject(...) + * b. getDate(...) + * c. getTime(...) + * d. getString(...) + * e. getObject(..., ...) + * d. next() + * e. close() + */ + ResultSet mockResultSet = mock(ResultSet.class); + when(mockStatement.getResultSet()).thenReturn(mockResultSet); + when(mockResultSet.getObject(Mockito.anyInt())).thenReturn("", 1, "", "Jack", "", "jill", "", "jack@exemplars.com" + , null, "", "", "", "", ""); + when(mockResultSet.getDate(Mockito.anyInt())).thenReturn(Date.valueOf("2018-12-31"), Date.valueOf("2018-11-30")); + when(mockResultSet.getString(Mockito.anyInt())).thenReturn("18:32:45", "12:05:06+00"); + when(mockResultSet.getTime(Mockito.anyInt())).thenReturn(Time.valueOf("20:45:15")); + when(mockResultSet.getObject(Mockito.anyInt(), Mockito.any(Class.class))).thenReturn(OffsetDateTime.parse( + "2018-11-30T19:45:15+00")); + when(mockResultSet.next()).thenReturn(true).thenReturn(false); + doNothing().when(mockResultSet).close(); + + /* Mock java.sql.ResultSetMetaData: + * a. getColumnCount() + * b. getColumnTypeName(...) + * c. getColumnName(...) + */ + ResultSetMetaData mockResultSetMetaData = mock(ResultSetMetaData.class); + when(mockResultSet.getMetaData()).thenReturn(mockResultSetMetaData); + when(mockResultSetMetaData.getColumnCount()).thenReturn(10); + when(mockResultSetMetaData.getColumnTypeName(Mockito.anyInt())).thenReturn("int4", "varchar", "varchar", + "varchar", "date", "date", "time", "timetz", "timestamp", "timestamptz"); + when(mockResultSetMetaData.getColumnName(Mockito.anyInt())).thenReturn("id", "username", "password", "email", + "spouse_dob", "dob", "time1", "time_tz", "created_on", "created_on_tz"); + + ActionConfiguration actionConfiguration = new ActionConfiguration(); + actionConfiguration.setBody("SELECT * FROM users WHERE id = 1"); + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + Mono dsConnectionMono = Mono.just(mockConnection); + + Mono executeMono = dsConnectionMono + .flatMap(conn -> pluginExecutor.execute(conn, dsConfig, actionConfiguration)); + + StepVerifier.create(executeMono) + .assertNext(result -> { + assertNotNull(result); + assertTrue(result.getIsExecutionSuccess()); + assertNotNull(result.getBody()); + + final JsonNode node = ((ArrayNode) result.getBody()).get(0); + assertEquals("2018-12-31", node.get("dob").asText()); + assertEquals("18:32:45", node.get("time1").asText()); + assertEquals("12:05:06+00", node.get("time_tz").asText()); + assertEquals("2018-11-30T20:45:15Z", node.get("created_on").asText()); + assertEquals("2018-11-30T19:45:15Z", node.get("created_on_tz").asText()); + assertTrue(node.get("spouse_dob").isNull()); + assertArrayEquals( + new String[]{ + "id", + "username", + "password", + "email", + "spouse_dob", + "dob", + "time1", + "time_tz", + "created_on", + "created_on_tz", + }, + new ObjectMapper() + .convertValue(node, LinkedHashMap.class) + .keySet() + .toArray() + ); + }) + .verifyComplete(); + } + + /* 1. CREATE TABLE users ( + * id INTEGER PRIMARY KEY IDENTITY(1,1), + * username VARCHAR (50) UNIQUE NOT NULL, + * password VARCHAR (50) NOT NULL, + * ); + * 2. CREATE TABLE possessions( + * id serial PRIMARY KEY, + * title VARCHAR (50) NOT NULL, + * user_id int NOT NULL, + * constraint user_fk foreign key (user_id) references users(id) + * ); + * 3. CREATE TABLE campus( + * id timestamptz default now(), + * name timestamptz default now() + * ); + * 4. Run TABLES_QUERY + * 5. Run KEYS_QUERY_PRIMARY_KEY + * 6. Run KEYS_QUERY_FOREIGN_KEY + */ + @Test + public void testStructure() throws SQLException { + /* Mock java.sql.Connection: + * a. isClosed() + * b. isValid() + */ + Connection mockConnection = mock(Connection.class); + when(mockConnection.isClosed()).thenReturn(false); + when(mockConnection.isValid(Mockito.anyInt())).thenReturn(true); + + /* Mock java.sql.Statement: + * a. execute(...) + * b. close() + */ + Statement mockStatement = mock(Statement.class); + when(mockConnection.createStatement()).thenReturn(mockStatement); + when(mockStatement.execute(Mockito.any())).thenReturn(true); + doNothing().when(mockStatement).close(); + + /* Mock java.sql.ResultSet: + * d. getString(...) + * d. next() + * e. close() + */ + ResultSet mockResultSet = mock(ResultSet.class); + when(mockStatement.executeQuery(Mockito.anyString())).thenReturn(mockResultSet, mockResultSet, mockResultSet); + when(mockResultSet.next()) + .thenReturn(true, true, true, true, true, true, true, true, false) // TABLES_QUERY + .thenReturn(true, true, false) // KEYS_QUERY_PRIMARY_KEY + .thenReturn(true, false); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("kind")).thenReturn("r", "r", "r", "r", "r", "r", "r", "r");// TABLES_QUERY + when(mockResultSet.getString("schema_name")).thenReturn("public", "public", "public", "public", "public", + "public", "public", "public"); // TABLES_QUERY + when(mockResultSet.getString("table_name")).thenReturn("campus", "campus", "possessions", "possessions", + "possessions", "users", "users", "users"); // TABLES_QUERY + when(mockResultSet.getString("name")).thenReturn("id", "name", "id", "title", "user_id", "id", "username", + "password"); // TABLES_QUERY + when(mockResultSet.getString("column_type")).thenReturn("timestamptz", "timestamptz", "int4", "varchar", + "int4", "int4", "varchar", "varchar"); // TABLES_QUERY + when(mockResultSet.getString("default_expr")).thenReturn("now()", "now()", null, null, null, "\"identity\"" + + "(101507, 0, '1,1'::text)", null, null); // TABLES_QUERY + when(mockResultSet.getString("constraint_name")) + .thenReturn("possessions_pkey", "users_pkey") // KEYS_QUERY_PRIMARY_KEY + .thenReturn("user_fk"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("constraint_type")) + .thenReturn("p", "p") // KEYS_QUERY_PRIMARY_KEY + .thenReturn("f"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("self_schema")) + .thenReturn("public", "public") // KEYS_QUERY_PRIMARY_KEY + .thenReturn("public"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("self_table")) + .thenReturn("possessions", "users") // KEYS_QUERY_PRIMARY_KEY + .thenReturn("possessions"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("self_column")) + .thenReturn("id", "id") // KEYS_QUERY_PRIMARY_KEY + .thenReturn("user_id"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("foreign_schema")).thenReturn("public"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("foreign_table")).thenReturn("users"); // KEYS_QUERY_FOREIGN_KEY + when(mockResultSet.getString("foreign_column")).thenReturn("id"); // KEYS_QUERY_FOREIGN_KEY + doNothing().when(mockResultSet).close(); + + DatasourceConfiguration dsConfig = createDatasourceConfiguration(); + Mono dsConnectionMono = Mono.just(mockConnection); + Mono structureMono = dsConnectionMono + .flatMap(connection -> pluginExecutor.getStructure(connection, dsConfig)); + + StepVerifier.create(structureMono) + .assertNext(structure -> { + assertNotNull(structure); + assertEquals(3, structure.getTables().size()); + + final DatasourceStructure.Table campusTable = structure.getTables().get(0); + assertEquals("public.campus", campusTable.getName()); + assertEquals(DatasourceStructure.TableType.TABLE, campusTable.getType()); + assertArrayEquals( + new DatasourceStructure.Column[]{ + new DatasourceStructure.Column("id", "timestamptz", "now()"), + new DatasourceStructure.Column("name", "timestamptz", "now()") + }, + campusTable.getColumns().toArray() + ); + assertEquals(campusTable.getKeys().size(), 0); + + final DatasourceStructure.Table possessionsTable = structure.getTables().get(1); + assertEquals("public.possessions", possessionsTable.getName()); + assertEquals(DatasourceStructure.TableType.TABLE, possessionsTable.getType()); + assertArrayEquals( + new DatasourceStructure.Column[]{ + new DatasourceStructure.Column("id", "int4", null), + new DatasourceStructure.Column("title", "varchar", null), + new DatasourceStructure.Column("user_id", "int4", null), + }, + possessionsTable.getColumns().toArray() + ); + + final DatasourceStructure.PrimaryKey possessionsPrimaryKey = new DatasourceStructure.PrimaryKey("possessions_pkey", new ArrayList<>()); + possessionsPrimaryKey.getColumnNames().add("id"); + final DatasourceStructure.ForeignKey possessionsUserForeignKey = new DatasourceStructure.ForeignKey( + "user_fk", + List.of("user_id"), + List.of("users.id") + ); + assertArrayEquals( + new DatasourceStructure.Key[]{possessionsPrimaryKey, possessionsUserForeignKey}, + possessionsTable.getKeys().toArray() + ); + + assertArrayEquals( + new DatasourceStructure.Template[]{ + new DatasourceStructure.Template("SELECT", "SELECT * FROM public.\"possessions\" LIMIT 10;"), + new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"possessions\" " + + "(\"id\", \"title\", \"user_id\")\n VALUES (1, '', 1);"), + new DatasourceStructure.Template("UPDATE", "UPDATE public.\"possessions\" SET\n" + + " \"id\" = 1\n" + + " \"title\" = ''\n" + + " \"user_id\" = 1\n" + + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), + new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"possessions\"\n" + + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!"), + }, + possessionsTable.getTemplates().toArray() + ); + + final DatasourceStructure.Table usersTable = structure.getTables().get(2); + assertEquals("public.users", usersTable.getName()); + assertEquals(DatasourceStructure.TableType.TABLE, usersTable.getType()); + assertArrayEquals( + new DatasourceStructure.Column[]{ + new DatasourceStructure.Column("id", "int4", "\"identity\"(101507, " + + "0, '1,1'::text)"), + new DatasourceStructure.Column("username", "varchar", null), + new DatasourceStructure.Column("password", "varchar", null) + }, + usersTable.getColumns().toArray() + ); + + final DatasourceStructure.PrimaryKey usersPrimaryKey = new DatasourceStructure.PrimaryKey("users_pkey", new ArrayList<>()); + usersPrimaryKey.getColumnNames().add("id"); + assertArrayEquals( + new DatasourceStructure.Key[]{usersPrimaryKey}, + usersTable.getKeys().toArray() + ); + + assertArrayEquals( + new DatasourceStructure.Template[]{ + new DatasourceStructure.Template("SELECT", "SELECT * FROM public.\"users\" LIMIT 10;"), + new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"users\" (\"username\", \"password\")\n" + + " VALUES ('', '');"), + new DatasourceStructure.Template("UPDATE", "UPDATE public.\"users\" SET\n" + + " \"username\" = ''\n" + + " \"password\" = ''\n" + + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), + new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"users\"\n" + + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!"), + }, + usersTable.getTemplates().toArray() + ); + }) + .verifyComplete(); + } +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java index 89260f746e..4d41326594 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java @@ -1495,4 +1495,24 @@ public class DatabaseChangelog { } }); } + + @ChangeSet(order = "046", id = "add-redshift-plugin", author = "") + public void addRedshiftPlugin(MongoTemplate mongoTemplate) { + Plugin plugin = new Plugin(); + plugin.setName("Redshift"); + plugin.setType(PluginType.DB); + plugin.setPackageName("redshift-plugin"); + plugin.setUiComponent("DbEditorForm"); + plugin.setResponseType(Plugin.ResponseType.TABLE); + plugin.setIconLocation("https://s3.us-east-2.amazonaws.com/assets.appsmith.com/Redshift.png"); + plugin.setDocumentationLink("https://docs.appsmith.com/core-concepts/connecting-to-databases/querying-redshift"); + plugin.setDefaultInstall(true); + try { + mongoTemplate.insert(plugin); + } catch (DuplicateKeyException e) { + log.warn(plugin.getPackageName() + " already present in database."); + } + + installPluginToAllOrganizations(mongoTemplate, plugin.getId()); + } } From 53a6160139be62cd06fdb82c41072176b5845b8a Mon Sep 17 00:00:00 2001 From: Sumit Kumar Date: Tue, 22 Dec 2020 16:59:18 +0530 Subject: [PATCH 19/19] Revert "Redshift plugin (#2112)" (#2314) This reverts commit 708ca7fedf3fb8dd876f2fb2e90ec50564401a60. --- app/server/appsmith-plugins/pom.xml | 1 - .../redshiftPlugin/plugin.properties | 5 - .../appsmith-plugins/redshiftPlugin/pom.xml | 152 ----- .../com/external/plugins/RedshiftPlugin.java | 621 ------------------ .../src/main/resources/editor.json | 15 - .../src/main/resources/form.json | 155 ----- .../src/main/resources/templates/CREATE.sql | 8 - .../src/main/resources/templates/DELETE.sql | 1 - .../src/main/resources/templates/SELECT.sql | 1 - .../src/main/resources/templates/UPDATE.sql | 4 - .../external/plugins/RedshiftPluginTest.java | 446 ------------- .../server/migrations/DatabaseChangelog.java | 20 - 12 files changed, 1429 deletions(-) delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/plugin.properties delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/pom.xml delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql delete mode 100644 app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java diff --git a/app/server/appsmith-plugins/pom.xml b/app/server/appsmith-plugins/pom.xml index 4dd5ace902..608773285d 100644 --- a/app/server/appsmith-plugins/pom.xml +++ b/app/server/appsmith-plugins/pom.xml @@ -24,6 +24,5 @@ redisPlugin mssqlPlugin firestorePlugin - redshiftPlugin \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/plugin.properties b/app/server/appsmith-plugins/redshiftPlugin/plugin.properties deleted file mode 100644 index f8c7748b53..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/plugin.properties +++ /dev/null @@ -1,5 +0,0 @@ -plugin.id=redshift-plugin -plugin.class=com.external.plugins.RedshiftPlugin -plugin.version=1.0-SNAPSHOT -plugin.provider=tech@appsmith.com -plugin.dependencies= \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/pom.xml b/app/server/appsmith-plugins/redshiftPlugin/pom.xml deleted file mode 100644 index b1e43673bf..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/pom.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - 4.0.0 - - com.external.plugins - redshiftPlugin - 1.0-SNAPSHOT - - redshiftPlugin - - - UTF-8 - 11 - ${java.version} - ${java.version} - redshift-plugin - com.external.plugins.RedshiftPlugin - 1.0-SNAPSHOT - tech@appsmith.com - - - - - - redshift - http://redshift-maven-repository.s3-website-us-east-1.amazonaws.com/release - - - - - - - org.pf4j - pf4j-spring - 0.6.0 - provided - - - - com.appsmith - interfaces - 1.0-SNAPSHOT - provided - - - - org.projectlombok - lombok - 1.18.8 - provided - - - - com.amazon.redshift - redshift-jdbc42 - 2.0.0.1 - runtime - - - - - junit - junit - 4.13.1 - test - - - - org.hamcrest - hamcrest-all - 1.3 - test - - - - io.projectreactor - reactor-test - 3.2.11.RELEASE - test - - - - org.mockito - mockito-core - 3.1.0 - test - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - false - - - - ${plugin.id} - ${plugin.class} - ${plugin.version} - ${plugin.provider} - - - - - - - package - - shade - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - maven-dependency-plugin - - - copy-dependencies - package - - copy-dependencies - - - runtime - ${project.build.directory}/lib - - - - - - - - diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java b/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java deleted file mode 100644 index feb43bad15..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/java/com/external/plugins/RedshiftPlugin.java +++ /dev/null @@ -1,621 +0,0 @@ -package com.external.plugins; - -import com.appsmith.external.models.ActionConfiguration; -import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.DBAuth; -import com.appsmith.external.models.DatasourceConfiguration; -import com.appsmith.external.models.DatasourceStructure; -import com.appsmith.external.models.DatasourceTestResult; -import com.appsmith.external.models.Endpoint; -import com.appsmith.external.models.SSLDetails; -import com.appsmith.external.pluginExceptions.AppsmithPluginError; -import com.appsmith.external.pluginExceptions.AppsmithPluginException; -import com.appsmith.external.pluginExceptions.StaleConnectionException; -import com.appsmith.external.plugins.BasePlugin; -import com.appsmith.external.plugins.PluginExecutor; -import lombok.NonNull; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.ObjectUtils; -import org.pf4j.Extension; -import org.pf4j.PluginWrapper; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; -import reactor.core.publisher.Mono; -import reactor.core.scheduler.Scheduler; -import reactor.core.scheduler.Schedulers; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.Statement; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Map; -import java.util.LinkedHashMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.Set; -import java.util.HashSet; -import java.util.Comparator; -import java.util.HashMap; -import java.util.stream.Collectors; - -import static com.appsmith.external.models.Connection.Mode.READ_ONLY; - - -public class RedshiftPlugin extends BasePlugin { - static final String JDBC_DRIVER = "com.amazon.redshift.jdbc.Driver"; - private static final String JDBC_PROTOCOL = "jdbc:redshift://"; - private static final String USER = "user"; - private static final String PASSWORD = "password"; - private static final String SSL = "ssl"; - private static final int VALIDITY_CHECK_TIMEOUT = 5; /* must be positive, otherwise may receive exception */ - private static final String DATE_COLUMN_TYPE_NAME = "date"; - - public RedshiftPlugin(PluginWrapper wrapper) { - super(wrapper); - } - - @Slf4j - @Extension - public static class RedshiftPluginExecutor implements PluginExecutor { - - private final Scheduler scheduler = Schedulers.elastic(); - - private static final String TABLES_QUERY = - "select a.attname as name,\n" + - " t1.typname as column_type,\n" + - " case when a.atthasdef then pg_get_expr(d.adbin, d.adrelid) end as default_expr,\n" + - " c.relkind as kind,\n" + - " c.relname as table_name,\n" + - " n.nspname as schema_name\n" + - "from pg_catalog.pg_attribute a\n" + - " left join pg_catalog.pg_type t1 on t1.oid = a.atttypid\n" + - " inner join pg_catalog.pg_class c on a.attrelid = c.oid\n" + - " left join pg_catalog.pg_namespace n on c.relnamespace = n.oid\n" + - " left join pg_catalog.pg_attrdef d on d.adrelid = c.oid and d.adnum = a.attnum\n" + - "where a.attnum > 0\n" + - " and not a.attisdropped\n" + - " and n.nspname not in ('information_schema', 'pg_catalog')\n" + - " and c.relkind in ('r', 'v')\n" + - " and pg_catalog.pg_table_is_visible(a.attrelid)\n" + - "order by c.relname, a.attnum;"; - - private static final String KEYS_QUERY_PRIMARY_KEY = "select tco.constraint_schema as self_schema,\n" + - " tco.constraint_name,\n" + - " kcu.column_name as self_column,\n" + - " kcu.table_name as self_table,\n" + - " 'p' as constraint_type\n" + - "from information_schema.table_constraints tco\n" + - "join information_schema.key_column_usage kcu \n" + - " on kcu.constraint_name = tco.constraint_name\n" + - " and kcu.constraint_schema = tco.constraint_schema\n" + - " and kcu.constraint_name = tco.constraint_name\n" + - "where tco.constraint_type = 'PRIMARY KEY'\n" + - "order by tco.constraint_schema,\n" + - " tco.constraint_name,\n" + - " kcu.ordinal_position;"; - - private static final String KEYS_QUERY_FOREIGN_KEY = "select kcu.table_schema as self_schema,\n" + - "\t kcu.table_name as self_table,\n" + - " rel_kcu.table_schema as foreign_schema,\n" + - " rel_kcu.table_name as foreign_table,\n" + - " kcu.column_name as self_column,\n" + - " rel_kcu.column_name as foreign_column,\n" + - " kcu.constraint_name,\n" + - " 'f' as constraint_type\n" + - "from information_schema.table_constraints tco\n" + - "left join information_schema.key_column_usage kcu\n" + - " on tco.constraint_schema = kcu.constraint_schema\n" + - " and tco.constraint_name = kcu.constraint_name\n" + - "left join information_schema.referential_constraints rco\n" + - " on tco.constraint_schema = rco.constraint_schema\n" + - " and tco.constraint_name = rco.constraint_name\n" + - "left join information_schema.key_column_usage rel_kcu\n" + - " on rco.unique_constraint_schema = rel_kcu.constraint_schema\n" + - " and rco.unique_constraint_name = rel_kcu.constraint_name\n" + - " and kcu.ordinal_position = rel_kcu.ordinal_position\n" + - "where tco.constraint_type = 'FOREIGN KEY'\n" + - "order by kcu.table_schema,\n" + - " kcu.table_name,\n" + - " kcu.ordinal_position;\n"; - - private void checkResultSetValidity(ResultSet resultSet) throws AppsmithPluginException { - if(resultSet == null) { - System.out.println( - Thread.currentThread().getName() + ": " + - "Redshift plugin: getRow: driver failed to fetch result: resultSet is null." - ); - throw new AppsmithPluginException( - AppsmithPluginError.PLUGIN_ERROR, - "redshift driver failed to fetch result: resultSet is null." - ); - } - } - - private Map getRow(ResultSet resultSet) throws SQLException, AppsmithPluginException { - checkResultSetValidity(resultSet); - - ResultSetMetaData metaData = resultSet.getMetaData(); - - /* - * 1. Ideally metaData is never supposed to be null. Redshift JDBC driver does null check before returning - * ResultSetMetaData. - */ - if(metaData == null) { - System.out.println( - Thread.currentThread().getName() + ": " + - "Redshift plugin: getRow: metaData is null. Ideally this is never supposed to " + - "happen as the Redshift JDBC driver does a null check before passing this object. This means " + - "that something has gone wrong while processing the query result." - ); - throw new AppsmithPluginException( - AppsmithPluginError.PLUGIN_ERROR, - "metaData is null. Ideally this is never supposed to happen as the Redshift JDBC driver " + - "does a null check before passing this object. This means that something has gone wrong " + - "while processing the query result" - ); - } - - int colCount = metaData.getColumnCount(); - // Use `LinkedHashMap` here so that the column ordering is preserved in the response. - Map row = new LinkedHashMap<>(colCount); - - for (int i = 1; i <= colCount; i++) { - Object value; - final String typeName = metaData.getColumnTypeName(i); - - if (resultSet.getObject(i) == null) { - value = null; - - } else if (DATE_COLUMN_TYPE_NAME.equalsIgnoreCase(typeName)) { - value = DateTimeFormatter.ISO_DATE.format(resultSet.getDate(i).toLocalDate()); - - } else if ("timestamp".equalsIgnoreCase(typeName)) { - value = DateTimeFormatter.ISO_DATE_TIME.format( - LocalDateTime.of( - resultSet.getDate(i).toLocalDate(), - resultSet.getTime(i).toLocalTime() - ) - ) + "Z"; - - } else if ("timestamptz".equalsIgnoreCase(typeName)) { - value = DateTimeFormatter.ISO_DATE_TIME.format( - resultSet.getObject(i, OffsetDateTime.class) - ); - } - else if ("time".equalsIgnoreCase(typeName) || "timetz".equalsIgnoreCase(typeName)) { - value = resultSet.getString(i); - } else { - value = resultSet.getObject(i); - } - - row.put(metaData.getColumnName(i), value); - } - - return row; - } - - /* - * 1. This method can throw SQLException via connection.isClosed() or connection.isValid(...) - * 2. StaleConnectionException thrown by this method needs to be propagated to upper layers so that a retry - * can be triggered. - */ - private void checkConnectionValidity(Connection connection) throws SQLException { - if (connection == null || connection.isClosed() || !connection.isValid(VALIDITY_CHECK_TIMEOUT)) { - throw new StaleConnectionException(); - } - } - - @Override - public Mono execute(Connection connection, - DatasourceConfiguration datasourceConfiguration, - ActionConfiguration actionConfiguration) { - String query = actionConfiguration.getBody(); - - if (query == null) { - return Mono.error( - new AppsmithPluginException( - AppsmithPluginError.PLUGIN_ERROR, - "Missing required parameter: Query." - ) - ); - } - - return (Mono) Mono.fromCallable(() -> { - /* - * 1. StaleConnectionException thrown by checkConnectionValidity(...) needs to be propagated to upper - * layers so that a retry can be triggered. - */ - try { - checkConnectionValidity(connection); - } catch (SQLException error) { - String error_msg = "Error checking validity of Redshift connection. " + error; - System.out.println(Thread.currentThread().getName() + ": " + error_msg); - - return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, error_msg)); - } - - List> rowsList = new ArrayList<>(50); - Statement statement = null; - ResultSet resultSet = null; - - try { - statement = connection.createStatement(); - boolean isResultSet = statement.execute(query); - - if (isResultSet) { - resultSet = statement.getResultSet(); - - while (resultSet.next()) { - Map row = getRow(resultSet); - rowsList.add(row); - } - } else { - rowsList.add(Map.of( - "affectedRows", - ObjectUtils.defaultIfNull(statement.getUpdateCount(), 0)) - ); - - } - } catch (SQLException | AppsmithPluginException e) { - return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, e.getMessage())); - } finally { - if (resultSet != null) { - try { - resultSet.close(); - } catch (SQLException e) { - log.warn("Error closing Redshift ResultSet", e); - } - } - - if (statement != null) { - try { - statement.close(); - } catch (SQLException e) { - log.warn("Error closing Redshift Statement", e); - } - } - } - - ActionExecutionResult result = new ActionExecutionResult(); - result.setBody(objectMapper.valueToTree(rowsList)); - result.setIsExecutionSuccess(true); - System.out.println( - Thread.currentThread().getName() + ": " + - "In RedshiftPlugin, got action execution result" - ); - return Mono.just(result); - }) - .flatMap(obj -> obj) - .subscribeOn(scheduler); - } - - @Override - public Mono datasourceCreate(DatasourceConfiguration datasourceConfiguration) { - try { - Class.forName(JDBC_DRIVER); - } catch (ClassNotFoundException e) { - return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error loading Redshift JDBC Driver class.")); - } - - String url; - DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); - - com.appsmith.external.models.Connection configurationConnection = datasourceConfiguration.getConnection(); - - final boolean isSslEnabled = configurationConnection != null - && configurationConnection.getSsl() != null - && !SSLDetails.AuthType.NO_SSL.equals(configurationConnection.getSsl().getAuthType()); - - Properties properties = new Properties(); - properties.put(SSL, isSslEnabled); - if (authentication.getUsername() != null) { - properties.put(USER, authentication.getUsername()); - } - if (authentication.getPassword() != null) { - properties.put(PASSWORD, authentication.getPassword()); - } - - if (CollectionUtils.isEmpty(datasourceConfiguration.getEndpoints())) { - url = datasourceConfiguration.getUrl(); - - } else { - StringBuilder urlBuilder = new StringBuilder(JDBC_PROTOCOL); - for (Endpoint endpoint : datasourceConfiguration.getEndpoints()) { - urlBuilder - .append(endpoint.getHost()) - .append(':') - .append(ObjectUtils.defaultIfNull(endpoint.getPort(), 5439L)) - .append('/'); - - if (!StringUtils.isEmpty(authentication.getDatabaseName())) { - urlBuilder.append(authentication.getDatabaseName()); - } - } - url = urlBuilder.toString(); - } - - return Mono.fromCallable(() -> { - try { - System.out.println(Thread.currentThread().getName() + ": Connecting to Redshift db"); - Connection connection = DriverManager.getConnection(url, properties); - connection.setReadOnly( - configurationConnection != null && READ_ONLY.equals(configurationConnection.getMode())); - return Mono.just(connection); - } catch (SQLException e) { - return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error connecting" + - " to Redshift.", e)); - } - }) - .flatMap(obj -> obj) - .map(conn -> (Connection) conn) - .subscribeOn(scheduler); - } - - @Override - public void datasourceDestroy(Connection connection) { - try { - if (connection != null) { - connection.close(); - } - } catch (SQLException e) { - System.out.println(Thread.currentThread().getName() + ": Error closing Redshift Connection. " + e); - log.error("Error closing Redshift Connection.", e); - } - } - - @Override - public Set validateDatasource(@NonNull DatasourceConfiguration datasourceConfiguration) { - Set invalids = new HashSet<>(); - - if (CollectionUtils.isEmpty(datasourceConfiguration.getEndpoints())) { - invalids.add("Missing endpoint."); - } else { - for (final Endpoint endpoint : datasourceConfiguration.getEndpoints()) { - if (StringUtils.isEmpty(endpoint.getHost())) { - invalids.add("Missing hostname."); - } else if (endpoint.getHost().contains("/") || endpoint.getHost().contains(":")) { - invalids.add("Host value cannot contain `/` or `:` characters. Found `" + endpoint.getHost() + "`."); - } - } - } - - if (datasourceConfiguration.getConnection() != null - && datasourceConfiguration.getConnection().getMode() == null) { - invalids.add("Missing Connection Mode."); - } - - if (datasourceConfiguration.getAuthentication() == null) { - invalids.add("Missing authentication details."); - - } else { - DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); - if (StringUtils.isEmpty(authentication.getUsername())) { - invalids.add("Missing username for authentication."); - } - - if (StringUtils.isEmpty(authentication.getPassword())) { - invalids.add("Missing password for authentication."); - } - - if (StringUtils.isEmpty(authentication.getDatabaseName())) { - invalids.add("Missing database name."); - } - } - - return invalids; - } - - @Override - public Mono testDatasource(DatasourceConfiguration datasourceConfiguration) { - return datasourceCreate(datasourceConfiguration) - .map(connection -> { - try { - if (connection != null) { - connection.close(); - } - } catch (SQLException e) { - log.warn("Error closing Redshift connection that was made for testing.", e); - } - - return new DatasourceTestResult(); - }) - .onErrorResume(error -> Mono.just(new DatasourceTestResult(error.getMessage()))); - } - - private void getTablesInfo(ResultSet columnsResultSet, Map tablesByName) - throws SQLException, AppsmithPluginException { - checkResultSetValidity(columnsResultSet); - - while (columnsResultSet.next()) { - final char kind = columnsResultSet.getString("kind").charAt(0); - final String schemaName = columnsResultSet.getString("schema_name"); - final String tableName = columnsResultSet.getString("table_name"); - final String fullTableName = schemaName + "." + tableName; - if (!tablesByName.containsKey(fullTableName)) { - tablesByName.put(fullTableName, new DatasourceStructure.Table( - kind == 'r' ? DatasourceStructure.TableType.TABLE : DatasourceStructure.TableType.VIEW, - fullTableName, - new ArrayList<>(), - new ArrayList<>(), - new ArrayList<>() - )); - } - final DatasourceStructure.Table table = tablesByName.get(fullTableName); - table.getColumns().add(new DatasourceStructure.Column( - columnsResultSet.getString("name"), - columnsResultSet.getString("column_type"), - columnsResultSet.getString("default_expr") - )); - } - } - - private void getKeysInfo(ResultSet constraintsResultSet, Map tablesByName, - Map keyRegistry) throws SQLException, AppsmithPluginException { - checkResultSetValidity(constraintsResultSet); - - while (constraintsResultSet.next()) { - final String constraintName = constraintsResultSet.getString("constraint_name"); - final char constraintType = constraintsResultSet.getString("constraint_type").charAt(0); - final String selfSchema = constraintsResultSet.getString("self_schema"); - final String tableName = constraintsResultSet.getString("self_table"); - final String fullTableName = selfSchema + "." + tableName; - - if (!tablesByName.containsKey(fullTableName)) { - /* do nothing */ - return; - } - - final DatasourceStructure.Table table = tablesByName.get(fullTableName); - final String keyFullName = tableName + "." + constraintName; - - if (constraintType == 'p') { - if (!keyRegistry.containsKey(keyFullName)) { - final DatasourceStructure.PrimaryKey key = new DatasourceStructure.PrimaryKey( - constraintName, - new ArrayList<>() - ); - keyRegistry.put(keyFullName, key); - table.getKeys().add(key); - } - ((DatasourceStructure.PrimaryKey) keyRegistry.get(keyFullName)).getColumnNames() - .add(constraintsResultSet.getString("self_column")); - } else if (constraintType == 'f') { - final String foreignSchema = constraintsResultSet.getString("foreign_schema"); - final String prefix = (foreignSchema.equalsIgnoreCase(selfSchema) ? "" : foreignSchema + ".") - + constraintsResultSet.getString("foreign_table") + "."; - - if (!keyRegistry.containsKey(keyFullName)) { - final DatasourceStructure.ForeignKey key = new DatasourceStructure.ForeignKey( - constraintName, - new ArrayList<>(), - new ArrayList<>() - ); - keyRegistry.put(keyFullName, key); - table.getKeys().add(key); - } - - ((DatasourceStructure.ForeignKey) keyRegistry.get(keyFullName)).getFromColumns() - .add(constraintsResultSet.getString("self_column")); - ((DatasourceStructure.ForeignKey) keyRegistry.get(keyFullName)).getToColumns() - .add(prefix + constraintsResultSet.getString("foreign_column")); - } - } - } - - private void getTemplates(Map tablesByName) { - for (DatasourceStructure.Table table : tablesByName.values()) { - final List columnsWithoutDefault = table.getColumns() - .stream() - .filter(column -> column.getDefaultValue() == null) - .collect(Collectors.toList()); - - final List columnNames = new ArrayList<>(); - final List columnValues = new ArrayList<>(); - final StringBuilder setFragments = new StringBuilder(); - - for (DatasourceStructure.Column column : columnsWithoutDefault) { - final String name = column.getName(); - final String type = column.getType(); - String value; - - if (type == null) { - value = "null"; - } else if ("text".equals(type) || "varchar".equals(type)) { - value = "''"; - } else if (type.startsWith("int")) { - value = "1"; - } else if ("date".equals(type)) { - value = "'2019-07-01'"; - } else if ("time".equals(type)) { - value = "'18:32:45'"; - } else if ("timetz".equals(type)) { - value = "'04:05:06 PST'"; - } else if ("timestamp".equals(type)) { - value = "TIMESTAMP '2019-07-01 10:00:00'"; - } else if ("timestamptz".equals(type)) { - value = "TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET'"; - } else { - value = "''"; - } - - columnNames.add("\"" + name + "\""); - columnValues.add(value); - setFragments.append("\n \"").append(name).append("\" = ").append(value); - } - - final String quotedTableName = table.getName().replaceFirst("\\.(\\w+)", ".\"$1\""); - table.getTemplates().addAll(List.of( - new DatasourceStructure.Template("SELECT", "SELECT * FROM " + quotedTableName + " LIMIT 10;"), - new DatasourceStructure.Template("INSERT", "INSERT INTO " + quotedTableName - + " (" + String.join(", ", columnNames) + ")\n" - + " VALUES (" + String.join(", ", columnValues) + ");"), - new DatasourceStructure.Template("UPDATE", "UPDATE " + quotedTableName + " SET" - + setFragments.toString() + "\n" - + " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), - new DatasourceStructure.Template("DELETE", "DELETE FROM " + quotedTableName - + "\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!") - )); - } - } - - @Override - public Mono getStructure(Connection connection, DatasourceConfiguration datasourceConfiguration) { - /* - * 1. StaleConnectionException thrown by checkConnectionValidity(...) needs to be propagated to upper - * layers so that a retry can be triggered. - */ - try { - checkConnectionValidity(connection); - } catch (SQLException error) { - String error_msg = "Error checking validity of Redshift connection. " + error; - System.out.println(Thread.currentThread().getName() + ": " + error_msg); - - return Mono.error(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, error_msg)); - } - - final DatasourceStructure structure = new DatasourceStructure(); - final Map tablesByName = new LinkedHashMap<>(); - final Map keyRegistry = new HashMap<>(); - - return Mono.fromSupplier(() -> { - // Ref: . - System.out.println(Thread.currentThread().getName() + ": Getting Redshift Db structure"); - try (Statement statement = connection.createStatement()) { - - // Get tables' schema and fill up their columns. - ResultSet columnsResultSet = statement.executeQuery(TABLES_QUERY); - getTablesInfo(columnsResultSet, tablesByName); - - // Get tables' primary key constraints and fill those up. - ResultSet primaryKeyConstraintsResultSet = statement.executeQuery(KEYS_QUERY_PRIMARY_KEY); - getKeysInfo(primaryKeyConstraintsResultSet, tablesByName, keyRegistry); - - // Get tables' foreign key constraints and fill those up. - ResultSet foreignKeyConstraintsResultSet = statement.executeQuery(KEYS_QUERY_FOREIGN_KEY); - getKeysInfo(foreignKeyConstraintsResultSet, tablesByName, keyRegistry); - - // Get templates for each table and put those in. - getTemplates(tablesByName); - } catch (SQLException | AppsmithPluginException throwable) { - return Mono.error(throwable); - } - - structure.setTables(new ArrayList<>(tablesByName.values())); - - for (DatasourceStructure.Table table : structure.getTables()) { - table.getKeys().sort(Comparator.naturalOrder()); - } - - return structure; - }) - .map(resultStructure -> (DatasourceStructure) resultStructure) - .subscribeOn(scheduler); - } - } -} diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json deleted file mode 100644 index 7896a10ac6..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/editor.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "editor": [ - { - "sectionName": "", - "id": 1, - "children": [ - { - "label": "", - "configProperty": "actionConfiguration.body", - "controlType": "QUERY_DYNAMIC_TEXT" - } - ] - } - ] -} \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json deleted file mode 100644 index eb58eb62e8..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/form.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "form": [ - { - "sectionName": "Connection", - "id": 1, - "children": [ - { - "label": "Connection Mode", - "configProperty": "datasourceConfiguration.connection.mode", - "controlType": "DROP_DOWN", - "isRequired": true, - "initialValue": "READ_WRITE", - "options": [ - { - "label": "Read Only", - "value": "READ_ONLY" - }, - { - "label": "Read / Write", - "value": "READ_WRITE" - } - ] - }, - { - "sectionName": null, - "children": [ - { - "label": "Host Address", - "configProperty": "datasourceConfiguration.endpoints[*].host", - "controlType": "KEYVALUE_ARRAY", - "validationMessage": "Please enter a valid host", - "validationRegex": "^((?![/:]).)*$" - }, - { - "label": "Port", - "configProperty": "datasourceConfiguration.endpoints[*].port", - "dataType": "NUMBER", - "controlType": "KEYVALUE_ARRAY" - } - ] - }, - { - "label": "Database Name", - "configProperty": "datasourceConfiguration.authentication.databaseName", - "controlType": "INPUT_TEXT", - "placeholderText": "Database name", - "initialValue": "admin" - } - ] - }, - { - "sectionName": "Authentication", - "id": 2, - "children": [ - { - "sectionName": null, - "children": [ - { - "label": "Username", - "configProperty": "datasourceConfiguration.authentication.username", - "controlType": "INPUT_TEXT", - "placeholderText": "Username" - }, - { - "label": "Password", - "configProperty": "datasourceConfiguration.authentication.password", - "dataType": "PASSWORD", - "controlType": "INPUT_TEXT", - "placeholderText": "Password", - "encrypted": true - } - ] - } - ] - }, - { - "id": 3, - "sectionName": "SSL (optional)", - "children": [ - { - "label": "SSL Mode", - "configProperty": "datasourceConfiguration.connection.ssl.authType", - "controlType": "DROP_DOWN", - "options": [ - { - "label": "No SSL", - "value": "NO_SSL" - }, - { - "label": "Allow", - "value": "ALLOW" - }, - { - "label": "Prefer", - "value": "PREFER" - }, - { - "label": "Require", - "value": "REQUIRE" - }, - { - "label": "Disable", - "value": "DISABLE" - }, - { - "label": "Verify-CA", - "value": "VERIFY_CA" - }, - { - "label": "Verify-Full", - "value": "VERIFY_FULL" - } - ] - }, - { - "sectionName": null, - "children": [ - { - "label": "Key File", - "configProperty": "datasourceConfiguration.connection.ssl.keyFile", - "controlType": "FILE_PICKER" - }, - { - "label": "Certificate", - "configProperty": "datasourceConfiguration.connection.ssl.certificateFile", - "controlType": "FILE_PICKER" - } - ] - }, - { - "sectionName": null, - "children": [ - { - "label": "CA Certificate", - "configProperty": "datasourceConfiguration.connection.ssl.caCertificateFile", - "controlType": "FILE_PICKER" - }, - { - "label": "PEM Certificate", - "configProperty": "datasourceConfiguration.connection.ssl.pemCertificate.file", - "controlType": "FILE_PICKER" - }, - { - "label": "PEM Passphrase", - "configProperty": "datasourceConfiguration.connection.ssl.pemCertificate.password", - "dataType": "PASSWORD", - "controlType": "INPUT_TEXT", - "placeholderText": "PEM Passphrase" - } - ] - } - ] - } - ] -} diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql deleted file mode 100644 index 5a7c082ce9..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/CREATE.sql +++ /dev/null @@ -1,8 +0,0 @@ -INSERT INTO users - (name, gender, email) -VALUES - ( - '{{ nameInput.text }}', - '{{ genderDropdown.selectedOptionValue }}', - '{{ nameInput.text }}' - ); -- nameInput and genderDropdown are example widgets, replace them with your widget names. Read more at http://bit.ly/postgres-widget-docs diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql deleted file mode 100644 index 9e871189b6..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/DELETE.sql +++ /dev/null @@ -1 +0,0 @@ -DELETE FROM users WHERE id = -1; -- Use widget data in a query by replacing static values with {{ widgetName.property }}. Read more at http://bit.ly/postgres-widget-docs diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql deleted file mode 100644 index 4f38a30a09..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/SELECT.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT * FROM users where role = 'Admin' ORDER BY id LIMIT 10; -- Use widget data in a query using {{ widgetName.property }}. Read more at http://bit.ly/postgres-widget-docs \ No newline at end of file diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql b/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql deleted file mode 100644 index fdba4616e1..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/main/resources/templates/UPDATE.sql +++ /dev/null @@ -1,4 +0,0 @@ -UPDATE users - SET status = 'APPROVED' - WHERE id = '{{ usersTable.selectedRow.id }}'; -- usersTable is an example table widget from where the id is being read. Replace it with your own Table widget or a static value. Read more at http://bit.ly/postgres-widget-docs - diff --git a/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java b/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java deleted file mode 100644 index cf47b69281..0000000000 --- a/app/server/appsmith-plugins/redshiftPlugin/src/test/java/com/external/plugins/RedshiftPluginTest.java +++ /dev/null @@ -1,446 +0,0 @@ -package com.external.plugins; - -import com.appsmith.external.models.ActionConfiguration; -import com.appsmith.external.models.ActionExecutionResult; -import com.appsmith.external.models.DBAuth; -import com.appsmith.external.models.DatasourceConfiguration; -import com.appsmith.external.models.DatasourceStructure; -import com.appsmith.external.models.Endpoint; -import com.appsmith.external.pluginExceptions.AppsmithPluginError; -import com.appsmith.external.pluginExceptions.AppsmithPluginException; -import com.appsmith.external.pluginExceptions.StaleConnectionException; -import com.appsmith.external.plugins.PluginExecutor; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import reactor.core.publisher.Mono; -import reactor.test.StepVerifier; -import org.mockito.Mockito; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.mock; - -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Set; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.Date; -import java.sql.Time; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * Unit tests for the RedshiftPlugin - */ -@Slf4j -public class RedshiftPluginTest { - PluginExecutor pluginExecutor = new RedshiftPlugin.RedshiftPluginExecutor(); - - private static String address; - private static Integer port; - private static String username; - private static String password; - private static String dbName; - - @BeforeClass - public static void setUp() { - address = "address"; - port = 5439; - username = "username"; - password = "password"; - dbName = "dbName"; - } - - private DatasourceConfiguration createDatasourceConfiguration() { - DBAuth authDTO = new DBAuth(); - authDTO.setAuthType(DBAuth.Type.USERNAME_PASSWORD); - authDTO.setUsername(username); - authDTO.setPassword(password); - authDTO.setDatabaseName(dbName); - - Endpoint endpoint = new Endpoint(); - endpoint.setHost(address); - endpoint.setPort(port.longValue()); - - DatasourceConfiguration dsConfig = new DatasourceConfiguration(); - dsConfig.setAuthentication(authDTO); - dsConfig.setEndpoints(List.of(endpoint)); - return dsConfig; - } - - @Test - public void testDatasourceCreateConnectionFailure() { - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - Mono dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig); - - StepVerifier.create(dsConnectionMono) - .expectErrorMatches(throwable -> throwable instanceof AppsmithPluginException && throwable.getMessage() - .equals(new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, "Error connecting" + - " to Redshift.").getMessage())) - .verify(); - } - - @Test - public void testStaleConnectionCheck() throws SQLException { - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - ActionConfiguration actionConfiguration = new ActionConfiguration(); - actionConfiguration.setBody("show databases"); - - /* Mock java.sql.Connection: - * a. isClosed(): return true - * b. isValid() : return false - */ - Connection mockConnection = mock(Connection.class); - when(mockConnection.isClosed()).thenReturn(true); - when(mockConnection.isValid(Mockito.anyInt())).thenReturn(false); - - Mono resultMono = pluginExecutor.execute(mockConnection, dsConfig, actionConfiguration); - - StepVerifier.create(resultMono) - .expectErrorMatches(throwable -> throwable instanceof StaleConnectionException) - .verify(); - } - - @Test - public void itShouldValidateDatasourceWithEmptyEndpoints() { - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - dsConfig.setEndpoints(new ArrayList<>()); - - Assert.assertEquals(Set.of("Missing endpoint."), - pluginExecutor.validateDatasource(dsConfig)); - } - - @Test - public void itShouldValidateDatasourceWithEmptyHost() { - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - dsConfig.getEndpoints().get(0).setHost(""); - - Assert.assertEquals(Set.of("Missing hostname."), - pluginExecutor.validateDatasource(dsConfig)); - } - - @Test - public void itShouldValidateDatasourceWithInvalidHostname() { - String hostname = "jdbc://localhost"; - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - dsConfig.getEndpoints().get(0).setHost("jdbc://localhost"); - - Assert.assertEquals(Set.of("Host value cannot contain `/` or `:` characters. Found `" + hostname + "`."), - pluginExecutor.validateDatasource(dsConfig)); - } - - /* 1. CREATE TABLE users ( - * id INTEGER PRIMARY KEY IDENTITY(1,1), - * username VARCHAR (50) UNIQUE NOT NULL, - * password VARCHAR (50) NOT NULL, - * email VARCHAR (355) UNIQUE NOT NULL, - * spouse_dob DATE, - * dob DATE NOT NULL, - * time1 TIME NOT NULL, - * time_tz TIME WITH TIME ZONE NOT NULL, - * created_on TIMESTAMP NOT NULL, - * created_on_tz TIMESTAMP WITH TIME ZONE NOT NULL - * ); - * 2. INSERT INTO users VALUES ( - * 1, - * 'Jack', - * 'jill', - * 'jack@exemplars.com', - * NULL, - * '2018-12-31', - * '18:32:45', - * '04:05:06 PST', - * TIMESTAMP '2018-11-30 20:45:15', - * TIMESTAMP WITH TIME ZONE '2018-11-30 20:45:15 CET' - * ); - * 3. SELECT * FROM users WHERE id = 1; - */ - @Test - public void testExecute() throws SQLException { - /* Mock java.sql.Connection: - * a. isClosed() - * b. isValid() - */ - Connection mockConnection = mock(Connection.class); - when(mockConnection.isClosed()).thenReturn(false); - when(mockConnection.isValid(Mockito.anyInt())).thenReturn(true); - - /* Mock java.sql.Statement: - * a. execute(...) - * b. close() - */ - Statement mockStatement = mock(Statement.class); - when(mockConnection.createStatement()).thenReturn(mockStatement); - when(mockStatement.execute(Mockito.any())).thenReturn(true); - doNothing().when(mockStatement).close(); - - /* Mock java.sql.ResultSet: - * a. getObject(...) - * b. getDate(...) - * c. getTime(...) - * d. getString(...) - * e. getObject(..., ...) - * d. next() - * e. close() - */ - ResultSet mockResultSet = mock(ResultSet.class); - when(mockStatement.getResultSet()).thenReturn(mockResultSet); - when(mockResultSet.getObject(Mockito.anyInt())).thenReturn("", 1, "", "Jack", "", "jill", "", "jack@exemplars.com" - , null, "", "", "", "", ""); - when(mockResultSet.getDate(Mockito.anyInt())).thenReturn(Date.valueOf("2018-12-31"), Date.valueOf("2018-11-30")); - when(mockResultSet.getString(Mockito.anyInt())).thenReturn("18:32:45", "12:05:06+00"); - when(mockResultSet.getTime(Mockito.anyInt())).thenReturn(Time.valueOf("20:45:15")); - when(mockResultSet.getObject(Mockito.anyInt(), Mockito.any(Class.class))).thenReturn(OffsetDateTime.parse( - "2018-11-30T19:45:15+00")); - when(mockResultSet.next()).thenReturn(true).thenReturn(false); - doNothing().when(mockResultSet).close(); - - /* Mock java.sql.ResultSetMetaData: - * a. getColumnCount() - * b. getColumnTypeName(...) - * c. getColumnName(...) - */ - ResultSetMetaData mockResultSetMetaData = mock(ResultSetMetaData.class); - when(mockResultSet.getMetaData()).thenReturn(mockResultSetMetaData); - when(mockResultSetMetaData.getColumnCount()).thenReturn(10); - when(mockResultSetMetaData.getColumnTypeName(Mockito.anyInt())).thenReturn("int4", "varchar", "varchar", - "varchar", "date", "date", "time", "timetz", "timestamp", "timestamptz"); - when(mockResultSetMetaData.getColumnName(Mockito.anyInt())).thenReturn("id", "username", "password", "email", - "spouse_dob", "dob", "time1", "time_tz", "created_on", "created_on_tz"); - - ActionConfiguration actionConfiguration = new ActionConfiguration(); - actionConfiguration.setBody("SELECT * FROM users WHERE id = 1"); - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - Mono dsConnectionMono = Mono.just(mockConnection); - - Mono executeMono = dsConnectionMono - .flatMap(conn -> pluginExecutor.execute(conn, dsConfig, actionConfiguration)); - - StepVerifier.create(executeMono) - .assertNext(result -> { - assertNotNull(result); - assertTrue(result.getIsExecutionSuccess()); - assertNotNull(result.getBody()); - - final JsonNode node = ((ArrayNode) result.getBody()).get(0); - assertEquals("2018-12-31", node.get("dob").asText()); - assertEquals("18:32:45", node.get("time1").asText()); - assertEquals("12:05:06+00", node.get("time_tz").asText()); - assertEquals("2018-11-30T20:45:15Z", node.get("created_on").asText()); - assertEquals("2018-11-30T19:45:15Z", node.get("created_on_tz").asText()); - assertTrue(node.get("spouse_dob").isNull()); - assertArrayEquals( - new String[]{ - "id", - "username", - "password", - "email", - "spouse_dob", - "dob", - "time1", - "time_tz", - "created_on", - "created_on_tz", - }, - new ObjectMapper() - .convertValue(node, LinkedHashMap.class) - .keySet() - .toArray() - ); - }) - .verifyComplete(); - } - - /* 1. CREATE TABLE users ( - * id INTEGER PRIMARY KEY IDENTITY(1,1), - * username VARCHAR (50) UNIQUE NOT NULL, - * password VARCHAR (50) NOT NULL, - * ); - * 2. CREATE TABLE possessions( - * id serial PRIMARY KEY, - * title VARCHAR (50) NOT NULL, - * user_id int NOT NULL, - * constraint user_fk foreign key (user_id) references users(id) - * ); - * 3. CREATE TABLE campus( - * id timestamptz default now(), - * name timestamptz default now() - * ); - * 4. Run TABLES_QUERY - * 5. Run KEYS_QUERY_PRIMARY_KEY - * 6. Run KEYS_QUERY_FOREIGN_KEY - */ - @Test - public void testStructure() throws SQLException { - /* Mock java.sql.Connection: - * a. isClosed() - * b. isValid() - */ - Connection mockConnection = mock(Connection.class); - when(mockConnection.isClosed()).thenReturn(false); - when(mockConnection.isValid(Mockito.anyInt())).thenReturn(true); - - /* Mock java.sql.Statement: - * a. execute(...) - * b. close() - */ - Statement mockStatement = mock(Statement.class); - when(mockConnection.createStatement()).thenReturn(mockStatement); - when(mockStatement.execute(Mockito.any())).thenReturn(true); - doNothing().when(mockStatement).close(); - - /* Mock java.sql.ResultSet: - * d. getString(...) - * d. next() - * e. close() - */ - ResultSet mockResultSet = mock(ResultSet.class); - when(mockStatement.executeQuery(Mockito.anyString())).thenReturn(mockResultSet, mockResultSet, mockResultSet); - when(mockResultSet.next()) - .thenReturn(true, true, true, true, true, true, true, true, false) // TABLES_QUERY - .thenReturn(true, true, false) // KEYS_QUERY_PRIMARY_KEY - .thenReturn(true, false); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("kind")).thenReturn("r", "r", "r", "r", "r", "r", "r", "r");// TABLES_QUERY - when(mockResultSet.getString("schema_name")).thenReturn("public", "public", "public", "public", "public", - "public", "public", "public"); // TABLES_QUERY - when(mockResultSet.getString("table_name")).thenReturn("campus", "campus", "possessions", "possessions", - "possessions", "users", "users", "users"); // TABLES_QUERY - when(mockResultSet.getString("name")).thenReturn("id", "name", "id", "title", "user_id", "id", "username", - "password"); // TABLES_QUERY - when(mockResultSet.getString("column_type")).thenReturn("timestamptz", "timestamptz", "int4", "varchar", - "int4", "int4", "varchar", "varchar"); // TABLES_QUERY - when(mockResultSet.getString("default_expr")).thenReturn("now()", "now()", null, null, null, "\"identity\"" + - "(101507, 0, '1,1'::text)", null, null); // TABLES_QUERY - when(mockResultSet.getString("constraint_name")) - .thenReturn("possessions_pkey", "users_pkey") // KEYS_QUERY_PRIMARY_KEY - .thenReturn("user_fk"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("constraint_type")) - .thenReturn("p", "p") // KEYS_QUERY_PRIMARY_KEY - .thenReturn("f"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("self_schema")) - .thenReturn("public", "public") // KEYS_QUERY_PRIMARY_KEY - .thenReturn("public"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("self_table")) - .thenReturn("possessions", "users") // KEYS_QUERY_PRIMARY_KEY - .thenReturn("possessions"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("self_column")) - .thenReturn("id", "id") // KEYS_QUERY_PRIMARY_KEY - .thenReturn("user_id"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("foreign_schema")).thenReturn("public"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("foreign_table")).thenReturn("users"); // KEYS_QUERY_FOREIGN_KEY - when(mockResultSet.getString("foreign_column")).thenReturn("id"); // KEYS_QUERY_FOREIGN_KEY - doNothing().when(mockResultSet).close(); - - DatasourceConfiguration dsConfig = createDatasourceConfiguration(); - Mono dsConnectionMono = Mono.just(mockConnection); - Mono structureMono = dsConnectionMono - .flatMap(connection -> pluginExecutor.getStructure(connection, dsConfig)); - - StepVerifier.create(structureMono) - .assertNext(structure -> { - assertNotNull(structure); - assertEquals(3, structure.getTables().size()); - - final DatasourceStructure.Table campusTable = structure.getTables().get(0); - assertEquals("public.campus", campusTable.getName()); - assertEquals(DatasourceStructure.TableType.TABLE, campusTable.getType()); - assertArrayEquals( - new DatasourceStructure.Column[]{ - new DatasourceStructure.Column("id", "timestamptz", "now()"), - new DatasourceStructure.Column("name", "timestamptz", "now()") - }, - campusTable.getColumns().toArray() - ); - assertEquals(campusTable.getKeys().size(), 0); - - final DatasourceStructure.Table possessionsTable = structure.getTables().get(1); - assertEquals("public.possessions", possessionsTable.getName()); - assertEquals(DatasourceStructure.TableType.TABLE, possessionsTable.getType()); - assertArrayEquals( - new DatasourceStructure.Column[]{ - new DatasourceStructure.Column("id", "int4", null), - new DatasourceStructure.Column("title", "varchar", null), - new DatasourceStructure.Column("user_id", "int4", null), - }, - possessionsTable.getColumns().toArray() - ); - - final DatasourceStructure.PrimaryKey possessionsPrimaryKey = new DatasourceStructure.PrimaryKey("possessions_pkey", new ArrayList<>()); - possessionsPrimaryKey.getColumnNames().add("id"); - final DatasourceStructure.ForeignKey possessionsUserForeignKey = new DatasourceStructure.ForeignKey( - "user_fk", - List.of("user_id"), - List.of("users.id") - ); - assertArrayEquals( - new DatasourceStructure.Key[]{possessionsPrimaryKey, possessionsUserForeignKey}, - possessionsTable.getKeys().toArray() - ); - - assertArrayEquals( - new DatasourceStructure.Template[]{ - new DatasourceStructure.Template("SELECT", "SELECT * FROM public.\"possessions\" LIMIT 10;"), - new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"possessions\" " + - "(\"id\", \"title\", \"user_id\")\n VALUES (1, '', 1);"), - new DatasourceStructure.Template("UPDATE", "UPDATE public.\"possessions\" SET\n" + - " \"id\" = 1\n" + - " \"title\" = ''\n" + - " \"user_id\" = 1\n" + - " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), - new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"possessions\"\n" + - " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!"), - }, - possessionsTable.getTemplates().toArray() - ); - - final DatasourceStructure.Table usersTable = structure.getTables().get(2); - assertEquals("public.users", usersTable.getName()); - assertEquals(DatasourceStructure.TableType.TABLE, usersTable.getType()); - assertArrayEquals( - new DatasourceStructure.Column[]{ - new DatasourceStructure.Column("id", "int4", "\"identity\"(101507, " + - "0, '1,1'::text)"), - new DatasourceStructure.Column("username", "varchar", null), - new DatasourceStructure.Column("password", "varchar", null) - }, - usersTable.getColumns().toArray() - ); - - final DatasourceStructure.PrimaryKey usersPrimaryKey = new DatasourceStructure.PrimaryKey("users_pkey", new ArrayList<>()); - usersPrimaryKey.getColumnNames().add("id"); - assertArrayEquals( - new DatasourceStructure.Key[]{usersPrimaryKey}, - usersTable.getKeys().toArray() - ); - - assertArrayEquals( - new DatasourceStructure.Template[]{ - new DatasourceStructure.Template("SELECT", "SELECT * FROM public.\"users\" LIMIT 10;"), - new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"users\" (\"username\", \"password\")\n" + - " VALUES ('', '');"), - new DatasourceStructure.Template("UPDATE", "UPDATE public.\"users\" SET\n" + - " \"username\" = ''\n" + - " \"password\" = ''\n" + - " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!"), - new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"users\"\n" + - " WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!"), - }, - usersTable.getTemplates().toArray() - ); - }) - .verifyComplete(); - } -} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java index 4d41326594..89260f746e 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/DatabaseChangelog.java @@ -1495,24 +1495,4 @@ public class DatabaseChangelog { } }); } - - @ChangeSet(order = "046", id = "add-redshift-plugin", author = "") - public void addRedshiftPlugin(MongoTemplate mongoTemplate) { - Plugin plugin = new Plugin(); - plugin.setName("Redshift"); - plugin.setType(PluginType.DB); - plugin.setPackageName("redshift-plugin"); - plugin.setUiComponent("DbEditorForm"); - plugin.setResponseType(Plugin.ResponseType.TABLE); - plugin.setIconLocation("https://s3.us-east-2.amazonaws.com/assets.appsmith.com/Redshift.png"); - plugin.setDocumentationLink("https://docs.appsmith.com/core-concepts/connecting-to-databases/querying-redshift"); - plugin.setDefaultInstall(true); - try { - mongoTemplate.insert(plugin); - } catch (DuplicateKeyException e) { - log.warn(plugin.getPackageName() + " already present in database."); - } - - installPluginToAllOrganizations(mongoTemplate, plugin.getId()); - } }