diff --git a/bun.lock b/bun.lock index 6b0fca29fc..e4e5fa29a0 100644 --- a/bun.lock +++ b/bun.lock @@ -157,6 +157,69 @@ }, }, "miniapps/mentra-ai": { + "name": "mentra-ai", + "version": "1.0.0", + "dependencies": { + "@googlemaps/google-maps-services-js": "^3.4.2", + "@mastra/core": "^1.4.0", + "@mentra/react": "2.1.2", + "@mentra/sdk": "3.0.0-alpha.4", + "@radix-ui/react-scroll-area": "^1.2.2", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.2", + "bun-plugin-tailwind": "^0.1.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "expr-eval": "^2.0.2", + "framer-motion": "^12.34.0", + "hono": "^4.11.3", + "lottie-react": "^2.4.1", + "lucide-react": "^0.564.0", + "mongoose": "^9.2.1", + "react": "^19", + "react-dom": "^19", + "react-markdown": "^10.1.0", + "tailwind-merge": "^3.2.0", + "tw-animate-css": "^1.3.8", + "ws": "^8.18.1", + "zod": "^4.3.6", + }, + "devDependencies": { + "@types/bun": "latest", + "@types/react": "^19", + "@types/react-dom": "^19", + "@types/ws": "^8.18.0", + "tailwindcss": "^4.1.17", + "typescript": "^5.0.0", + }, + }, + "miniapps/mentra-ai-local": { + "name": "mentra-ai-local", + "version": "1.0.0", + "dependencies": { + "@mentra/auth": "workspace:*", + "@mentra/miniapp": "workspace:*", + "expr-eval": "^2.0.2", + "framer-motion": "^12.34.0", + "hono": "^4.11.1", + "lottie-react": "^2.4.1", + "lucide-react": "^0.564.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-markdown": "^10.1.0", + "tailwindcss": "^4.1.17", + "tw-animate-css": "^1.3.8", + }, + "devDependencies": { + "@mentra/miniapp-cli": "workspace:*", + "@types/react": "^19", + "@types/react-dom": "^19", + "bun-plugin-tailwind": "^0.1.2", + "bun-types": "^1.3.14", + }, + }, + "miniapps/mentra-ai-matt": { "name": "mentra-ai-miniapp", "dependencies": { "@mentra/miniapp": "workspace:*", @@ -303,10 +366,24 @@ "bun", ], "packages": { + "@a2a-js/sdk": ["@a2a-js/sdk@0.3.13", "", { "dependencies": { "uuid": "^11.1.0" }, "peerDependencies": { "@bufbuild/protobuf": "^2.10.2", "@grpc/grpc-js": "^1.11.0", "express": "^4.21.2 || ^5.1.0" }, "optionalPeers": ["@bufbuild/protobuf", "@grpc/grpc-js", "express"] }, "sha512-BZr0f9JVNQs3GKOM9xINWCh6OKIJWZFPyqqVqTym5mxO2Eemc6I/0zL7zWnljHzGdaf5aZQyQN5xa6PSH62q+A=="], + + "@ai-sdk/provider": ["@ai-sdk/provider@2.0.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww=="], + + "@ai-sdk/provider-utils-v5": ["@ai-sdk/provider-utils@3.0.25", "", { "dependencies": { "@ai-sdk/provider": "2.0.3", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CvsRu+32Y8a167s+lrIBtsybvgTHp8j9y+6BeTvLeoW3Q+okw/b4CnNUFOLIXsRaKHQKAH+IHNJPYWywfpw0LA=="], + + "@ai-sdk/provider-utils-v6": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="], + + "@ai-sdk/provider-v5": ["@ai-sdk/provider@2.0.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww=="], + + "@ai-sdk/provider-v6": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="], + "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.105.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-sDyu+aM9cE6uZE+HgRjjHRb+qqb87GHZOx+8bE0YlWetdL1YcVLxn8h9ltxGOflyChTe6PMEo50kMQV4cw0hfg=="], "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], + "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], + "@clack/core": ["@clack/core@1.4.1", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw=="], "@clack/prompts": ["@clack/prompts@1.5.1", "", { "dependencies": { "@clack/core": "1.4.1", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw=="], @@ -351,6 +428,12 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + "@googlemaps/google-maps-services-js": ["@googlemaps/google-maps-services-js@3.4.2", "", { "dependencies": { "@googlemaps/url-signature": "^1.0.4", "agentkeepalive": "^4.1.0", "axios": "^1.5.1", "query-string": "<8.x", "retry-axios": "<3.x" } }, "sha512-QjxiJSt8woyPaaQIUUDNL1nRfCEXTiv8KfJSNq/YzKEUVXABT75GLG+Zo267UwOcq70n8OsZbaro5VrY962mJg=="], + + "@googlemaps/url-signature": ["@googlemaps/url-signature@1.0.40", "", { "dependencies": { "crypto-js": "^4.2.0" } }, "sha512-Gme3JxGZWQ4NVpATajSpS2/inQzhUxRvr/FK6IFpcC7AHOAmx8blI0y1/Qi2jqil+WoQ3TkEqq/MaKVtuV68RQ=="], + + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, ""], "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, ""], @@ -363,6 +446,82 @@ "@ioredis/commands": ["@ioredis/commands@1.10.0", "", {}, "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="], + "@isaacs/ttlcache": ["@isaacs/ttlcache@2.1.5", "", {}, "sha512-VwGZqqjAWPICTmxUZnbpEfO60LhPWzquik+bmyXGY7pYRn6diEvCI5i6Ca+J6o2y4vS73HrpuMTo2dOvUevH8w=="], + + "@jimp/core": ["@jimp/core@1.6.1", "", { "dependencies": { "@jimp/file-ops": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "await-to-js": "^3.0.0", "exif-parser": "^0.1.12", "file-type": "^21.3.3", "mime": "3" } }, "sha512-+BoKC5G6hkrSy501zcJ2EpfnllP+avPevcBfRcZe/CW+EwEfY6X1EZ8QWyT7NpDIvEEJb1fdJnMMfUnFkxmw9A=="], + + "@jimp/diff": ["@jimp/diff@1.6.1", "", { "dependencies": { "@jimp/plugin-resize": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "pixelmatch": "^5.3.0" } }, "sha512-YkKDPdHjLgo1Api3+Bhc0GLAygldlpt97NfOKoNg1U6IUNXA6X2MgosCjPfSBiSvJvrrz1fsIR+/4cfYXBI/HQ=="], + + "@jimp/file-ops": ["@jimp/file-ops@1.6.1", "", {}, "sha512-T+gX6osHjprbDRad0/B71Evyre7ZdVY1z/gFGEG9Z8KOtZPKboWvPeP2UjbZYWQLy9UKCPQX1FNAnDiOPkJL7w=="], + + "@jimp/js-bmp": ["@jimp/js-bmp@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "bmp-ts": "^1.0.9" } }, "sha512-xzWzNT4/u5zGrTT3Tme9sGU7YzIKxi13+BCQwLqACbt5DXf9SAfdzRkopZQnmDko+6In5nqaT89Gjs43/WdnYQ=="], + + "@jimp/js-gif": ["@jimp/js-gif@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "gifwrap": "^0.10.1", "omggif": "^1.0.10" } }, "sha512-YjY2W26rQa05XhanYhRZ7dingCiNN+T2Ymb1JiigIbABY0B28wHE3v3Cf1/HZPWGu0hOg36ylaKgV5KxF2M58w=="], + + "@jimp/js-jpeg": ["@jimp/js-jpeg@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "jpeg-js": "^0.4.4" } }, "sha512-HT9H3yOmlOFzYmdI15IYdfy6ggQhSRIaHeA+OTJSEORXBqEo97sUZu/DsgHIcX5NJ7TkJBTgZ9BZXsV6UbsyMg=="], + + "@jimp/js-png": ["@jimp/js-png@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "pngjs": "^7.0.0" } }, "sha512-SZ/KVhI5UjcSzzlXsXdIi/LhJ7UShf2NkMOtVrbZQcGzsqNtynAelrOXeoTxcanfVqmNhAoVHg8yR2cYoqrYjA=="], + + "@jimp/js-tiff": ["@jimp/js-tiff@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "utif2": "^4.1.0" } }, "sha512-jDG/eJquID1M4MBlKMmDRBmz2TpXMv7TUyu2nIRUxhlUc2ogC82T+VQUkca9GJH1BBJ9dx5sSE5dGkWNjIbZxw=="], + + "@jimp/plugin-blit": ["@jimp/plugin-blit@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-MwnI7C7K81uWddY9FLw1fCOIy6SsPIUftUz36Spt7jisCn8/40DhQMlSxpxTNelnZb/2SnloFimQfRZAmHLOqQ=="], + + "@jimp/plugin-blur": ["@jimp/plugin-blur@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/utils": "1.6.1" } }, "sha512-lIo7Tzp5jQu30EFFSK/phXANK3citKVEjepDjQ6ljHoIFtuMRrnybnmI2Md24ulvWlDaz+hh3n6qrMb8ydwhZQ=="], + + "@jimp/plugin-circle": ["@jimp/plugin-circle@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "zod": "^3.23.8" } }, "sha512-kK1PavY6cKHNNKce37vdV4Tmpc1/zDKngGoeOV3j+EMatoHFZUinV3s6F9aWryPs3A0xhCLZgdJ6Zeea1d5LCQ=="], + + "@jimp/plugin-color": ["@jimp/plugin-color@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "tinycolor2": "^1.6.0", "zod": "^3.23.8" } }, "sha512-LtUN1vAP+LRlZAtTNVhDRSiXx+26Kbz3zJaG6a5k59gQ95jgT5mknnF8lxkHcqJthM4MEk3/tPxkdJpEybyF/A=="], + + "@jimp/plugin-contain": ["@jimp/plugin-contain@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/plugin-blit": "1.6.1", "@jimp/plugin-resize": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-m0qhrfA8jkTqretGv4w+T/ADFR4GwBpE0sCOC2uJ0dzr44/ddOMsIdrpi89kabqYiPYIrxkgdCVCLm3zn1Vkkg=="], + + "@jimp/plugin-cover": ["@jimp/plugin-cover@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/plugin-crop": "1.6.1", "@jimp/plugin-resize": "1.6.1", "@jimp/types": "1.6.1", "zod": "^3.23.8" } }, "sha512-hZytnsth0zoll6cPf434BrT+p/v569Wr5tyO6Dp0dH1IDPhzhB5F38sZGMLDo7bzQiN9JFVB3fxkcJ/WYCJ3Mg=="], + + "@jimp/plugin-crop": ["@jimp/plugin-crop@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-EerRSLlclXyKDnYc/H9w/1amZW7b7v3OGi/VlerPd2M/pAu5X8TkyYWtfqYCXnNp1Ixtd8oCo9zGfY9zoXT4rg=="], + + "@jimp/plugin-displace": ["@jimp/plugin-displace@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-K07QVl7xQwIfD6KfxRV/c3E9e7ZBXxUXdWuvoTWcKHL2qV48MOF5Nqbz/aJW4ThnQARIsxvYlZjPFiqkCjlU+g=="], + + "@jimp/plugin-dither": ["@jimp/plugin-dither@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1" } }, "sha512-+2V+GCV2WycMoX1/z977TkZ8Zq/4MVSKElHYatgUqtwXMi2fDK2gKYU2g9V39IqFvTJsTIsK0+58VFz/ROBVew=="], + + "@jimp/plugin-fisheye": ["@jimp/plugin-fisheye@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-XtS5ZyoZ0vxZxJ6gkqI63SivhtI58vX95foMPM+cyzYkRsJXMOYCr8DScxF5bp4Xr003NjYm/P+7+08tibwzHA=="], + + "@jimp/plugin-flip": ["@jimp/plugin-flip@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "zod": "^3.23.8" } }, "sha512-ws38W/sGj7LobNRayQ83garxiktOyWxM5vO/y4a/2cy9v65SLEUzVkrj+oeAaUSSObdz4HcCEla7XtGlnAGAaA=="], + + "@jimp/plugin-hash": ["@jimp/plugin-hash@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/js-bmp": "1.6.1", "@jimp/js-jpeg": "1.6.1", "@jimp/js-png": "1.6.1", "@jimp/js-tiff": "1.6.1", "@jimp/plugin-color": "1.6.1", "@jimp/plugin-resize": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "any-base": "^1.1.0" } }, "sha512-sZt6ZcMX6i8vFWb4GYnw0pR/o9++ef0dTVcboTB5B/g7nrxCODIB4wfEkJ/YqZM5wUvol77K1qeS0/rVO6z21A=="], + + "@jimp/plugin-mask": ["@jimp/plugin-mask@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "zod": "^3.23.8" } }, "sha512-SIG0/FcmEj3tkwFxc7fAGLO8o4uNzMpSOdQOhbCgxefQKq5wOVMk9BQx/sdMPBwtMLr9WLq0GzLA/rk6t2v20A=="], + + "@jimp/plugin-print": ["@jimp/plugin-print@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/js-jpeg": "1.6.1", "@jimp/js-png": "1.6.1", "@jimp/plugin-blit": "1.6.1", "@jimp/types": "1.6.1", "parse-bmfont-ascii": "^1.0.6", "parse-bmfont-binary": "^1.0.6", "parse-bmfont-xml": "^1.1.6", "simple-xml-to-json": "^1.2.2", "zod": "^3.23.8" } }, "sha512-BYVz/X3Xzv8XYilVeDy11NOp0h7BTDjlOtu0BekIFHP1yHVd24AXNzbOy52XlzYZWQ0Dl36HOHEpl/nSNrzc6w=="], + + "@jimp/plugin-quantize": ["@jimp/plugin-quantize@1.6.1", "", { "dependencies": { "image-q": "^4.0.0", "zod": "^3.23.8" } }, "sha512-J2En9PLURfP+vwYDtuZ9T8yBW6BWYZBScydAjRiPBmJfEhTcNQqiiQODrZf7EqbbX/Sy5H6dAeRiqkgoV9N6Ww=="], + + "@jimp/plugin-resize": ["@jimp/plugin-resize@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/types": "1.6.1", "zod": "^3.23.8" } }, "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg=="], + + "@jimp/plugin-rotate": ["@jimp/plugin-rotate@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/plugin-crop": "1.6.1", "@jimp/plugin-resize": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg=="], + + "@jimp/plugin-threshold": ["@jimp/plugin-threshold@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/plugin-color": "1.6.1", "@jimp/plugin-hash": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1", "zod": "^3.23.8" } }, "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q=="], + + "@jimp/types": ["@jimp/types@1.6.1", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w=="], + + "@jimp/utils": ["@jimp/utils@1.6.1", "", { "dependencies": { "@jimp/types": "1.6.1", "tinycolor2": "^1.6.0" } }, "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw=="], + + "@logtail/core": ["@logtail/core@0.5.8", "", { "dependencies": { "@logtail/tools": "^0.5.8", "@logtail/types": "^0.5.8", "serialize-error": "8.1.0" } }, "sha512-1LxjI46LCXeVRyENwjO4s0a1CWSIqHjYH6w2YVNhQLc5b7mVN0jhzxvmg9mps54aEuCSuK2SVCNmgvuNTDtAug=="], + + "@logtail/node": ["@logtail/node@0.5.8", "", { "dependencies": { "@logtail/core": "^0.5.8", "@logtail/types": "^0.5.8", "@msgpack/msgpack": "^2.5.1", "@types/stack-trace": "^0.0.33", "minimatch": "^9.0.5", "stack-trace": "0.0.10" } }, "sha512-9XMxeToOL1QHVNp7IQlPxbRsu3iYUBtXl/SFCyOQQmtnwzS7z+tbiV39DYkXfwkzig6wjwTfLYDQj673Bqplqg=="], + + "@logtail/pino": ["@logtail/pino@0.5.8", "", { "dependencies": { "@logtail/node": "^0.5.8", "@logtail/types": "^0.5.8", "pino-abstract-transport": "^1.0.0" }, "peerDependencies": { "pino": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" } }, "sha512-MRRAAn0APedr0v3uP91YnLJT1dJts/PGSRaBkFTyeG3gS28TkWbQc7ZruD17pDKEgOhRNJkj7c2v9uh8AhKFug=="], + + "@logtail/tools": ["@logtail/tools@0.5.8", "", { "dependencies": { "@logtail/types": "^0.5.8" } }, "sha512-eAbbHaYSpRoB7Udp301xVUVDeKdgXTP2/s9FOeKX5tPLMM3hgbvuIx50bYJoV/to7bHGYBi36Gdsnj8ElcPXbg=="], + + "@logtail/types": ["@logtail/types@0.5.8", "", {}, "sha512-CJIijD/2vqK8XwPRZJeUkiiBEhKTviHs5p1WI40WvW21kU18QiQ8PupFJ2uhrItxhwtlkXmRXul5+cNtv3cAFQ=="], + + "@lukeed/csprng": ["@lukeed/csprng@1.1.0", "", {}, "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA=="], + + "@lukeed/uuid": ["@lukeed/uuid@2.0.1", "", { "dependencies": { "@lukeed/csprng": "^1.1.0" } }, "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w=="], + + "@mastra/core": ["@mastra/core@1.45.0", "", { "dependencies": { "@a2a-js/sdk": "~0.3.13", "@ai-sdk/provider-utils-v5": "npm:@ai-sdk/provider-utils@3.0.25", "@ai-sdk/provider-utils-v6": "npm:@ai-sdk/provider-utils@4.0.27", "@ai-sdk/provider-v5": "npm:@ai-sdk/provider@2.0.3", "@ai-sdk/provider-v6": "npm:@ai-sdk/provider@3.0.10", "@isaacs/ttlcache": "^2.1.4", "@lukeed/uuid": "^2.0.1", "@mastra/schema-compat": "1.3.0", "@modelcontextprotocol/sdk": "^1.29.0", "@sindresorhus/slugify": "^2.2.1", "@standard-schema/spec": "^1.1.0", "ajv": "^8.20.0", "chat": "^4.29.0", "croner": "^10.0.1", "dotenv": "^17.3.1", "execa": "^9.6.1", "fastq": "^1.20.1", "gray-matter": "^4.0.3", "ignore": "^7.0.5", "jpeg-js": "^0.4.4", "json-schema": "^0.4.0", "lru-cache": "^11.2.7", "p-map": "^7.0.4", "p-retry": "^7.1.1", "picomatch": "^4.0.3", "posthog-node": "^5.37.0", "tokenx": "^1.3.0", "ws": "^8.20.0", "xxhash-wasm": "^1.1.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-UPpNL+iJVfypfc7IOKL9fhmoKKDe6IA6y+DwZDRSTN+uz/ft194e+TrB4LnBdYtTTeLhDO96mxW2rp9LK0ULhg=="], + + "@mastra/schema-compat": ["@mastra/schema-compat@1.3.0", "", { "dependencies": { "json-schema-to-zod": "^2.7.0", "zod-from-json-schema": "^0.5.2", "zod-from-json-schema-v3": "npm:zod-from-json-schema@^0.0.5", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-VAWCXGuWuTqnljkheb3zKUujNK6rdGhFISxdSoSz3/d3HJWZOHY10mUnXw5lg0s73FdFDGg4tehbq28fAZz+lA=="], + "@mentra/auth": ["@mentra/auth@workspace:cloud-v2/packages/auth"], "@mentra/cloud-client": ["@mentra/cloud-client@workspace:cloud-v2/packages/cloud-client"], @@ -379,10 +538,18 @@ "@mentra/miniapp-cli": ["@mentra/miniapp-cli@workspace:sdk/miniapp-cli"], + "@mentra/react": ["@mentra/react@2.1.2", "", { "peerDependencies": { "react": ">=19.0.0", "react-dom": ">=19.0.0" } }, "sha512-HnZ8bIE4I4L26BnuJ4AZdB48c14X+0PGV/sJJz6VYBXwc9kkoRFh2A2SsOW3PPcj9GMv5O6A/iydPNKF+Wanfg=="], + + "@mentra/sdk": ["@mentra/sdk@3.0.0-alpha.4", "", { "dependencies": { "@logtail/pino": "^0.5.4", "@mentra/types": "^1.0.0-beta.1", "axios": "^1.8.1", "chalk": "^5.6.2", "dotenv": "^16.4.0", "hono": "^4.11.3", "jimp": "^1.6.0", "jsonwebtoken": "^8.5.1", "jsrsasign": "^11.1.0", "lamejs": "^1.2.1", "pino": "^9.6.0", "strip-ansi": "^7.1.2", "ws": "^8.18.2" }, "optionalDependencies": { "pino-pretty": "^13.0.0" } }, "sha512-EO02lVDev84XuJZI4v9q2Q3fs2QpX85sK7hyrLiBe2FCl1sX3HhwVeWZlbd/QtFvJnlGf9EBBABTa1yP8gSaqQ=="], + "@mentra/types": ["@mentra/types@1.0.0-beta.2", "", {}, "sha512-yn0H7oYId8TSOGlSDmstds4nnmZbXyDncFy3FC1h4dWpDx6o4BmBehAJd2Otp9gr1bWwIL0yEp6JK60I8TBUGw=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], + "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.4.11", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-o9rAHc0IpIjuPSxRutWpE1F62x7n+4mVS4rCNHkzhIUMQcc18bb6xEq5wd2NdN0WjepIyXIppRshYI2kQDOZVA=="], + "@msgpack/msgpack": ["@msgpack/msgpack@2.8.0", "", {}, "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="], @@ -423,6 +590,10 @@ "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + "@posthog/core": ["@posthog/core@1.35.4", "", { "dependencies": { "@posthog/types": "^1.390.2" } }, "sha512-DowOjN83tGtg4NPv0tmExjXiIWapHDDTv0ZZHg70XBjH5o/AB3DkMVMvj5ODIi1Y5bw7eMETidGvRwWH0/g3wA=="], + + "@posthog/types": ["@posthog/types@1.390.2", "", {}, "sha512-WcfKz2GNn2vfDX8vXmJYbKxegPxVWHuDQ/pHdAn0HoZDXDFnEp/+x3qBQA+fEvtbPjjtjgAt2wIgJMlM7asx7g=="], + "@radix-ui/number": ["@radix-ui/number@1.1.2", "", {}, "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig=="], "@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], @@ -465,12 +636,16 @@ "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-FvgPt1bRmg8Xt2QpF7NUZW3dE0ZQHGm41dAdgT2J2GJPoIXz+9Em3NobAxf4fupcxhgHu03E5CRiU2MWvObXyg=="], + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.12", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-xuafVzQiTCLsyEjakowTdG3OgTXsmO7IdCiO77otIa+z44xoLNs9Do5eg7POFumIOCjtG6djfm6RKUKpUa/csA=="], + "@radix-ui/react-select": ["@radix-ui/react-select@2.3.0", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.9", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.12", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.9", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.0", "@radix-ui/react-portal": "1.1.11", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-slot": "1.2.5", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.5", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mENc7WpJvJcW8hlMpzfFcHcEhTvYS5JMBmi9HVC1Q00uhBwML086MHYUV8QQdQv6lcu0Wg8dzd1RB8AFADcG/g=="], "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rCMO3QsIVKv5JTY5CVbo2MvO77SpEqqYc8AvRE7OWqRDOIqAKjsp+DrmnY9uc8NPdxB5E2z47HTYGeE2+NTptg=="], "@radix-ui/react-switch": ["@radix-ui/react-switch@1.3.0", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.5", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-GP1EZwhoZO/GGnhM1P5/2Vpm8iN8EnngyU0oezn2l78kN8tj25pyrvjIaT7azBhK615KSt+P2w39y57YV5jVkA=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw=="], "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], @@ -493,10 +668,24 @@ "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], + + "@sindresorhus/slugify": ["@sindresorhus/slugify@2.2.1", "", { "dependencies": { "@sindresorhus/transliterate": "^1.0.0", "escape-string-regexp": "^5.0.0" } }, "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw=="], + + "@sindresorhus/transliterate": ["@sindresorhus/transliterate@1.6.0", "", { "dependencies": { "escape-string-regexp": "^5.0.0" } }, "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ=="], + "@soniox/node": ["@soniox/node@2.1.1", "", {}, "sha512-vPXDJ58nTMxAiFMZD3DqQd2owsuySAZ4PKH++woNz0GSX6o8C66VFfn4vzJ9PcnwdmpUzRZrZcdgiNzkippLKA=="], "@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + "@turf/along": ["@turf/along@7.3.5", "", { "dependencies": { "@turf/bearing": "7.3.5", "@turf/destination": "7.3.5", "@turf/distance": "7.3.5", "@turf/helpers": "7.3.5", "@turf/invariant": "7.3.5", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-Ee4AHV9j2Bnlm/5nm4ChY7nkwpaaMffSez9nsJ9HcMbzG+GgTkt0F5pn9d02U7YvuWqckM5lfr3kBI+w2uTz+g=="], "@turf/angle": ["@turf/angle@7.3.5", "", { "dependencies": { "@turf/bearing": "7.3.5", "@turf/helpers": "7.3.5", "@turf/invariant": "7.3.5", "@turf/rhumb-bearing": "7.3.5", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-+c3UZfkL1nNacfpLkj89rRreIlKM5UALeeWpcw7hCEK4MycXCBmITkyLLXOzoQaRBc/7ua4PV0Ov13Y6Ck9PzQ=="], @@ -731,14 +920,20 @@ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], + "@types/d3-voronoi": ["@types/d3-voronoi@1.1.12", "", {}, "sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, ""], "@types/estree": ["@types/estree@1.0.8", "", {}, ""], + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, ""], "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], @@ -757,6 +952,8 @@ "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/stack-trace": ["@types/stack-trace@0.0.33", "", {}, "sha512-O7in6531Bbvlb2KEsJ0dq0CHZvc3iWSR5ZYMtvGgnHA56VgriAN/AU2LorfmcvAl2xc9N5fbCTRyMRRl8nd74g=="], + "@types/unist": ["@types/unist@3.0.3", "", {}, ""], "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], @@ -785,6 +982,8 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], @@ -823,20 +1022,32 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + "@workflow/serde": ["@workflow/serde@4.1.0-beta.2", "", {}, "sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + "acorn": ["acorn@8.15.0", "", { "bin": "bin/acorn" }, ""], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, ""], + "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, ""], + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "ansi-escapes": ["ansi-escapes@7.2.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="], "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, ""], + "any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="], + "arc": ["arc@0.2.0", "", {}, "sha512-8NFOo126uYKQJyXNSLY/jSklgfLQL+XWAcPXGo876JwEQ8nSOPXWNI3TV2jLZMN8QEw8uksJ1ZwS4npjBca8MA=="], "argparse": ["argparse@2.0.1", "", {}, ""], @@ -861,16 +1072,28 @@ "async-function": ["async-function@1.0.0", "", {}, ""], + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, ""], + "await-to-js": ["await-to-js@3.0.0", "", {}, "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g=="], + + "axios": ["axios@1.18.1", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g=="], + + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, ""], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + "bmp-ts": ["bmp-ts@1.0.9", "", {}, "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw=="], + + "body-parser": ["body-parser@2.3.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^2.0.0", "debug": "^4.4.3", "http-errors": "^2.0.1", "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", "qs": "^6.15.2", "raw-body": "^3.0.2", "type-is": "^2.1.0" } }, "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw=="], + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, ""], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, ""], @@ -879,12 +1102,16 @@ "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + "bun": ["bun@1.3.14", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.14", "@oven/bun-darwin-x64": "1.3.14", "@oven/bun-darwin-x64-baseline": "1.3.14", "@oven/bun-freebsd-aarch64": "1.3.14", "@oven/bun-freebsd-x64": "1.3.14", "@oven/bun-linux-aarch64": "1.3.14", "@oven/bun-linux-aarch64-android": "1.3.14", "@oven/bun-linux-aarch64-musl": "1.3.14", "@oven/bun-linux-x64": "1.3.14", "@oven/bun-linux-x64-android": "1.3.14", "@oven/bun-linux-x64-baseline": "1.3.14", "@oven/bun-linux-x64-musl": "1.3.14", "@oven/bun-linux-x64-musl-baseline": "1.3.14", "@oven/bun-windows-aarch64": "1.3.14", "@oven/bun-windows-x64": "1.3.14", "@oven/bun-windows-x64-baseline": "1.3.14" }, "os": [ "!aix", "!sunos", "!openbsd", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-aB6GVd42x1Y5ie1K16SF+oLGtgSkwX9hgoDdIW88pjvfTccU8F1vfpoOt34QLv0dZ1v3XimtaxPlZUG81Gx9Zg=="], "bun-plugin-tailwind": ["bun-plugin-tailwind@0.1.2", "", { "peerDependencies": { "bun": ">=1.0.0" } }, "sha512-41jNC1tZRSK3s1o7pTNrLuQG8kL/0vR/JgiTmZAJ1eHwe0w5j6HFPKeqEk0WAD13jfrUC7+ULuewFBBCoADPpg=="], "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, ""], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, ""], @@ -899,6 +1126,14 @@ "character-entities": ["character-entities@2.0.2", "", {}, ""], + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + + "chat": ["chat@4.31.0", "", { "dependencies": { "@workflow/serde": "4.1.0-beta.2", "mdast-util-to-string": "^4.0.0", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "remend": "^1.2.1", "unified": "^11.0.5" }, "peerDependencies": { "ai": "^6.0.182", "zod": "^3.0.0 || ^4.0.0" }, "optionalPeers": ["ai", "zod"] }, "sha512-F6oJq9JUraLFkITS96/NKgwZwBfZX8aOwOj5qMs5NNwnOGHrSXZ5+osK+EA4HjzfyUEDfFTNiOSmyzgtFLpuWg=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], @@ -915,18 +1150,34 @@ "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], "concat-map": ["concat-map@0.0.1", "", {}, ""], "concaveman": ["concaveman@1.2.1", "", { "dependencies": { "point-in-polygon": "^1.1.0", "rbush": "^3.0.1", "robust-predicates": "^2.0.4", "tinyqueue": "^2.0.3" } }, "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw=="], + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], + + "croner": ["croner@10.0.1", "", {}, "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, ""], + "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="], + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], "d3-array": ["d3-array@1.2.4", "", {}, "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="], @@ -947,14 +1198,20 @@ "decode-named-character-reference": ["decode-named-character-reference@1.2.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, ""], + "decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], + "deep-is": ["deep-is@0.1.4", "", {}, ""], "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, ""], "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, ""], + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + "dequal": ["dequal@2.0.3", "", {}, ""], "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], @@ -963,12 +1220,20 @@ "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, ""], + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, ""], "earcut": ["earcut@2.2.4", "", {}, "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="], + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], @@ -989,6 +1254,8 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, ""], + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, ""], "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": "bin/eslint.js" }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], @@ -1027,22 +1294,46 @@ "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, ""], + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, ""], "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, ""], "estraverse": ["estraverse@5.3.0", "", {}, ""], + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + "esutils": ["esutils@2.0.3", "", {}, ""], + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], + + "eventsource-parser": ["eventsource-parser@3.1.0", "", {}, "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg=="], + "example-miniapp": ["example-miniapp@workspace:miniapps/example-miniapp"], + "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], + + "exif-parser": ["exif-parser@0.1.12", "", {}, "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="], + + "expr-eval": ["expr-eval@2.0.2", "", {}, "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg=="], + + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + + "express-rate-limit": ["express-rate-limit@8.5.2", "", { "dependencies": { "ip-address": "^10.2.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], + "fast-copy": ["fast-copy@3.0.2", "", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, ""], @@ -1061,28 +1352,48 @@ "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], + "fast-uri": ["fast-uri@3.1.2", "", {}, "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="], + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, ""], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, ""], + "file-type": ["file-type@21.3.4", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, ""], + "filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], + + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, ""], "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, ""], "flatted": ["flatted@3.3.3", "", {}, ""], + "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, ""], + "form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], + "format": ["format@0.2.2", "", {}, ""], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + "framer-motion": ["framer-motion@12.40.0", "", { "dependencies": { "motion-dom": "^12.40.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg=="], + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + "function-bind": ["function-bind@1.1.2", "", {}, ""], "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, ""], @@ -1101,10 +1412,14 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, ""], + "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, ""], "get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], + "gifwrap": ["gifwrap@0.10.1", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw=="], + "github-slugger": ["github-slugger@2.0.0", "", {}, ""], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, ""], @@ -1115,6 +1430,8 @@ "gopd": ["gopd@1.2.0", "", {}, ""], + "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, ""], "has-flag": ["has-flag@4.0.0", "", {}, ""], @@ -1129,16 +1446,34 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, ""], + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], "hono": ["hono@4.12.25", "", {}, "sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ=="], + "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], + + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + + "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], + + "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], + "husky": ["husky@9.1.7", "", { "bin": "bin.js" }, ""], + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "image-q": ["image-q@4.0.0", "", { "dependencies": { "@types/node": "16.9.1" } }, "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw=="], + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, ""], @@ -1147,10 +1482,20 @@ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, ""], "ioredis": ["ioredis@5.11.1", "", { "dependencies": { "@ioredis/commands": "1.10.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "redis-parser": "3.0.0", "standard-as-callback": "2.1.0" } }, "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A=="], + "ip-address": ["ip-address@10.2.0", "", {}, "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, ""], "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, ""], @@ -1169,6 +1514,10 @@ "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, ""], + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, ""], "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, ""], @@ -1179,26 +1528,38 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, ""], + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + "is-map": ["is-map@2.0.3", "", {}, ""], "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, ""], + "is-network-error": ["is-network-error@1.3.2", "", {}, "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA=="], + "is-number": ["is-number@7.0.0", "", {}, ""], "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, ""], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, ""], "is-set": ["is-set@2.0.3", "", {}, ""], "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, ""], + "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, ""], "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, ""], "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, ""], + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, ""], "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, ""], @@ -1211,34 +1572,56 @@ "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, ""], + "jimp": ["jimp@1.6.1", "", { "dependencies": { "@jimp/core": "1.6.1", "@jimp/diff": "1.6.1", "@jimp/js-bmp": "1.6.1", "@jimp/js-gif": "1.6.1", "@jimp/js-jpeg": "1.6.1", "@jimp/js-png": "1.6.1", "@jimp/js-tiff": "1.6.1", "@jimp/plugin-blit": "1.6.1", "@jimp/plugin-blur": "1.6.1", "@jimp/plugin-circle": "1.6.1", "@jimp/plugin-color": "1.6.1", "@jimp/plugin-contain": "1.6.1", "@jimp/plugin-cover": "1.6.1", "@jimp/plugin-crop": "1.6.1", "@jimp/plugin-displace": "1.6.1", "@jimp/plugin-dither": "1.6.1", "@jimp/plugin-fisheye": "1.6.1", "@jimp/plugin-flip": "1.6.1", "@jimp/plugin-hash": "1.6.1", "@jimp/plugin-mask": "1.6.1", "@jimp/plugin-print": "1.6.1", "@jimp/plugin-quantize": "1.6.1", "@jimp/plugin-resize": "1.6.1", "@jimp/plugin-rotate": "1.6.1", "@jimp/plugin-threshold": "1.6.1", "@jimp/types": "1.6.1", "@jimp/utils": "1.6.1" } }, "sha512-hNQh6rZtWfSVWSNVmvq87N5BPJsNH7k7I7qyrXf9DOma9xATQk3fsyHazCQe51nCjdkoWdTmh0vD7bjVSLoxxw=="], + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + "jpeg-js": ["jpeg-js@0.4.4", "", {}, "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="], + "js-tokens": ["js-tokens@4.0.0", "", {}, ""], "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, ""], "json-buffer": ["json-buffer@3.0.1", "", {}, ""], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="], + "json-schema-to-zod": ["json-schema-to-zod@2.8.1", "", { "bin": { "json-schema-to-zod": "dist/cjs/cli.js" } }, "sha512-fRr1mHgZ7hboLKBUdR428gd9dIHUFGivUqOeiDcSmyXkNZCtB1uGaZLvsjZ4GaN5pwBIs+TGIOf6s+Rp5/R/zA=="], + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, ""], + "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, ""], "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "jsonwebtoken": ["jsonwebtoken@8.5.1", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^5.6.0" } }, "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w=="], + + "jsrsasign": ["jsrsasign@11.1.3", "", {}, "sha512-nPnK5D/4lv0Dwr7TlzrKtAd8JlLZwFTqTUUB3NQCbtdobcRcohGFxjbPySDVh74iWUudcCsapYT6OxoyhJLhhA=="], + "jsts": ["jsts@2.7.1", "", {}, "sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg=="], "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, ""], "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + "jwa": ["jwa@1.4.2", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw=="], + + "jws": ["jws@3.2.3", "", { "dependencies": { "jwa": "^1.4.2", "safe-buffer": "^5.0.1" } }, "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g=="], + "kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, ""], + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "lamejs": ["lamejs@1.2.1", "", { "dependencies": { "use-strict": "1.0.1" } }, "sha512-s7bxvjvYthw6oPLCm5pFxvA84wUROODB8jEO2+CE1adhKgrIvVOlmMgY8zyugxGrvRaDHNJanOiS21/emty6dQ=="], + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, ""], "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], @@ -1259,14 +1642,34 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, ""], + "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], + + "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], + + "lodash.isinteger": ["lodash.isinteger@4.0.4", "", {}, "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="], + + "lodash.isnumber": ["lodash.isnumber@3.0.3", "", {}, "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], + "lodash.merge": ["lodash.merge@4.6.2", "", {}, ""], + "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], + "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], "longest-streak": ["longest-streak@3.1.0", "", {}, ""], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, ""], + "lottie-react": ["lottie-react@2.4.1", "", { "dependencies": { "lottie-web": "^5.10.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw=="], + + "lottie-web": ["lottie-web@5.13.0", "", {}, "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ=="], + + "lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], + "lucide-react": ["lucide-react@0.511.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w=="], "mapbox-gl": ["mapbox-gl@3.25.0", "", {}, "sha512-I+9oSkJVFu51xIAAQcjKophFe6zVAGWROHsszeRhX9E1OXEizgPH+8BkF7GaxmmLd9FbADdEfvULF8NxEFcB5w=="], @@ -1293,17 +1696,33 @@ "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, ""], + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], + + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], + + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, ""], + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, ""], "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, ""], "mdn-data": ["mdn-data@2.21.0", "", {}, ""], + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], - "mentra-ai-miniapp": ["mentra-ai-miniapp@workspace:miniapps/mentra-ai"], + "mentra-ai": ["mentra-ai@workspace:miniapps/mentra-ai"], + + "mentra-ai-local": ["mentra-ai-local@workspace:miniapps/mentra-ai-local"], + + "mentra-ai-miniapp": ["mentra-ai-miniapp@workspace:miniapps/mentra-ai-matt"], + + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, ""], @@ -1365,6 +1784,12 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, ""], + "mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, ""], @@ -1397,6 +1822,10 @@ "navigation-miniapp": ["navigation-miniapp@workspace:miniapps/navigation"], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], + "object-assign": ["object-assign@4.1.1", "", {}, ""], "object-inspect": ["object-inspect@1.13.4", "", {}, ""], @@ -1413,8 +1842,12 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, ""], + "omggif": ["omggif@1.0.10", "", {}, "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="], + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], @@ -1427,16 +1860,34 @@ "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, ""], + "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], + + "p-retry": ["p-retry@7.1.1", "", { "dependencies": { "is-network-error": "^1.1.0" } }, "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w=="], + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, ""], + "parse-bmfont-ascii": ["parse-bmfont-ascii@1.0.6", "", {}, "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="], + + "parse-bmfont-binary": ["parse-bmfont-binary@1.0.6", "", {}, "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="], + + "parse-bmfont-xml": ["parse-bmfont-xml@1.1.6", "", { "dependencies": { "xml-parse-from-string": "^1.0.0", "xml2js": "^0.5.0" } }, "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA=="], + + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + + "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + "path-exists": ["path-exists@4.0.0", "", {}, ""], "path-key": ["path-key@3.1.1", "", {}, ""], "path-parse": ["path-parse@1.0.7", "", {}, ""], + "path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "pidtree": ["pidtree@0.6.0", "", { "bin": "bin/pidtree.js" }, ""], @@ -1449,6 +1900,12 @@ "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="], + "pixelmatch": ["pixelmatch@5.3.0", "", { "dependencies": { "pngjs": "^6.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q=="], + + "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], + + "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], + "point-in-polygon": ["point-in-polygon@1.1.0", "", {}, "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="], "point-in-polygon-hao": ["point-in-polygon-hao@1.2.4", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ=="], @@ -1457,12 +1914,16 @@ "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, ""], + "posthog-node": ["posthog-node@5.38.2", "", { "dependencies": { "@posthog/core": "^1.35.3" }, "peerDependencies": { "rxjs": "^7.0.0" }, "optionalPeers": ["rxjs"] }, "sha512-eiKpU+vX4hVuHbO/EosvPHsmh2AVIdoVmWss/uUOs1t4b0ViCblw2o8OIFqHxKj3mYRnSOBlX0Dw3wBvcCaYpA=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, ""], "prettier": ["prettier@3.6.2", "", { "bin": "bin/prettier.cjs" }, ""], "prettier-linter-helpers": ["prettier-linter-helpers@1.0.1", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg=="], + "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], @@ -1471,16 +1932,30 @@ "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, ""], + "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], "punycode": ["punycode@2.3.1", "", {}, ""], "qrcode-terminal": ["qrcode-terminal@0.12.0", "", { "bin": { "qrcode-terminal": "./bin/qrcode-terminal.js" } }, "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="], + "qs": ["qs@6.15.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw=="], + + "query-string": ["query-string@7.1.3", "", { "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg=="], + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], "quickselect": ["quickselect@2.0.0", "", {}, "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], + "rbush": ["rbush@3.0.1", "", { "dependencies": { "quickselect": "^2.0.0" } }, "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w=="], "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], @@ -1489,6 +1964,8 @@ "react-is": ["react-is@16.13.1", "", {}, ""], + "react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], @@ -1511,6 +1988,18 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, ""], + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + + "remend": ["remend@1.3.0", "", {}, "sha512-iIhggPkhW3hFImKtB10w0dz4EZbs28mV/dmbcYVonWEJ6UGHHpP+bFZnTh6GNWJONg5m+U56JrL+8IxZRdgWjw=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, ""], "resolve-from": ["resolve-from@4.0.0", "", {}, ""], @@ -1519,10 +2008,16 @@ "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "retry-axios": ["retry-axios@2.6.0", "", { "peerDependencies": { "axios": "*" } }, "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, ""], "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], @@ -1533,12 +2028,24 @@ "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], + "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], "semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, ""], + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + + "serialize-error": ["serialize-error@8.1.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ=="], + + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, ""], @@ -1549,6 +2056,8 @@ "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, ""], "shebang-regex": ["shebang-regex@3.0.0", "", {}, ""], @@ -1565,6 +2074,8 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "simple-xml-to-json": ["simple-xml-to-json@1.2.7", "", {}, "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "skmeans": ["skmeans@0.9.7", "", {}, "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg=="], @@ -1575,22 +2086,34 @@ "source-map-js": ["source-map-js@1.2.1", "", {}, ""], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="], "splaytree-ts": ["splaytree-ts@1.0.2", "", {}, "sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA=="], + "split-on-first": ["split-on-first@1.1.0", "", {}, "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="], + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], "stable-hash-x": ["stable-hash-x@0.2.0", "", {}, "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ=="], + "stack-trace": ["stack-trace@0.0.10", "", {}, "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="], + "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, ""], + "strict-uri-encode": ["strict-uri-encode@2.0.0", "", {}, "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="], + "string-argv": ["string-argv@0.3.2", "", {}, ""], "string-width": ["string-width@8.1.1", "", { "dependencies": { "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" } }, "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw=="], @@ -1607,12 +2130,24 @@ "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + + "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, ""], + "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], + + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, ""], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, ""], @@ -1629,18 +2164,30 @@ "thread-stream": ["thread-stream@3.2.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw=="], + "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "tinyqueue": ["tinyqueue@2.0.3", "", {}, "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, ""], + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + + "tokenx": ["tokenx@1.3.0", "", {}, "sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ=="], + "topojson-client": ["topojson-client@3.1.0", "", { "dependencies": { "commander": "2" }, "bin": { "topo2geo": "bin/topo2geo", "topomerge": "bin/topomerge", "topoquantize": "bin/topoquantize" } }, "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw=="], "topojson-server": ["topojson-server@3.0.1", "", { "dependencies": { "commander": "2" }, "bin": { "geo2topo": "bin/geo2topo" } }, "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw=="], "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="], "ts-api-utils": ["ts-api-utils@2.4.0", "", {}, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], @@ -1649,10 +2196,16 @@ "tslib": ["tslib@2.8.1", "", {}, ""], + "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], + "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, ""], + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + + "type-is": ["type-is@2.1.0", "", { "dependencies": { "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, ""], "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, ""], @@ -1667,20 +2220,30 @@ "typescript-eslint": ["typescript-eslint@8.54.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/parser": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/utils": "8.54.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" } }, "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ=="], + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + "ulid": ["ulid@3.0.2", "", { "bin": { "ulid": "dist/cli.js" } }, "sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w=="], "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, ""], "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], + + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, ""], + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, ""], "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, ""], "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, ""], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, ""], @@ -1689,8 +2252,20 @@ "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + "use-strict": ["use-strict@1.0.1", "", {}, "sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ=="], + + "utif2": ["utif2@4.1.0", "", { "dependencies": { "pako": "^1.0.11" } }, "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], "whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], @@ -1713,16 +2288,34 @@ "ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], + "xml-parse-from-string": ["xml-parse-from-string@1.0.1", "", {}, "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="], + + "xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], + + "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], + + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], + "yaml": ["yaml@2.8.2", "", { "bin": "bin.mjs" }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, ""], + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "zod-from-json-schema": ["zod-from-json-schema@0.5.3", "", { "dependencies": { "zod": "^4.0.17" } }, "sha512-44YFiuq+WHw9YZQAo/Ad0F7o9c/im0Q6cnHI23BsXhEmZtkNn4cD0bljLMMjkfb/EidopPWdsmKI8EvLHX5ZyA=="], + + "zod-from-json-schema-v3": ["zod-from-json-schema@0.0.5", "", { "dependencies": { "zod": "^3.24.2" } }, "sha512-zYEoo86M1qpA1Pq6329oSyHLS785z/mTwfr9V1Xf/ZLhuuBGaMlDGu/pDVGVUe4H4oa1EFgWZT53DP0U3oT9CQ=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], + "zustand": ["zustand@5.0.14", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g=="], "zwitch": ["zwitch@2.0.4", "", {}, ""], + "@ai-sdk/provider-utils-v6/@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="], + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@eslint/config-helpers/@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], @@ -1743,16 +2336,52 @@ "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, ""], + "@logtail/node/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@logtail/pino/pino-abstract-transport": ["pino-abstract-transport@1.2.0", "", { "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q=="], + + "@mastra/core/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + "@mentra/miniapp/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@mentra/miniapp-cli/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@mentra/sdk/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@mentra/sdk/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "@mentra/sdk/pino-pretty": ["pino-pretty@13.1.3", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^4.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^3.0.0", "pump": "^3.0.0", "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg=="], + + "@modelcontextprotocol/sdk/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + + "@modelcontextprotocol/sdk/jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], + + "@modelcontextprotocol/sdk/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "@radix-ui/react-scroll-area/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], + + "@radix-ui/react-tabs/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw=="], + + "@sindresorhus/slugify/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, ""], + + "@sindresorhus/transliterate/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, ""], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": "bin/semver.js" }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "ajv-formats/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + + "body-parser/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], + "concaveman/robust-predicates": ["robust-predicates@2.0.4", "", {}, "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg=="], + "ecdsa-sig-formatter/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "eslint/@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], "eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], @@ -1769,22 +2398,56 @@ "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "express/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "form-data/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + "geojson-polygon-self-intersections/rbush": ["rbush@2.0.2", "", { "dependencies": { "quickselect": "^1.0.1" } }, "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA=="], + "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "image-q/@types/node": ["@types/node@16.9.1", "", {}, "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="], + "is-bun-module/semver": ["semver@7.7.3", "", { "bin": "bin/semver.js" }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "jsonwebtoken/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "jszip/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "jwa/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "jws/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, ""], "mdast-util-frontmatter/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, ""], + "mentra-ai/lucide-react": ["lucide-react@0.564.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-JJ8GVTQqFwuliifD48U6+h7DXEHdkhJ/E87kksGByII3qHxtPciVb8T8woQONHBQgHVOl7rSMrrip3SeVNy7Fg=="], + + "mentra-ai/mongoose": ["mongoose@9.7.2", "", { "dependencies": { "kareem": "3.3.0", "mongodb": "~7.2", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-VxxS3tjOGRIvhBMd84RR7L1WbDdm08Qq6V88VMq6jP6aE1Q+NlbTZDBtye2NAyO48i5kBFxM2oxfX0CPKNwCMg=="], + + "mentra-ai/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "mentra-ai/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "mentra-ai-local/lucide-react": ["lucide-react@0.564.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-JJ8GVTQqFwuliifD48U6+h7DXEHdkhJ/E87kksGByII3qHxtPciVb8T8woQONHBQgHVOl7rSMrrip3SeVNy7Fg=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, ""], + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + + "pixelmatch/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], + "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, ""], "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, ""], + "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -1793,16 +2456,68 @@ "topojson-server/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "type-is/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], + + "type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, ""], "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "zod-from-json-schema/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "@logtail/node/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@mastra/core/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "@mentra/sdk/pino-pretty/fast-copy": ["fast-copy@4.0.3", "", {}, "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw=="], + + "@mentra/sdk/pino-pretty/pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="], + + "@mentra/sdk/pino-pretty/secure-json-parse": ["secure-json-parse@4.1.0", "", {}, "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA=="], + + "@mentra/sdk/pino-pretty/strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], + + "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "@radix-ui/react-scroll-area/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA=="], + + "@radix-ui/react-tabs/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "geojson-polygon-self-intersections/rbush/quickselect": ["quickselect@1.1.1", "", {}, "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="], + "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "jszip/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "mentra-ai/mongoose/kareem": ["kareem@3.3.0", "", {}, "sha512-kpSuLD3/7RenBnjnJdOHXCKC8dTd1JzeOiJhN0necWWci6cC+qX+VuwPnMVgb+a4+KNJSfgqahpnfWaeDXCimw=="], + + "mentra-ai/mongoose/mongodb": ["mongodb@7.2.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.2.0", "mongodb-connection-string-url": "^7.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-F/2+BMZtLVhY30ioZp0dAmZ+IRZMBqI+nrv6t5+9/1AIwCa8sMRC3jBf81lpxMhnZgqq8CoUD503Z1oZWq1/sw=="], + + "mentra-ai/mongoose/mquery": ["mquery@6.0.0", "", {}, "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw=="], + + "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "type-is/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA=="], + + "mentra-ai/mongoose/mongodb/bson": ["bson@7.3.0", "", {}, "sha512-WmjjMEwFwZHmGnAb7wn90MhkiT+mTm4x/rLj7dvAPWfwnVWDXhLun2e+UM88MJoDGW624yzZglVX/zTBy9ZZMw=="], + + "mentra-ai/mongoose/mongodb/mongodb-connection-string-url": ["mongodb-connection-string-url@7.0.1", "", { "dependencies": { "@types/whatwg-url": "^13.0.0", "whatwg-url": "^14.1.0" } }, "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ=="], + + "mentra-ai/mongoose/mongodb/mongodb-connection-string-url/@types/whatwg-url": ["@types/whatwg-url@13.0.0", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q=="], } } diff --git a/cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts b/cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts index 7e7f08ff13..1b06659cef 100644 --- a/cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts +++ b/cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts @@ -145,6 +145,12 @@ export async function createSonioxProvider( max_endpoint_delay_ms: 2_000, language_hints: opts.language && opts.language !== "auto" ? [opts.language] : undefined, + // Bias recognition toward MentraOS-specific brand/product terms so they + // are not mistranscribed (e.g. "Mentra" -> "mantra"). `context.terms` is + // Soniox's hook for domain-specific or uncommon words. + context: { + terms: ["Mentra", "MentraOS", "Mira"], + }, // For translation subs, configure Soniox's one-way translation. Result // tokens then carry `translation_status: "original" | "translation"` // and we filter to the translation half. diff --git a/miniapps/mentra-ai-local/.env.example b/miniapps/mentra-ai-local/.env.example new file mode 100644 index 0000000000..5e9df282b2 --- /dev/null +++ b/miniapps/mentra-ai-local/.env.example @@ -0,0 +1,59 @@ +# Mentra AI (local miniapp) — environment +# +# Architecture: the miniapp background bundle no longer holds AI keys. It calls +# a small backend (backend/src) that holds the secrets and runs Gemini + Jina +# server-side. The ONLY value baked into the bundle is the public backend URL. +# +# Secrets are managed in Doppler (project `mentra-ai`, config `dev`). The dev +# scripts use it automatically: +# bun run dev # backend + miniapp, secrets from Doppler +# bun run backend:dev # backend only, secrets from Doppler +# This .env file is only needed for the *:dev:local scripts (no Doppler). + +# ── Public (inlined into the miniapp bundle by miniapp/build.ts) ───────────── +# Public URL the background bundle calls. For USB testing, point at localhost +# and run `adb reverse tcp:3131 tcp:3131`. The miniapp dev sidecar uses 3123, +# so the backend uses 3131 in dev. +MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL=http://localhost:3131 + +# ── Backend-only secrets (read by backend/src, NEVER prefixed MENTRA_PUBLIC_) ─ +# OpenRouter — powers the agent tool-loop and the visual-query classifier. +# Every model (Gemini / Claude / GPT) is served through OpenRouter's +# OpenAI-compatible API; the user picks the model in the miniapp settings. +OPENROUTER_API_KEY=your_openrouter_api_key + +# Optional: ranking headers OpenRouter shows on its dashboards. +# OPENROUTER_SITE_URL=https://mentra.glass +# OPENROUTER_APP_TITLE=Mentra AI +# Optional: override the OpenRouter base URL (proxies / testing). +# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 + +# Jina — powers the web-search tool. +JINA_API_KEY=your_jina_api_key + +# ── Giga-agent delegation (optional) ──────────────────────────────────────── +# When BOTH are set, the agent gains an `ask_agent` tool that hands multi-step / +# personal-account / long-running work to the user's persistent agent (the +# testaiassistant control plane). Server-side only — the key never reaches the +# bundle. Leave unset to run the assistant standalone (no delegation). +# AGENTS_BASE_URL=https://agents.augmentos.app +# MENTRA_AGENT_API_KEY=your_control_plane_key +# Grace window (ms) a delegation blocks before returning an ack + a pending +# taskId the background polls. Defaults to 2000. +# AGENT_DELEGATE_GRACE_MS=2000 + +# Default model (OpenRouter slug) when the client sends none. The miniapp +# settings picker normally overrides this per request. Must be a slug from +# the model registry (backend/src/services/models.ts). +LLM_MODEL=google/gemini-3.1-flash-lite-preview + +# Backend HTTP port. +PORT=3131 + +# ── Backend auth ──────────────────────────────────────────────────────────── +# The miniapp sends a package-scoped Bearer token minted by Cloud Core. The +# backend verifies it against this JWKS and enforces aud=PACKAGE_NAME. +PACKAGE_NAME=com.mentra.ai.local +# Override only when testing against local/staging Core (prod JWKS is default): +# MENTRA_AUTH_JWKS_URL=http://localhost:3000/.well-known/jwks.json +# MENTRA_AUTH_ISSUERS=cloud-core,mentra diff --git a/miniapps/mentra-ai-local/.gitignore b/miniapps/mentra-ai-local/.gitignore new file mode 100644 index 0000000000..f57ea21947 --- /dev/null +++ b/miniapps/mentra-ai-local/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +build/ +*.zip +.env +.env.local +.DS_Store +.mentra/ diff --git a/miniapps/mentra-ai-local/ARCHITECTURE_PLAN.md b/miniapps/mentra-ai-local/ARCHITECTURE_PLAN.md new file mode 100644 index 0000000000..51ea7bd9b8 --- /dev/null +++ b/miniapps/mentra-ai-local/ARCHITECTURE_PLAN.md @@ -0,0 +1,267 @@ +# Mentra AI (local) — Backend + Auth Architecture Plan + +> Goal: bring the **best practices from `miniapps/merge`** into **`miniapps/mentra-ai-local`** — +> specifically a **server-side backend** that holds the AI secrets and a **real `@mentra/auth` +> token flow** — *without* throwing away mentra-ai-local's richer feature set (managers, agent +> tool-loop, vision, chat UI). +> +> This document is the **plan only**. No feature code is rewritten here. It defines the target +> structure, the request flow, and the exact seams we touch. + +--- + +## 1. Why change anything? + +Today `mentra-ai-local` ships the Gemini + Jina API keys **inside the JS bundle** +(`MENTRA_PUBLIC_*`, inlined by `build.ts`). The code itself flags this: + +> ⚠️ Anything inlined here ships inside the JS bundle and is extractable. +> Fine for local/dev. Before production, move these behind a backend proxy. +> — `.env.example`, `lib/ai-config.ts` + +`merge` already solves exactly this: + +| Concern | `merge` (good) | `mentra-ai-local` (today) | +| -------------------- | ---------------------------------------------------------- | --------------------------------------------- | +| AI secrets | Server-side only, in `backend/` | Baked into the shipped bundle | +| Auth | `@mentra/auth` JWKS, package-scoped Bearer, `aud` enforced | `localAuth.ts` shim (always-authenticated) | +| Network call | `session.auth.fetch(backendUrl/...)` | `fetch(googleapis.com?key=...)` direct | +| Backend boot | `createApp()` → `Bun.serve` → SIGTERM/SIGINT → `/healthz` | none | +| Secret management | Doppler (`local-merge` project) + layered dev scripts | `.env` only | +| Service layer | `services/insights/insights.service.ts` + typed errors | inline `fetch` in agent/classifier/tools | + +We adopt merge's left column for mentra-ai-local. + +--- + +## 2. Target directory structure + +Mirror merge's split: a `backend/` peer and a `miniapp/` peer under the app root. +The existing `src/` becomes `miniapp/src/` essentially unchanged. + +``` +miniapps/mentra-ai-local/ +├── .env.example # rewritten: backend secrets (no MENTRA_PUBLIC_ keys) + public backend URL +├── package.json # rewritten: merge-style dev/backend/miniapp scripts +│ +├── backend/ # NEW — Hono server, holds Gemini + Jina secrets +│ ├── README.md +│ └── src/ +│ ├── index.ts # startMentraAiBackend(): createApp → Bun.serve → SIGTERM/SIGINT +│ ├── api/ +│ │ ├── app.ts # createApp(): cors + /healthz + route mounts +│ │ ├── agent.api.ts # POST /api/agent (auth) → agentService +│ │ ├── classify.api.ts # POST /api/classify (auth) → classifyService +│ │ └── search.api.ts # POST /api/search (auth) → searchService (Jina) +│ └── services/ +│ ├── agent/agent.service.ts # Gemini generateContent + tool loop (moved server-side) +│ ├── classify/classify.service.ts # visual-query yes/no +│ └── search/search.service.ts # Jina web search +│ +└── miniapp/ # was ./ — the bundle (background JSContext + webview) + ├── build.ts # MENTRA_PUBLIC_* now only carries the BACKEND URL, no keys + ├── miniapp.json + ├── tsconfig.json + └── src/ # ← today's src/ moved here, mostly untouched + ├── background/ + │ ├── index.ts + │ ├── MentraAIController.ts + │ ├── managers/... # unchanged + │ ├── agent/ + │ │ ├── MentraAgent.ts # now calls backend /api/agent (was direct Gemini) + │ │ ├── visual-classifier.ts # now calls backend /api/classify + │ │ ├── prompt.ts # stays (prompt building can live client- or server-side) + │ │ └── tools/index.ts # web_search now calls backend /api/search + │ └── lib/ + │ └── ai-config.ts # becomes the BACKEND-URL config (the documented swap-point) + ├── shared/ + └── ui/... # unchanged +``` + +> Note: moving `src/ → miniapp/src/` is the only large mechanical change. Everything else is +> additive (new `backend/`) or a small edit at the three AI-call seams. + +--- + +## 3. The seam — only three call-sites move + +mentra-ai-local makes outbound AI calls in **exactly three places**. Each currently reads a +bundled key and hits a third-party API. Each gets redirected at the backend, with the key +removed from the client. + +| # | File (in miniapp) | Today | After | +| - | ---------------------------------- | ------------------------------------------------ | ------------------------------------------------------- | +| 1 | `agent/MentraAgent.ts` | `fetch(generativelanguage…:generateContent?key)` | `session.auth.fetch(BACKEND/api/agent)` | +| 2 | `agent/visual-classifier.ts` | `fetch(generativelanguage…?key)` | `session.auth.fetch(BACKEND/api/classify)` | +| 3 | `agent/tools/index.ts` (webSearch) | `fetch(s.jina.ai, Bearer JINA_KEY)` | `session.auth.fetch(BACKEND/api/search)` | + +The Gemini tool-loop itself (currently in `MentraAgent.ts`) moves **server-side** into +`agent.service.ts`, because the loop needs the Gemini key. The client sends `{query, photos, +context}` and gets back `{response, toolCalls}` — the same `GenerateResult` shape it returns +today, so `QueryProcessor` and every manager are untouched. + +`lib/ai-config.ts` stops exporting keys and instead exports the resolved backend URL — this is +the single swap-point the file's own header already promised. + +--- + +## 4. Request flow (the part you wanted drawn out) + +### 4a. High-level: who talks to whom + +``` +┌──────────────────────────── PHONE (one user) ────────────────────────────┐ +│ │ +│ Glasses mic ──audio──▶ MentraOS host │ +│ │ │ +│ ▼ │ +│ ┌─────────── miniapp background JSContext ───────────┐ │ +│ │ TranscriptionManager → wake word → QueryProcessor │ │ +│ │ │ │ │ +│ │ ├─ visual-classifier ─┐ │ │ +│ │ ├─ MentraAgent ───────┤ session.auth.fetch│ │ +│ │ └─ tools/web_search ──┘ (Bearer token) │ │ +│ └──────────────────────│──────────────────────────────┘ │ +└───────────────────────────────│──────────────────────────────────────────┘ + │ HTTPS + miniapp Bearer token + ▼ + ┌──────────────────── BACKEND (Hono, Bun.serve) ───────────────────┐ + │ @mentra/auth: verify JWKS, enforce aud = PACKAGE_NAME │ + │ /api/agent → agent.service ─┐ │ + │ /api/classify → classify.service ─┼─ holds GEMINI_API_KEY │ + │ /api/search → search.service ─┘ + JINA_API_KEY │ + │ /healthz │ + └─────────────────────────────│───────────────────────────────────┘ + ▼ + Gemini generateContent / Jina s.jina.ai + (secrets never leave the backend) +``` + +### 4b. End-to-end: one spoken query + +``` +User speaks "what's this and is it on sale?" (looking at a product) + │ + ▼ glasses → host → background +TranscriptionManager ── wake word + silence-finalize ──▶ QueryProcessor.processQuery() + │ + ├─(1)─▶ isVisualQuery(query) + │ └─ session.auth.fetch( BACKEND /api/classify ) ──▶ classify.service → Gemini + │ ◀── { visual: true } + │ + ├─ visual ⇒ PhotoManager.capture() → dataURL photo + │ + └─(2)─▶ generateResponse({ query, photos, context }) + └─ session.auth.fetch( BACKEND /api/agent ) ──▶ agent.service + │ Gemini tool-loop: + │ model wants web_search? + │ └─(3) search.service → Jina + │ feed tool result back to Gemini + ▼ + ◀── { response: "It's a …, $39 — currently 20% off", toolCalls: 1 } + │ + ├─ AudioManager / session.speaker.speak(response) + ├─ DisplayManager.showTextWall(response) + └─ ChatHistoryManager.add(turn) → ui.send("chat:event", …) → webview +``` + +> The whole tool-loop runs **inside `agent.service` on the backend** (Option A, §6). That keeps +> the Gemini key entirely server-side and means the client makes **one** `/api/agent` round-trip +> per query instead of N. + +The same flow as a **sequence diagram** (Option A — all AI compute on the backend): + +```mermaid +sequenceDiagram + participant P as Phone (background) + participant B as Backend (Hono) + participant G as Gemini + participant J as Jina + + P->>B: POST /api/classify { query } (Bearer token) + B->>G: generateContent (visual? yes/no) + G-->>B: "yes" + B-->>P: { visual: true } + + Note over P: PhotoManager.capture() → dataURL + + P->>B: POST /api/agent { query, photos, context } + Note over B: tool-loop runs here (key stays server-side) + B->>G: generateContent (query + photo + tools) + G-->>B: call web_search("…") + B->>J: s.jina.ai search + J-->>B: results + B->>G: generateContent (+ tool result) + G-->>B: final text answer + B-->>P: { response, toolCalls: 1 } + + Note over P: speak + display + chat history +``` + +### 4c. Auth handshake (per request) + +``` +mobile host ──cloudClient.auth.getMiniappToken(packageName)──▶ Cloud Core + ◀── package-scoped JWT (aud = com.mentra., iss ∈ MENTRA_AUTH_ISSUERS) + │ +background session.auth.fetch(url) attaches Authorization: Bearer + │ +backend createMentraAuth({ packageName }).hono() middleware: + ├─ fetch JWKS (MENTRA_AUTH_JWKS_URL), verify signature + ├─ enforce aud === PACKAGE_NAME, iss ∈ issuers + └─ set c.var.mentraAuth = { mentraUserId } → handlers read userId from token, not body +``` + +This is exactly merge's `insights.api.ts` pattern (`createMentraAuth`, `mentraAuth.hono()`, +`c.get("mentraAuth")`), reused verbatim for our three routes. + +--- + +## 5. Config / scripts / secrets (adopted from merge) + +- **`.env.example`** rewritten: + - backend-only: `GEMINI_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, `JINA_API_KEY`, `LLM_MODEL`, + `PORT` (default e.g. `3131`), `MENTRA_AUTH_JWKS_URL`, `MENTRA_AUTH_ISSUERS`, `PACKAGE_NAME`. + - public (inlined into bundle): **only** `MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL`. No keys. +- **`package.json`** scripts mirror merge: `dev` (doppler), `dev:local` (backend + miniapp + together), `backend:dev`, `miniapp:dev`, `build`, `pack`. Doppler project name TBD + (e.g. `mentra-ai-local`). +- **`backend/README.md`**: localhost port, `adb reverse tcp: tcp:` for USB, JWKS + override for local Core, web-search toggle — same shape as merge's README. +- **`build.ts`** keeps inlining `MENTRA_PUBLIC_*` but now that set contains only the backend URL. + +--- + +## 6. Design decision — RESOLVED: Option A (whole agent server-side) + +**Where does the Gemini tool-loop run? → On the backend (cloud).** + +The entire multi-step tool-loop (Gemini + Jina) runs **inside `agent.service` on the backend**. +The client calls `/api/agent` **once** with `{query, photos, context}` and gets back the final +`{response, toolCalls}`. The Gemini key and Jina key never leave the backend, and prompt +building moves server-side. This is merge's architecture — the backend genuinely owns the AI. + +*Cost accepted:* photos (data URLs) are uploaded to the backend on each visual query. + +
Rejected alternative — Option B (thin proxy, loop on phone) + +Keep the tool-loop in `MentraAgent.ts` on the client; expose `/api/gemini` + `/api/search` as +authenticated passthroughs. Smaller diff, but the client drives N round-trips per query and the +backend is just a key-hider. Not chosen. +
+ +--- + +## 7. Proposed execution order (once direction is approved) + +1. Scaffold `backend/` (app.ts, index.ts, `/healthz`) — boots, returns ok, no logic yet. +2. Move `src/ → miniapp/src/`; update `tsconfig`, `build.ts`, `miniapp.json` paths. +3. Rewrite `package.json` + `.env.example` to merge-style scripts/secrets. +4. Port the three services into `backend/src/services/*` (agent loop, classify, search). +5. Add `@mentra/auth` middleware to the three routes. +6. Repoint the three client seams at `session.auth.fetch(BACKEND/...)`; gut keys from + `ai-config.ts`, leaving it as the backend-URL swap-point. +7. `bun run build` (miniapp) + `bun run backend:dev`; smoke-test classify → agent → search. + +Each step is independently reviewable; nothing in `managers/`, `ui/`, or `shared/` changes. +``` diff --git a/miniapps/mentra-ai-local/backend/README.md b/miniapps/mentra-ai-local/backend/README.md new file mode 100644 index 0000000000..a1250a76a1 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/README.md @@ -0,0 +1,77 @@ +# Mentra AI (local) backend + +Backend for the Mentra AI local miniapp. It holds the AI secrets (OpenRouter + +Jina) so they never ship inside the miniapp bundle. The miniapp background +calls three authenticated routes and this service runs the AI server-side. + +Every model — Gemini, Claude, or GPT — runs through **OpenRouter**'s +OpenAI-compatible API behind a single key. The user picks the model in the +miniapp settings; the client sends the chosen OpenRouter slug with each +`/api/agent` request. Valid models live in `src/services/models.ts` (all are +vision-capable, so Mentra Live photo analysis works regardless of the pick). + +- `POST /api/classify` — does this query need the camera photo? (fast OpenRouter call) +- `POST /api/agent` — run the full tool-loop on the selected model, return the answer +- `POST /api/search` — Jina web search (also called in-process by the agent loop) +- `GET /healthz` — liveness + default model + +Secrets live in Doppler (project `mentra-ai`, config `dev`). The dev scripts use +it automatically: + +```bash +cd miniapps/mentra-ai-local +bun run backend:dev # backend only, secrets from Doppler +bun run dev # backend + miniapp dev server together +``` + +First-time Doppler connect (once per machine): + +```bash +doppler setup --project mentra-ai --config dev +``` + +Without Doppler, copy the env file and use the `:local` scripts: + +```bash +cp .env.example .env +bun run backend:dev:local +bun run dev:local +``` + +The miniapp dev sidecar uses `3123`, so the backend uses `3131` in dev. + +`bun run dev` also starts **ngrok** on the reserved domain +`general.dev.tpa.ngrok.app`, forwarding the public HTTPS URL to the local +backend on `3131`. The miniapp bundle is built pointing at that ngrok URL, so it +works from a real phone over the network (no USB bridge needed). Override the +domain with `NGROK_DOMAIN`, or skip ngrok entirely with `bun run dev:localhost` +(+ `adb reverse tcp:3131 tcp:3131` for Android USB). + +## Auth + +The three `/api/*` routes require a Mentra miniapp token. The mobile host mints +it via `cloudClient.auth.getMiniappToken(...)` and the miniapp background sends +it with `session.auth.fetch(...)`. The backend verifies the token against Cloud +Core's JWKS and enforces `aud = PACKAGE_NAME`. The production JWKS is the +default, so only override it when testing against local/staging Core: + +```bash +MENTRA_AUTH_JWKS_URL=http://localhost:3000/.well-known/jwks.json +MENTRA_AUTH_ISSUERS=cloud-core,mentra +PACKAGE_NAME=com.mentra.ai.local +``` + +## Secrets + +Backend-only secrets (never prefixed `MENTRA_PUBLIC_`, never inlined into the +bundle): + +- `OPENROUTER_API_KEY` — agent + classifier (serves all models) +- `JINA_API_KEY` — web search +- `LLM_MODEL` — default OpenRouter slug when the client sends none (the settings + picker normally overrides this per request; must be a slug from `models.ts`) +- `OPENROUTER_SITE_URL`, `OPENROUTER_APP_TITLE` — *optional* ranking headers +- `OPENROUTER_BASE_URL` — *optional* override (proxies / testing) + +The only value baked into the miniapp bundle is the public backend URL +(`MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL`). diff --git a/miniapps/mentra-ai-local/backend/src/api/agent.api.ts b/miniapps/mentra-ai-local/backend/src/api/agent.api.ts new file mode 100644 index 0000000000..5624615171 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/api/agent.api.ts @@ -0,0 +1,55 @@ +import {Hono, type Context} from "hono" +import {type MentraAuthVariables} from "@mentra/auth" + +import {mentraAuthMiddleware} from "./auth" +import {AgentServiceError, generateResponse} from "../services/agent/agent.service" +import {getDelegationTask, wakeDelegation} from "../services/agent/delegation" +import {type AgentRequest} from "../services/agent/types" + +export const agentApi = new Hono<{Variables: MentraAuthVariables}>() + +agentApi.use("*", mentraAuthMiddleware()) + +agentApi.post("/", async (c) => { + try { + const auth = c.get("mentraAuth") + const body = (await c.req.json()) as AgentRequest + return c.json(await generateResponse(body, auth.mentraUserId)) + } catch (error) { + return agentErrorResponse(c, error) + } +}) + +/** + * GET /api/agent/task/:taskId — poll a pending giga-agent delegation. + * + * The background calls this (with its auth token) after the agent returned a + * `pendingTaskId`. We re-derive the user from auth and proxy the control plane, + * so the control-plane key never leaves the server. Returns {status, reply?, actions?}. + */ +agentApi.get("/task/:taskId", async (c) => { + const auth = c.get("mentraAuth") + const taskId = c.req.param("taskId") + const result = await getDelegationTask(auth.mentraUserId, taskId) + if (!result) return c.json({status: "working" as const}) + return c.json(result) +}) + +/** + * POST /api/agent/wake — predictive wake. The background calls this at wake-word + * time so the user's giga-agent container is warm by the time the fast agent + * decides whether to delegate. No-op when delegation isn't configured. + */ +agentApi.post("/wake", (c) => { + const auth = c.get("mentraAuth") + void wakeDelegation(auth.mentraUserId) + return c.json({ok: true}) +}) + +function agentErrorResponse(c: Context, error: unknown): Response { + if (error instanceof AgentServiceError) { + return c.json({response: "", toolCalls: 0, error: error.message}, error.status) + } + const message = error instanceof Error ? error.message : "Unknown error" + return c.json({response: "", toolCalls: 0, error: message}, 500) +} diff --git a/miniapps/mentra-ai-local/backend/src/api/app.ts b/miniapps/mentra-ai-local/backend/src/api/app.ts new file mode 100644 index 0000000000..a9e6ca0a2c --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/api/app.ts @@ -0,0 +1,34 @@ +import {Hono} from "hono" +import {cors} from "hono/cors" + +import {agentApi} from "./agent.api" +import {classifyApi} from "./classify.api" +import {searchApi} from "./search.api" +import {DEFAULT_LLM_MODEL} from "../services/ai-config" + +export function createApp(): Hono { + const app = new Hono() + + app.use( + "*", + cors({ + origin: "*", + allowMethods: ["GET", "POST", "OPTIONS"], + allowHeaders: ["Content-Type", "Authorization"], + }), + ) + + app.get("/healthz", (c) => + c.json({ + status: "ok", + service: "mentra-ai-local-backend", + model: DEFAULT_LLM_MODEL, + }), + ) + + app.route("/api/agent", agentApi) + app.route("/api/classify", classifyApi) + app.route("/api/search", searchApi) + + return app +} diff --git a/miniapps/mentra-ai-local/backend/src/api/auth.ts b/miniapps/mentra-ai-local/backend/src/api/auth.ts new file mode 100644 index 0000000000..03d07497ef --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/api/auth.ts @@ -0,0 +1,44 @@ +/** + * Shared Mentra auth middleware for the API routes. + * + * Centralizes packageName + an onUnauthorized hook that logs WHY a token was + * rejected (issuer/audience/signature/expiry) to the backend console — the + * phone host redacts token-shaped error bodies, so this server-side log is the + * reliable place to see auth failures during dev. + */ + +import {createMentraAuth, type MentraAuthError, type HonoLikeContext} from "@mentra/auth" + +const PACKAGE_NAME = process.env.PACKAGE_NAME ?? "com.mentra.ai.local" + +const mentraAuth = createMentraAuth({packageName: PACKAGE_NAME}) + +/** Decode JWT claims without verifying (diagnostic only — to log aud/iss/sub). */ +function decodeJwtClaims(authHeader?: string): Record | null { + try { + const token = (authHeader ?? "").replace(/^Bearer\s+/i, "").trim() + const payload = token.split(".")[1] + if (!payload) return null + const json = Buffer.from(payload.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf8") + return JSON.parse(json) as Record + } catch { + return null + } +} + +export function mentraAuthMiddleware() { + return mentraAuth.hono({ + onUnauthorized: (error: MentraAuthError, c: HonoLikeContext) => { + // Decode (WITHOUT verifying) the incoming token so we can log its actual + // aud/iss/sub — the verify error only says "unexpected aud" without the value. + const claims = decodeJwtClaims(c.req.header("Authorization")) + console.warn( + `[auth] 401 rejected: ${error.message}\n` + + ` expectedAud=${PACKAGE_NAME}\n` + + ` tokenAud=${JSON.stringify(claims?.aud)} tokenIss=${JSON.stringify(claims?.iss)} tokenSub=${JSON.stringify(claims?.sub)}\n` + + ` jwks=${process.env.MENTRA_AUTH_JWKS_URL ?? "(default prod)"} issuers=${process.env.MENTRA_AUTH_ISSUERS ?? "(default cloud-core)"}`, + ) + return c.json({error: error.message}, 401) + }, + }) +} diff --git a/miniapps/mentra-ai-local/backend/src/api/classify.api.ts b/miniapps/mentra-ai-local/backend/src/api/classify.api.ts new file mode 100644 index 0000000000..afdc9c31d5 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/api/classify.api.ts @@ -0,0 +1,21 @@ +import {Hono} from "hono" +import {type MentraAuthVariables} from "@mentra/auth" + +import {mentraAuthMiddleware} from "./auth" +import {isVisualQuery} from "../services/classify/classify.service" + +export const classifyApi = new Hono<{Variables: MentraAuthVariables}>() + +classifyApi.use("*", mentraAuthMiddleware()) + +classifyApi.post("/", async (c) => { + try { + const {query} = (await c.req.json()) as {query?: string} + const visual = await isVisualQuery(String(query ?? "")) + return c.json({visual}) + } catch (error) { + const message = error instanceof Error ? error.message : "Unknown error" + // Default to non-visual on error — matches the client's old fail-safe. + return c.json({visual: false, error: message}, 200) + } +}) diff --git a/miniapps/mentra-ai-local/backend/src/api/search.api.ts b/miniapps/mentra-ai-local/backend/src/api/search.api.ts new file mode 100644 index 0000000000..9711ca6178 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/api/search.api.ts @@ -0,0 +1,19 @@ +import {Hono} from "hono" +import {type MentraAuthVariables} from "@mentra/auth" + +import {mentraAuthMiddleware} from "./auth" +import {webSearch} from "../services/search/search.service" + +export const searchApi = new Hono<{Variables: MentraAuthVariables}>() + +searchApi.use("*", mentraAuthMiddleware()) + +searchApi.post("/", async (c) => { + try { + const {query} = (await c.req.json()) as {query?: string} + return c.json(await webSearch(String(query ?? ""))) + } catch (error) { + const message = error instanceof Error ? error.message : "Unknown error" + return c.json({results: "Search failed due to an error.", error: message}, 500) + } +}) diff --git a/miniapps/mentra-ai-local/backend/src/index.ts b/miniapps/mentra-ai-local/backend/src/index.ts new file mode 100644 index 0000000000..a0ca6b6b1a --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/index.ts @@ -0,0 +1,55 @@ +/** + * Mentra AI (local) backend. + * + * Holds the AI secrets (Gemini + Jina) so they never ship inside the miniapp + * bundle. The miniapp background calls /api/classify, /api/agent, /api/search + * with a package-scoped Bearer token; this service verifies the token and runs + * the AI calls server-side. + * + * Boot order mirrors the cloud-v2 services and the merge backend: + * 1. Build the Hono app from api/app.ts. + * 2. Start Bun.serve. + * 3. Register SIGTERM/SIGINT handlers for shutdown. + */ + +import {createApp} from "./api/app" + +export interface StartMentraAiBackendOptions { + port?: number +} + +export interface MentraAiBackendHandle { + port: number + url: string + stop(): Promise +} + +export async function startMentraAiBackend( + opts: StartMentraAiBackendOptions = {}, +): Promise { + const port = opts.port ?? Number.parseInt(process.env.PORT ?? "3131", 10) + const app = createApp() + const server = Bun.serve({port, fetch: app.fetch}) + const boundPort = server.port! + + console.log(`Mentra AI backend listening on http://localhost:${boundPort}`) + + return { + port: boundPort, + url: `http://localhost:${boundPort}`, + async stop() { + server.stop() + }, + } +} + +if (import.meta.main) { + const handle = await startMentraAiBackend() + const shutdown = async (signal: string) => { + console.log(`Mentra AI backend shutdown requested: ${signal}`) + await handle.stop() + process.exit(0) + } + process.on("SIGTERM", () => void shutdown("SIGTERM")) + process.on("SIGINT", () => void shutdown("SIGINT")) +} diff --git a/miniapps/mentra-ai-local/backend/src/services/agent/agent.service.ts b/miniapps/mentra-ai-local/backend/src/services/agent/agent.service.ts new file mode 100644 index 0000000000..8c2ff16f3a --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/agent/agent.service.ts @@ -0,0 +1,191 @@ +/** + * Mentra Agent service — OpenRouter chat-completions tool-loop, server-side. + * + * The entire multi-step tool-loop runs here, on the backend, with the + * OpenRouter key never leaving the server. The client POSTs + * {query, photos, context, model} once and gets back {response, toolCalls}. + * + * Every model — Gemini, Claude, or GPT — runs through the same OpenAI-format + * path via OpenRouter; the chosen model is just a slug. The client's `model` is + * validated against the registry (models.ts), falling back to the default. + */ + +import {buildOpenAITools, executeTool, type DelegationHolder, type ToolExecContext} from "./tools" +import {isDelegationEnabled} from "./delegation" +import {buildSystemPrompt, classifyResponseMode, MAX_STEPS, type AgentContext} from "./prompt" +import {type AgentRequest, type AgentResult, type DeviceAction} from "./types" +import {hasLLMKey, DEFAULT_LLM_MODEL} from "../ai-config" +import {resolveModel} from "../models" +import { + callOpenRouter, + OpenRouterError, + type ChatMessage, + type ContentPart, +} from "../openrouter" + +export class AgentServiceError extends Error { + constructor( + message: string, + readonly status: 400 | 500 | 503, + ) { + super(message) + this.name = "AgentServiceError" + } +} + +/** + * Generate a response using OpenRouter, with a bounded tool-call loop. + * `userId` (the caller's mentraUserId) enables the ask_agent delegation tool. + */ +export async function generateResponse(request: AgentRequest, userId?: string): Promise { + const {query, photos, context} = request + + if (!query || !query.trim()) { + throw new AgentServiceError("query is required", 400) + } + + if (!hasLLMKey) { + throw new AgentServiceError("OPENROUTER_API_KEY is required", 503) + } + + const model = resolveModel(request.model ?? DEFAULT_LLM_MODEL) + const responseMode = classifyResponseMode(query, context.hasDisplay) + + // Only vision-capable models receive the photo. For text-only models (e.g. + // DeepSeek via OpenRouter), we drop the photo AND tell the prompt the camera + // is unavailable, so the model declines visual questions gracefully rather + // than erroring on an unsupported image part or hallucinating about a photo + // it never received. The glasses may still HAVE a camera — this reflects the + // model's inability to use it, not the hardware. + const usePhotos = model.visionCapable + const hasUsablePhotos = usePhotos && context.hasPhotos + + // Delegation is offered only when configured AND we know who the user is. + const delegationEnabled = isDelegationEnabled() && Boolean(userId) + // App-control is offered when the background sent a list of controllable apps. + const appControlEnabled = (context.apps?.length ?? 0) > 0 + + const agentContext: AgentContext = { + ...context, + hasCamera: usePhotos && context.hasCamera, + hasPhotos: hasUsablePhotos, + hasMicrophone: true, + responseMode, + modelLabel: model.label, + modelProvider: model.provider, + agentEnabled: delegationEnabled, + } + + const systemPrompt = buildSystemPrompt(agentContext) + const tools = buildOpenAITools({askAgent: delegationEnabled, appControl: appControlEnabled}) + + // Out-of-band channels for tool outcomes (the tool's return goes to the model; + // the caller also needs the structured results — delegation actions/taskId and + // the deferred app-control device actions). + const delegation: DelegationHolder = {} + const deviceActions: DeviceAction[] = [] + const toolCtx: ToolExecContext = {userId, delegation, deviceActions} + + // Build the initial user turn: query text + labeled photos as image_url parts. + const userContent: ContentPart[] = [{type: "text", text: query}] + if (usePhotos && photos && photos.length > 0) { + photos.forEach((photo, i) => { + userContent.push({ + type: "text", + text: + i === 0 + ? "[CURRENT photo — what the user is looking at right now. Answer about THIS image.]" + : `[PREVIOUS photo ${i} — older context only. Ignore unless the user explicitly asks about something earlier.]`, + }) + // OpenRouter accepts base64 data URLs directly as the image_url. + userContent.push({type: "image_url", image_url: {url: photo}}) + }) + } + + const messages: ChatMessage[] = [ + {role: "system", content: systemPrompt}, + {role: "user", content: userContent}, + ] + + console.log( + `🤖 Generating response for: "${query.slice(0, 50)}${query.length > 50 ? "..." : ""}"`, + ) + console.log( + ` Model: ${model.id}, Mode: ${responseMode}, Photos: ${photos?.length || 0}, hasPhotos: ${context.hasPhotos}, History: ${context.conversationHistory.length}`, + ) + + let toolCallCount = 0 + + try { + for (let step = 0; step < MAX_STEPS; step++) { + const assistant = await callOpenRouter({ + model: model.id, + messages, + tools, + }) + + const toolCalls = assistant.tool_calls ?? [] + + if (toolCalls.length === 0) { + // No tool calls — this is the final answer (or a delegation ack). + const text = (assistant.content ?? "").trim() + console.log(`✅ Response generated (${text.length} chars, ${toolCallCount} tool calls)`) + return finalize(text, toolCallCount, delegation, deviceActions) + } + + // Append the model's tool-call turn, then execute and append each result. + messages.push({ + role: "assistant", + content: assistant.content ?? null, + tool_calls: toolCalls, + }) + + for (const call of toolCalls) { + toolCallCount++ + const args = parseToolArgs(call.function.arguments) + const result = await executeTool(call.function.name, args, toolCtx) + messages.push({ + role: "tool", + tool_call_id: call.id, + content: JSON.stringify(result), + }) + } + } + } catch (error) { + if (error instanceof OpenRouterError) { + throw new AgentServiceError(error.message, error.status === 401 ? 503 : 500) + } + throw error + } + + // Hit the step cap without a final text answer. + console.warn("⚠️ Agent hit maxSteps without a final answer") + return finalize("I wasn't able to finish that. Could you try rephrasing?", toolCallCount, delegation, deviceActions) +} + +/** Assemble the AgentResult, attaching delegation outcome + deferred app actions. */ +function finalize( + response: string, + toolCalls: number, + delegation: DelegationHolder, + deviceActions: DeviceAction[], +): AgentResult { + return { + response, + toolCalls, + ...(delegation.pendingTaskId ? {pendingTaskId: delegation.pendingTaskId} : {}), + ...(delegation.actions?.length ? {actions: delegation.actions} : {}), + ...(deviceActions.length ? {deviceActions} : {}), + } +} + +/** Parse a tool call's `arguments` JSON string; tolerate malformed/empty payloads. */ +function parseToolArgs(raw: string): Record { + if (!raw) return {} + try { + const parsed = JSON.parse(raw) + return parsed && typeof parsed === "object" ? (parsed as Record) : {} + } catch { + return {} + } +} diff --git a/miniapps/mentra-ai-local/backend/src/services/agent/delegation.ts b/miniapps/mentra-ai-local/backend/src/services/agent/delegation.ts new file mode 100644 index 0000000000..df604abd1a --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/agent/delegation.ts @@ -0,0 +1,142 @@ +/** + * Giga-agent delegation — server-side control-plane client. + * + * The user's persistent "giga-agent" lives behind the `testaiassistant` control + * plane (a separate service). Delegation is the fast agent's escalation path for + * multi-step / personal-account / long-running work. + * + * This client lives in the BACKEND because the shared control-plane key is a + * server secret — it must never ship inside the miniapp bundle. The miniapp's + * background reaches it only through `/api/agent` (the agent tool-loop) and + * `/api/agent/task/:id` (the follow-up poll), both auth-gated. + * + * The control plane keys everything on `userId` = the caller's `mentraUserId` + * (a PII-free ULID, also the permanent key of the agent's memory volume). Its + * userId validator must accept that charset (`[A-Za-z0-9_-]{1,64}`). + */ + +import type {AgentAction} from "./types" + +const BASE_URL = (process.env.AGENTS_BASE_URL ?? "").replace(/\/+$/, "") +const API_KEY = process.env.MENTRA_AGENT_API_KEY ?? "" + +/** Grace window (ms) a delegation blocks before returning an ack + a pending taskId. */ +export const DELEGATE_GRACE_MS = parseInt(process.env.AGENT_DELEGATE_GRACE_MS ?? "2000", 10) + +const REQUEST_TIMEOUT_MS = 15_000 + +/** True when delegation is fully configured; otherwise `ask_agent` is not offered. */ +export function isDelegationEnabled(): boolean { + return Boolean(BASE_URL && API_KEY) +} + +export type {AgentAction} + +/** Flat device-context the agent gets (so it never re-asks what the device knows). */ +export type AgentContextPayload = Record + +export type DelegateResult = + | {status: "done"; reply: string; actions: AgentAction[]} + | {status: "working"; taskId: string; ack: string} + | {status: "failed"; error: string} + +export interface DelegationTaskResult { + status: "working" | "done" | "failed" + reply?: string + actions?: AgentAction[] + error?: string +} + +function headers(): Record { + return {"Content-Type": "application/json", "x-api-key": API_KEY} +} + +function userPath(userId: string): string { + return `${BASE_URL}/api/users/${encodeURIComponent(userId)}` +} + +/** + * Delegate a task. Resolves `done` if the agent answered within the grace + * window, otherwise `working` (carrying a taskId the caller polls via getTask). + * The control plane is the slow part — it loops a Hermes agent — so a long task + * returns `working` and finishes in the background. + */ +export async function delegateMessage( + userId: string, + task: string, + context?: AgentContextPayload, +): Promise { + const body: Record = {text: task, wait_ms: DELEGATE_GRACE_MS} + if (context && Object.keys(context).length) body.context = context + + let res: Response + try { + res = await fetch(`${userPath(userId)}/message`, { + method: "POST", + headers: headers(), + body: JSON.stringify(body), + signal: AbortSignal.timeout(DELEGATE_GRACE_MS + REQUEST_TIMEOUT_MS), + }) + } catch (err) { + return {status: "failed", error: err instanceof Error ? err.message : String(err)} + } + + const data = (await res.json().catch(() => ({}))) as Record + + if (res.status === 202 && data.status === "working") { + return { + status: "working", + taskId: String(data.taskId), + ack: typeof data.ack === "string" ? data.ack : "", + } + } + if (res.ok && data.status === "done") { + return { + status: "done", + reply: typeof data.reply === "string" ? data.reply : "", + actions: Array.isArray(data.actions) ? (data.actions as AgentAction[]) : [], + } + } + return { + status: "failed", + error: typeof data.error === "string" ? data.error : `delegation failed (${res.status})`, + } +} + +/** Poll a pending task's state. Returns null on a transport error (caller retries). */ +export async function getDelegationTask( + userId: string, + taskId: string, +): Promise { + try { + const res = await fetch(`${userPath(userId)}/tasks/${encodeURIComponent(taskId)}`, { + headers: headers(), + signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }) + if (!res.ok) return null + const data = (await res.json()) as Record + const status = data.status === "done" || data.status === "failed" ? data.status : "working" + return { + status, + reply: typeof data.reply === "string" ? data.reply : undefined, + actions: Array.isArray(data.actions) ? (data.actions as AgentAction[]) : undefined, + error: typeof data.error === "string" ? data.error : undefined, + } + } catch { + return null + } +} + +/** Predictive wake — warm the user's container (fire-and-forget). */ +export async function wakeDelegation(userId: string): Promise { + if (!isDelegationEnabled()) return + try { + await fetch(`${userPath(userId)}/wake`, { + method: "POST", + headers: headers(), + signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }) + } catch { + /* best-effort */ + } +} diff --git a/miniapps/mentra-ai-local/backend/src/services/agent/prompt.ts b/miniapps/mentra-ai-local/backend/src/services/agent/prompt.ts new file mode 100644 index 0000000000..3a7d810179 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/agent/prompt.ts @@ -0,0 +1,373 @@ +/** + * System Prompt Builder for Mentra AI — server-side. + * + * Ported verbatim from the miniapp's agent/prompt.ts (the prompt is + * platform-agnostic). Now lives on the backend because the whole agent + * tool-loop runs server-side (Option A). Builds the system prompt dynamically + * from device capabilities, response mode, and environment context. + */ + +import {ResponseMode, type AgentRequestContext, type AvailableApp} from "./types" + +/** Word limits for each response mode. */ +export const WORD_LIMITS = { + // Speaker glasses (audio output) + speaker: { + [ResponseMode.QUICK]: 17, + [ResponseMode.STANDARD]: 50, + [ResponseMode.DETAILED]: 100, + }, + // HUD glasses (visual display) — always short + hud: { + [ResponseMode.QUICK]: 15, + [ResponseMode.STANDARD]: 15, + [ResponseMode.DETAILED]: 15, + }, +} + +/** Maximum tool-call iterations for the agent loop. */ +export const MAX_STEPS = 5 + +/** Context the prompt builder consumes (request context + computed response mode). */ +export interface AgentContext extends AgentRequestContext { + hasMicrophone: boolean + responseMode: ResponseMode + /** Human-readable model name shown in the identity section (e.g. "Gemini 2.5 Flash"). */ + modelLabel: string + /** Provider name shown in the identity section (e.g. "Google"). */ + modelProvider: string + /** Whether the ask_agent (giga-agent) delegation tool is available this turn. */ + agentEnabled?: boolean +} + +/** Build the complete system prompt. */ +export function buildSystemPrompt(context: AgentContext): string { + const sections = [ + buildIdentitySection(context), + buildDeviceCapabilitiesSection(context), + buildResponseFormatSection(context), + buildToolUsageSection(), + ] + + // Delegation rules — only when the giga-agent escalation tool is available + if (context.agentEnabled) { + sections.push(buildDelegationSection()) + } + + // App control — only when controllable apps were sent in context + if (context.apps && context.apps.length > 0) { + sections.push(buildAppControlSection(context.apps)) + } + + // Vision section — depends on camera AND whether photo was actually captured + if (context.hasCamera && context.hasPhotos) { + sections.push(buildVisionSection()) + } else if (context.hasCamera && !context.hasPhotos) { + sections.push(buildVisionFailedSection()) + } + + sections.push(buildContextSection(context)) + + // TTS formatting only for speaker glasses (no display) + if (context.hasSpeakers && !context.hasDisplay) { + sections.push(buildTTSFormatSection()) + } + + // Display formatting for HUD glasses + if (context.hasDisplay) { + sections.push(buildDisplayFormatSection()) + } + + return sections.join("\n\n") +} + +function buildIdentitySection(context: AgentContext): string { + return `# Mentra AI + +I'm Mentra AI - I live in these smart glasses and I'm here to help. + +My underlying AI model is ${context.modelLabel} (provided by ${context.modelProvider}). If anyone asks what model or AI powers me, I share this openly. + +If someone asks about the glasses themselves, I mention that these are MentraOS smart glasses. + +## Core Principles + +- Be direct and concise. Give the answer without filler, commentary, or playful remarks. +- For factual questions, state the fact directly. +- Never refuse reasonable requests - I always try my best. +- Keep responses natural and conversational, like a helpful friend.` +} + +function buildDeviceCapabilitiesSection(context: AgentContext): string { + const capabilities: string[] = [] + const limitations: string[] = [] + + if (context.hasCamera) { + capabilities.push("Camera - can see what the user sees and answer visual questions") + } + if (context.hasSpeakers) { + capabilities.push("Speakers - responses are spoken aloud to the user") + } + if (context.hasDisplay) { + capabilities.push("HUD Display - responses are shown on a heads-up display") + } + if (context.hasMicrophone) { + capabilities.push("Microphone - user speaks to interact (always present)") + } + + if (!context.hasCamera) { + limitations.push( + "NO camera - cannot see what the user sees, cannot analyze images. If the user asks you to look at something, describe something visual, or asks a question that requires seeing their surroundings, politely explain that these glasses don't have a camera so you can't see what's around them, and suggest they ask a question you can answer with your knowledge or a web search instead.", + ) + } + if (!context.hasSpeakers) { + limitations.push("NO speakers - responses are displayed only, not spoken") + } + if (!context.hasDisplay) { + limitations.push("NO display - responses are spoken only, not shown visually") + } + + return `## Device Capabilities + +The user is wearing **${context.glassesType} glasses** with the following hardware: + +**Available:** +${capabilities.map((c) => `- ${c}`).join("\n")} + +**Not Available:** +${limitations.length > 0 ? limitations.map((l) => `- ${l}`).join("\n") : "- (all features available)"} + +IMPORTANT: When the user asks "what can you do?" or "what can I do with these glasses?", ONLY mention capabilities that are actually available. NEVER suggest features that require hardware the user doesn't have.` +} + +function buildResponseFormatSection(context: AgentContext): string { + const limits = context.hasDisplay ? WORD_LIMITS.hud : WORD_LIMITS.speaker + const wordLimit = limits[context.responseMode] + + return `## Response Length + +CRITICAL WORD LIMIT: MAXIMUM ${wordLimit} WORDS. This is NON-NEGOTIABLE. + +Current mode: ${context.responseMode.toUpperCase()} +- QUICK (${limits[ResponseMode.QUICK]} words): Simple facts, yes/no, quick answers +- STANDARD (${limits[ResponseMode.STANDARD]} words): Explanations, recommendations +- DETAILED (${limits[ResponseMode.DETAILED]} words): Complex explanations, step-by-step + +Count your words before responding. Keep it concise.` +} + +function buildToolUsageSection(): string { + return `## How I Use Tools + +1. **Direct answers first**: If I'm confident I know the answer, I respond directly WITHOUT using tools. Common knowledge, facts, math, definitions - I already know these. + +2. **Search for real-time data**: I ONLY use web search when the answer depends on CURRENT data I don't have (today's weather, live scores, recent news, business hours, stock prices, commodity prices, currency rates, obscure topics). CRITICAL: I search AT MOST ONCE per user query. One search call is enough — I never refine or repeat searches. After searching, I ALWAYS provide the best answer I can from the results — I never say "I cannot provide" or refuse. If the results are incomplete, I share what I found and note it may not be exact. + +3. **Calculator for math**: Use the calculator tool for any arithmetic, conversions, or calculations. + +4. **Think through complex problems**: Use the thinking tool to reason step-by-step about complex questions before answering.` +} + +/** + * Delegation rules — when to escalate to the user's personal giga-agent. + * Only included when the ask_agent tool is wired up for this turn. + */ +function buildDelegationSection(): string { + return `## Personal Agent (ask_agent) + +I have one more tool: **ask_agent**. It reaches the user's personal agent — an +autonomous assistant with their long-term memory, their connected accounts +(email, calendar, and more), and the ability to do real multi-step work. It is +powerful but NOT instant. + +WHEN TO USE ask_agent: +- The task needs the user's PERSONAL data or accounts: their email, their + calendar, their saved memories, anything tied to *their* connected services. +- The task is MULTI-STEP or open-ended: research, planning, comparing across + sources, or anything that takes several actions to complete. + +WHEN NOT TO USE ask_agent (answer these myself, or with web_search): +- Single public lookups: one price, today's weather, a sports score, a fact. +- Math, definitions, general knowledge, greetings, quick chat. + +HOW IT BEHAVES: +- If it returns status "done", I relay its reply, summarized for voice within my + word limit. I drop any URLs from speech (they appear on the phone automatically). +- If it returns status "working", I follow its "note": I say ONE short, natural + line letting the user know I'm on it, tailored to the task. I never invent the + answer — the real result is delivered to the user when the agent finishes. + +I pass ask_agent the full task with all the context it needs, in one call.` +} + +/** + * App-control section — lists the other miniapps I can start/stop and the + * actions I can trigger inside them. Only included when apps are in context. + */ +function buildAppControlSection(apps: AvailableApp[]): string { + const appLines = apps + .map((app) => { + const status = app.running ? "running" : "stopped" + const header = `- **${app.name}** (\`${app.packageName}\`, ${status})` + if (!app.actions.length) return header + const actions = app.actions + .map((a) => { + const params = a.parameters ? ` — params: ${JSON.stringify(a.parameters)}` : "" + return ` - action \`${a.id}\`: ${a.description}${params}` + }) + .join("\n") + return `${header}\n${actions}` + }) + .join("\n") + + return `## Controlling Other Apps + +I can control other apps on the user's glasses with three tools: +- **start_app(packageName)** — open an app. +- **stop_app(packageName)** — close an app. +- **invoke_app_action(packageName, actionId, params)** — trigger a specific action inside an app. + +Rules: +- Only use the exact packageName / actionId from the list below — never invent one. +- When the user asks to do something an app provides (e.g. "translate to Spanish", + "start navigation home", "load my script"), pick the matching app + action and call + invoke_app_action with params matching its declared parameters. start_app is for just + opening an app with no specific action. +- These run in the background and the action takes effect right after I reply, so I + confirm in ONE short, natural spoken line (e.g. "Starting translation to Spanish."). + I never claim it failed or succeeded beyond that — I just did it. +- If no listed app matches the request, I say so instead of guessing. + +Available apps: +${appLines}` +} + +function buildVisionSection(): string { + return `## Vision (Camera) + +I always receive a photo from the smart glasses camera alongside the user's query. + +STEP 1 — CLASSIFY THE QUERY: +- VISUAL = the query explicitly references something physical, visible, or in the user's environment. Examples: "what is this?", "read that", "what color is this?", "identify this", "what am I looking at?" +- NON-VISUAL = everything else. Greetings, general knowledge, opinions, etc. + +STEP 2 — RESPOND BASED ON CLASSIFICATION: +- If VISUAL: I analyze the image and answer the user's SPECIFIC question about what I see. +- If NON-VISUAL: I act as if NO image was attached. I answer the query directly without mentioning or describing the photo. + +CRITICAL - Camera Perspective: The camera shows what the user is LOOKING AT, not them. I'm seeing FROM their eyes, not AT them. Any person visible is someone else - NEVER the user. + +MULTIPLE IMAGES: I may receive more than one photo. Each image is preceded by a text label: +- "[CURRENT photo ...]" is the photo captured for THIS query — the live view right now. For any present-tense visual question ("how many fingers am I holding up?", "what is this?", "what color is this?") I answer ONLY about the CURRENT photo. +- "[PREVIOUS photo N ...]" are older photos kept for context. I ignore them UNLESS the user explicitly asks about something earlier ("what was that thing I saw before?"). +I never let a PREVIOUS photo override what I see in the CURRENT photo.` +} + +function buildVisionFailedSection(): string { + return `## Vision (Camera) + +The glasses have a camera, but NO photo was captured for this query (camera error or non-visual query). +Do NOT reference, describe, or mention any image. Answer using your knowledge, location data, and web search instead. +If the user asked a visual question ("what is this?", "what am I looking at?"), let them know the camera couldn't capture a photo and ask them to try again.` +} + +function buildContextSection(context: AgentContext): string { + const sections: string[] = [] + + if (context.location) { + const loc = context.location + let locationStr = "" + if (loc.streetAddress) { + locationStr = `${loc.streetAddress}, ` + } + if (loc.neighborhood) { + locationStr += `${loc.neighborhood}, ` + } + locationStr += `${loc.city}, ${loc.state}, ${loc.country}` + + if (loc.weather) { + locationStr += ` | Weather: ${loc.weather.temperature}°F (${loc.weather.temperatureCelsius}°C), ${loc.weather.condition}` + } + sections.push(`**Location:** ${locationStr}`) + sections.push( + `**Location Note:** When the user asks where they are, describe the location using the neighborhood, street name, and nearby landmarks or cross streets - but do NOT read out the exact street number (GPS addresses can be off by a few numbers). Use the full address internally for finding nearby places, directions, and mapping.`, + ) + } + + if (context.localTime) { + sections.push( + `**Current Date & Time:** ${context.localTime}${ + context.timezone ? ` (${context.timezone})` : "" + }\n**Time/Date Response Rule:** When asked "what time is it?" respond with JUST the time (e.g. "It's 6:38 PM"). When asked "what's the date?" respond with JUST the date (e.g. "It's February 23rd, 2026"). Only include extra details (timezone, day of week, full date+time) if specifically asked.`, + ) + } + + if (context.notifications && context.notifications !== "No recent notifications.") { + sections.push(`**Recent Notifications:**\n${context.notifications}`) + } + + if (context.conversationHistory.length > 0) { + const historyStr = context.conversationHistory + .map((turn) => { + const photoNote = turn.hadPhoto ? " (with photo)" : "" + return `User${photoNote}: ${turn.query}\nAssistant: ${turn.response}` + }) + .join("\n\n") + sections.push(`**Conversation History:**\n${historyStr}`) + } + + if (sections.length === 0) { + return "## Context\n\nNo additional context available." + } + + return `## Context\n\n${sections.join("\n\n")}` +} + +function buildTTSFormatSection(): string { + return `## Speech Output Formatting + +Since the user will HEAR your response through speakers, format your output for natural speech: + +- Write numbers as words: "fifty degrees" not "50°" +- Spell out units: "fahrenheit" not "F", "dollars" not "$" +- Spell out abbreviations: "for example" not "e.g." +- No special characters: avoid symbols like °, %, $, € +- No markdown formatting: no bullets, headers, or links +- Use natural punctuation for pauses + +Examples: +- BAD: "It's 72°F with 45% humidity" +- GOOD: "It's seventy-two degrees fahrenheit with forty-five percent humidity" + +- BAD: "The iPhone 15 Pro costs $999" +- GOOD: "The iPhone fifteen Pro costs nine hundred ninety-nine dollars"` +} + +function buildDisplayFormatSection(): string { + return `## Display Output Formatting + +Since the user will READ your response on a small HUD display: + +- Keep responses extremely brief (15 words max) +- You CAN use symbols and abbreviations: 72°F, $50, 45% +- No markdown formatting +- Prioritize scannable, glanceable text` +} + +/** Classify the response mode based on query complexity. */ +export function classifyResponseMode(query: string, hasDisplay: boolean): ResponseMode { + // HUD glasses always get quick responses + if (hasDisplay) return ResponseMode.QUICK + + const lower = query.toLowerCase() + + if (/explain|how does|why does|compare|analyze|in detail|tell me more|elaborate/.test(lower)) { + return ResponseMode.DETAILED + } + + if (/how to|what are|recommend|suggest|steps to|what should|give me|list/.test(lower)) { + return ResponseMode.STANDARD + } + + return ResponseMode.QUICK +} diff --git a/miniapps/mentra-ai-local/backend/src/services/agent/tools.ts b/miniapps/mentra-ai-local/backend/src/services/agent/tools.ts new file mode 100644 index 0000000000..0fc2a9d2e1 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/agent/tools.ts @@ -0,0 +1,269 @@ +/** + * Agent tools — function declarations + an in-process executor. + * + * Ported from the miniapp's agent/tools/index.ts. Runs server-side as part of + * the tool-loop in agent.service.ts. web_search delegates to the Jina + * search.service; calculator/thinking run locally; ask_agent escalates to the + * user's giga-agent via the control plane (only offered when configured). + * + * The tools are advertised to OpenRouter (OpenAI chat-completions format) via + * `buildOpenAITools()`, derived from the same declarations. + */ + +import {Parser} from "expr-eval" + +import {webSearch} from "../search/search.service" +import type {ToolDef} from "../openrouter" +import {delegateMessage, isDelegationEnabled, type AgentAction} from "./delegation" +import type {DeviceAction} from "./types" + +/** Function declarations (name/description/JSON-schema parameters). */ +export const TOOL_DECLARATIONS = [ + { + name: "web_search", + description: + "Search the web for current information. Use for real-time data like weather, news, sports scores, business hours, or topics you're unsure about. You may ONLY call this tool ONCE per user query.", + parameters: { + type: "object", + properties: { + query: {type: "string", description: "The search query"}, + }, + required: ["query"], + }, + }, + { + name: "calculator", + description: + "Perform mathematical calculations. Use for arithmetic, conversions, percentages, tip calculations, etc.", + parameters: { + type: "object", + properties: { + expression: { + type: "string", + description: "Mathematical expression to evaluate (e.g., '15 * 0.2', 'sqrt(16)')", + }, + }, + required: ["expression"], + }, + }, + { + name: "thinking", + description: + "Think through a problem step by step. Use this to reason about complex questions before answering.", + parameters: { + type: "object", + properties: { + thought: {type: "string", description: "Your reasoning process or step-by-step thinking"}, + }, + required: ["thought"], + }, + }, +] as const + +/** + * ask_agent — escalate to the user's personal giga-agent (their memory, + * connected accounts, and multi-step autonomous work). Only advertised to the + * model when delegation is configured (see buildOpenAITools). + */ +export const ASK_AGENT_DECLARATION = { + name: "ask_agent", + description: + "Delegate a task to the user's personal agent — their long-term memory, connected " + + "accounts (email, calendar), and the ability to do multi-step, autonomous work. Use this " + + "for ANYTHING that needs the user's personal data/accounts or that takes multiple steps. " + + "Do NOT use it for simple public lookups (a single price, today's weather, a score, math) — " + + "answer those yourself or with web_search. Pass the full task with all needed context.", + parameters: { + type: "object", + properties: { + task: {type: "string", description: "The task or question for the agent, with all needed context."}, + }, + required: ["task"], + }, +} as const + +/** OpenAI chat-completions tool schema, derived from TOOL_DECLARATIONS. */ +function toToolDef(d: {name: string; description: string; parameters: unknown}): ToolDef { + return { + type: "function", + function: {name: d.name, description: d.description, parameters: d.parameters as Record}, + } +} + +/** + * App-control tools — operate OTHER miniapps (Mentra AI is a system app). Only + * advertised when at least one controllable app is in context. The device op is + * deferred: each call records a DeviceAction the background executes after the + * response (the agent already knows the apps + their actions from context). + */ +export const APP_CONTROL_DECLARATIONS = [ + { + name: "start_app", + description: + "Start (open) another miniapp on the glasses by its exact packageName from the available-apps " + + "list. Starting an already-running app is harmless.", + parameters: { + type: "object", + properties: {packageName: {type: "string", description: "The app's exact packageName."}}, + required: ["packageName"], + }, + }, + { + name: "stop_app", + description: "Stop (close) another running miniapp by its exact packageName from the available-apps list.", + parameters: { + type: "object", + properties: {packageName: {type: "string", description: "The app's exact packageName."}}, + required: ["packageName"], + }, + }, + { + name: "invoke_app_action", + description: + "Trigger a specific declared action inside another miniapp (e.g. start translation, load a " + + "teleprompter script). Use the packageName and actionId exactly as listed for that app, and pass " + + "params matching the action's declared parameters.", + parameters: { + type: "object", + properties: { + packageName: {type: "string", description: "The target app's exact packageName."}, + actionId: {type: "string", description: "The action's id, as declared by that app."}, + params: {type: "object", description: "Parameters for the action (match its declared schema)."}, + }, + required: ["packageName", "actionId"], + }, + }, +] as const + +/** Base tools always advertised to the model. */ +export const OPENAI_TOOLS: ToolDef[] = TOOL_DECLARATIONS.map(toToolDef) + +/** Tools for a request — adds ask_agent / app-control when each is available. */ +export function buildOpenAITools(opts: {askAgent: boolean; appControl: boolean}): ToolDef[] { + const tools = [...OPENAI_TOOLS] + if (opts.askAgent) tools.push(toToolDef(ASK_AGENT_DECLARATION)) + if (opts.appControl) tools.push(...APP_CONTROL_DECLARATIONS.map(toToolDef)) + return tools +} + +/** + * Per-request, out-of-band channel for the delegation result. The ask_agent + * tool's return goes to the MODEL (text), but the caller (agent.service) also + * needs the structured outcome — the actions to render and any pending taskId + * for the async follow-up. We stash those here. + */ +export interface DelegationHolder { + pendingTaskId?: string + actions?: AgentAction[] +} + +/** Context passed alongside a tool call (the authed user + the delegation holder). */ +export interface ToolExecContext { + userId?: string + delegation?: DelegationHolder + /** App-control tools push their deferred device actions here. */ + deviceActions?: DeviceAction[] +} + +const parser = new Parser() + +/** Execute a tool by name; returns a JSON-serializable result for the model. */ +export async function executeTool( + name: string, + args: Record, + ctx?: ToolExecContext, +): Promise> { + switch (name) { + case "web_search": + return {...(await webSearch(String(args.query ?? "")))} + case "calculator": + return calculator(String(args.expression ?? "")) + case "thinking": + console.log(`💭 [Thinking] ${String(args.thought ?? "")}`) + return {acknowledged: true} + case "ask_agent": + return askAgent(String(args.task ?? ""), ctx) + case "start_app": + return appControl({type: "start_app", packageName: String(args.packageName ?? "")}, ctx) + case "stop_app": + return appControl({type: "stop_app", packageName: String(args.packageName ?? "")}, ctx) + case "invoke_app_action": + return appControl( + { + type: "invoke_action", + packageName: String(args.packageName ?? ""), + actionId: String(args.actionId ?? ""), + params: args.params && typeof args.params === "object" ? (args.params as Record) : undefined, + }, + ctx, + ) + default: + return {error: `Unknown tool: ${name}`} + } +} + +/** + * Record a deferred app-control action for the background to execute, and return + * an optimistic confirmation to the model. We don't execute here (that happens + * on-device) — fire-and-forget fits a voice assistant, and the agent already has + * the app list from context. + */ +function appControl(action: DeviceAction, ctx?: ToolExecContext): Record { + if (!action.packageName) return {status: "error", note: "Missing packageName."} + if (action.type === "invoke_action" && !action.actionId) { + return {status: "error", note: "Missing actionId."} + } + if (!ctx?.deviceActions) { + return {status: "unavailable", note: "App control isn't available right now."} + } + ctx.deviceActions.push(action) + console.log(`🎛️ [app-control] queued ${action.type} ${action.packageName}${"actionId" in action ? `#${action.actionId}` : ""}`) + return {status: "queued", note: "Done — confirm the action to the user in one short, natural line."} +} + +/** + * Run a delegation. On a fast result, returns the reply for the model to relay + * and stashes any actions. On a slow result, stashes the pending taskId and + * tells the model to acknowledge briefly — the real answer is delivered later + * by the background polling /api/agent/task/:id. + */ +async function askAgent(task: string, ctx?: ToolExecContext): Promise> { + if (!isDelegationEnabled() || !ctx?.userId) { + return {status: "unavailable", note: "The personal agent isn't available right now."} + } + console.log(`🤝 [ask_agent] delegating: "${task.slice(0, 80)}${task.length > 80 ? "..." : ""}"`) + + const result = await delegateMessage(ctx.userId, task) + + if (result.status === "done") { + if (ctx.delegation) ctx.delegation.actions = result.actions + return {status: "done", reply: result.reply} + } + if (result.status === "working") { + if (ctx.delegation) ctx.delegation.pendingTaskId = result.taskId + return { + status: "working", + note: + "The agent is now working on this in the background. Reply with ONE short, natural, " + + "voice-friendly sentence acknowledging you're on it, tailored to the task " + + '(e.g. "Checking your inbox — one sec."). Give a rough sense of how long based on the ' + + "task, never a specific number of seconds. Do NOT make up the answer — you don't have it yet.", + } + } + return {status: "failed", note: "I couldn't reach your agent just now. Please try again."} +} + +function calculator(expression: string): {result: number | null; error?: string} { + console.log(`🧮 Calculating: "${expression}"`) + try { + const result = parser.evaluate(expression) + if (typeof result !== "number" || !Number.isFinite(result)) { + return {result: null, error: "Invalid calculation result"} + } + console.log(`✅ Result: ${result}`) + return {result} + } catch (error) { + const message = error instanceof Error ? error.message : "Unknown error" + return {result: null, error: message} + } +} diff --git a/miniapps/mentra-ai-local/backend/src/services/agent/types.ts b/miniapps/mentra-ai-local/backend/src/services/agent/types.ts new file mode 100644 index 0000000000..72756a68e6 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/agent/types.ts @@ -0,0 +1,121 @@ +/** + * Shared agent types — the contract between the miniapp client and the backend + * agent service. The miniapp builds AgentRequest from its managers (location, + * notifications, chat history, capabilities) and POSTs it to /api/agent; the + * backend returns AgentResult ({response, toolCalls}) — the same shape the + * miniapp's old in-process generateResponse() returned, so QueryProcessor is + * unchanged. + */ + +/** Response mode determines the length and depth of responses. */ +export enum ResponseMode { + QUICK = "quick", + STANDARD = "standard", + DETAILED = "detailed", +} + +/** Weather snapshot attached to a location. */ +export interface WeatherContext { + temperature: number + temperatureCelsius: number + condition: string +} + +/** Resolved location context (geocoded + optional weather). */ +export interface LocationContext { + streetAddress?: string + neighborhood?: string + city: string + state: string + country: string + weather?: WeatherContext +} + +/** One prior turn of conversation. */ +export interface ConversationTurn { + query: string + response: string + hadPhoto: boolean +} + +/** Device + environment context for a single query. */ +export interface AgentRequestContext { + hasDisplay: boolean + hasSpeakers: boolean + hasCamera: boolean + hasPhotos: boolean + glassesType: "display" | "camera" + location: LocationContext | null + localTime: string + timezone?: string + notifications: string + conversationHistory: ConversationTurn[] + /** + * Other miniapps the agent can control (Mentra AI is a system app). Gathered + * by the background via session.miniapps.list(); enables the app-control tools. + */ + apps?: AvailableApp[] +} + +/** A declared action another miniapp exposes (mirrors the SDK's MiniappActionInfo). */ +export interface AvailableAction { + id: string + description: string + parameters?: Record +} + +/** A miniapp the agent can control, with its declared actions. */ +export interface AvailableApp { + packageName: string + name: string + running: boolean + actions: AvailableAction[] +} + +/** + * An app-control action the agent decided on; the background executes it after + * the response (deferred + fire-and-forget, like the open_url AgentAction). + */ +export type DeviceAction = + | {type: "start_app"; packageName: string} + | {type: "stop_app"; packageName: string} + | {type: "invoke_action"; packageName: string; actionId: string; params?: Record} + +/** POST /api/agent request body. Photos are data-URL strings, current-first. */ +export interface AgentRequest { + query: string + photos?: string[] + context: AgentRequestContext + /** + * OpenRouter model slug the user selected (e.g. "anthropic/claude-haiku-4.5"). + * Validated server-side against the model registry; falls back to the default + * when omitted or unknown. See backend `services/models.ts`. + */ + model?: string +} + +/** A structured action extracted from a delegation (a URL the user opens). */ +export interface AgentAction { + type: "open_url" + kind: "oauth_connect" | "link" + url: string +} + +/** POST /api/agent response body — same shape as the old client GenerateResult. */ +export interface AgentResult { + response: string + toolCalls: number + /** + * Set when the agent delegated to the giga-agent and it ran past the grace + * window: `response` is then a spoken ack, and the caller polls + * /api/agent/task/:pendingTaskId for the real answer. + */ + pendingTaskId?: string + /** Action buttons (e.g. an OAuth connect link) from a fast delegation. */ + actions?: AgentAction[] + /** + * App-control actions (start/stop/invoke another miniapp) the agent decided + * on. The background executes them after the response. + */ + deviceActions?: DeviceAction[] +} diff --git a/miniapps/mentra-ai-local/backend/src/services/ai-config.ts b/miniapps/mentra-ai-local/backend/src/services/ai-config.ts new file mode 100644 index 0000000000..f9a587744f --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/ai-config.ts @@ -0,0 +1,58 @@ +/** + * Backend AI configuration — the single place the server reads its AI secrets. + * + * These values are SERVER-SIDE ONLY. They are read from the backend's + * environment (never prefixed MENTRA_PUBLIC_, never inlined into the miniapp + * bundle). This is the production-correct home for the keys that the miniapp + * used to ship inside its JS bundle. + * + * The assistant now runs every model through OpenRouter (OpenAI-compatible + * chat completions). One key, one code path; the specific model — Gemini, + * Claude, or GPT — is chosen per request from the registry in `models.ts`. + */ + +import {DEFAULT_MODEL_ID} from "./models" + +/** OpenRouter API key — used by the agent tool-loop and the visual classifier. */ +export const OPENROUTER_API_KEY = + process.env.OPENROUTER_API_KEY ?? process.env.OPEN_ROUTER_API_KEY ?? "" + +/** OpenRouter chat-completions base URL (override only for testing/proxies). */ +export const OPENROUTER_BASE_URL = + process.env.OPENROUTER_BASE_URL?.replace(/\/+$/, "") ?? "https://openrouter.ai/api/v1" + +/** Optional ranking headers OpenRouter shows on its dashboards (both optional). */ +export const OPENROUTER_SITE_URL = process.env.OPENROUTER_SITE_URL ?? "" +export const OPENROUTER_APP_TITLE = process.env.OPENROUTER_APP_TITLE ?? "Mentra AI" + +/** Jina key — used by the web-search tool. */ +export const JINA_API_KEY = process.env.JINA_API_KEY ?? "" + +/** + * Default model id (OpenRouter slug). The client normally sends an explicit + * model from settings; this is the fallback when it doesn't. Env override lets + * an operator change the default without a code change. + */ +export const DEFAULT_LLM_MODEL = process.env.LLM_MODEL || DEFAULT_MODEL_ID + +/** True if the OpenRouter key is present — agent/classify degrade gracefully otherwise. */ +export const hasLLMKey = OPENROUTER_API_KEY.length > 0 + +/** True if the Jina key is present — web search degrades gracefully otherwise. */ +export const hasSearchKey = JINA_API_KEY.length > 0 + +/** OpenRouter chat-completions endpoint. */ +export function openRouterUrl(): string { + return `${OPENROUTER_BASE_URL}/chat/completions` +} + +/** Headers for an OpenRouter request. Key is a Bearer token; ranking headers are optional. */ +export function openRouterHeaders(): Record { + const headers: Record = { + Authorization: `Bearer ${OPENROUTER_API_KEY}`, + "Content-Type": "application/json", + } + if (OPENROUTER_SITE_URL) headers["HTTP-Referer"] = OPENROUTER_SITE_URL + if (OPENROUTER_APP_TITLE) headers["X-Title"] = OPENROUTER_APP_TITLE + return headers +} diff --git a/miniapps/mentra-ai-local/backend/src/services/classify/classify.service.ts b/miniapps/mentra-ai-local/backend/src/services/classify/classify.service.ts new file mode 100644 index 0000000000..b07347c615 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/classify/classify.service.ts @@ -0,0 +1,52 @@ +/** + * Visual-query classifier service — server-side. + * + * Ported from the miniapp's agent/visual-classifier.ts. A fast (~200-300ms) + * call that decides whether a query needs the camera photo to answer. Runs the + * default (cheap/fast) model through OpenRouter — it's a text-only yes/no, so + * it doesn't depend on the user's chosen agent model. Returns false on error + * (defaults to the fast / non-visual path). + */ + +import {hasLLMKey, DEFAULT_LLM_MODEL} from "../ai-config" +import {callOpenRouter} from "../openrouter" + +const SYSTEM_PROMPT = `You classify queries from a user wearing smart glasses with a camera. The camera sees whatever the user is looking at. +Answer ONLY "yes" or "no". +Would a photo of what the user sees help answer this query? +Say yes if: the user is looking at something physical and the photo would help identify it, read it, describe it, or inspect it. This includes looking at objects, products, signs, food, people, buildings, animals, labels, scenes, or asking what's around them. Also yes if the user asks you to see, look at, or compare visible things. +Say no if: the answer comes purely from non-visual senses (smell, sound), general knowledge, abstract topics, spelling/definitions, or the user is asking about a place/area in general terms (safety, reviews, policies, language) where the photo wouldn't add useful information. +IMPORTANT — Say no for figurative/idiomatic language where visual words are used non-literally. These are NOT about seeing something physical: +- "I see" / "I can see why" = I understand +- "look into" / "look up" = research +- "check this out" / "check out" = pay attention +- "looks like" = seems/appears ("that looks like a good deal", "it looks like rain") +- "keep an eye on" = monitor +- "let me see" = let me think/consider +- "how do I look?" = asking about own appearance (camera can't see user) +- "looking at" in terms of price/numbers = considering/evaluating +- "is this the right X?" where X is an address/info = verifying data, not visual +yes: "what is this?", "read that sign", "translate this text", "is that a good restaurant?" (looking at it), "how much does it cost?" (looking at product), "are those shoes on sale?", "what can you see?", "anything interesting around here?", "which one is better?" (comparing visible items) +no: "where am I?", "what time is it?", "what's that smell?", "check this out", "I can see why that's popular", "can you look into that?", "that looks like a good deal", "how do I look?", "keep an eye on that", "let me see the options", "I see"` + +/** Classify whether a query requires visual context (photo from camera). */ +export async function isVisualQuery(query: string): Promise { + if (!hasLLMKey) return false + try { + const message = await callOpenRouter({ + model: DEFAULT_LLM_MODEL, + messages: [ + {role: "system", content: SYSTEM_PROMPT}, + {role: "user", content: query}, + ], + temperature: 0, + maxTokens: 3, + }) + + const text = (message.content ?? "").trim().toLowerCase() + return text.startsWith("yes") + } catch (error) { + console.warn("Visual classifier failed, defaulting to non-visual:", error) + return false + } +} diff --git a/miniapps/mentra-ai-local/backend/src/services/models.ts b/miniapps/mentra-ai-local/backend/src/services/models.ts new file mode 100644 index 0000000000..b9d6fb0ca7 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/models.ts @@ -0,0 +1,52 @@ +/** + * AI model registry — the catalog of models the assistant can run, served via + * OpenRouter (https://openrouter.ai). + * + * Each model declares whether it is vision-capable. Mentra Live photo analysis + * only works on vision models; for text-only models the agent never sends the + * photo and the system prompt tells the model it has no camera (so it declines + * visual questions gracefully instead of erroring or hallucinating). + * + * NOTE on DeepSeek: DeepSeek's own models have native vision, but OpenRouter + * does NOT expose image input for any DeepSeek slug (verified against the + * /models API — every DeepSeek entry reports input_modalities: ["text"]). Since + * this miniapp routes through OpenRouter, DeepSeek is text-only here. + * + * This is the single source of truth for valid model ids. The backend validates + * the client's requested model against this list (falling back to the default), + * and the miniapp settings UI renders a picker from the same data via the + * `/api/agent` contract. Slugs use OpenRouter's `provider/model` namespacing. + */ + +export interface ModelOption { + /** OpenRouter slug, e.g. "google/gemini-3.1-flash-lite-preview". Sent as `model`. */ + id: string + /** Human-readable name shown in the settings picker and the system prompt. */ + label: string + /** Provider label shown in the system prompt ("Google" / "Anthropic" / etc.). */ + provider: string + /** True if image input works through OpenRouter for this slug (controls photos). */ + visionCapable: boolean +} + +/** + * The selectable models. Gemini is first (the default) since it matches what + * the assistant used before the OpenRouter migration. DeepSeek is the cheapest + * but text-only via OpenRouter (see note above). + */ +export const MODEL_OPTIONS: readonly ModelOption[] = [ + {id: "google/gemini-3.1-flash-lite-preview", label: "Gemini 3.1 Flash Lite", provider: "Google", visionCapable: true}, + {id: "anthropic/claude-haiku-4.5", label: "Claude Haiku 4.5", provider: "Anthropic", visionCapable: true}, + {id: "openai/gpt-5-mini", label: "GPT-5 Mini", provider: "OpenAI", visionCapable: true}, + {id: "x-ai/grok-4.3", label: "Grok 4.3", provider: "xAI", visionCapable: true}, + {id: "deepseek/deepseek-v4-flash", label: "DeepSeek V4 Flash", provider: "DeepSeek", visionCapable: false}, +] as const + +/** Default model id when the client sends none or an unknown one. */ +export const DEFAULT_MODEL_ID = MODEL_OPTIONS[0].id + +/** Resolve a (possibly client-supplied) model id to a known option, or the default. */ +export function resolveModel(id?: string | null): ModelOption { + const found = id ? MODEL_OPTIONS.find((m) => m.id === id) : undefined + return found ?? MODEL_OPTIONS.find((m) => m.id === DEFAULT_MODEL_ID)! +} diff --git a/miniapps/mentra-ai-local/backend/src/services/openrouter.ts b/miniapps/mentra-ai-local/backend/src/services/openrouter.ts new file mode 100644 index 0000000000..df6234f96c --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/openrouter.ts @@ -0,0 +1,117 @@ +/** + * OpenRouter chat-completions client — the OpenAI-compatible wire layer. + * + * Everything the assistant does (the agent tool-loop and the visual classifier) + * goes through here. OpenRouter speaks the OpenAI chat-completions format, so + * these types and the `callOpenRouter` helper are plain OpenAI shapes. Provider + * differences (Gemini vs Claude vs GPT) are handled by OpenRouter behind the + * single `model` slug — the caller never branches on provider. + */ + +import {openRouterUrl, openRouterHeaders} from "./ai-config" + +// ── OpenAI-format wire types (the subset we use) ──────────────────── + +/** A piece of message content: text or an image (vision). */ +export type ContentPart = + | {type: "text"; text: string} + | {type: "image_url"; image_url: {url: string}} + +/** A function/tool the model may call. JSON-schema parameters. */ +export interface ToolDef { + type: "function" + function: { + name: string + description: string + parameters: Record + } +} + +/** A tool call the model emitted. `arguments` is a JSON string. */ +export interface ToolCall { + id: string + type: "function" + function: {name: string; arguments: string} +} + +/** A chat message. `content` is a string or multimodal parts; tool turns differ. */ +export interface ChatMessage { + role: "system" | "user" | "assistant" | "tool" + content: string | ContentPart[] | null + /** Present on assistant turns that requested tool calls. */ + tool_calls?: ToolCall[] + /** Present on role:"tool" turns — links the result to the originating call. */ + tool_call_id?: string +} + +interface ChatCompletionChoice { + message: { + role: "assistant" + content: string | null + tool_calls?: ToolCall[] + } + finish_reason?: string +} + +interface ChatCompletionResponse { + choices?: ChatCompletionChoice[] + error?: {message?: string} +} + +export interface CallOptions { + model: string + messages: ChatMessage[] + tools?: ToolDef[] + temperature?: number + maxTokens?: number +} + +export class OpenRouterError extends Error { + constructor( + message: string, + readonly status: number, + ) { + super(message) + this.name = "OpenRouterError" + } +} + +/** One chat-completions round-trip. Returns the first choice's assistant message. */ +export async function callOpenRouter( + opts: CallOptions, +): Promise { + const body: Record = { + model: opts.model, + messages: opts.messages, + temperature: opts.temperature ?? 0.7, + } + if (opts.tools && opts.tools.length > 0) { + body.tools = opts.tools + body.tool_choice = "auto" + } + if (opts.maxTokens !== undefined) body.max_tokens = opts.maxTokens + + const response = await fetch(openRouterUrl(), { + method: "POST", + headers: openRouterHeaders(), + body: JSON.stringify(body), + }) + + if (!response.ok) { + const raw = await response.text().catch(() => "") + throw new OpenRouterError( + `OpenRouter HTTP ${response.status}: ${raw.slice(0, 200)}`, + response.status, + ) + } + + const data = (await response.json()) as ChatCompletionResponse + if (data.error) { + throw new OpenRouterError(data.error.message ?? "OpenRouter error", 500) + } + const message = data.choices?.[0]?.message + if (!message) { + throw new OpenRouterError("OpenRouter returned no choices", 500) + } + return message +} diff --git a/miniapps/mentra-ai-local/backend/src/services/search/search.service.ts b/miniapps/mentra-ai-local/backend/src/services/search/search.service.ts new file mode 100644 index 0000000000..18102e4370 --- /dev/null +++ b/miniapps/mentra-ai-local/backend/src/services/search/search.service.ts @@ -0,0 +1,51 @@ +/** + * Web-search service — Jina s.jina.ai, server-side. + * + * Ported from the miniapp's agent/tools/index.ts webSearch(). The Jina key now + * lives only on the backend. Both the agent tool-loop (in-process) and the + * standalone POST /api/search route call this. + */ + +import {JINA_API_KEY, hasSearchKey} from "../ai-config" + +export interface SearchResult { + results: string +} + +interface JinaSearchResponse { + data?: Array<{title: string; description: string; url: string}> +} + +/** Run a web search and return a compact, model-friendly result string. */ +export async function webSearch(query: string): Promise { + if (!hasSearchKey) { + console.warn("⚠️ JINA_API_KEY not configured") + return {results: "Web search is not available."} + } + console.log(`🔍 Searching web for: "${query}"`) + try { + const response = await fetch(`https://s.jina.ai/${encodeURIComponent(query)}`, { + headers: { + Authorization: `Bearer ${JINA_API_KEY}`, + Accept: "application/json", + "X-Respond-With": "no-content", + "X-Retain-Images": "none", + }, + }) + if (!response.ok) { + console.error(`❌ Jina API error: ${response.status}`) + return {results: "Search failed. Please try again."} + } + const json = (await response.json()) as JinaSearchResponse + const results = json.data || [] + const formatted = results + .slice(0, 5) + .map((r, i) => `${i + 1}. ${r.title}\n${r.description}`) + .join("\n\n") + console.log(`✅ Search returned ${results.length} results`) + return {results: formatted || "No results found."} + } catch (error) { + console.error("❌ Search error:", error) + return {results: "Search failed due to an error."} + } +} diff --git a/miniapps/mentra-ai-local/backend/tsconfig.json b/miniapps/mentra-ai-local/backend/tsconfig.json new file mode 100644 index 0000000000..a4831bccaf --- /dev/null +++ b/miniapps/mentra-ai-local/backend/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2022"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "noEmit": true, + "types": ["bun-types"] + }, + "include": ["src/**/*.ts"] +} diff --git a/miniapps/mentra-ai-local/bunfig.toml b/miniapps/mentra-ai-local/bunfig.toml new file mode 100644 index 0000000000..8d14f94203 --- /dev/null +++ b/miniapps/mentra-ai-local/bunfig.toml @@ -0,0 +1,2 @@ +[run] +env = ".env" diff --git a/miniapps/mentra-ai-local/miniapp/.gitignore b/miniapps/mentra-ai-local/miniapp/.gitignore new file mode 100644 index 0000000000..f57ea21947 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +build/ +*.zip +.env +.env.local +.DS_Store +.mentra/ diff --git a/miniapps/mentra-ai-local/miniapp/build.ts b/miniapps/mentra-ai-local/miniapp/build.ts new file mode 100644 index 0000000000..b318c6a009 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/build.ts @@ -0,0 +1,88 @@ +/** + * Production build script — two-output bundle. + * + * Emits two bundles under ./dist: + * dist/background/index.js — the JSContext entry (no DOM). The Mentra AI + * pipeline (transcription → agent → speak/ + * display) runs entirely here. + * dist/ui/index.html + ... — the WebView entry (full DOM, Tailwind v4 + * compiled via bun-plugin-tailwind). The chat + * interface lives here. + * + * Env vars whose name starts with `MENTRA_PUBLIC_` are inlined into BOTH + * bundles via `define`. For Mentra AI that is ONLY the backend URL + * (MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL). No AI keys are inlined — the agent + * tool-loop, visual classifier, and web search all run on the backend, which + * holds the Gemini + Jina secrets server-side (see lib/ai-config.ts + + * ../backend). Anything inlined here is extractable from the shipped bundle, + * so the backend URL is the only thing that ships. + */ + +import {copyFile, rm} from "fs/promises" + +const distDir = "./dist" + +await rm(distDir, {recursive: true, force: true}) + +// The phone JSContext has NO `process` global. Every `process.env.X` the client +// source reads MUST be replaced by `define` at build time, or the bare reference +// throws "process is not defined" on load and the host fails to spawn the app. +// +// So we (1) EXPLICITLY define each public var the client reads, with a `?? ""` +// fallback so it resolves even when the var is absent from the build env, and +// (2) keep a generic pass for any other MENTRA_PUBLIC_* vars that are present. +const PUBLIC_VARS = [ + "MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL", + "MENTRA_PUBLIC_GOOGLE_MAPS_API_KEY", + "MENTRA_PUBLIC_GOOGLE_WEATHER_API_KEY", +] as const + +const define: Record = {} +for (const k of PUBLIC_VARS) { + define[`process.env.${k}`] = JSON.stringify(process.env[k] ?? "") +} +for (const [k, v] of Object.entries(process.env)) { + if (k.startsWith("MENTRA_PUBLIC_") && typeof v === "string") { + define[`process.env.${k}`] = JSON.stringify(v) + } +} + +// JSC + Zipline/QuickJS evaluate the background bundle as a classic script. +// ESM `export` is a syntax error there, so we emit an IIFE. +// `@mentra/miniapp/background` MUST be bundled in (not external) — the +// JSContext has no module resolver. +const backgroundResult = await Bun.build({ + entrypoints: ["./src/background/index.ts"], + outdir: `${distDir}/background`, + target: "browser", + format: "iife", + minify: false, + define, +}) +if (!backgroundResult.success) { + console.error("Background build failed:") + for (const log of backgroundResult.logs) console.error(log) + process.exit(1) +} + +const tailwind = (await import("bun-plugin-tailwind")).default + +const uiResult = await Bun.build({ + entrypoints: ["./src/ui/index.html"], + outdir: `${distDir}/ui`, + target: "browser", + plugins: [tailwind], + minify: true, + define, +}) +if (!uiResult.success) { + console.error("UI build failed:") + for (const log of uiResult.logs) console.error(log) + process.exit(1) +} + +// Stage the manifest + icon alongside the bundles so `pack` produces a complete +// zip (background/ + ui/ + miniapp.json + icon.png), matching the host's expectations. +await copyFile("./miniapp.json", `${distDir}/miniapp.json`) +await copyFile("./icon.png", `${distDir}/icon.png`) +console.log("staged miniapp.json + icon.png into dist/") diff --git a/miniapps/mentra-ai-local/miniapp/bunfig.toml b/miniapps/mentra-ai-local/miniapp/bunfig.toml new file mode 100644 index 0000000000..424775f714 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/bunfig.toml @@ -0,0 +1,5 @@ +[run] +env = ".env" + +[serve.static] +plugins = ["bun-plugin-tailwind"] diff --git a/miniapps/mentra-ai/icon.png b/miniapps/mentra-ai-local/miniapp/icon.png similarity index 100% rename from miniapps/mentra-ai/icon.png rename to miniapps/mentra-ai-local/miniapp/icon.png diff --git a/miniapps/mentra-ai-local/miniapp/miniapp.json b/miniapps/mentra-ai-local/miniapp/miniapp.json new file mode 100644 index 0000000000..e0940ec87d --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/miniapp.json @@ -0,0 +1,24 @@ +{ + "$schema": "./node_modules/@mentra/miniapp-cli/schema/miniapp.schema.json", + "packageName": "com.mentra.ai.local", + "version": "1.0.0", + "name": "Mentra AI", + "description": "Your AI assistant, running locally on the glasses. Say \"Hey Mentra\" followed by your question. Answers questions, sees what you see, and searches the web.", + "icon": "icon.png", + "type": "standard", + "sdkVersion": "0.3.0", + "minHostVersion": "1.42.0", + "entry": { + "background": "background/index.js", + "ui": "ui/index.html" + }, + "permissions": [ + {"type": "MICROPHONE", "description": "Listens for the \"Hey Mentra\" wake word and your spoken questions"}, + {"type": "CAMERA", "description": "Captures what you're looking at to answer visual questions"}, + {"type": "LOCATION", "description": "Provides local context for questions about weather, places, and where you are"}, + {"type": "READ_NOTIFICATIONS", "description": "Lets the assistant reference your recent phone notifications when relevant"} + ], + "hardwareRequirements": [ + {"type": "MICROPHONE", "level": "REQUIRED", "description": "Captures your voice for wake word and questions"} + ] +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/MentraAIController.ts b/miniapps/mentra-ai-local/miniapp/src/background/MentraAIController.ts new file mode 100644 index 0000000000..6aa35fccbe --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/MentraAIController.ts @@ -0,0 +1,234 @@ +/** + * MentraAIController — the always-on Mentra AI logic for the local miniapp. + * + * Replaces the cloud app's AppServer + SessionManager + User. Because this runs + * on one phone for one user, there's no session map, no auth, no grace-period + * reconnect handling — a single controller owns every manager and lives for the + * whole session. Closing the chat webview does NOT stop the assistant. + * + * Wiring: + * - transcription.on → wake word → silence-finalized query → QueryProcessor + * - QueryProcessor emits chat events → session.ui.send("chat:event", …) + * - webview RPC (history / settings / theme / clear) → session.ui.handle(…) + * - phone notifications → NotificationManager (prompt context) + */ + +import type {MiniappSession} from "@mentra/miniapp/background" + +import type {Channels} from "../shared/channels" +import type {ChatEvent} from "../shared/types" + +import {BACKEND_ROUTES} from "./lib/ai-config" +import {AudioManager} from "./managers/AudioManager" +import {ChatHistoryManager} from "./managers/ChatHistoryManager" +import {DisplayManager} from "./managers/DisplayManager" +import {LocationManager} from "./managers/LocationManager" +import {NotificationManager} from "./managers/NotificationManager" +import {PhotoManager} from "./managers/PhotoManager" +import {QueryProcessor} from "./managers/QueryProcessor" +import {StorageManager} from "./managers/StorageManager" +import {TranscriptionManager} from "./managers/TranscriptionManager" + +export class MentraAIController { + private readonly ui: import("@mentra/miniapp/background").UIModule + + private readonly audio: AudioManager + private readonly display: DisplayManager + private readonly location: LocationManager + private readonly notifications: NotificationManager + private readonly photo: PhotoManager + private readonly storage: StorageManager + private readonly chatHistory: ChatHistoryManager + private readonly transcription: TranscriptionManager + private readonly query: QueryProcessor + + private unsubs: Array<() => void> = [] + private started = false + + constructor(private readonly session: MiniappSession) { + this.ui = session.ui as unknown as import("@mentra/miniapp/background").UIModule + + this.audio = new AudioManager(session) + this.display = new DisplayManager(session) + this.location = new LocationManager() + this.notifications = new NotificationManager() + this.photo = new PhotoManager(session) + this.storage = new StorageManager(session) + this.chatHistory = new ChatHistoryManager() + + this.query = new QueryProcessor({ + session, + audio: this.audio, + display: this.display, + location: this.location, + notifications: this.notifications, + photo: this.photo, + chatHistory: this.chatHistory, + getModel: () => this.storage.get().model, + emit: (event) => this.emit(event), + }) + + this.transcription = new TranscriptionManager(session, this.photo, { + onQueryReady: async (q, speakerId, prePhoto) => { + await this.query.processQuery(q, speakerId, prePhoto) + }, + onWakeWord: () => { + this.emit({type: "wake_word"}) + this.audio.playStartSound() + // Predictive wake: warm the giga-agent container while STT runs, so a + // delegation isn't paying the ~25-30s cold start. The backend no-ops + // when delegation isn't configured. Fire-and-forget. + this.session.auth.fetch(BACKEND_ROUTES.agentWake(), {method: "POST"}).catch(() => {}) + }, + onListeningUpdate: (full) => this.display.showStatus(`Listening...\n\n${full}`, 5000), + // Feed the debug overlay's live transcription tab (every event, raw). + onTranscript: (text, isFinal) => this.ui.send("debug:transcript", {text, isFinal}), + }) + } + + async start(): Promise { + if (this.started) return + this.started = true + + // Log which glasses we're connected to (e.g. "Even Realities G1", + // "Mentra Live"). modelName comes from session.capabilities, populated by + // the host on CONNECT_ACK — null if no glasses are connected yet. + const caps = this.session.capabilities + console.log( + `🕶️ Connected glasses: ${(caps?.modelName as string | undefined) ?? "none"}`, + { + modelName: caps?.modelName ?? null, + hasDisplay: Boolean(caps?.hasDisplay), + hasCamera: Boolean(caps?.hasCamera), + hasSpeaker: Boolean(caps?.hasSpeaker), + }, + ) + + // Load persisted settings before anything reads them. + const settings = await this.storage.load() + this.chatHistory.setChatHistoryEnabled(settings.chatHistoryEnabled) + + this.transcription.setup() + this.wireNotifications() + this.wireRpcHandlers() + this.wireUILifecycle() + + this.display.showWelcome() + + this.session.onBeforeDisconnect(() => this.dispose()) + } + + // ── notifications → prompt context ────────────────────────────── + private wireNotifications(): void { + if (!this.session.phone.notifications.hasPermission) return + this.unsubs.push( + this.session.phone.notifications.on((data) => this.notifications.addNotification(data)), + ) + } + + // ── webview RPC ───────────────────────────────────────────────── + private wireRpcHandlers(): void { + this.ui.handle("chat:get-history", () => this.chatHistory.getMessages()) + + this.ui.handle("chat:clear", () => { + this.chatHistory.clear() + }) + + // Dev-only: ask by text. Same pipeline as a spoken query — the user message + // and AI response come back over chat:event, so the webview updates itself. + this.ui.handle("chat:ask", async ({query}) => { + const trimmed = query.trim() + if (!trimmed) return + await this.query.processQuery(trimmed) + }) + + this.ui.handle("settings:get", () => this.storage.get()) + + this.ui.handle("settings:set", async (patch) => { + const merged = await this.storage.set(patch) + if (patch.chatHistoryEnabled !== undefined) { + this.chatHistory.setChatHistoryEnabled(merged.chatHistoryEnabled) + } + this.ui.send("settings:update", merged) + return merged + }) + + this.ui.handle("settings:set-theme", async (theme) => { + const merged = await this.storage.set({theme}) + this.ui.send("settings:update", merged) + }) + + // Open a URL in the phone's system browser (agent OAuth connect links etc.). + // session.system.openUrl bridges to the host; it blocks dangerous schemes. + this.ui.handle("system:open-url", ({url}) => { + this.session.system.openUrl(url) + }) + + // Debug: speak a phrase through the glasses and report the device outcome. + this.ui.handle("debug:speak", async ({text}) => { + const caps = this.session.capabilities + const capabilities = { + modelName: caps?.modelName as string | undefined, + hasSpeaker: Boolean(caps?.hasSpeaker), + hasDisplay: Boolean(caps?.hasDisplay), + hasCamera: Boolean(caps?.hasCamera), + } + if (!capabilities.hasSpeaker) { + return {accepted: false, completed: null, capabilities, error: "Glasses report no speaker"} + } + try { + const result = await this.session.speaker.speak(text, {stopOtherAudio: true}) + return {accepted: true, completed: result?.completed ?? null, capabilities} + } catch (error) { + return { + accepted: false, + completed: null, + capabilities, + error: error instanceof Error ? error.message : String(error), + } + } + }) + + // Debug: toggle the bottom-right spinner animation on the glasses HUD. + this.ui.handle("debug:spinner", ({action}) => { + if (!this.session.capabilities?.hasDisplay) { + return {running: false, error: "Glasses report no display"} + } + if (action === "start") { + return {running: this.display.startSpinner()} + } + this.display.stopSpinner() + return {running: false} + }) + } + + // ── webview open → hydrate with history snapshot ──────────────── + private wireUILifecycle(): void { + this.unsubs.push( + this.ui.onOpen(() => { + this.emit({type: "history", messages: this.chatHistory.getMessages()}) + }), + ) + } + + /** Forward a chat event to the webview (no-op if no webview is bound). */ + private emit(event: ChatEvent): void { + this.ui.send("chat:event", event) + } + + private dispose(): void { + this.transcription.destroy() + this.photo.destroy() + this.location.destroy() + this.notifications.destroy() + this.chatHistory.destroy() + for (const unsub of this.unsubs) { + try { + unsub() + } catch { + /* ignore */ + } + } + this.unsubs = [] + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/agent/MentraAgent.ts b/miniapps/mentra-ai-local/miniapp/src/background/agent/MentraAgent.ts new file mode 100644 index 0000000000..6441abe359 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/agent/MentraAgent.ts @@ -0,0 +1,160 @@ +/** + * Mentra Agent (client) — thin backend client. + * + * The agent tool-loop (Gemini + Jina) now runs server-side in the backend's + * agent.service (Option A). This module just packages {query, photos, context} + * and POSTs it to /api/agent with a package-scoped Bearer token via + * session.auth.fetch, then returns the backend's {response, toolCalls}. + * + * The public surface (generateResponse / GenerateOptions / GenerateResult) is + * unchanged except that a `session` is now required, so QueryProcessor barely + * changes. + */ + +import type {MiniappSession} from "@mentra/miniapp/background" + +import {BACKEND_ROUTES} from "../lib/ai-config" +import type {AgentAction, AvailableApp, DeviceAction} from "../../shared/types" +import type {LocationContext} from "../managers/LocationManager" +import type {ConversationTurn} from "../managers/ChatHistoryManager" + +/** Agent generation options. Photos are data-URL strings, current-first. */ +export interface GenerateOptions { + session: MiniappSession + query: string + photos?: string[] + /** OpenRouter model slug the user picked in settings. */ + model?: string + context: { + hasDisplay: boolean + hasSpeakers: boolean + hasCamera: boolean + hasPhotos: boolean + glassesType: "display" | "camera" + location: LocationContext | null + localTime: string + timezone?: string + notifications: string + conversationHistory: ConversationTurn[] + /** Other miniapps the agent can control (Mentra AI is a system app). */ + apps?: AvailableApp[] + } + onToolCall?: (toolName: string) => void +} + +export interface GenerateResult { + response: string + toolCalls: number + /** Set when a delegation ran long: `response` is an ack; poll this task id. */ + pendingTaskId?: string + /** Action buttons (e.g. an OAuth connect link) from a fast delegation. */ + actions?: AgentAction[] + /** App-control actions to execute on-device after the response. */ + deviceActions?: DeviceAction[] +} + +interface BackendAgentResponse { + response?: string + toolCalls?: number + pendingTaskId?: string + actions?: AgentAction[] + deviceActions?: DeviceAction[] + error?: string +} + +/** Result of polling a pending delegation task. */ +export interface DelegationPollResult { + status: "working" | "done" | "failed" + reply?: string + actions?: AgentAction[] + error?: string +} + +/** Generate a response by calling the backend agent service. */ +export async function generateResponse(options: GenerateOptions): Promise { + const {session, query, photos, model, context} = options + + console.log( + `🤖 Requesting response for: "${query.slice(0, 50)}${query.length > 50 ? "..." : ""}"`, + ) + console.log( + ` Photos: ${photos?.length || 0}, hasPhotos: ${context.hasPhotos}, History: ${context.conversationHistory.length}`, + ) + + const url = BACKEND_ROUTES.agent() + console.log(`🌐 POST ${url}`) + + let res: Response + try { + res = await session.auth.fetch(url, { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({query, photos, model, context}), + }) + } catch (err) { + // session.auth.fetch can throw before any response (token mint failed, + // host offline, DNS/TLS to the backend URL). Surface it explicitly. + const message = err instanceof Error ? err.message : String(err) + console.error(`❌ agent fetch threw before response: ${message}`) + throw new Error(`agent fetch failed: ${message}`) + } + + if (!res.ok) { + const raw = await res.text().catch(() => "") + let parsed: BackendAgentResponse = {} + try { + parsed = JSON.parse(raw) as BackendAgentResponse + } catch { + /* non-JSON body */ + } + // Log status only (the body can contain token text the host redacts). + console.error(`❌ agent backend HTTP ${res.status} (auth=${res.status === 401 ? "rejected" : "ok"})`) + throw new Error(`agent backend ${res.status}${parsed.error ? `: ${parsed.error}` : ""}`) + } + + const body = (await res.json()) as BackendAgentResponse + if (body.error) throw new Error(body.error) + + const toolCalls = body.toolCalls ?? 0 + // The server runs the tool-loop; we can't observe individual tool calls, so + // surface a single "search" hint to the UI when any tool ran. + if (toolCalls > 0) options.onToolCall?.("search") + + console.log(`✅ Response received (${(body.response ?? "").length} chars, ${toolCalls} tool calls)`) + return { + response: body.response ?? "", + toolCalls, + pendingTaskId: body.pendingTaskId, + actions: body.actions, + deviceActions: body.deviceActions, + } +} + +/** + * Poll a pending giga-agent delegation until it finishes (the backend proxies + * the control plane). Resolves with the final result, or a "failed" status on + * timeout. The grace window already elapsed server-side, so we poll modestly. + */ +export async function pollDelegation( + session: MiniappSession, + taskId: string, +): Promise { + const POLL_INTERVAL_MS = 4000 + const MAX_LIFETIME_MS = 6 * 60 * 1000 + const deadline = Date.now() + MAX_LIFETIME_MS + const url = BACKEND_ROUTES.agentTask(taskId) + + while (Date.now() < deadline) { + await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS)) + try { + const res = await session.auth.fetch(url, {method: "GET"}) + if (res.ok) { + const data = (await res.json()) as DelegationPollResult + if (data.status === "done" || data.status === "failed") return data + } + } catch (err) { + console.warn(`🤝 delegation poll error:`, err instanceof Error ? err.message : err) + } + } + return {status: "failed", error: "delegation timed out"} +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/agent/visual-classifier.ts b/miniapps/mentra-ai-local/miniapp/src/background/agent/visual-classifier.ts new file mode 100644 index 0000000000..aa6deefd71 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/agent/visual-classifier.ts @@ -0,0 +1,35 @@ +/** + * Visual Query Classifier (client) — thin backend client. + * + * Asks the backend (/api/classify) whether a query needs the camera photo to + * answer. The Gemini call runs server-side; this is just an authenticated + * fetch. Returns false on any error (defaults to the fast / non-visual path). + * + * NOTE: currently unused by the pipeline — the app pre-captures a photo at + * wake-word time and lets the agent prompt do visual/non-visual classification. + * Kept as a ready, backend-routed helper if a pre-classification step is wired. + */ + +import type {MiniappSession} from "@mentra/miniapp/background" + +import {BACKEND_ROUTES} from "../lib/ai-config" + +/** Classify whether a query requires visual context (photo from camera). */ +export async function isVisualQuery(session: MiniappSession, query: string): Promise { + try { + const res = await session.auth.fetch(BACKEND_ROUTES.classify(), { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({query}), + }) + if (!res.ok) { + console.warn(`Visual classifier HTTP ${res.status}`) + return false + } + const body = (await res.json()) as {visual?: boolean} + return body.visual === true + } catch (error) { + console.warn("Visual classifier failed, defaulting to non-visual:", error) + return false + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/constants/config.ts b/miniapps/mentra-ai-local/miniapp/src/background/constants/config.ts new file mode 100644 index 0000000000..a9dd7ee1d5 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/constants/config.ts @@ -0,0 +1,50 @@ +/** + * Mentra AI Configuration Constants + */ + +/** Response mode determines the length and depth of responses. */ +export enum ResponseMode { + QUICK = "quick", + STANDARD = "standard", + DETAILED = "detailed", +} + +/** Word limits for each response mode. */ +export const WORD_LIMITS = { + // Speaker glasses (audio output) + speaker: { + [ResponseMode.QUICK]: 17, + [ResponseMode.STANDARD]: 50, + [ResponseMode.DETAILED]: 100, + }, + // HUD glasses (visual display) — always short + hud: { + [ResponseMode.QUICK]: 15, + [ResponseMode.STANDARD]: 15, + [ResponseMode.DETAILED]: 15, + }, +} + +/** Conversation history settings. */ +export const CONVERSATION_SETTINGS = { + /** Maximum number of turns to include in context. */ + maxTurns: 30, + /** Maximum age of turns to include (1 hour in ms). */ + maxAgeMs: 60 * 60 * 1000, +} + +/** Location caching settings. */ +export const LOCATION_CACHE_SETTINGS = { + /** Minimum movement to trigger geocoding refresh (in degrees, ~1km). */ + minMovementDegrees: 0.01, + /** Geocode cache duration (10 minutes in ms). */ + geocodeCacheDurationMs: 10 * 60 * 1000, + /** Weather cache duration (30 minutes in ms). */ + weatherCacheDurationMs: 30 * 60 * 1000, +} + +/** Photo settings. */ +export const PHOTO_SETTINGS = { + /** Number of previous photos to keep for context. */ + previousPhotosToKeep: 2, +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/index.ts b/miniapps/mentra-ai-local/miniapp/src/background/index.ts new file mode 100644 index 0000000000..d474c8348d --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/index.ts @@ -0,0 +1,15 @@ +/** + * Background JSContext entry point — Mentra AI (local). + * + * Loaded once by the MentraOS host in a per-miniapp JSContext. The controller + * constructed here owns the whole assistant (transcription → agent → speak/ + * display) and lives for the entire session, surviving webview open/close. + */ + +import {registerMiniapp} from "@mentra/miniapp/background" + +import {MentraAIController} from "./MentraAIController" + +registerMiniapp((session) => { + void new MentraAIController(session).start() +}) diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/ai-config.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/ai-config.ts new file mode 100644 index 0000000000..5ae2d861e2 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/ai-config.ts @@ -0,0 +1,28 @@ +/** + * AI configuration — the single swap-point for where AI calls go. + * + * The miniapp no longer holds any AI keys. Every AI call (agent tool-loop, + * visual classifier, web search) goes to the backend, which holds the Gemini + + * Jina secrets server-side and verifies a package-scoped Bearer token. + * + * The only thing inlined into the bundle is the backend URL below. + */ + +const DEFAULT_BACKEND_URL = "https://general.dev.tpa.ngrok.app" + +/** Resolved backend base URL, trailing slashes stripped. */ +export function backendUrl(): string { + const fromEnv = process.env.MENTRA_PUBLIC_MENTRA_AI_BACKEND_URL?.trim() + return (fromEnv || DEFAULT_BACKEND_URL).replace(/\/+$/, "") +} + +/** Backend route URLs. */ +export const BACKEND_ROUTES = { + agent: () => `${backendUrl()}/api/agent`, + /** Poll a pending giga-agent delegation by task id. */ + agentTask: (taskId: string) => `${backendUrl()}/api/agent/task/${encodeURIComponent(taskId)}`, + /** Predictive wake — warm the user's giga-agent container at wake-word time. */ + agentWake: () => `${backendUrl()}/api/agent/wake`, + classify: () => `${backendUrl()}/api/classify`, + search: () => `${backendUrl()}/api/search`, +} as const diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/location-keywords.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/location-keywords.ts new file mode 100644 index 0000000000..31a5ce2a06 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/location-keywords.ts @@ -0,0 +1,137 @@ +/** + * Location Query Detection + * + * Fast classifier to detect if a user query is location-related. + * Used for lazy geocoding - only fetch location data when needed. + */ + +// Keywords that indicate a location-related question +const LOCATION_KEYWORDS = [ + // Direct location questions + 'where am i', + 'my location', + 'location', + 'my address', + 'current location', + 'my current address', + + // City/area questions + 'what city', + 'which city', + 'what town', + 'what state', + 'what country', + 'what neighborhood', + 'what area', + 'what street', + 'which street', + + // Proximity questions + 'nearby', + 'near me', + 'around here', + 'close to me', + 'closest', + 'nearest', + 'in this area', + + // Navigation/directions + 'directions to', + 'how to get to', + 'navigate to', + 'route to', + 'how far', + 'distance to', + 'walking distance', + 'driving distance', + + // Local recommendations + 'restaurants nearby', + 'coffee near', + 'food near', + 'stores near', + 'shops near', + 'places near', + 'things to do near', + 'what\'s around', +]; + +// Weather keywords (also need location) +const WEATHER_KEYWORDS = [ + 'weather', + 'temperature', + 'forecast', + 'rain', + 'sunny', + 'cloudy', + 'snow', + 'humidity', + 'wind speed', +]; + +/** + * Check if a query is location-related + * @param query - The user's query text + * @returns true if the query needs location data + */ +export function isLocationQuery(query: string): boolean { + const q = query.toLowerCase(); + + // Check location keywords + if (LOCATION_KEYWORDS.some(kw => q.includes(kw))) { + return true; + } + + // Check weather keywords + if (WEATHER_KEYWORDS.some(kw => q.includes(kw))) { + return true; + } + + return false; +} + +/** + * Check if query specifically needs geocoding (street/city/neighborhood) + * vs just weather which only needs lat/lng + */ +export function needsGeocoding(query: string): boolean { + const q = query.toLowerCase(); + + // Weather only needs lat/lng, not full geocoding + if (WEATHER_KEYWORDS.some(kw => q.includes(kw))) { + // Unless they're asking "weather in [city]" which doesn't need our location + if (!q.includes(' in ') && !q.includes(' at ')) { + return false; // Just weather at current location - lat/lng is enough + } + } + + // All other location queries need geocoding + return LOCATION_KEYWORDS.some(kw => q.includes(kw)); +} + +/** + * Check if query is weather-related + * @param query - The user's query text + * @returns true if the query is about weather + */ +export function isWeatherQuery(query: string): boolean { + const q = query.toLowerCase(); + return WEATHER_KEYWORDS.some(kw => q.includes(kw)); +} + +/** + * Get the type of location query for logging/debugging + */ +export function getLocationQueryType(query: string): 'none' | 'weather_only' | 'full_location' { + const q = query.toLowerCase(); + + if (LOCATION_KEYWORDS.some(kw => q.includes(kw))) { + return 'full_location'; + } + + if (WEATHER_KEYWORDS.some(kw => q.includes(kw))) { + return 'weather_only'; + } + + return 'none'; +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/sounds.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/sounds.ts new file mode 100644 index 0000000000..edb8f21cf5 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/sounds.ts @@ -0,0 +1,17 @@ +/** + * Bundled UI sounds — base64 data URLs played via session.speaker.play(). + * + * PORT NOTE: the cloud app fetched these as MP3s from its own server + * (PUBLIC_URL/assets/audio/*.mp3). The local miniapp has no server, so the two + * files are inlined here as data URLs — fully self-contained, no network. + * + * START_SOUND_URL — short activation cue, played when the wake word fires. + * PROCESSING_SOUND_URL — looped while a query is being processed. + * + * Source files: miniapps/Mentra-AI/src/public/assets/audio/{start,popping}.mp3 + * Regenerate by base64-encoding those files into the strings below. + */ + +export const START_SOUND_URL = "data:audio/mpeg;base64,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T7+XuETSNxe0Sv0/d0rd3d4cXc+CAIBZ0H6oPvfhgUgL6YA/iAAaloJHAMzwIgfHuIHOHGU/1D4H+0/0Z3pO53oSpznPJ+RTgP/7QGTygDHQL1b7TypoE6IK/xwDZQZsv1/sJakgLAKrkBMIhAhgZwijAANEAAB28YANtSaWGs/E+h5TK671StrJCW62t811i93W5oMOLYFWVmHe7/7dhpl790dfgrenXavk3zM+/fzvtZHlsm1L3idqcnpp58mOU6VL66f/7gAgA4QzGb4AACqQIWowSBqs0rX/EQCxw8azliupbjxL//IvcqqXIANncwb+CAAVUFeNfSHpFBi4//tAZPWAEZMQ1fspejgQAJrdBCYDB0C/Vay8SahOgmt8AJgM7e6uiZnz+IYU3UpZa4PkJIcrVKCREkecbQxwdWMh3/9BYVGPDIWqJE3dBwAOAAaqQUmyeBo87Wz////1AkLDQdRBqiVB8ALkipAwEwt0cSIaardqcKx74z/ACMoyPNu0wBVyGAAIbIBv/zf////y1FUJcAeIhQfAAAAVCqYOA8fIeQyulUnmup1XmQIIbjXcgAr/+4Bk9oAE9EnS609FyC6F+r0UAuFKwMdd5+GSIJEIavwCnHRZAAAAoAAAAmcLZ/5gIUSfgAbiVgkgDTdtX8EUB4AilSAFAcF/9apMQU1FMy4xMDCqqqqqqqqqqqqqEslAAGAAAAH6sp4VB20v/xR6SaM8S6gAgB/i9ACnAH4gAH4UL0MK//ytTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7QGT3AVHBEVZ543uYGiCbLwAiAwQkR1vgJeHoPwKs/ACcTFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZP4FcPwQ1ngJaEgOQKsvACkTAnRDV+KBaqgXAmsQAJiGVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xBk8oWwthHTaQB6uAdCCfUEB0gBIEFXoIBJIAqAZ8AAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EGTdj/AAAH+AAAAIAAAP8AAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" + +export const PROCESSING_SOUND_URL = "data:audio/mpeg;base64,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" diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/spinner.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/spinner.ts new file mode 100644 index 0000000000..f52336c19a --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/spinner.ts @@ -0,0 +1,54 @@ +/** + * Spinner animation — 30 frames of a 30×30 rotating spinner, pre-encoded as + * base64 8-bit grayscale BMP strings ready for `session.display.showBitmapView`. + * + * Generated offline (a 12-spoke radial spinner with a fading trail, one spoke + * of rotation per frame) and baked in here so the background JSContext needs no + * runtime rendering — it just cycles `SPINNER_FRAMES[i]` onto the HUD. Same BMP + * shape the navigation miniapp produces via encodeBmpBase64 (8bpp, 256-entry + * grayscale palette, bottom-up, 4-byte-aligned rows), which both iOS and + * Android decode. + * + * Display: 30×30 fits a single positioned tile (≤200w / ≤100h) — pin it to the + * bottom-right of the 576×288 canvas with {x: 546, y: 258, width: 30, height: 30}. + */ + +/** Side length of each spinner frame, in pixels. */ +export const SPINNER_SIZE = 30 + +/** Number of frames in one full rotation. */ +export const SPINNER_FRAME_COUNT = 30 + +/** Base64 8-bit grayscale BMP frames, in rotation order. */ +export const SPINNER_FRAMES: readonly string[] = [ + "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", +] diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/text-wrapper.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/text-wrapper.ts new file mode 100644 index 0000000000..f841073e35 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/text-wrapper.ts @@ -0,0 +1,80 @@ +/** + * Text Wrapping Utilities + * + * Utilities for formatting text for HUD display on smart glasses. + */ + +/** + * Converts a line width setting to a numeric character count + * @param width The width setting as a string or number + * @param isHanzi Whether the text uses Hanzi characters (Chinese, Japanese) + * @returns The number of characters per line + */ +export function convertLineWidth(width: string | number, isHanzi: boolean): number { + if (typeof width === 'number') return width; + + if (!isHanzi) { + switch (width.toLowerCase()) { + case 'very narrow': return 21; + case 'narrow': return 30; + case 'medium': return 38; + case 'wide': return 44; + case 'very wide': return 52; + default: return 45; + } + } else { + switch (width.toLowerCase()) { + case 'very narrow': return 7; + case 'narrow': return 10; + case 'medium': return 14; + case 'wide': return 18; + case 'very wide': return 21; + default: return 14; + } + } +} + +/** + * Wrap text to fit within a maximum line length + * @param text The text to wrap + * @param maxLength Maximum characters per line (default: 25) + * @returns Text with newlines inserted for wrapping + */ +export function wrapText(text: any, maxLength = 25): string { + // Ensure text is a string + if (typeof text !== 'string' || text.length === 0) { + return ""; + } + + return text + .split('\n') + .map(line => { + const words = line.split(' '); + let currentLine = ''; + const wrappedLines: string[] = []; + + words.forEach(word => { + if ((currentLine.length + (currentLine ? 1 : 0) + word.length) <= maxLength) { + currentLine += (currentLine ? ' ' : '') + word; + } else { + if (currentLine) { + wrappedLines.push(currentLine); + } + currentLine = word; + + // If a single word is too long, hard-cut it. + while (currentLine.length > maxLength) { + wrappedLines.push(currentLine.slice(0, maxLength)); + currentLine = currentLine.slice(maxLength); + } + } + }); + + if (currentLine) { + wrappedLines.push(currentLine.trim()); + } + + return wrappedLines.join('\n'); + }) + .join('\n'); +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/tts-formatter.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/tts-formatter.ts new file mode 100644 index 0000000000..70e982dd34 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/tts-formatter.ts @@ -0,0 +1,162 @@ +/** + * TTS (Text-to-Speech) Formatter + * + * Formats text for natural speech output on speaker glasses. + * Converts numbers, symbols, and abbreviations to spoken form. + */ + +/** + * Number words for conversion + */ +const ONES = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', + 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']; +const TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']; + +/** + * Convert a number to words + * @param num The number to convert + * @returns The number as words + */ +function numberToWords(num: number): string { + if (!Number.isFinite(num)) return String(num); + + const absNum = Math.abs(num); + const isNegative = num < 0; + + // Handle decimals + if (!Number.isInteger(absNum)) { + const [intPart, decPart] = absNum.toString().split('.'); + const intWords = numberToWords(parseInt(intPart, 10)); + const decWords = decPart.split('').map(d => ONES[parseInt(d, 10)]).join(' '); + return (isNegative ? 'negative ' : '') + intWords + ' point ' + decWords; + } + + if (absNum < 20) { + return (isNegative ? 'negative ' : '') + ONES[absNum]; + } + + if (absNum < 100) { + const ten = Math.floor(absNum / 10); + const one = absNum % 10; + return (isNegative ? 'negative ' : '') + TENS[ten] + (one ? '-' + ONES[one] : ''); + } + + if (absNum < 1000) { + const hundred = Math.floor(absNum / 100); + const remainder = absNum % 100; + return (isNegative ? 'negative ' : '') + ONES[hundred] + ' hundred' + (remainder ? ' ' + numberToWords(remainder) : ''); + } + + if (absNum < 1000000) { + const thousand = Math.floor(absNum / 1000); + const remainder = absNum % 1000; + return (isNegative ? 'negative ' : '') + numberToWords(thousand) + ' thousand' + (remainder ? ' ' + numberToWords(remainder) : ''); + } + + if (absNum < 1000000000) { + const million = Math.floor(absNum / 1000000); + const remainder = absNum % 1000000; + return (isNegative ? 'negative ' : '') + numberToWords(million) + ' million' + (remainder ? ' ' + numberToWords(remainder) : ''); + } + + // For very large numbers, just return as-is + return (isNegative ? 'negative ' : '') + absNum.toString(); +} + +/** + * Format text for TTS output + * Converts numbers, symbols, and abbreviations to spoken form. + * + * @param text The text to format + * @returns Text formatted for natural speech + */ +export function formatForTTS(text: string): string { + let result = text; + + // Temperature: "72°F" -> "seventy-two degrees fahrenheit" + result = result.replace(/(\d+(?:\.\d+)?)\s*°\s*F\b/gi, (_, num) => { + return numberToWords(parseFloat(num)) + ' degrees fahrenheit'; + }); + + // Temperature: "22°C" -> "twenty-two degrees celsius" + result = result.replace(/(\d+(?:\.\d+)?)\s*°\s*C\b/gi, (_, num) => { + return numberToWords(parseFloat(num)) + ' degrees celsius'; + }); + + // Generic degrees: "45°" -> "forty-five degrees" + result = result.replace(/(\d+(?:\.\d+)?)\s*°/g, (_, num) => { + return numberToWords(parseFloat(num)) + ' degrees'; + }); + + // Currency: "$999" -> "nine hundred ninety-nine dollars" + result = result.replace(/\$(\d+(?:,\d{3})*(?:\.\d{2})?)/g, (_, num) => { + const cleanNum = num.replace(/,/g, ''); + const parts = cleanNum.split('.'); + let words = numberToWords(parseInt(parts[0], 10)) + ' dollars'; + if (parts[1] && parseInt(parts[1], 10) > 0) { + words += ' and ' + numberToWords(parseInt(parts[1], 10)) + ' cents'; + } + return words; + }); + + // Percentage: "45%" -> "forty-five percent" + result = result.replace(/(\d+(?:\.\d+)?)\s*%/g, (_, num) => { + return numberToWords(parseFloat(num)) + ' percent'; + }); + + // Times: "3:30" -> "three thirty" or "3:00" -> "three o'clock" + result = result.replace(/(\d{1,2}):(\d{2})(?:\s*(AM|PM|am|pm))?/g, (_, hours, minutes, ampm) => { + const h = parseInt(hours, 10); + const m = parseInt(minutes, 10); + let timeWords = numberToWords(h); + + if (m === 0) { + timeWords += " o'clock"; + } else if (m < 10) { + timeWords += ' oh ' + numberToWords(m); + } else { + timeWords += ' ' + numberToWords(m); + } + + if (ampm) { + timeWords += ' ' + ampm.toUpperCase().split('').join(' '); + } + + return timeWords; + }); + + // Standalone numbers: "42" -> "forty-two" (only if not part of a word) + result = result.replace(/\b(\d+(?:\.\d+)?)\b/g, (_, num) => { + return numberToWords(parseFloat(num)); + }); + + // Common abbreviations + result = result.replace(/\be\.g\./gi, 'for example'); + result = result.replace(/\bi\.e\./gi, 'that is'); + result = result.replace(/\betc\./gi, 'et cetera'); + result = result.replace(/\bvs\./gi, 'versus'); + result = result.replace(/\bDr\./gi, 'Doctor'); + result = result.replace(/\bMr\./gi, 'Mister'); + result = result.replace(/\bMrs\./gi, 'Missus'); + result = result.replace(/\bMs\./gi, 'Miss'); + result = result.replace(/\bSt\./gi, 'Street'); + result = result.replace(/\bAve\./gi, 'Avenue'); + result = result.replace(/\bBlvd\./gi, 'Boulevard'); + + // Units + result = result.replace(/\bkm\b/gi, 'kilometers'); + result = result.replace(/\bmi\b/gi, 'miles'); + result = result.replace(/\bmph\b/gi, 'miles per hour'); + result = result.replace(/\bkph\b/gi, 'kilometers per hour'); + result = result.replace(/\blbs?\b/gi, 'pounds'); + result = result.replace(/\bkg\b/gi, 'kilograms'); + result = result.replace(/\bft\b/gi, 'feet'); + // "in" removed — too easily matches the preposition "in" + result = result.replace(/\bcm\b/gi, 'centimeters'); + result = result.replace(/\bmm\b/gi, 'millimeters'); + + // Clean up extra whitespace + result = result.replace(/\s+/g, ' ').trim(); + + return result; +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/lib/wake-word.ts b/miniapps/mentra-ai-local/miniapp/src/background/lib/wake-word.ts new file mode 100644 index 0000000000..33841067ef --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/lib/wake-word.ts @@ -0,0 +1,219 @@ +/** + * Wake Word Detection for Mentra AI + * + * Detects "Hey Mentra" wake word activation in transcription text. + */ + +/** + * Wake words that trigger Mentra AI activation. + * Each entry is matched flexibly — optional whitespace between letters within + * a word, and required whitespace between words — so Deepgram variants like + * "hey mentr a" or "hey mentra" still match. + */ +export const WAKE_WORDS = [ + "hey mentra", + "hey mantra", + "hey mintra", + "hey muntra", + + "hi mentra", + "hi mantra", + "hi mintra", + "hi muntra", + + "ok mentra", + "ok mantra", + "ok mintra", + "ok muntra", + + "okay mentra", + "okay mantra", + "okay mintra", + "okay muntra", + + "hello mentra", + "hello mantra", + "hello mintra", + "hello muntra", + + +]; + +/** + * Pre-built regex patterns for each wake word. + * Allows optional whitespace between consecutive letters within the same word + * so that Deepgram transcription variants like "hey mentr a" still match. + */ +const WAKE_PATTERNS: RegExp[] = WAKE_WORDS.map((ww) => { + let pattern = ''; + for (let i = 0; i < ww.length; i++) { + const ch = ww[i]; + if (ch === ' ') { + // Word boundary — allow optional punctuation (comma, period) + whitespace + pattern += '[,.!?;:\\s]*\\s+'; + } else { + pattern += ch; + // Between consecutive letters in the same word, allow optional whitespace + const next = ww[i + 1]; + if (next && next !== ' ') { + pattern += '\\s*'; + } + } + } + return new RegExp(pattern, 'i'); +}); + +/** + * Vision keywords that indicate a query requires camera/image analysis + */ +export const VISION_KEYWORDS = [ + // General identification + 'what am i looking at', 'what is this', 'what is that', + 'identify this', 'identify that', 'what do you see', 'describe what', + 'tell me about this', 'tell me about that', 'what\'s in front of me', + 'can you see', 'look at this', 'look at that', 'check this out', + 'what\'s this', 'what\'s that', 'whats this', 'whats that', + 'what kind of', 'what type of', 'what brand', 'what model', + 'who is this', 'who is that', 'who\'s this', 'who\'s that', + + // Reading / OCR + 'read this', 'read that', 'read it', 'what does this say', + 'what does that say', 'what does it say', 'what is written', + 'can you read', 'read the text', 'read the sign', 'read the label', + 'what\'s written', 'whats written', 'translate this', 'translate that', + + // Counting / Colors / Quantities + 'what color', 'what colour', 'how many', 'how much', + 'count the', 'count how many', 'how big', 'how small', + 'how tall', 'how long', 'how wide', 'what size', + + // Description + 'describe this', 'describe that', 'describe what you see', + 'tell me what you see', 'explain what you see', + 'what do you notice', 'what can you tell me about', + + // Problem solving (implies looking at something) + 'solve this', 'fix this', 'what\'s wrong', 'whats wrong', + 'what is wrong', 'how do i fix', 'how do i solve', 'how can i fix', + 'help me fix', 'help me solve', 'help me with this', + 'what\'s the problem', 'whats the problem', 'what is the problem', + 'diagnose this', 'troubleshoot this', 'debug this', + 'why isn\'t this working', 'why isnt this working', + 'why is this broken', 'why doesn\'t this work', 'why doesnt this work', + 'this isn\'t working', 'this isnt working', 'this doesn\'t work', + 'not working', 'broken', 'stuck', 'jammed', + 'what should i do', 'what do i do', 'how do i repair', + + // Instructions (implies looking at something) + 'how do i use this', 'how do i use that', 'how does this work', + 'how does that work', 'show me how', 'teach me how', + 'how to use this', 'how to use that', 'what does this do', + 'what does that do', 'how do i operate', 'how to operate', + 'how do i turn this on', 'how do i turn this off', + 'how do i set this up', 'how to set up', 'where do i', + 'which button', 'what button', 'where is the', 'how do i connect', + 'guide me', 'walk me through', 'step by step', + + // Location / Spatial + 'where is this', 'where is that', + 'what place is this', 'what building', 'what store', + 'what restaurant', 'what street' +]; + +/** + * Result of wake word detection + */ +export interface WakeWordResult { + detected: boolean; + query: string; // The query text after removing the wake word + wakeWordUsed?: string; // Which wake word was detected +} + +/** + * Detect if the text contains a wake word + * @param text - The transcription text to check + * @returns Detection result with the query text + */ +export function detectWakeWord(text: string): WakeWordResult { + const lowerText = text.toLowerCase().trim(); + + for (let i = 0; i < WAKE_PATTERNS.length; i++) { + const match = lowerText.match(WAKE_PATTERNS[i]); + if (match && match.index !== undefined) { + // Extract everything after the matched wake word, stripping leading punctuation + let query = text.slice(match.index + match[0].length).trim(); + // Remove leading punctuation (comma, period, etc.) + query = query.replace(/^[,.\s]+/, '').trim(); + return { + detected: true, + query, + wakeWordUsed: WAKE_WORDS[i], + }; + } + } + + return { + detected: false, + query: text.trim(), + }; +} + +/** + * Trailing fragments of wake words that Deepgram may split into a separate + * utterance. For "hey mentra", Deepgram might send "hey mentr" in one + * utterance and "a, what time is it?" in the next — leaving "a," as residue. + * + * We generate all suffixes of the last word ("mentra") that are 1-5 chars, + * so: "a", "ra", "tra", "ntra", "entra". These are stripped (with optional + * trailing punctuation) from the START of text when it immediately follows + * a wake word detection. + */ +const WAKE_WORD_TRAILING_FRAGMENTS: RegExp = (() => { + const suffixes: string[] = []; + for (const ww of WAKE_WORDS) { + // Get the last word (e.g. "mentra" from "hey mentra") + const lastWord = ww.split(' ').pop() || ''; + // Generate suffixes of length 1 to lastWord.length - 1 + // (full word is handled by detectWakeWord itself) + for (let len = 1; len < lastWord.length; len++) { + suffixes.push(lastWord.slice(-len)); + } + } + // Match any of these suffixes at the start of text, but ONLY if followed by + // punctuation (comma, period, etc.) — this prevents stripping real words like + // "a dog" or "are you there". The pattern requires at least one punctuation + // char after the fragment before any remaining text. + // e.g. matches "a," or "ra, " or "ntra." but NOT "a dog" or "are" + const escaped = suffixes.map(s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); + return new RegExp(`^(?:${escaped.join('|')})[,.!?;:]+\\s*`, 'i'); +})(); + +/** + * Remove wake word from text (if present) + * @param text - The transcription text + * @returns Text with wake word removed + */ +export function removeWakeWord(text: string): string { + const result = detectWakeWord(text); + return result.query; +} + +/** + * Strip leading wake word fragment residue from text. + * Call this on text that arrives AFTER a wake word was already detected in a + * previous utterance — Deepgram may have split "mentra" across utterance + * boundaries, leaving "a," or "tra," at the start of the next utterance. + */ +export function stripWakeWordResidue(text: string): string { + return text.replace(WAKE_WORD_TRAILING_FRAGMENTS, '').trim(); +} + +/** + * Check if a query requires vision/camera analysis + * @param query - The user's query text + * @returns true if the query needs camera input + */ +export function isVisionQuery(query: string): boolean { + const q = query.toLowerCase(); + return VISION_KEYWORDS.some(kw => q.includes(kw)); +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/AudioManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/AudioManager.ts new file mode 100644 index 0000000000..fdc3060c04 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/AudioManager.ts @@ -0,0 +1,94 @@ +/** + * AudioManager — spoken output + UI cue sounds via the glasses speaker. + * + * Replaces the cloud app's bespoke TTS-over-HTTP plumbing (which derived a + * cloud /api/tts URL and played it on a track). The local SDK exposes + * `speaker.speak(text)` directly: the phone uses an offline TTS model when + * available, else falls back to cloud TTS — all handled host-side. + * + * Also owns the two UI cue sounds the cloud app played via playAudio of + * server-hosted MP3s. Here those MP3s are bundled as data URLs (see + * lib/sounds.ts) and played through speaker.play(): + * - the activation cue (start) on wake-word detection + * - the processing loop (popping) while a query is in flight + */ + +import type {MiniappSession} from "@mentra/miniapp/background" +import {PROCESSING_SOUND_URL, START_SOUND_URL} from "../lib/sounds" + +export class AudioManager { + private processingSoundLooping = false + + constructor(private readonly session: MiniappSession) {} + + private get hasSpeaker(): boolean { + return Boolean(this.session.capabilities?.hasSpeaker) + } + + /** Speak text aloud. Resolves when playback completes (or no-ops without a speaker). */ + async speak(text: string): Promise { + if (!this.hasSpeaker) return + if (!text.trim()) return + try { + await this.session.speaker.speak(text, {stopOtherAudio: true}) + } catch (error) { + console.warn("speaker.speak failed:", error) + } + } + + /** + * Play the short activation cue the instant the wake word fires, so the + * wearer hears that we're listening. Fire-and-forget. + */ + playStartSound(): void { + if (!this.hasSpeaker) { + console.log("🔇 start cue skipped — no speaker (display-only glasses)") + return + } + console.log("🔔 playing activation cue") + this.session.speaker.play({audioUrl: START_SOUND_URL}).catch((err) => { + console.debug("Start sound failed:", err) + }) + } + + /** + * Begin looping the processing sound until stopProcessingSound() is called. + * No-ops without a speaker. The loop replays the clip back-to-back since + * play() resolves when each playback completes (mirrors the cloud loop). + */ + startProcessingSound(): void { + if (!this.hasSpeaker) { + console.log("🔇 processing loop skipped — no speaker (display-only glasses)") + return + } + if (this.processingSoundLooping) return + console.log("🔁 starting processing loop") + this.processingSoundLooping = true + void this.loopProcessingSound() + } + + private async loopProcessingSound(): Promise { + while (this.processingSoundLooping) { + try { + await this.session.speaker.play({audioUrl: PROCESSING_SOUND_URL}) + } catch { + break + } + } + } + + /** Stop the processing-sound loop. */ + stopProcessingSound(): void { + this.processingSoundLooping = false + } + + /** Stop any audio this miniapp is currently playing. */ + stop(): void { + this.processingSoundLooping = false + try { + this.session.speaker.stop() + } catch { + /* ignore */ + } + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/ChatHistoryManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/ChatHistoryManager.ts new file mode 100644 index 0000000000..bac4f32248 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/ChatHistoryManager.ts @@ -0,0 +1,98 @@ +/** + * ChatHistoryManager — in-memory conversation history (single user). + * + * Holds recent turns for agent context and for hydrating the webview. The + * cloud app kept this in-memory too (MongoDB was disabled for MVP); here it's + * the only store. `chatHistoryEnabled` gates whether prior turns are fed back + * to the agent as context — the on-screen transcript is always kept. + */ + +import {CONVERSATION_SETTINGS} from "../constants/config" +import type {ChatMessage} from "../../shared/types" + +/** A conversation turn for context. */ +export interface ConversationTurn { + query: string + response: string + timestamp: Date + hadPhoto: boolean + photoDataUrl?: string +} + +export class ChatHistoryManager { + private recentTurns: ConversationTurn[] = [] + private historyEnabled = false + + /** Add a conversation turn. */ + addTurn(query: string, response: string, hadPhoto = false, photoDataUrl?: string): void { + this.recentTurns.push({ + query, + response, + timestamp: new Date(), + hadPhoto, + photoDataUrl, + }) + + if (this.recentTurns.length > CONVERSATION_SETTINGS.maxTurns) { + this.recentTurns = this.recentTurns.slice(-CONVERSATION_SETTINGS.maxTurns) + } + } + + /** + * Recent turns for agent context. Returns [] when history is disabled so the + * agent treats each query independently. Filters by age and caps at maxTurns. + */ + getRecentTurns(limit?: number): ConversationTurn[] { + if (!this.historyEnabled) return [] + + const now = Date.now() + const maxAge = CONVERSATION_SETTINGS.maxAgeMs + const maxTurns = limit ?? CONVERSATION_SETTINGS.maxTurns + + const recent = this.recentTurns.filter((turn) => now - turn.timestamp.getTime() < maxAge) + return recent.slice(-maxTurns) + } + + /** + * Full transcript as ChatMessages (user + assistant), for hydrating a + * freshly-opened webview. Independent of `historyEnabled` — the visible + * transcript always reflects what happened this session. + */ + getMessages(): ChatMessage[] { + const messages: ChatMessage[] = [] + for (let i = 0; i < this.recentTurns.length; i++) { + const turn = this.recentTurns[i] + const ts = turn.timestamp.toISOString() + messages.push({ + id: `user-${i}-${turn.timestamp.getTime()}`, + senderId: "user", + content: turn.query, + timestamp: ts, + image: turn.photoDataUrl, + }) + messages.push({ + id: `ai-${i}-${turn.timestamp.getTime()}`, + senderId: "mentra-ai", + content: turn.response, + timestamp: ts, + }) + } + return messages + } + + setChatHistoryEnabled(enabled: boolean): void { + this.historyEnabled = enabled + } + + isChatHistoryEnabled(): boolean { + return this.historyEnabled + } + + clear(): void { + this.recentTurns = [] + } + + destroy(): void { + this.recentTurns = [] + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/DisplayManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/DisplayManager.ts new file mode 100644 index 0000000000..d5eab4d402 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/DisplayManager.ts @@ -0,0 +1,117 @@ +/** + * DisplayManager — thin wrapper over session.display for the glasses HUD. + * + * Replaces the cloud app's session.layouts.showTextWall calls. No-ops when the + * connected glasses have no display (capabilities.hasDisplay === false). + */ + +import type {MiniappSession} from "@mentra/miniapp/background" +import {wrapText} from "../lib/text-wrapper" +import {SPINNER_FRAMES, SPINNER_SIZE} from "../lib/spinner" + +/** 576×288 glasses canvas — pin the spinner to the bottom-right corner. */ +const CANVAS_WIDTH = 576 +const CANVAS_HEIGHT = 288 +const SPINNER_X = CANVAS_WIDTH - SPINNER_SIZE // 546 +const SPINNER_Y = CANVAS_HEIGHT - SPINNER_SIZE // 258 +const SPINNER_FRAME_MS = 60 // ~16 fps → one full rotation every ~1.8s + +export class DisplayManager { + private spinnerTimer: ReturnType | null = null + private spinnerFrame = 0 + + constructor(private readonly session: MiniappSession) {} + + private get hasDisplay(): boolean { + return Boolean(this.session.capabilities?.hasDisplay) + } + + /** Show a transient status line (e.g. "Processing...", "Listening..."). */ + showStatus(text: string, durationMs = 5000): void { + if (!this.hasDisplay) return + try { + this.session.display.showTextWall(text, {durationMs}) + } catch (error) { + console.warn("Display showStatus failed:", error) + } + } + + /** Show a response on the HUD, wrapped to the display width. */ + showResponse(text: string, durationMs = 8000): void { + if (!this.hasDisplay) return + try { + this.session.display.showTextWall(wrapText(text, 30), {durationMs}) + } catch (error) { + console.warn("Display showResponse failed:", error) + } + } + + /** Welcome card shown once at session start. */ + showWelcome(): void { + if (!this.hasDisplay) return + try { + this.session.display.showTextWall( + 'Mentra AI\n\nSay "Hey Mentra" followed by your question.', + {durationMs: 3000}, + ) + } catch (error) { + console.warn("Display showWelcome failed:", error) + } + } + + clear(): void { + if (!this.hasDisplay) return + try { + this.session.display.clear() + } catch { + /* ignore */ + } + } + + /** Whether the bottom-right spinner is currently animating. */ + get spinnerRunning(): boolean { + return this.spinnerTimer !== null + } + + /** + * Start (or restart) the 30×30 spinner animation in the bottom-right of the + * HUD, cycling the pre-encoded BMP frames. No-op without a display. + * Returns true if the spinner is now running. + */ + startSpinner(): boolean { + if (!this.hasDisplay) return false + if (this.spinnerTimer) return true + this.spinnerFrame = 0 + const tick = () => { + const frame = SPINNER_FRAMES[this.spinnerFrame % SPINNER_FRAMES.length]! + this.spinnerFrame++ + try { + this.session.display.showBitmapView(frame, { + x: SPINNER_X, + y: SPINNER_Y, + width: SPINNER_SIZE, + height: SPINNER_SIZE, + }) + } catch (error) { + console.warn("Display spinner frame failed:", error) + } + } + tick() // paint the first frame immediately + this.spinnerTimer = setInterval(tick, SPINNER_FRAME_MS) + return true + } + + /** Stop the spinner animation and clear its tile. */ + stopSpinner(): void { + if (this.spinnerTimer) { + clearInterval(this.spinnerTimer) + this.spinnerTimer = null + } + if (!this.hasDisplay) return + try { + this.session.display.clear() + } catch { + /* ignore */ + } + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/LocationManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/LocationManager.ts new file mode 100644 index 0000000000..e85aa419d2 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/LocationManager.ts @@ -0,0 +1,257 @@ +/** + * LocationManager — GPS coordinates, reverse geocoding, and weather. + * + * PORT NOTE: the cloud app used the Node `@googlemaps/google-maps-services-js` + * client, which doesn't run in the JSContext. We call the Google Geocoding and + * Weather REST endpoints directly with fetch instead — the caching, movement + * threshold, and LocationContext shape are preserved from the cloud version. + * + * Keys come from MENTRA_PUBLIC_GOOGLE_MAPS_API_KEY / _WEATHER_API_KEY (inlined + * at build). If absent, geocoding/weather degrade to "Unknown"/skipped. + */ + +import {isLocationQuery, isWeatherQuery} from "../lib/location-keywords" +import {LOCATION_CACHE_SETTINGS} from "../constants/config" + +const GOOGLE_MAPS_API_KEY = process.env.MENTRA_PUBLIC_GOOGLE_MAPS_API_KEY +const GOOGLE_WEATHER_API_KEY = process.env.MENTRA_PUBLIC_GOOGLE_WEATHER_API_KEY + +export interface WeatherCondition { + temperature: number // Fahrenheit + temperatureCelsius: number + condition: string + humidity?: number + wind?: string +} + +export interface LocationContext { + lat: number + lng: number + city: string + state: string + country: string + streetAddress?: string + neighborhood?: string + timezone?: string + weather?: WeatherCondition + geocodedAt: number + weatherFetchedAt: number +} + +export class LocationManager { + private currentLat: number | null = null + private currentLng: number | null = null + private userTimezone: string | null = null + + private cachedContext: LocationContext | null = null + private lastGeocodedLat: number | null = null + private lastGeocodedLng: number | null = null + + updateCoordinates(lat: number, lng: number): void { + this.currentLat = lat + this.currentLng = lng + } + + hasLocation(): boolean { + return this.currentLat !== null && this.currentLng !== null + } + + getCoordinates(): {lat: number; lng: number} | null { + if (!this.hasLocation()) return null + return {lat: this.currentLat!, lng: this.currentLng!} + } + + queryNeedsLocation(query: string): boolean { + return isLocationQuery(query) || isWeatherQuery(query) + } + + queryNeedsWeather(query: string): boolean { + return isWeatherQuery(query) + } + + /** Fetch location context with caching; only calls APIs when stale/moved. */ + async fetchContextIfNeeded(query: string): Promise { + if (!this.hasLocation()) return null + + const lat = this.currentLat! + const lng = this.currentLng! + + const needsGeocoding = this.shouldRefreshGeocoding(lat, lng) + const needsWeather = this.queryNeedsWeather(query) && this.shouldRefreshWeather() + + if (!needsGeocoding && !needsWeather && this.cachedContext) { + return this.cachedContext + } + + if (!this.cachedContext || needsGeocoding) { + await this.refreshGeocoding(lat, lng) + } + if (needsWeather && this.cachedContext) { + await this.refreshWeather(lat, lng) + } + return this.cachedContext + } + + getCachedContext(): LocationContext | null { + return this.cachedContext + } + + getTimezone(): string | null { + return this.cachedContext?.timezone ?? this.userTimezone + } + + setTimezone(timezone: string): void { + this.userTimezone = timezone + if (this.cachedContext) this.cachedContext.timezone = timezone + } + + destroy(): void { + this.cachedContext = null + this.currentLat = null + this.currentLng = null + this.lastGeocodedLat = null + this.lastGeocodedLng = null + } + + private shouldRefreshGeocoding(lat: number, lng: number): boolean { + if (!this.cachedContext || this.lastGeocodedLat === null) return true + + const cacheAge = Date.now() - this.cachedContext.geocodedAt + if (cacheAge > LOCATION_CACHE_SETTINGS.geocodeCacheDurationMs) return true + + const latDiff = Math.abs(lat - this.lastGeocodedLat!) + const lngDiff = Math.abs(lng - this.lastGeocodedLng!) + return ( + latDiff > LOCATION_CACHE_SETTINGS.minMovementDegrees || + lngDiff > LOCATION_CACHE_SETTINGS.minMovementDegrees + ) + } + + private shouldRefreshWeather(): boolean { + if (!this.cachedContext || !this.cachedContext.weather) return true + const cacheAge = Date.now() - this.cachedContext.weatherFetchedAt + return cacheAge > LOCATION_CACHE_SETTINGS.weatherCacheDurationMs + } + + private async refreshGeocoding(lat: number, lng: number): Promise { + if (!GOOGLE_MAPS_API_KEY) { + this.initializeContextWithDefaults(lat, lng) + return + } + + try { + const url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${GOOGLE_MAPS_API_KEY}` + const response = await fetch(url, {headers: {Accept: "application/json"}}) + if (!response.ok) { + this.initializeContextWithDefaults(lat, lng) + return + } + + const data = (await response.json()) as any + if (data.status !== "OK" || !data.results?.length) { + this.initializeContextWithDefaults(lat, lng) + return + } + + const components = data.results[0].address_components as Array<{ + long_name: string + types: string[] + }> + + let streetNumber = "" + let route = "" + let neighborhood = "" + let city = "Unknown" + let state = "Unknown" + let country = "Unknown" + + for (const component of components) { + const types = component.types + if (types.includes("street_number")) streetNumber = component.long_name + else if (types.includes("route")) route = component.long_name + else if (types.includes("neighborhood") || types.includes("sublocality")) + neighborhood = component.long_name + else if (types.includes("locality")) city = component.long_name + else if (types.includes("administrative_area_level_1")) state = component.long_name + else if (types.includes("country")) country = component.long_name + } + + const streetAddress = [streetNumber, route].filter(Boolean).join(" ") || undefined + + this.cachedContext = { + lat, + lng, + city, + state, + country, + streetAddress, + neighborhood: neighborhood || undefined, + timezone: this.cachedContext?.timezone ?? this.userTimezone ?? undefined, + geocodedAt: Date.now(), + weatherFetchedAt: this.cachedContext?.weatherFetchedAt || 0, + weather: this.cachedContext?.weather, + } + this.lastGeocodedLat = lat + this.lastGeocodedLng = lng + } catch (error) { + console.error("Geocoding error:", error) + this.initializeContextWithDefaults(lat, lng) + } + } + + private async refreshWeather(lat: number, lng: number): Promise { + if (!GOOGLE_WEATHER_API_KEY || !this.cachedContext) return + + try { + const url = `https://weather.googleapis.com/v1/currentConditions:lookup?key=${GOOGLE_WEATHER_API_KEY}&location.latitude=${lat}&location.longitude=${lng}` + const response = await fetch(url, {headers: {Accept: "application/json"}}) + if (!response.ok) return + + const data = (await response.json()) as any + const tempCelsius = Math.round(data.temperature?.degrees ?? 0) + const tempFahrenheit = Math.round((tempCelsius * 9) / 5 + 32) + const condition = data.condition?.description || "Unknown" + const humidity = data.humidity + const windSpeed = data.wind?.speed?.value + ? Math.round(data.wind.speed.value * 2.237) + : undefined + const windDir = data.wind?.direction?.degrees + ? this.getWindDirection(data.wind.direction.degrees) + : undefined + + this.cachedContext.weather = { + temperature: tempFahrenheit, + temperatureCelsius: tempCelsius, + condition, + humidity, + wind: windSpeed && windDir ? `${windSpeed} mph ${windDir}` : undefined, + } + this.cachedContext.weatherFetchedAt = Date.now() + } catch (error) { + console.error("Weather error:", error) + } + } + + private initializeContextWithDefaults(lat: number, lng: number): void { + this.cachedContext = { + lat, + lng, + city: "Unknown", + state: "Unknown", + country: "Unknown", + timezone: this.cachedContext?.timezone ?? this.userTimezone ?? undefined, + geocodedAt: Date.now(), + weatherFetchedAt: 0, + } + this.lastGeocodedLat = lat + this.lastGeocodedLng = lng + } + + private getWindDirection(degrees: number): string { + const directions = [ + "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", + "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", + ] + return directions[Math.round(degrees / 22.5) % 16] + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/NotificationManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/NotificationManager.ts new file mode 100644 index 0000000000..02209b3d14 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/NotificationManager.ts @@ -0,0 +1,59 @@ +/** + * NotificationManager — stores recent phone notifications for AI context. + * + * Fed by session.phone.notifications. Keeps a short, age-bounded window that + * QueryProcessor formats into the prompt. + */ + +const MAX_NOTIFICATIONS = 20 +const MAX_NOTIFICATION_AGE_MS = 5 * 60 * 1000 // 5 minutes + +interface StoredNotification { + data: unknown + timestamp: number +} + +export class NotificationManager { + private notifications: StoredNotification[] = [] + + /** Add a notification (called when the SDK pushes one). */ + addNotification(notification: unknown): void { + this.notifications.push({data: notification, timestamp: Date.now()}) + if (this.notifications.length > MAX_NOTIFICATIONS) { + this.notifications = this.notifications.slice(-MAX_NOTIFICATIONS) + } + } + + /** Recent notifications, age-filtered, most recent last. */ + getRecentNotifications(limit = 5): unknown[] { + const now = Date.now() + return this.notifications + .filter((n) => now - n.timestamp < MAX_NOTIFICATION_AGE_MS) + .slice(-limit) + .map((n) => n.data) + } + + /** Format notifications for prompt context. Structure is provider-defined, so JSON. */ + formatForPrompt(limit = 5): string { + const recent = this.getRecentNotifications(limit) + if (recent.length === 0) return "No recent notifications." + try { + return `Recent notifications:\n${JSON.stringify(recent, null, 2)}` + } catch { + return "Unable to format notifications." + } + } + + hasNotifications(): boolean { + const now = Date.now() + return this.notifications.some((n) => now - n.timestamp < MAX_NOTIFICATION_AGE_MS) + } + + clear(): void { + this.notifications = [] + } + + destroy(): void { + this.clear() + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/PhotoManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/PhotoManager.ts new file mode 100644 index 0000000000..950450b4b4 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/PhotoManager.ts @@ -0,0 +1,124 @@ +/** + * PhotoManager — camera capture + recent-photo context. + * + * PORT NOTE: the cloud SDK's requestPhoto() returned raw bytes (a Buffer). The + * local SDK's takePhoto() returns a short-lived signed `photoUrl` instead, so + * we fetch the bytes here and keep them as a base64 data URL — the form both + * Gemini (agent image content) and the webview thumbnail consume. + * + * Keeps the current photo plus N previous (PHOTO_SETTINGS.previousPhotosToKeep) + * so follow-up visual questions have context. + */ + +import type {MiniappSession} from "@mentra/miniapp/background" +import {PHOTO_SETTINGS} from "../constants/config" + +export interface StoredPhoto { + requestId: string + /** "data:;base64,…" — ready for agent image content and UI rendering. */ + dataUrl: string + mimeType: string + size: number + timestamp: number +} + +export class PhotoManager { + private currentPhoto: StoredPhoto | null = null + private previousPhotos: StoredPhoto[] = [] + + constructor(private readonly session: MiniappSession) {} + + private get hasCamera(): boolean { + return Boolean(this.session.capabilities?.hasCamera) + } + + /** + * Capture a photo and store it as the current photo (rotating the prior + * current into the previous list). Returns null on failure or no camera. + */ + async takePhoto(): Promise { + if (!this.hasCamera) return null + + try { + const photo = await this.session.camera.takePhoto({sound: false}) + const dataUrl = await this.fetchAsDataUrl(photo.photoUrl, photo.mimeType) + if (!dataUrl) return null + + const stored: StoredPhoto = { + requestId: photo.requestId, + dataUrl, + mimeType: photo.mimeType, + size: photo.size, + timestamp: Date.now(), + } + + this.rotatePhotos(stored) + return stored + } catch (error) { + console.error("Failed to capture photo:", error) + return null + } + } + + /** + * Photos for the agent, current-first: [current, ...previous]. Data URLs. + */ + getPhotosForContext(): string[] { + const photos: string[] = [] + if (this.currentPhoto) photos.push(this.currentPhoto.dataUrl) + for (const p of this.previousPhotos) photos.push(p.dataUrl) + return photos + } + + getCurrentPhoto(): StoredPhoto | null { + return this.currentPhoto + } + + clear(): void { + this.currentPhoto = null + this.previousPhotos = [] + } + + destroy(): void { + this.clear() + } + + /** Current → previous, new → current; cap previous at the configured count. */ + private rotatePhotos(next: StoredPhoto): void { + if (this.currentPhoto) { + this.previousPhotos.unshift(this.currentPhoto) + if (this.previousPhotos.length > PHOTO_SETTINGS.previousPhotosToKeep) { + this.previousPhotos = this.previousPhotos.slice(0, PHOTO_SETTINGS.previousPhotosToKeep) + } + } + this.currentPhoto = next + } + + /** Fetch the signed photo URL and encode as a base64 data URL. */ + private async fetchAsDataUrl(url: string, mimeType: string): Promise { + try { + const res = await fetch(url) + if (!res.ok) { + console.warn(`Photo fetch HTTP ${res.status}`) + return null + } + const bytes = new Uint8Array(await res.arrayBuffer()) + const base64 = base64FromBytes(bytes) + return `data:${mimeType || "image/jpeg"};base64,${base64}` + } catch (error) { + console.warn("Photo fetch failed:", error) + return null + } + } +} + +/** Base64-encode bytes without Node's Buffer (unavailable in the JSContext). */ +function base64FromBytes(bytes: Uint8Array): string { + let binary = "" + const chunk = 0x8000 + for (let i = 0; i < bytes.length; i += chunk) { + binary += String.fromCharCode(...bytes.subarray(i, i + chunk)) + } + // `btoa` is provided by the browser-target runtime the bundle is built for. + return btoa(binary) +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/QueryProcessor.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/QueryProcessor.ts new file mode 100644 index 0000000000..9b5a35ffc2 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/QueryProcessor.ts @@ -0,0 +1,332 @@ +/** + * QueryProcessor — orchestrates the full query → response pipeline. + * + * Ported from the cloud app. Key changes for the local port: + * - Photos are data-URL strings (not Buffers); the agent and the webview both + * consume that form. + * - `broadcastChatEvent(userId, …)` → `emit(event)` which the controller + * forwards to the `chat:event` UI channel (replacing SSE). + * - Location comes from `session.location.getOnce()`. + * - The looping cloud "processing" sound is dropped (was a server-hosted asset); + * HUD glasses still get visual "Processing…/Thinking…/Searching…" status. + */ + +import type {MiniappSession} from "@mentra/miniapp/background" +import {generateResponse, pollDelegation, type GenerateResult} from "../agent/MentraAgent" +import {formatForTTS} from "../lib/tts-formatter" +import type {AvailableApp, ChatEvent, DeviceAction} from "../../shared/types" +import type {AudioManager} from "./AudioManager" +import type {ChatHistoryManager} from "./ChatHistoryManager" +import type {DisplayManager} from "./DisplayManager" +import type {LocationManager} from "./LocationManager" +import type {NotificationManager} from "./NotificationManager" +import type {PhotoManager, StoredPhoto} from "./PhotoManager" + +export interface QueryProcessorDeps { + session: MiniappSession + audio: AudioManager + display: DisplayManager + location: LocationManager + notifications: NotificationManager + photo: PhotoManager + chatHistory: ChatHistoryManager + /** Current OpenRouter model slug from settings, sent with each agent request. */ + getModel: () => string + /** Forward a chat event to the webview (chat:event channel). */ + emit: (event: ChatEvent) => void +} + +export class QueryProcessor { + constructor(private readonly deps: QueryProcessorDeps) {} + + /** + * Process a user query and return the response. + * prePhoto is a photo pre-captured at wake-word time (already awaited). + */ + async processQuery(query: string, _speakerId?: string, prePhoto?: StoredPhoto | null): Promise { + const {session, emit} = this.deps + const pipelineStart = Date.now() + const lap = (label: string) => console.log(`⏱️ [${label}] +${Date.now() - pipelineStart}ms`) + + // Capabilities are the single source of truth; each flag is independent. + const hasDisplay = Boolean(session.capabilities?.hasDisplay) + const hasCamera = Boolean(session.capabilities?.hasCamera) + const hasSpeakers = Boolean(session.capabilities?.hasSpeaker) + console.log( + `🎛️ capabilities: hasDisplay=${hasDisplay} hasCamera=${hasCamera} hasSpeaker=${hasSpeakers} model=${session.capabilities?.modelName ?? "unknown"}`, + ) + + // Start the looping "thinking" sound. Gated SOLELY on hasSpeaker inside + // AudioManager — only Mentra Live / camera glasses with a speaker play it. + // Display (HUD) glasses with no speaker get the visual "Processing…" status + // instead and stay silent. Stopped before output; never blocks the pipeline. + this.deps.audio.startProcessingSound() + this.deps.display.showStatus("Processing...", 10000) + + // Step 1: photo — pre-captured, else fallback capture (10s cap). + let photos: string[] = [] + let photoDataUrl: string | undefined + + if (hasCamera) { + if (prePhoto) { + photos = this.deps.photo.getPhotosForContext() + photoDataUrl = prePhoto.dataUrl + lap("PHOTO-FROM-CACHE") + } else { + let timeoutId: ReturnType + let timedOut = false + const currentPhoto = await Promise.race([ + this.deps.photo.takePhoto(), + new Promise((r) => { + timeoutId = setTimeout(() => { + timedOut = true + console.warn("📸 Fallback capture hit 10s cap — continuing without photo") + r(null) + }, 10000) + }), + ]) + clearTimeout(timeoutId!) + + if (currentPhoto) { + photos = this.deps.photo.getPhotosForContext() + photoDataUrl = currentPhoto.dataUrl + } else if (!timedOut) { + console.warn("📸 Fallback photo capture failed") + } + lap("PHOTO-FALLBACK-CAPTURE") + } + } + + // Broadcast the user message (with photo, if any) + processing state. + emit({ + type: "message", + id: `user-${Date.now()}`, + senderId: "user", + content: query, + timestamp: new Date().toISOString(), + image: photoDataUrl, + }) + emit({type: "processing"}) + lap("EMIT-USER-MSG") + + // Step 2: location, if the query needs it. + if (this.deps.location.queryNeedsLocation(query)) { + try { + const locationData = await session.location.getOnce() + if (locationData) { + this.deps.location.updateCoordinates(locationData.lat, locationData.lng) + await this.deps.location.fetchContextIfNeeded(query) + } + } catch (error) { + console.warn("Failed to get location:", error) + } + lap("LOCATION-FETCH") + } + + // Step 3: local time. + const localTime = this.getLocalTime() + + // Step 4: agent context. + const hasPhotos = photoDataUrl !== undefined + const context = { + hasDisplay, + hasSpeakers, + hasCamera, + hasPhotos, + glassesType: (hasDisplay ? "display" : "camera") as "display" | "camera", + location: this.deps.location.getCachedContext(), + localTime, + timezone: this.deps.location.getTimezone() ?? undefined, + notifications: this.deps.notifications.formatForPrompt(), + conversationHistory: this.deps.chatHistory.getRecentTurns(), + // Other miniapps the agent can control (Mentra AI is a system app). + apps: await this.listApps(), + } + lap("BUILD-CONTEXT") + + // Step 5: generate. + this.deps.display.showStatus("Thinking...", 10000) + let result: GenerateResult + try { + result = await generateResponse({ + session, + query, + photos: photos.length > 0 ? photos : undefined, + model: this.deps.getModel(), + context, + onToolCall: (toolName) => { + if (toolName === "search") this.deps.display.showStatus("Searching...", 10000) + }, + }) + } catch (error) { + console.error("Agent error:", error) + result = {response: "I'm sorry, I had trouble processing that. Please try again.", toolCalls: 0} + } + const response = result.response + lap("AI-GENERATE-RESPONSE") + + // Broadcast the AI response (with any action buttons) + idle state. For a + // pending delegation `response` is just the ack — the real answer follows. + emit({ + type: "message", + id: `ai-${Date.now()}`, + senderId: "mentra-ai", + content: response, + timestamp: new Date().toISOString(), + ...(result.actions?.length ? {actions: result.actions} : {}), + }) + emit({type: "idle"}) + lap("EMIT-AI-MSG") + + // Step 6: stop the processing loop, then output (raw on HUD, TTS to speaker). + this.deps.audio.stopProcessingSound() + this.outputResponse(response, hasSpeakers, hasDisplay) + lap("OUTPUT-TO-GLASSES") + + // Execute any deferred app-control actions the agent chose (start/stop/invoke + // another miniapp). Fire-and-forget — the agent already confirmed to the user. + if (result.deviceActions?.length) { + void this.executeDeviceActions(result.deviceActions) + } + + // Step 7: history (+ follow-up for a delegated turn). When the giga-agent + // ran long, `response` is the ack; the real answer is recorded by the + // follow-up below, so we don't save the ack here. + if (result.pendingTaskId) { + void this.awaitFollowUp(result.pendingTaskId, query, photos.length > 0, photoDataUrl, hasSpeakers, hasDisplay) + } else { + this.deps.chatHistory.addTurn(query, response, photos.length > 0, photoDataUrl) + } + lap("SAVE-HISTORY") + + console.log(`⏱️ [PIPELINE-DONE] Total: ${Date.now() - pipelineStart}ms`) + return response + } + + /** + * Wait for a pending giga-agent delegation, then deliver the answer as a + * second turn: emit it to the webview, record it in history (the final answer, + * not the earlier ack), and speak/show it on the glasses if connected. + */ + private async awaitFollowUp( + taskId: string, + query: string, + hadPhoto: boolean, + photoDataUrl: string | undefined, + hasSpeakers: boolean, + hasDisplay: boolean, + ): Promise { + const {session, emit} = this.deps + const final = await pollDelegation(session, taskId) + + if (final.status === "done" && final.reply) { + const reply = final.reply + console.log(`🤝 delivering delegation follow-up (${reply.length} chars, ${final.actions?.length ?? 0} actions)`) + emit({ + type: "message", + id: `ai-${Date.now()}`, + senderId: "mentra-ai", + content: reply, + timestamp: new Date().toISOString(), + ...(final.actions?.length ? {actions: final.actions} : {}), + }) + this.deps.chatHistory.addTurn(query, reply, hadPhoto, photoDataUrl) + this.outputResponse(reply, hasSpeakers, hasDisplay) + } else { + const msg = "Sorry — that one didn't go through. Want me to try again?" + emit({ + type: "message", + id: `ai-${Date.now()}`, + senderId: "mentra-ai", + content: msg, + timestamp: new Date().toISOString(), + }) + this.outputResponse(msg, hasSpeakers, hasDisplay) + } + } + + /** + * List the other miniapps the agent can control (system-only). Returns [] if + * Mentra AI isn't a system app or the host rejects — the agent then simply has + * no app-control tools that turn. + */ + private async listApps(): Promise { + try { + const apps = await this.deps.session.miniapps.list() + return apps + .filter((a) => a.packageName !== "com.mentra.ai.local") // don't list self + .map((a) => ({ + packageName: a.packageName, + name: a.name, + running: a.running, + actions: a.actions.map((act) => ({ + id: act.id, + description: act.description, + parameters: act.parameters, + })), + })) + } catch (error) { + console.warn("Failed to list miniapps (not a system app?):", error) + return [] + } + } + + /** + * Execute the agent's deferred app-control actions on-device. Each runs + * independently; a failure (app gone, action unknown) is logged and skipped. + */ + private async executeDeviceActions(actions: DeviceAction[]): Promise { + const {session} = this.deps + for (const action of actions) { + try { + if (action.type === "start_app") { + await session.miniapps.start(action.packageName) + } else if (action.type === "stop_app") { + await session.miniapps.stop(action.packageName) + } else { + await session.actions.invoke(action.packageName, action.actionId, action.params) + } + console.log(`🎛️ executed ${action.type} ${action.packageName}`) + } catch (error) { + console.warn(`🎛️ device action failed (${action.type} ${action.packageName}):`, error) + } + } + } + + private getLocalTime(): string { + const timezone = this.deps.location.getTimezone() + const options: Intl.DateTimeFormatOptions = { + weekday: "long", + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "2-digit", + hour12: true, + } + try { + if (timezone) options.timeZone = timezone + return new Date().toLocaleString("en-US", options) + } catch { + delete options.timeZone + return new Date().toLocaleString("en-US", options) + } + } + + /** + * Output the response to each available channel: HUD gets raw text (symbols + * intact); speaker gets a TTS-formatted version. Glasses with both get both. + */ + private outputResponse(response: string, hasSpeakers: boolean, hasDisplay: boolean): void { + if (hasDisplay) { + this.deps.display.showResponse(response, 10000) + } + if (hasSpeakers) { + const spoken = formatForTTS(response) + console.log(`🔊 speaking ${spoken.length} chars to glasses`) + this.deps.audio.speak(spoken).catch((error) => console.debug("Speech output failed:", error)) + } else { + console.log("🔇 hasSpeaker=false — not speaking response") + } + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/StorageManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/StorageManager.ts new file mode 100644 index 0000000000..c3988a66bb --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/StorageManager.ts @@ -0,0 +1,57 @@ +/** + * StorageManager — persists user settings via session.storage. + * + * Replaces the cloud app's MongoDB user-settings collection. session.storage + * is phone-local key-value scoped to (user, package); we keep the whole + * Settings object under one JSON key. + */ + +import type {MiniappSession} from "@mentra/miniapp/background" +import {DEFAULT_SETTINGS, type Settings, type Theme} from "../../shared/types" + +const SETTINGS_KEY = "settings" + +export class StorageManager { + private cache: Settings = {...DEFAULT_SETTINGS} + + constructor(private readonly session: MiniappSession) {} + + /** Load settings from storage into cache. Call once at startup. */ + async load(): Promise { + try { + const raw = await this.session.storage.get(SETTINGS_KEY) + if (raw) { + const parsed = JSON.parse(raw) as Partial + this.cache = {...DEFAULT_SETTINGS, ...parsed} + } + } catch (error) { + console.warn("Failed to load settings, using defaults:", error) + this.cache = {...DEFAULT_SETTINGS} + } + return this.cache + } + + /** Current settings (from cache; call load() first). */ + get(): Settings { + return {...this.cache} + } + + /** Merge a partial update, persist, and return the merged result. */ + async set(patch: Partial): Promise { + this.cache = {...this.cache, ...patch} + await this.persist() + return this.get() + } + + async setTheme(theme: Theme): Promise { + await this.set({theme}) + } + + private async persist(): Promise { + try { + await this.session.storage.set(SETTINGS_KEY, JSON.stringify(this.cache)) + } catch (error) { + console.warn("Failed to persist settings:", error) + } + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/background/managers/TranscriptionManager.ts b/miniapps/mentra-ai-local/miniapp/src/background/managers/TranscriptionManager.ts new file mode 100644 index 0000000000..5e49d4de01 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/background/managers/TranscriptionManager.ts @@ -0,0 +1,283 @@ +/** + * TranscriptionManager — speech-to-text, wake word detection, and silence-based + * query finalization for the single local user. + * + * Ported from the cloud app's manager. The state machine (IDLE → LISTENING → + * processing → IDLE), utterance accumulation, post-final grace window, max + * listening cap, duplicate detection, and wake-word pre-capture are preserved. + * + * Removed for the local port: + * - SSE client plumbing (the webview gets live transcript via the controller's + * onTranscript callback → chat:event channel instead). + * - The cloud "start.mp3" activation cue (was a server-hosted asset). + * - The `User` indirection — the manager takes the session + photo manager + * and reports out via callbacks. + */ + +import type {MiniappSession, TranscriptionData} from "@mentra/miniapp/background" +import {detectWakeWord, removeWakeWord, stripWakeWordResidue} from "../lib/wake-word" +import type {PhotoManager, StoredPhoto} from "./PhotoManager" + +/** Invoked when a finalized query is ready to process. */ +export type OnQueryReadyCallback = ( + query: string, + speakerId?: string, + prePhoto?: StoredPhoto | null, +) => Promise + +export interface TranscriptionCallbacks { + onQueryReady: OnQueryReadyCallback + /** Live transcript text (interim + final), for the webview + HUD. */ + onTranscript?: (text: string, isFinal: boolean) => void + /** Fired the moment a wake word is detected (UI glow, activation cue, …). */ + onWakeWord?: () => void + /** Fired with the in-progress transcript while listening (for HUD "Listening…"). */ + onListeningUpdate?: (fullTranscript: string) => void +} + +export class TranscriptionManager { + private unsubscribe: (() => void) | null = null + + private isListening = false + private isProcessing = false + private activeSpeakerId: string | undefined = undefined + + private confirmedTranscript = "" + private currentUtteranceText = "" + private lastConfirmedUtteranceId: string | undefined = undefined + private transcriptionStartTime = 0 + + private pendingPhoto: Promise | null = null + + private lastProcessedWords: string[] = [] + private lastProcessedTime = 0 + private readonly DUPLICATE_WINDOW_MS = 10000 + private readonly DUPLICATE_WORD_COUNT = 3 + + private silenceTimeout: ReturnType | undefined + private maxListeningTimeout: ReturnType | undefined + private currentSilenceMs = 0 + + private readonly SILENCE_TIMEOUT_MS = 2000 + private readonly FINAL_SILENCE_TIMEOUT_MS = 2000 + private readonly MAX_LISTENING_MS = 15000 + + private destroyed = false + + constructor( + private readonly session: MiniappSession, + private readonly photo: PhotoManager, + private readonly callbacks: TranscriptionCallbacks, + ) {} + + /** Subscribe to transcription events. */ + setup(): void { + this.destroyed = false + this.unsubscribe = this.session.transcription.on((data: TranscriptionData) => { + void this.handleTranscription(data) + }) + console.log("🎤 TranscriptionManager ready") + } + + get listening(): boolean { + return this.isListening + } + + get processing(): boolean { + return this.isProcessing + } + + destroy(): void { + this.destroyed = true + this.clearTimers() + this.unsubscribe?.() + this.unsubscribe = null + this.resetState() + } + + /** Full accumulated transcript (confirmed + in-progress), wake-word stripped. */ + private getFullTranscript(): string { + const raw = (this.confirmedTranscript + " " + this.currentUtteranceText).trim() + const cleaned = removeWakeWord(raw) + return stripWakeWordResidue(cleaned) + } + + private async handleTranscription(data: TranscriptionData): Promise { + const {text, isFinal} = data + const speakerId = (data as TranscriptionData & {speakerId?: string}).speakerId + + console.log( + `🎤 [TRANSCRIPT] ${isFinal ? "FINAL " : "interim"} | "${text}"` + + (speakerId ? ` (speaker: ${speakerId})` : ""), + ) + + this.callbacks.onTranscript?.(text, isFinal ?? false) + + if (this.isProcessing) return + + const wakeResult = detectWakeWord(text) + + if (!this.isListening) { + if (!wakeResult.detected) return + + if (this.isDuplicateQuery(wakeResult.query)) { + console.log(`⏱️ [WAKE] Ignoring duplicate wake word: "${text}"`) + return + } + + console.log(`⏱️ [WAKE] Wake word detected: "${text}"`) + this.callbacks.onWakeWord?.() + this.startListening(speakerId) + } + + const cleanText = removeWakeWord(text) + const utteranceId = (data as TranscriptionData & {utteranceId?: string}).utteranceId + + if (isFinal) { + if (utteranceId && utteranceId === this.lastConfirmedUtteranceId) { + // Duplicate isFinal for same utterance — skip to avoid double-append. + } else { + this.confirmedTranscript = (this.confirmedTranscript + " " + cleanText).trim() + this.lastConfirmedUtteranceId = utteranceId + } + this.currentUtteranceText = "" + } else { + this.currentUtteranceText = cleanText + } + + // Post-final grace window: never let an interim downgrade the longer timer. + let timeoutMs: number + if (isFinal) { + timeoutMs = this.FINAL_SILENCE_TIMEOUT_MS + this.currentSilenceMs = timeoutMs + } else if (this.currentSilenceMs > this.SILENCE_TIMEOUT_MS) { + return + } else { + timeoutMs = this.SILENCE_TIMEOUT_MS + this.currentSilenceMs = timeoutMs + } + this.resetSilenceTimeout(timeoutMs) + + if (this.isListening) { + this.callbacks.onListeningUpdate?.(this.getFullTranscript()) + } + } + + private startListening(speakerId?: string): void { + this.isListening = true + this.activeSpeakerId = speakerId + this.confirmedTranscript = "" + this.currentUtteranceText = "" + this.lastConfirmedUtteranceId = undefined + this.transcriptionStartTime = Date.now() + + // Pre-capture a photo NOW (parallel with transcript accumulation) so visual + // queries have the live view from the moment the user started speaking. + const hasCamera = Boolean(this.session.capabilities?.hasCamera) + this.pendingPhoto = hasCamera ? this.photo.takePhoto() : null + + this.maxListeningTimeout = setTimeout(() => { + if (this.isListening && !this.isProcessing) { + console.log(`⏰ Max listening time reached (${this.MAX_LISTENING_MS}ms)`) + void this.processCurrentQuery() + } + }, this.MAX_LISTENING_MS) + } + + private resetSilenceTimeout(overrideMs?: number): void { + if (this.silenceTimeout) clearTimeout(this.silenceTimeout) + this.silenceTimeout = setTimeout(() => { + if (this.isListening && !this.isProcessing && this.getFullTranscript().length > 0) { + void this.processCurrentQuery() + } + }, overrideMs ?? this.SILENCE_TIMEOUT_MS) + } + + private async processCurrentQuery(): Promise { + if (this.isProcessing) return + + const query = this.getFullTranscript() + if (!query) { + this.resetState() + return + } + + this.isProcessing = true + this.clearTimers() + + this.lastProcessedWords = this.extractWords(query) + this.lastProcessedTime = Date.now() + + console.log( + `⏱️ [SILENCE] Query ready: "${query}" (${Date.now() - this.transcriptionStartTime}ms since wake)`, + ) + + let prePhoto: StoredPhoto | null = null + try { + prePhoto = await (this.pendingPhoto ?? Promise.resolve(null)) + } catch { + prePhoto = null + } + this.pendingPhoto = null + + if (this.destroyed) { + console.log("🛑 Session destroyed during photo await, aborting") + return + } + + try { + await this.callbacks.onQueryReady(query, this.activeSpeakerId, prePhoto) + } catch (error) { + console.error("Error processing query:", error) + } finally { + this.resetState() + } + } + + private resetState(): void { + this.isListening = false + this.isProcessing = false + this.activeSpeakerId = undefined + this.confirmedTranscript = "" + this.currentUtteranceText = "" + this.lastConfirmedUtteranceId = undefined + this.transcriptionStartTime = 0 + this.currentSilenceMs = 0 + this.pendingPhoto = null + this.clearTimers() + } + + private clearTimers(): void { + if (this.silenceTimeout) { + clearTimeout(this.silenceTimeout) + this.silenceTimeout = undefined + } + if (this.maxListeningTimeout) { + clearTimeout(this.maxListeningTimeout) + this.maxListeningTimeout = undefined + } + } + + private extractWords(query: string): string[] { + return query + .toLowerCase() + .replace(/[^\w\s]/g, "") + .split(/\s+/) + .filter((w) => w.length > 0) + .slice(0, this.DUPLICATE_WORD_COUNT) + } + + private isDuplicateQuery(query: string): boolean { + if (this.lastProcessedWords.length === 0) return false + if (Date.now() - this.lastProcessedTime > this.DUPLICATE_WINDOW_MS) return false + + const incomingWords = this.extractWords(query) + if (incomingWords.length === 0) return false + + const wordsToCompare = Math.min(incomingWords.length, this.lastProcessedWords.length) + for (let i = 0; i < wordsToCompare; i++) { + if (incomingWords[i] !== this.lastProcessedWords[i]) return false + } + return true + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/env.d.ts b/miniapps/mentra-ai-local/miniapp/src/env.d.ts new file mode 100644 index 0000000000..ed7da048cd --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/env.d.ts @@ -0,0 +1,16 @@ +/** Ambient declarations for the UI bundle. */ + +// CSS side-effect imports (handled by the Tailwind plugin at build time). +declare module "*.css" + +// SVG imports resolve to a URL string (Bun bundler). +declare module "*.svg" { + const src: string + export default src +} + +// JSON imports (e.g. Lottie animation data) resolve to the parsed object. +declare module "*.json" { + const value: unknown + export default value +} diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo.json b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo.json new file mode 100644 index 0000000000..f5c3062b0f --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo.json @@ -0,0 +1 @@ +{"nm":"newScene","ddd":0,"h":550,"w":550,"meta":{"g":"SVG to Lottie v1.0.0"},"layers":[{"ty":4,"nm":"","sr":1,"st":0,"op":175,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[295.138,203],[410,282.663],[410,346.393],[295.138,266.73],[295.138,203]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":22.5},{"s":[100,100],"t":150}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[275,275],"t":22.5},{"s":[0,0],"t":150}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":22.5},{"s":[100],"t":150}]}}]},{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[191.391,203],[306.253,282.663],[306.253,346.393],[191.391,266.73],[191.391,203]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":15},{"s":[100,100],"t":112.5}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[275,275],"t":15},{"s":[0,0],"t":112.5}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":15},{"s":[100],"t":112.5}]}}]},{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[141,282.663],[204.73,282.663],[204.73,346.393],[141,346.393],[141,282.663]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":7.5},{"s":[100,100],"t":75}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[275,275],"t":7.5},{"s":[0,0],"t":75}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":7.5},{"s":[100],"t":75}]}}]},{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"el","bm":0,"hd":false,"nm":"","d":1,"p":{"a":0,"k":[189.5,189.5]},"s":{"a":0,"k":[379,379]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0,0.7216,0.4118]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":0},{"s":[100,-100],"t":37.5}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[275,275],"t":0},{"s":[465,85],"t":37.5}]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":0},{"s":[100],"t":37.5}]}}]}],"ind":1}],"v":"5.7.0","fr":60,"op":175,"ip":0,"assets":[]} \ No newline at end of file diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo2.json b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo2.json new file mode 100644 index 0000000000..9e204cbf15 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mentralogo2.json @@ -0,0 +1 @@ +{"nm":"Flow 1","ddd":0,"h":164,"w":164,"meta":{"g":"LottieFiles Figma v98"},"layers":[{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":1},{"ty":4,"nm":"Group 19","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[150.82,156.68]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[89.58,79.55]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-90],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-180],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-180],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-270],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[-360],"t":290},{"s":[-360],"t":291}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":2},{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":3},{"ty":4,"nm":"Ellipse 130","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[70.29,70.29]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[164,70.29]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[43.92856979370117],"t":290},{"s":[43.92856979370117],"t":291}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[38.82,0],[0,38.82],[-38.82,0],[0,-38.82]],"o":[[0,38.82],[-38.82,0],[0,-38.82],[38.82,0],[0,0]],"v":[[140.57,70.29],[70.29,140.57],[0,70.29],[70.29,0],[140.57,70.29]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.1961,0.6785,0.902]},"r":1,"o":{"a":0,"k":100}}],"ind":4,"parent":2},{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":5},{"ty":4,"nm":"Ellipse 133","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[74.68,74.68]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[74.68,180.11]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[57.44505310058594],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[57.44505310058594],"t":290},{"s":[57.44505310058594],"t":291}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[41.24,0],[0,41.24],[-41.24,0],[0,-41.24]],"o":[[0,41.24],[-41.24,0],[0,-41.24],[41.24,0],[0,0]],"v":[[149.36,74.68],[74.68,149.36],[0,74.68],[74.68,0],[149.36,74.68]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,0.3777,0.4963]},"r":1,"o":{"a":0,"k":100}}],"ind":6,"parent":2},{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":7},{"ty":4,"nm":"Ellipse 132","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[74.68,74.68]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[89.32,238.68]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[64.01020812988281],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[64.01020812988281],"t":290},{"s":[64.01020812988281],"t":291}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[41.24,0],[0,41.24],[-41.24,0],[0,-41.24]],"o":[[0,41.24],[-41.24,0],[0,-41.24],[41.24,0],[0,0]],"v":[[149.36,74.68],[74.68,149.36],[0,74.68],[74.68,0],[149.36,74.68]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,0.1765,0.3334]},"r":1,"o":{"a":0,"k":100}}],"ind":8,"parent":2},{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":9},{"ty":4,"nm":"Ellipse 131","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[76.14,76.14]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[225.5,222.57]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[51.91558074951172],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[51.91558074951172],"t":290},{"s":[51.91558074951172],"t":291}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[42.05,0],[0,42.05],[-42.05,0],[0,-42.05]],"o":[[0,42.05],[-42.05,0],[0,-42.05],[42.05,0],[0,0]],"v":[[152.29,76.14],[76.14,152.29],[0,76.14],[76.14,0],[152.29,76.14]]}}},{"ty":"gf","bm":0,"hd":false,"nm":"","e":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100.37000274658203,219.7760009765625],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100.37000274658203,219.7760009765625],"t":290},{"s":[100.37000274658203,219.7760009765625],"t":291}]},"g":{"p":2,"k":{"a":0,"k":[0,1,0.5843529411764705,0.000039215686274509805,1,1,0.7216078431372549,0.000039215686274509805]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[185.16600036621094,86.5260009765625],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[185.16600036621094,86.5260009765625],"t":290},{"s":[185.16600036621094,86.5260009765625],"t":291}]},"r":1,"o":{"a":0,"k":100}}],"ind":10,"parent":2},{"ty":4,"nm":"Vector (Stroke)","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[58.97,58.97],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[53.09,53.09],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[48.13,48.13],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[53.09,53.09],"t":290},{"s":[53.09,53.09],"t":291}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.03,82.03],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.34,82.4],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[81.44,81.44],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[82.34,82.4],"t":290},{"s":[82.34,82.4],"t":291}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.62],[0,0],[-1.99,-1.99],[-2.73,-0.68],[0,0],[0,-1.67],[1.62,-0.4],[0,0],[1.99,-1.99],[0.68,-2.73],[0,0],[1.67,0],[0.4,1.62],[0,0],[1.99,1.99],[2.73,0.68],[0,0],[0,0],[0,1.67],[-1.62,0.4],[0,0],[0,0],[-1.99,1.99],[-0.68,2.73],[0,0],[-1.67,0]],"o":[[1.67,0],[0,0],[0.68,2.73],[1.99,1.99],[0,0],[1.62,0.4],[0,1.67],[0,0],[-2.73,0.68],[-1.99,1.99],[0,0],[-0.4,1.62],[-1.67,0],[0,0],[-0.68,-2.73],[-1.99,-1.99],[0,0],[0,0],[-1.62,-0.4],[0,-1.67],[0,0],[0,0],[2.73,-0.68],[1.99,-1.99],[0,0],[0.4,-1.62],[0,0]],"v":[[93.02,0],[96.54,2.75],[98.01,8.62],[102.1,15.84],[109.31,19.92],[115.19,21.39],[117.94,24.92],[115.19,28.44],[109.31,29.91],[102.1,33.99],[98.01,41.2],[96.54,47.08],[93.02,49.83],[89.5,47.08],[88.03,41.21],[83.94,33.99],[76.74,29.91],[76.74,29.91],[70.86,28.44],[68.1,24.92],[70.86,21.39],[76.74,19.92],[76.74,19.92],[83.94,15.84],[88.03,8.63],[89.5,2.75],[93.02,0]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.33,-1.32],[0,0],[-1.62,-1.62],[-2.23,-0.56],[0,0],[0,-1.36],[1.32,-0.33],[0,0],[1.62,-1.62],[0.56,-2.23],[0,0],[1.36,0],[0.33,1.32],[0,0],[1.62,1.62],[2.23,0.56],[0,0],[0,0],[0,1.36],[-1.32,0.33],[0,0],[0,0],[-1.62,1.62],[-0.56,2.23],[0,0],[-1.36,0]],"o":[[1.36,0],[0,0],[0.56,2.23],[1.62,1.62],[0,0],[1.32,0.33],[0,1.36],[0,0],[-2.23,0.56],[-1.62,1.62],[0,0],[-0.33,1.32],[-1.36,0],[0,0],[-0.56,-2.23],[-1.62,-1.62],[0,0],[0,0],[-1.32,-0.33],[0,-1.36],[0,0],[0,0],[2.23,-0.56],[1.62,-1.62],[0,0],[0.33,-1.32],[0,0]],"v":[[75.92,0],[78.79,2.24],[79.99,7.04],[83.33,12.93],[89.21,16.26],[94.01,17.46],[96.25,20.33],[94.01,23.21],[89.21,24.41],[83.33,27.74],[79.99,33.63],[78.79,38.42],[75.92,40.67],[73.04,38.42],[71.84,33.63],[68.51,27.74],[62.63,24.41],[62.63,24.41],[57.83,23.21],[55.58,20.33],[57.83,17.46],[62.63,16.26],[62.63,16.26],[68.51,12.93],[71.84,7.04],[73.04,2.24],[75.92,0]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.36,-1.46],[0,0],[-1.79,-1.79],[-2.46,-0.61],[0,0],[0,-1.5],[1.45,-0.36],[0,0],[1.79,-1.79],[0.61,-2.46],[0,0],[1.5,0],[0.36,1.46],[0,0],[1.79,1.79],[2.46,0.62],[0,0],[0,0],[0,1.5],[-1.46,0.36],[0,0],[0,0],[-1.79,1.79],[-0.61,2.46],[0,0],[-1.5,0]],"o":[[1.5,0],[0,0],[0.61,2.46],[1.79,1.79],[0,0],[1.45,0.36],[0,1.5],[0,0],[-2.46,0.61],[-1.79,1.79],[0,0],[-0.36,1.46],[-1.5,0],[0,0],[-0.61,-2.46],[-1.79,-1.79],[0,0],[0,0],[-1.46,-0.36],[0,-1.5],[0,0],[0,0],[2.46,-0.62],[1.79,-1.79],[0,0],[0.36,-1.46],[0,0]],"v":[[83.75,0],[86.93,2.48],[88.25,7.77],[91.93,14.26],[98.42,17.94],[103.71,19.26],[106.19,22.43],[103.71,25.61],[98.42,26.93],[91.93,30.61],[88.25,37.1],[86.93,42.39],[83.75,44.87],[80.58,42.39],[79.26,37.1],[75.58,30.61],[69.09,26.93],[69.09,26.93],[63.8,25.61],[61.32,22.43],[63.8,19.26],[69.09,17.94],[69.09,17.94],[75.58,14.26],[79.26,7.77],[80.58,2.48],[83.75,0]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.57,-1.57],[-1.04,-1.94],[-1.57,1.57],[-1.94,1.05],[1.57,1.57],[1.05,1.94],[1.57,-1.57],[1.94,-1.05]],"o":[[1.94,1.05],[1.57,1.57],[1.05,-1.94],[1.57,-1.57],[-1.94,-1.05],[-1.57,-1.57],[-1.04,1.94],[-1.57,1.57],[0,0]],"v":[[83.79,24.92],[89.08,28.86],[93.02,34.15],[96.96,28.86],[102.25,24.92],[96.96,20.97],[93.02,15.68],[89.08,20.97],[83.79,24.92]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-1.28,-1.28],[-0.85,-1.58],[-1.28,1.28],[-1.58,0.85],[1.28,1.28],[0.85,1.58],[1.28,-1.28],[1.58,-0.85]],"o":[[1.58,0.85],[1.28,1.28],[0.85,-1.58],[1.28,-1.28],[-1.58,-0.85],[-1.28,-1.28],[-0.85,1.58],[-1.28,1.28],[0,0]],"v":[[68.39,20.33],[72.7,23.55],[75.92,27.87],[79.13,23.55],[83.45,20.33],[79.13,17.12],[75.92,12.8],[72.7,17.12],[68.39,20.33]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-1.41,-1.41],[-0.94,-1.74],[-1.41,1.41],[-1.74,0.94],[1.41,1.41],[0.94,1.74],[1.41,-1.41],[1.74,-0.94]],"o":[[1.74,0.94],[1.41,1.41],[0.94,-1.74],[1.41,-1.41],[-1.74,-0.94],[-1.41,-1.41],[-0.94,1.74],[-1.41,1.41],[0,0]],"v":[[75.44,22.43],[80.21,25.98],[83.75,30.74],[87.3,25.98],[92.06,22.43],[87.3,18.89],[83.75,14.12],[80.21,18.88],[75.44,22.43]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.45,-1.56],[0,0],[0,0],[-2.63,-2.63],[-3.58,-1.02],[0,0],[0,-1.62],[1.56,-0.45],[0,0],[0,0],[2.63,-2.63],[1.02,-3.58],[0.02,-0.05],[0,0],[1.62,0],[0.45,1.56],[0,0],[0,0],[2.63,2.63],[3.58,1.02],[0,0],[0,1.62],[-1.56,0.45],[0,0],[0,0],[-2.63,2.63],[-1.02,3.58],[0,0],[-1.62,0]],"o":[[1.62,0],[0,0],[0,0],[1.02,3.58],[2.63,2.63],[0,0],[1.56,0.45],[0,1.62],[0,0],[0,0],[-3.58,1.02],[-2.63,2.63],[-0.02,0.05],[0,0],[-0.45,1.56],[-1.62,0],[0,0],[0,0],[-1.02,-3.58],[-2.63,-2.63],[0,0],[-1.56,-0.45],[0,-1.62],[0,0],[0,0],[3.58,-1.02],[2.63,-2.63],[0,0],[0.45,-1.56],[0,0]],"v":[[41.94,17.03],[45.43,19.66],[50.05,35.81],[50.05,35.81],[55.62,45.28],[65.09,50.86],[81.25,55.48],[83.88,58.97],[81.25,62.46],[65.1,67.07],[65.1,67.07],[55.63,72.65],[50.05,82.12],[50,82.28],[45.43,98.27],[41.94,100.91],[38.45,98.27],[33.83,82.12],[33.83,82.12],[28.26,72.65],[18.79,67.08],[2.63,62.46],[0,58.97],[2.63,55.48],[18.79,50.86],[18.79,50.86],[28.26,45.29],[33.83,35.82],[38.45,19.66],[41.94,17.03]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.36,-1.27],[0,0],[0,0],[-2.15,-2.15],[-2.92,-0.83],[0,0],[0,-1.32],[1.27,-0.36],[0,0],[0,0],[2.15,-2.15],[0.83,-2.92],[0.01,-0.04],[0,0],[1.32,0],[0.36,1.27],[0,0],[0,0],[2.15,2.15],[2.92,0.83],[0,0],[0,1.32],[-1.27,0.36],[0,0],[0,0],[-2.15,2.15],[-0.83,2.92],[0,0],[-1.32,0]],"o":[[1.32,0],[0,0],[0,0],[0.83,2.92],[2.15,2.15],[0,0],[1.27,0.36],[0,1.32],[0,0],[0,0],[-2.92,0.83],[-2.15,2.15],[-0.01,0.04],[0,0],[-0.36,1.27],[-1.32,0],[0,0],[0,0],[-0.84,-2.92],[-2.15,-2.15],[0,0],[-1.27,-0.36],[0,-1.32],[0,0],[0,0],[2.92,-0.83],[2.15,-2.15],[0,0],[0.36,-1.27],[0,0]],"v":[[34.23,13.9],[37.08,16.05],[40.85,29.23],[40.85,29.23],[45.39,36.96],[53.12,41.51],[66.31,45.28],[68.46,48.13],[66.31,50.98],[53.13,54.74],[53.13,54.74],[45.4,59.29],[40.85,67.02],[40.81,67.15],[37.08,80.21],[34.23,82.36],[31.38,80.21],[27.61,67.02],[27.61,67.02],[23.07,59.3],[15.34,54.75],[2.15,50.98],[0,48.13],[2.15,45.28],[15.33,41.51],[15.33,41.51],[23.06,36.96],[27.61,29.23],[31.38,16.05],[34.23,13.9]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.4,-1.4],[0,0],[0,0],[-2.37,-2.37],[-3.22,-0.92],[0,0],[0,-1.46],[1.4,-0.4],[0,0],[0,0],[2.37,-2.37],[0.92,-3.22],[0.02,-0.05],[0,0],[1.46,0],[0.4,1.4],[0,0],[0,0],[2.37,2.37],[3.22,0.92],[0,0],[0,1.46],[-1.4,0.4],[0,0],[0,0],[-2.37,2.37],[-0.92,3.22],[0,0],[-1.46,0]],"o":[[1.46,0],[0,0],[0,0],[0.92,3.22],[2.37,2.37],[0,0],[1.4,0.4],[0,1.46],[0,0],[0,0],[-3.22,0.92],[-2.37,2.37],[-0.01,0.05],[0,0],[-0.4,1.4],[-1.46,0],[0,0],[0,0],[-0.92,-3.22],[-2.37,-2.37],[0,0],[-1.4,-0.4],[0,-1.46],[0,0],[0,0],[3.22,-0.92],[2.37,-2.37],[0,0],[0.4,-1.4],[0,0]],"v":[[37.76,15.33],[40.91,17.7],[45.06,32.24],[45.06,32.24],[50.08,40.77],[58.61,45.79],[73.15,49.95],[75.53,53.09],[73.15,56.24],[58.61,60.39],[58.61,60.39],[50.08,65.41],[45.07,73.94],[45.02,74.08],[40.91,88.48],[37.76,90.86],[34.62,88.48],[30.46,73.94],[30.46,73.94],[25.45,65.41],[16.92,60.4],[2.37,56.24],[0,53.09],[2.37,49.95],[16.91,45.79],[16.91,45.79],[25.44,40.78],[30.46,32.25],[34.62,17.7],[37.76,15.33]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.5,-3.5],[4.77,-1.36],[0,0],[0,0],[0,0],[-3.5,-3.5],[-1.36,-4.77],[0,0],[0,0],[-0.02,0.06],[-3.46,3.46],[-4.77,1.36],[0,0],[0,0],[0,0],[3.5,3.5],[1.36,4.77],[0,0]],"o":[[0,0],[0,0],[-1.36,4.77],[-3.5,3.5],[0,0],[0,0],[0,0],[4.77,1.36],[3.5,3.5],[0,0],[0,0],[0.02,-0.06],[1.37,-4.7],[3.5,-3.5],[0,0],[0,0],[0,0],[-4.77,-1.36],[-3.5,-3.5],[0,0],[0,0]],"v":[[41.94,33.88],[40.81,37.81],[40.81,37.81],[33.39,50.42],[20.78,57.85],[16.85,58.97],[20.79,60.09],[20.79,60.09],[33.4,67.52],[40.82,80.13],[41.94,84.05],[43.06,80.13],[43.12,79.96],[50.49,67.51],[63.1,60.09],[67.03,58.97],[63.09,57.84],[63.09,57.84],[50.48,50.42],[43.06,37.81],[41.94,33.88]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[2.86,-2.86],[3.89,-1.11],[0,0],[0,0],[0,0],[-2.86,-2.86],[-1.11,-3.89],[0,0],[0,0],[-0.02,0.05],[-2.83,2.83],[-3.89,1.11],[0,0],[0,0],[0,0],[2.86,2.86],[1.11,3.89],[0,0]],"o":[[0,0],[0,0],[-1.11,3.89],[-2.86,2.86],[0,0],[0,0],[0,0],[3.89,1.11],[2.86,2.86],[0,0],[0,0],[0.01,-0.05],[1.12,-3.84],[2.86,-2.86],[0,0],[0,0],[0,0],[-3.89,-1.11],[-2.86,-2.86],[0,0],[0,0]],"v":[[34.23,27.65],[33.31,30.86],[33.31,30.86],[27.25,41.15],[16.96,47.21],[13.75,48.13],[16.97,49.05],[16.97,49.05],[27.26,55.1],[33.31,65.39],[34.23,68.6],[35.15,65.4],[35.19,65.26],[41.21,55.1],[51.5,49.04],[54.71,48.12],[51.49,47.21],[51.49,47.21],[41.2,41.15],[35.15,30.86],[34.23,27.65]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[3.16,-3.16],[4.29,-1.23],[0,0],[0,0],[0,0],[-3.16,-3.16],[-1.23,-4.29],[0,0],[0,0],[-0.02,0.05],[-3.12,3.12],[-4.29,1.23],[0,0],[0,0],[0,0],[3.16,3.16],[1.23,4.29],[0,0]],"o":[[0,0],[0,0],[-1.23,4.29],[-3.16,3.16],[0,0],[0,0],[0,0],[4.29,1.23],[3.16,3.16],[0,0],[0,0],[0.01,-0.05],[1.24,-4.23],[3.16,-3.16],[0,0],[0,0],[0,0],[-4.29,-1.23],[-3.16,-3.16],[0,0],[0,0]],"v":[[37.76,30.5],[36.75,34.05],[36.75,34.05],[30.07,45.4],[18.71,52.08],[15.17,53.09],[18.72,54.11],[18.72,54.11],[30.07,60.79],[36.75,72.14],[37.76,75.68],[38.77,72.14],[38.82,71.99],[45.46,60.78],[56.81,54.1],[60.35,53.09],[56.81,52.08],[56.81,52.08],[45.45,45.4],[38.77,34.04],[37.76,30.5]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.49,-1.48],[0,0],[0,0],[-1,-1],[-1.35,-0.45],[0,0],[0,0],[0,-1.56],[1.48,-0.49],[0,0],[0,0],[1,-1],[0.45,-1.35],[0,0],[0,0],[1.56,0],[0.49,1.48],[0,0],[0,0],[1,1],[1.35,0.45],[0,0],[0,1.56],[-1.48,0.49],[0,0],[-1,1],[-0.45,1.35],[0,0],[0,0],[-1.56,0]],"o":[[1.56,0],[0,0],[0,0],[0.45,1.35],[1,1],[0,0],[0,0],[1.48,0.49],[0,1.56],[0,0],[0,0],[-1.35,0.45],[-1,1],[0,0],[0,0],[-0.49,1.48],[-1.56,0],[0,0],[0,0],[-0.45,-1.34],[-1,-1],[0,0],[-1.48,-0.49],[0,-1.56],[0,0],[1.35,-0.45],[1,-1],[0,0],[0,0],[0.49,-1.48],[0,0]],"v":[[84.51,76.62],[87.95,79.1],[90.19,85.82],[90.19,85.82],[92.4,89.39],[95.97,91.59],[95.97,91.59],[102.68,93.83],[105.17,97.28],[102.68,100.72],[95.97,102.96],[95.97,102.96],[92.4,105.17],[90.19,108.74],[90.19,108.74],[87.95,115.45],[84.51,117.94],[81.06,115.45],[78.82,108.74],[78.82,108.74],[76.62,105.17],[73.05,102.96],[66.33,100.72],[63.85,97.28],[66.33,93.83],[73.05,91.59],[76.62,89.39],[78.82,85.82],[78.82,85.82],[81.06,79.1],[84.51,76.62]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[-0.4,-1.21],[0,0],[0,0],[-0.82,-0.82],[-1.1,-0.37],[0,0],[0,0],[0,-1.28],[1.21,-0.4],[0,0],[0,0],[0.82,-0.82],[0.37,-1.1],[0,0],[0,0],[1.28,0],[0.4,1.21],[0,0],[0,0],[0.82,0.82],[1.1,0.37],[0,0],[0,1.28],[-1.21,0.4],[0,0],[-0.82,0.82],[-0.37,1.1],[0,0],[0,0],[-1.28,0]],"o":[[1.28,0],[0,0],[0,0],[0.37,1.1],[0.82,0.82],[0,0],[0,0],[1.21,0.4],[0,1.28],[0,0],[0,0],[-1.1,0.37],[-0.82,0.82],[0,0],[0,0],[-0.4,1.21],[-1.28,0],[0,0],[0,0],[-0.37,-1.1],[-0.82,-0.82],[0,0],[-1.21,-0.4],[0,-1.28],[0,0],[1.1,-0.37],[0.82,-0.82],[0,0],[0,0],[0.4,-1.21],[0,0]],"v":[[68.97,62.53],[71.78,64.56],[73.61,70.04],[73.61,70.04],[75.41,72.95],[78.32,74.75],[78.32,74.75],[83.8,76.58],[85.83,79.39],[83.8,82.2],[78.32,84.03],[78.32,84.03],[75.41,85.83],[73.61,88.75],[73.61,88.75],[71.78,94.22],[68.97,96.25],[66.16,94.22],[64.33,88.75],[64.33,88.75],[62.53,85.83],[59.62,84.03],[54.14,82.2],[52.11,79.39],[54.14,76.58],[59.62,74.75],[62.53,72.95],[64.33,70.04],[64.33,70.04],[66.16,64.56],[68.97,62.53]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[-0.44,-1.34],[0,0],[0,0],[-0.9,-0.9],[-1.21,-0.4],[0,0],[0,0],[0,-1.41],[1.34,-0.44],[0,0],[0,0],[0.9,-0.9],[0.4,-1.21],[0,0],[0,0],[1.41,0],[0.44,1.34],[0,0],[0,0],[0.9,0.9],[1.21,0.4],[0,0],[0,1.41],[-1.34,0.44],[0,0],[-0.9,0.9],[-0.4,1.21],[0,0],[0,0],[-1.41,0]],"o":[[1.41,0],[0,0],[0,0],[0.4,1.21],[0.9,0.9],[0,0],[0,0],[1.34,0.44],[0,1.41],[0,0],[0,0],[-1.21,0.4],[-0.9,0.9],[0,0],[0,0],[-0.44,1.34],[-1.41,0],[0,0],[0,0],[-0.4,-1.21],[-0.9,-0.9],[0,0],[-1.34,-0.44],[0,-1.41],[0,0],[1.21,-0.4],[0.9,-0.9],[0,0],[0,0],[0.44,-1.34],[0,0]],"v":[[76.09,68.98],[79.19,71.22],[81.2,77.27],[81.2,77.27],[83.19,80.48],[86.41,82.47],[86.41,82.47],[92.45,84.48],[94.69,87.59],[92.45,90.69],[86.41,92.7],[86.41,92.7],[83.19,94.69],[81.2,97.9],[81.2,97.9],[79.19,103.95],[76.09,106.19],[72.98,103.95],[70.97,97.9],[70.97,97.9],[68.98,94.69],[65.77,92.7],[59.72,90.69],[57.49,87.59],[59.72,84.48],[65.77,82.47],[68.98,80.48],[70.97,77.27],[70.97,77.27],[72.98,71.22],[76.09,68.98]]}],"t":291}]}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.09,-1.09],[1.34,-0.74],[-1.09,-1.09],[-0.74,-1.34],[-1.09,1.09],[-1.34,0.74],[1.09,1.09],[0.74,1.34]],"o":[[-0.74,1.34],[-1.09,1.09],[1.34,0.74],[1.09,1.09],[0.74,-1.34],[1.09,-1.09],[-1.34,-0.74],[-1.09,-1.09],[0,0]],"v":[[84.51,90.87],[81.75,94.52],[78.1,97.28],[81.75,100.03],[84.51,103.68],[87.26,100.03],[90.91,97.28],[87.26,94.52],[84.51,90.87]]}],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.89,-0.89],[1.09,-0.6],[-0.89,-0.89],[-0.6,-1.09],[-0.89,0.89],[-1.09,0.6],[0.89,0.89],[0.6,1.09]],"o":[[-0.6,1.09],[-0.89,0.89],[1.09,0.6],[0.89,0.89],[0.6,-1.09],[0.89,-0.89],[-1.09,-0.6],[-0.89,-0.89],[0,0]],"v":[[68.97,74.16],[66.72,77.15],[63.74,79.39],[66.72,81.64],[68.97,84.62],[71.22,81.64],[74.2,79.39],[71.22,77.15],[68.97,74.16]]}],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":290},{"s":[{"c":true,"i":[[0,0],[0.98,-0.98],[1.2,-0.67],[-0.98,-0.98],[-0.67,-1.2],[-0.98,0.98],[-1.2,0.67],[0.98,0.98],[0.67,1.2]],"o":[[-0.67,1.2],[-0.98,0.98],[1.2,0.67],[0.98,0.98],[0.67,-1.2],[0.98,-0.98],[-1.2,-0.67],[-0.98,-0.98],[0,0]],"v":[[76.09,81.82],[73.61,85.11],[70.32,87.59],[73.61,90.06],[76.09,93.35],[78.57,90.06],[81.86,87.59],[78.57,85.11],[76.09,81.82]]}],"t":291}]}},{"ty":"st","bm":0,"hd":false,"nm":"","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[1],"t":290},{"s":[1],"t":291}]},"c":{"a":0,"k":[1,1,1]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,1,1]},"r":2,"o":{"a":0,"k":100}}],"ind":11},{"ty":4,"nm":"Ellipse 134","sr":1,"st":0,"op":291.4,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[79.07,79.07]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[90.79,99.57]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":73},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":145},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":146},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43.92856979370117],"t":218},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[43.92856979370117],"t":290},{"s":[43.92856979370117],"t":291}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[43.67,0],[0,43.67],[-43.67,0],[0,-43.67]],"o":[[0,43.67],[-43.67,0],[0,-43.67],[43.67,0],[0,0]],"v":[[158.14,79.07],[79.07,158.14],[0,79.07],[79.07,0],[158.14,79.07]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.8572,0.5747,1]},"r":1,"o":{"a":0,"k":100}}],"ind":12,"parent":2}],"v":"5.7.0","fr":60,"op":290.4,"ip":0,"assets":[]} \ No newline at end of file diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Background.json b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Background.json new file mode 100644 index 0000000000..cff6452945 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Background.json @@ -0,0 +1 @@ +{"nm":"Flow 2","ddd":0,"h":942,"w":1072,"meta":{"g":"LottieFiles Figma v98"},"layers":[{"ty":4,"nm":"Group 427319194","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[339.27,298]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[536.27,471],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[536.27,471],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[537.27,471],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[536.27,471],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[536.27,471],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[537.27,471],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[536.27,471],"t":722},{"s":[536.27,471],"t":723}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[90],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[270],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[360],"t":722},{"s":[360],"t":723}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":1},{"ty":4,"nm":"Ellipse 130","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[137.17,137.17]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[348.92,137.17]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[200],"t":722},{"s":[200],"t":723}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[75.76,0],[0,75.76],[-75.76,0],[0,-75.76]],"o":[[0,75.76],[-75.76,0],[0,-75.76],[75.76,0],[0,0]],"v":[[274.34,137.17],[137.17,274.34],[0,137.17],[137.17,0],[274.34,137.17]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.1961,0.6785,0.902]},"r":1,"o":{"a":0,"k":100}}],"ind":2,"parent":1},{"ty":4,"nm":"Ellipse 133","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[145.74,145.74]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[241.02,368.91]},"r":{"a":0,"k":60},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[200],"t":722},{"s":[200],"t":723}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[80.49,0],[0,80.49],[-80.49,0],[0,-80.49]],"o":[[0,80.49],[-80.49,0],[0,-80.49],[80.49,0],[0,0]],"v":[[291.49,145.74],[145.74,291.49],[0,145.74],[145.74,0],[291.49,145.74]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,0.3777,0.4963]},"r":1,"o":{"a":0,"k":100}}],"ind":3,"parent":1},{"ty":4,"nm":"Ellipse 132","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[145.74,145.74]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[337.83,417.5]},"r":{"a":0,"k":15},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[200],"t":722},{"s":[200],"t":723}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[80.49,0],[0,80.49],[-80.49,0],[0,-80.49]],"o":[[0,80.49],[-80.49,0],[0,-80.49],[80.49,0],[0,0]],"v":[[291.49,145.74],[145.74,291.49],[0,145.74],[145.74,0],[291.49,145.74]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[1,0.1765,0.3334]},"r":1,"o":{"a":0,"k":100}}],"ind":4,"parent":1},{"ty":4,"nm":"Ellipse 131","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[148.6,148.6]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[475.54,362.33]},"r":{"a":0,"k":-60},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[200],"t":722},{"s":[200],"t":723}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[82.07,0],[0,82.07],[-82.07,0],[0,-82.07]],"o":[[0,82.07],[-82.07,0],[0,-82.07],[82.07,0],[0,0]],"v":[[297.2,148.6],[148.6,297.2],[0,148.6],[148.6,0],[297.2,148.6]]}}},{"ty":"gf","bm":0,"hd":false,"nm":"","e":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[294.5639953613281,527.5980224609375],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[294.5639953613281,527.5980224609375],"t":722},{"s":[294.5639953613281,527.5980224609375],"t":723}]},"g":{"p":2,"k":{"a":0,"k":[0,1,0.5843529411764705,0.000039215686274509805,1,1,0.7216078431372549,0.000039215686274509805]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[460.052001953125,267.5459899902344],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[460.052001953125,267.5459899902344],"t":722},{"s":[460.052001953125,267.5459899902344],"t":723}]},"r":1,"o":{"a":0,"k":100}}],"ind":5,"parent":1},{"ty":4,"nm":"Ellipse 134","sr":1,"st":0,"op":723.4,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[154.32,154.32]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[210.8,219.19]},"r":{"a":0,"k":120},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[{"ty":29,"nm":"","en":1,"ef":[{"ty":0,"nm":"sigma","v":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":1},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":181},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":361},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":362},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[200],"t":542},{"h":1,"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[200],"t":722},{"s":[200],"t":723}]}},{"ty":0,"nm":"","v":{"a":0,"k":1}},{"ty":0,"nm":"","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[85.23,0],[0,85.23],[-85.23,0],[0,-85.23]],"o":[[0,85.23],[-85.23,0],[0,-85.23],[85.23,0],[0,0]],"v":[[308.63,154.32],[154.32,308.63],[0,154.32],[154.32,0],[308.63,154.32]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.8572,0.5747,1]},"r":1,"o":{"a":0,"k":100}}],"ind":6,"parent":1}],"v":"5.7.0","fr":60,"op":722.4,"ip":0,"assets":[]} \ No newline at end of file diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Logo.json b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Logo.json new file mode 100644 index 0000000000..94cb6a979c --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/anim/Mira-Logo.json @@ -0,0 +1 @@ +{"nm":"newScene","ddd":0,"h":395,"w":468,"meta":{"g":"SVG to Lottie v1.0.0"},"layers":[{"ty":4,"nm":"","sr":1,"st":0,"op":190,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[255,95],[410,202.5],[410,288.5],[255,181],[255,95]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0,0.7216,0.4118]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":16},{"s":[100,100],"t":120}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[234,197.5],"t":16},{"s":[0,0],"t":120}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":16},{"s":[100],"t":120}]}}]},{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[115,95],[270,202.5],[270,288.5],[115,181],[115,95]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0,0.7216,0.4118]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":8},{"s":[100,100],"t":80}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[234,197.5],"t":8},{"s":[0,0],"t":80}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":8},{"s":[100],"t":80}]}}]},{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"rc","bm":0,"hd":false,"nm":"","d":1,"p":{"a":0,"k":[90,245.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[86,86]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0,0.7216,0.4118]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0,0],"t":0},{"s":[100,100],"t":40}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[234,197.5],"t":0},{"s":[0,0],"t":40}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.34,"y":1.55},"i":{"x":0.65,"y":1},"s":[0],"t":0},{"s":[100],"t":40}]}}]}],"ind":1}],"v":"5.7.0","fr":60,"op":190,"ip":0,"assets":[]} \ No newline at end of file diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/chat-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/chat-icon.svg new file mode 100644 index 0000000000..af59b9374c --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/chat-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/color-mira-logo.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/color-mira-logo.svg new file mode 100644 index 0000000000..d140075a47 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/color-mira-logo.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/exit-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/exit-icon.svg new file mode 100644 index 0000000000..2efe0659b5 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/exit-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/light_dark_mode-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/light_dark_mode-icon.svg new file mode 100644 index 0000000000..fee5fbbdb1 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/light_dark_mode-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/menu-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/menu-icon.svg new file mode 100644 index 0000000000..71d4cb3816 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/menu-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/recenter-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/recenter-icon.svg new file mode 100644 index 0000000000..c15bb5a56d --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/recenter-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/shield-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/shield-icon.svg new file mode 100644 index 0000000000..dcbab8784a --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/shield-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/white-mira-logo.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/white-mira-logo.svg new file mode 100644 index 0000000000..fa81257606 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/white-mira-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-in-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-in-icon.svg new file mode 100644 index 0000000000..f534d46fd7 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-in-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-out-icon.svg b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-out-icon.svg new file mode 100644 index 0000000000..8c34e3c548 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/public/figma-parth-assets/icons/zoom-out-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/miniapps/mentra-ai-local/miniapp/src/shared/channels.ts b/miniapps/mentra-ai-local/miniapp/src/shared/channels.ts new file mode 100644 index 0000000000..40926efc97 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/shared/channels.ts @@ -0,0 +1,54 @@ +/** + * Typed channel registry — the contract between the background JSContext and + * the UI WebView. Both bundles import this for type-safety; the bundler + * inlines it (no runtime cross-bundle import). + * + * Broadcasts (background → UI) replace the cloud app's SSE stream. + * RPC channels (UI → background, request/response) replace its REST endpoints. + */ + +import type {Rpc} from "@mentra/miniapp/ui" +import type {ChatEvent, ChatMessage, DebugSpeakResult, DebugTranscript, Settings, Theme} from "./types" + +export interface Channels { + // ── background → UI broadcasts ─────────────────────────────── + /** Every chat event (message / processing / idle / wake_word / status). */ + "chat:event": ChatEvent + /** Pushed when settings change server-side (e.g. theme set elsewhere). */ + "settings:update": Settings + /** Raw transcription events for the debug overlay's transcription feed. */ + "debug:transcript": DebugTranscript + + // ── UI → background RPC (request/response) ─────────────────── + /** Full message history snapshot for hydrating a freshly-opened webview. */ + "chat:get-history": Rpc + /** Clear the in-memory conversation + on-screen history. */ + "chat:clear": Rpc + /** + * Dev-only: ask a question by text (no wake word / voice). Routes through the + * same QueryProcessor pipeline as a spoken query; the answer comes back over + * the regular chat:event broadcast. Used by the debug text input. + */ + "chat:ask": Rpc<{query: string}, void> + /** Read current settings. */ + "settings:get": Rpc + /** Patch settings (theme and/or chatHistoryEnabled); returns the merged result. */ + "settings:set": Rpc, Settings> + /** Convenience: set just the theme. */ + "settings:set-theme": Rpc + /** Open a URL in the phone's system browser (e.g. an agent OAuth connect link). */ + "system:open-url": Rpc<{url: string}, void> + /** Debug: speak a fixed phrase through the glasses; returns the device outcome. */ + "debug:speak": Rpc<{text: string}, DebugSpeakResult> + /** + * Debug: start/stop a 30×30 spinner animation pinned to the bottom-right of + * the glasses HUD. `running` reflects the resulting state; `error` is set when + * the glasses have no display. + */ + "debug:spinner": Rpc<{action: "start" | "stop"}, {running: boolean; error?: string}> +} + +declare global { + // eslint-disable-next-line no-var + var mentra: import("@mentra/miniapp/ui").MentraTyped +} diff --git a/miniapps/mentra-ai-local/miniapp/src/shared/types.ts b/miniapps/mentra-ai-local/miniapp/src/shared/types.ts new file mode 100644 index 0000000000..062e854855 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/shared/types.ts @@ -0,0 +1,135 @@ +/** + * Shared domain types — imported by BOTH the background and UI bundles. + * + * Data only (no functions, no SDK imports) so the bundler can inline this + * file into each bundle independently with no runtime cross-bundle import. + */ + +export type Theme = "light" | "dark" + +/** A tappable action on a message (e.g. an OAuth "Connect" link from the agent). */ +export interface AgentAction { + type: "open_url" + kind: "oauth_connect" | "link" + url: string +} + +// ── App control (Mentra AI as a system app) ────────────────────── + +/** A declared action another miniapp exposes (mirrors the SDK's MiniappActionInfo). */ +export interface AvailableAction { + id: string + description: string + /** JSON-Schema input descriptor; undefined for no-param actions. */ + parameters?: Record +} + +/** A miniapp the agent can control, with its declared actions. Sent in context. */ +export interface AvailableApp { + packageName: string + name: string + running: boolean + actions: AvailableAction[] +} + +/** + * An app-control action the BACKEND agent decided on and the BACKGROUND executes + * after the response (via session.miniapps.* / session.actions.invoke). Deferred + * + fire-and-forget, like the open_url AgentAction. + */ +export type DeviceAction = + | {type: "start_app"; packageName: string} + | {type: "stop_app"; packageName: string} + | {type: "invoke_action"; packageName: string; actionId: string; params?: Record} + +/** A single chat message rendered in the webview. */ +export interface ChatMessage { + id: string + /** "user" for the wearer, "mentra-ai" for the assistant. */ + senderId: string + content: string + /** ISO 8601. */ + timestamp: string + /** Optional data: URL of the photo captured for this turn (user messages). */ + image?: string + /** Action buttons (e.g. an OAuth connect link) on an assistant message. */ + actions?: AgentAction[] +} + +/** + * Chat events streamed from background → UI. Mirrors the cloud app's SSE + * `broadcastChatEvent` payloads 1:1 so the ported ChatInterface logic is + * unchanged — only the transport (SDK channel vs EventSource) differs. + */ +export type ChatEvent = + | ({type: "message"} & ChatMessage) + | {type: "processing"} + | {type: "idle"} + | {type: "wake_word"} + | {type: "history"; messages: ChatMessage[]} + | {type: "status"; status: string} + +/** + * A selectable AI model. Mirrors the backend's model registry + * (backend/src/services/models.ts). `id` is the OpenRouter slug sent with each + * agent request. `visionCapable` is false for text-only models (e.g. DeepSeek + * via OpenRouter) — those can't do Mentra Live photo analysis. + */ +export interface ModelOption { + id: string + label: string + provider: string + visionCapable: boolean +} + +/** The models the user can pick in settings. Keep in sync with the backend. */ +export const MODEL_OPTIONS: readonly ModelOption[] = [ + {id: "google/gemini-3.1-flash-lite-preview", label: "Gemini 3.1 Flash Lite", provider: "Google", visionCapable: true}, + {id: "anthropic/claude-haiku-4.5", label: "Claude Haiku 4.5", provider: "Anthropic", visionCapable: true}, + {id: "openai/gpt-5-mini", label: "GPT-5 Mini", provider: "OpenAI", visionCapable: true}, + {id: "x-ai/grok-4.3", label: "Grok 4.3", provider: "xAI", visionCapable: true}, + {id: "deepseek/deepseek-v4-flash", label: "DeepSeek V4 Flash", provider: "DeepSeek", visionCapable: false}, +] as const + +/** Default model id — the Gemini option (closest to the pre-OpenRouter behavior). */ +export const DEFAULT_MODEL_ID = MODEL_OPTIONS[0].id + +/** User-configurable settings, persisted in session.storage as JSON. */ +export interface Settings { + theme: Theme + /** When true, prior turns are fed back to the agent as conversation context. */ + chatHistoryEnabled: boolean + /** OpenRouter model slug for the agent (one of MODEL_OPTIONS ids). */ + model: string +} + +export const DEFAULT_SETTINGS: Settings = { + theme: "dark", + chatHistoryEnabled: false, + model: DEFAULT_MODEL_ID, +} + +// ── Debug overlay ──────────────────────────────────────────────── + +/** A raw transcription event surfaced in the debug overlay's feed. */ +export interface DebugTranscript { + text: string + isFinal: boolean +} + +/** Result of the debug "Run TTS test" action, reported back to the overlay log. */ +export interface DebugSpeakResult { + /** True if the speak request was accepted (a speaker is present). */ + accepted: boolean + /** True iff playback completed (false = interrupted, null = not reported). */ + completed: boolean | null + /** Snapshot of the connected glasses' capabilities at test time. */ + capabilities: { + modelName?: string + hasSpeaker: boolean + hasDisplay: boolean + hasCamera: boolean + } + /** Populated when the request couldn't be made (e.g. no speaker). */ + error?: string +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/App.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/App.tsx new file mode 100644 index 0000000000..b2e3c2ea03 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/App.tsx @@ -0,0 +1,137 @@ +import { useState, useEffect, useCallback, useRef, createContext, useContext } from 'react'; +import { useSafeArea } from '@mentra/miniapp/ui'; +import { useMentraAuth } from './lib/localAuth'; +import { motion, AnimatePresence } from 'framer-motion'; +import ChatInterface from './pages/ChatInterface'; +import { DebugOverlay } from './components/DebugOverlay'; + +// Theme Context +interface ThemeContextValue { + theme: 'light' | 'dark'; + isDarkMode: boolean; + toggleTheme: () => void; +} + +const ThemeContext = createContext({ + theme: 'light', + isDarkMode: false, + toggleTheme: () => {}, +}); + +export function useTheme() { + return useContext(ThemeContext); +} + +export default function App() { + const { userId, frontendToken, isLoading, error, isAuthenticated } = useMentraAuth(); + // Device safe-area insets (notch / status bar / home indicator) from the host. + const { insets } = useSafeArea(); + + // Light-only app: the theme toggle was removed. Theme is locked to 'light' + // and toggleTheme is a no-op (kept so ThemeContext consumers still compile). + const theme = 'light' as const; + const toggleTheme = useCallback(() => {}, []); + + // Keep the document root out of dark mode regardless of any stale class/state. + useEffect(() => { + document.documentElement.classList.remove('dark'); + }, []); + + // Debug overlay — opened by the hidden 10-tap on the settings header, + // persisted in localStorage so it survives a reload. + const [debugMode, setDebugMode] = useState( + () => localStorage.getItem('mentra-debug-mode') === 'true', + ); + const [debugToast, setDebugToast] = useState(null); + const toastTimerRef = useRef | null>(null); + + const showDebugToast = useCallback((message: string) => { + setDebugToast(message); + if (toastTimerRef.current) clearTimeout(toastTimerRef.current); + toastTimerRef.current = setTimeout(() => setDebugToast(null), 2000); + }, []); + + const enableDebugMode = useCallback(() => { + if (debugMode) return; + localStorage.setItem('mentra-debug-mode', 'true'); + setDebugMode(true); + showDebugToast('Debug mode enabled'); + }, [debugMode, showDebugToast]); + + const disableDebugMode = useCallback(() => { + localStorage.removeItem('mentra-debug-mode'); + setDebugMode(false); + showDebugToast('Debug mode disabled'); + }, [showDebugToast]); + + // Loading state + if (isLoading) { + return ( +
+
+
+

Loading...

+
+
+ ); + } + + // Error state + if (error) { + return ( +
+
+

Something went wrong

+

{error}

+
+
+ ); + } + + return ( + +
+ + + {/* Debug overlay — rendered outside ChatInterface so it appears on all pages */} + {debugMode && } + + {/* Debug toast */} + + {debugToast && ( + + + {debugToast} + + + )} + +
+
+ ); +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/api/settings.api.ts b/miniapps/mentra-ai-local/miniapp/src/ui/api/settings.api.ts new file mode 100644 index 0000000000..37f2a203fe --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/api/settings.api.ts @@ -0,0 +1,65 @@ +/** + * User settings API — local channel-RPC implementation. + * + * The cloud app hit `/api/settings` (GET/PATCH) over authenticated HTTP. The + * local miniapp has no server, so these route to the background via the + * `settings:*` channel RPC instead. The exported function names/signatures are + * unchanged (the `frontendToken` arg is ignored) so the copied components + * compile and call them exactly as before. + */ + +import "../../shared/channels" +import type {Settings} from "../../shared/types" + +export interface UserSettings { + userId: string + theme: "light" | "dark" + chatHistoryEnabled: boolean + /** OpenRouter model slug for the agent (one of MODEL_OPTIONS ids). */ + model: string + createdAt?: string + updatedAt?: string +} + +function toUserSettings(s: Settings): UserSettings { + return { + userId: "local-user", + theme: s.theme, + chatHistoryEnabled: s.chatHistoryEnabled, + model: s.model, + } +} + +export const fetchUserSettings = async (_frontendToken?: string | null): Promise => { + const settings = await mentra.request("settings:get", undefined as never) + return toUserSettings(settings) +} + +export const updateUserSettings = async ( + _frontendToken: string | null, + updates: Partial>, +): Promise => { + const settings = await mentra.request("settings:set", { + ...(updates.theme !== undefined ? {theme: updates.theme} : {}), + ...(updates.chatHistoryEnabled !== undefined + ? {chatHistoryEnabled: updates.chatHistoryEnabled} + : {}), + ...(updates.model !== undefined ? {model: updates.model} : {}), + }) + return toUserSettings(settings) +} + +export const updateModel = async ( + frontendToken: string | null, + model: string, +): Promise => updateUserSettings(frontendToken, {model}) + +export const updateTheme = async ( + frontendToken: string | null, + theme: "light" | "dark", +): Promise => updateUserSettings(frontendToken, {theme}) + +export const updateChatHistoryEnabled = async ( + frontendToken: string | null, + chatHistoryEnabled: boolean, +): Promise => updateUserSettings(frontendToken, {chatHistoryEnabled}) diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/BottomHeader.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/BottomHeader.tsx new file mode 100644 index 0000000000..2c4e4f0111 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/BottomHeader.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; + +// @ts-ignore - SVG import +import WhiteMiraLogo from '../../public/figma-parth-assets/icons/white-mira-logo.svg'; + +interface BottomHeaderProps { + isDarkMode: boolean; + isVisible: boolean; +} + +/** + * Bottom header component that stays fixed at the bottom + * with backdrop blur effect + */ +function BottomHeader({ isVisible }: BottomHeaderProps) { + return ( + + {isVisible && ( + +

+ Mentra Logo +
+ start with "Hey Mentra" +
+

+
+ )} +
+ ); +} + +export default BottomHeader; diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.css b/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.css new file mode 100644 index 0000000000..9fc4f9a707 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.css @@ -0,0 +1,85 @@ +@property --angle { + syntax: ""; + initial-value: 0deg; + inherits: false; +} + +@keyframes chromatic-rotate { + from { --angle: 0deg; } + to { --angle: 360deg; } +} + +@keyframes chromatic-pulse-opacity { + 0%, 100% { opacity: 0.3; } + 50% { opacity: 0.8; } +} + +/* Base glow layer */ +.chromatic-glow { + position: absolute; + inset: 0; + transition: opacity 0.3s ease-out; + backface-visibility: hidden; +} + +/* Primary glow - clockwise */ +.chromatic-glow-1 { + background: conic-gradient( + from var(--angle), + #c4507a, + #b070c0, + #7080c8, + #60a8c8, + #60b890, + #c0b868, + #c88860, + #c4507a + ); + animation: chromatic-rotate 3.5s linear infinite; +} + +/* Secondary glow - counter-clockwise, diffused */ +.chromatic-glow-2 { + background: conic-gradient( + from calc(360deg - var(--angle)), + #c4507a, + #b070c0, + #7080c8, + #60a8c8, + #60b890, + #c0b868, + #c88860, + #c4507a + ); + animation: chromatic-rotate 5s linear infinite; + filter: blur(10px); +} + +/* State: idle */ +.chromatic-idle { + opacity: 0; +} + +/* State: active */ +.chromatic-active.chromatic-glow-1 { + opacity: 0.85; +} +.chromatic-active.chromatic-glow-2 { + opacity: 0.5; +} + +/* State: pulse */ +.chromatic-pulse.chromatic-glow-1 { + animation: chromatic-rotate 3.5s linear infinite, chromatic-pulse-opacity 2.5s ease-in-out infinite; +} +.chromatic-pulse.chromatic-glow-2 { + animation: chromatic-rotate 5s linear infinite, chromatic-pulse-opacity 2.5s ease-in-out infinite; + animation-delay: 0s, -1.25s; +} + +/* Cover - foggy transition from glow to clean center */ +.chromatic-cover { + position: absolute; + z-index: 1; + filter: blur(20px); +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.tsx new file mode 100644 index 0000000000..dcb3b0676f --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/ChromaticBorder.tsx @@ -0,0 +1,53 @@ +import { memo } from "react"; +import "./ChromaticBorder.css"; + +interface ChromaticBorderProps { + state?: "idle" | "active" | "pulse"; + borderRadius?: number; +} + +export const ChromaticBorder = memo(function ChromaticBorder({ + state = "active", + borderRadius = 0, +}: ChromaticBorderProps) { + const glowClass = + state === "pulse" + ? "chromatic-pulse" + : state === "active" + ? "chromatic-active" + : "chromatic-idle"; + + return ( +
+
+
+
+
+ ); +}); diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/DebugOverlay.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/DebugOverlay.tsx new file mode 100644 index 0000000000..8d0700b23b --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/DebugOverlay.tsx @@ -0,0 +1,253 @@ +import {useState, useEffect, useRef, useCallback} from "react" +import {TtsTestButton} from "./debug/TtsTestButton" +import {WakeGlowButton} from "./debug/WakeGlowButton" +import {SpinnerButton} from "./debug/SpinnerButton" +import "../../shared/channels" +import type {DebugTranscript} from "../../shared/types" + +interface TranscriptionEntry { + id: number + text: string + isFinal: boolean + timestamp: string +} + +interface DebugOverlayProps { + onClose: () => void +} + +type DebugTab = "transcription" | "buttons" + +/** + * Draggable dev overlay (10-tap on the settings header to open). Ported from + * the cloud app: the Transcription tab's live feed now comes from the + * `debug:transcript` channel (was an /api/transcription-stream SSE), and the + * Buttons tab's TTS test goes through the `debug:speak` RPC. The cloud + * start/popping sound-test buttons are dropped (no local audio asset). + */ +export function DebugOverlay({onClose}: DebugOverlayProps) { + const [entries, setEntries] = useState([]) + const [tab, setTab] = useState("transcription") + const [actionLog, setActionLog] = useState<{id: number; text: string; time: string}[]>([]) + const idCounterRef = useRef(0) + const actionIdRef = useRef(0) + const listEndRef = useRef(null) + + const [position, setPosition] = useState({x: 16, y: window.innerHeight - 320}) + const dragRef = useRef<{startX: number; startY: number; startPosX: number; startPosY: number} | null>( + null, + ) + const panelRef = useRef(null) + + const addActionLog = useCallback((text: string) => { + setActionLog((prev) => + [ + { + id: actionIdRef.current++, + text, + time: new Date().toLocaleTimeString([], { + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }), + }, + ...prev, + ].slice(0, 30), + ) + }, []) + + useEffect(() => { + if (tab === "transcription") { + listEndRef.current?.scrollIntoView({behavior: "smooth"}) + } + }, [entries, tab]) + + // Live transcription feed over the background channel (was SSE in the cloud app). + useEffect(() => { + const off = mentra.on("debug:transcript", (data: DebugTranscript) => { + const entry: TranscriptionEntry = { + id: idCounterRef.current++, + text: data.text, + isFinal: data.isFinal ?? false, + timestamp: new Date().toLocaleTimeString([], { + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }), + } + setEntries((prev) => { + // Replace the trailing partial entry when a newer one (partial or final) arrives. + if (prev.length > 0 && !prev[prev.length - 1].isFinal) { + const updated = [...prev] + updated[updated.length - 1] = entry + return updated + } + return [...prev, entry] + }) + }) + return off + }, []) + + // ── Drag handlers (shared by touch + mouse) ─────────────────────── + const beginDrag = useCallback( + (clientX: number, clientY: number) => { + dragRef.current = { + startX: clientX, + startY: clientY, + startPosX: position.x, + startPosY: position.y, + } + }, + [position], + ) + + const moveDrag = useCallback((clientX: number, clientY: number) => { + if (!dragRef.current) return + const dx = clientX - dragRef.current.startX + const dy = clientY - dragRef.current.startY + const maxX = window.innerWidth - (panelRef.current?.offsetWidth ?? 200) + const maxY = window.innerHeight - (panelRef.current?.offsetHeight ?? 200) + setPosition({ + x: Math.max(0, Math.min(dragRef.current.startPosX + dx, maxX)), + y: Math.max(0, Math.min(dragRef.current.startPosY + dy, maxY)), + }) + }, []) + + const endDrag = useCallback(() => { + dragRef.current = null + }, []) + + const handleTouchStart = useCallback( + (e: React.TouchEvent) => { + const t = e.touches[0] + beginDrag(t.clientX, t.clientY) + }, + [beginDrag], + ) + + const handleTouchMove = useCallback( + (e: React.TouchEvent) => { + if (!dragRef.current) return + e.preventDefault() + const t = e.touches[0] + moveDrag(t.clientX, t.clientY) + }, + [moveDrag], + ) + + const handleMouseDown = useCallback( + (e: React.MouseEvent) => { + beginDrag(e.clientX, e.clientY) + const onMove = (ev: MouseEvent) => moveDrag(ev.clientX, ev.clientY) + const onUp = () => { + endDrag() + window.removeEventListener("mousemove", onMove) + window.removeEventListener("mouseup", onUp) + } + window.addEventListener("mousemove", onMove) + window.addEventListener("mouseup", onUp) + }, + [beginDrag, moveDrag, endDrag], + ) + + const tabBtn = (id: DebugTab, label: string) => ( + + ) + + return ( +
+ {/* Drag handle + close */} +
+
+ 🛠️ + Debug +
+ +
+ + {/* Tab bar */} +
+ {tabBtn("transcription", "Transcription")} + {tabBtn("buttons", "Buttons")} +
+ + {/* ── Transcription tab ── */} + {tab === "transcription" && ( +
+ {entries.length === 0 && ( +

Listening...

+ )} + {entries.map((entry) => ( +
+ + {entry.timestamp} + + + {entry.text} + +
+ ))} +
+
+ )} + + {/* ── Buttons tab ── */} + {tab === "buttons" && ( +
+
+ + + +
+
+ {actionLog.length === 0 && ( +

Tap a button to test it.

+ )} + {actionLog.map((line) => ( +
+ + {line.time} + + {line.text} +
+ ))} +
+
+ )} +
+ ) +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/Header.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/Header.tsx new file mode 100644 index 0000000000..5d914a42de --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/Header.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { Settings, ArrowLeft } from 'lucide-react'; + +interface HeaderProps { + isDarkMode: boolean; + onToggleDarkMode: () => void; + onSettingsClick: () => void; + showBackArrow?: boolean; +} + +/** + * Header component with Menu button (left) and Settings button (right) + */ +function Header({ + onSettingsClick, + showBackArrow = false +}: HeaderProps) { + return ( +
+ {/* Left side - Back arrow (settings page), Settings button, or Menu button */} + {showBackArrow ? ( + + ) : ( + + )} + + {/* Right side - spacer */} +
+
+ ); +} + +export default Header; diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.css b/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.css new file mode 100644 index 0000000000..ec78923eba --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.css @@ -0,0 +1,99 @@ +@keyframes mira-rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.mira-bg-container { + animation: mira-rotate 24s linear infinite; + position: relative; + width: 100%; + height: 100%; +} + +.mira-circle { + position: absolute; + border-radius: 100%; + filter: blur(60px); + will-change: transform; + opacity: 0.5; +} + +/* Blue circle - top (0/360 - 12 o'clock) */ +.mira-circle-1 { + width: 304px; + height: 204px; + background: #32ade6; + top: 36%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 100; + opacity: .8; +} + +/* Pink circle - bottom left (72 - 2:24 position) */ +.mira-circle-2 { + width: 304px; + height: 204px; + background: #ff607F; + top: 45%; + left:-30%; + transform: translate(50%, -70%); + rotate: 72deg; +} + +/* Red circle - bottom right (144 - 4:48 position) */ +.mira-circle-3 { + width: 304px; + height: 204px; + background: #ff2d55; + top: 55%; + right: 22%; + transform: translate(-15%, -70%); + rotate: 32deg; +} + +/* Green gradient circle - top right (216 - 7:12 position) */ +.mira-circle-4 { + width: 304px; + height: 204px; + background: radial-gradient(circle at center, #FF9500, #ffff00); + top: 45%; + right: 18%; + transform: translate(-20%, -90%); + rotate: 70deg; + opacity: .5; +} + +/* Purple circle - top left (288 - 9:36 position) */ +.mira-circle-5 { + width: 304px; + height: 204px; + background: #DB93FF; + top: 45%; + left: 20%; + transform: translate(30%, -70%); + rotate: -80deg; +} + +/* Reduced motion support */ +@media (prefers-reduced-motion: reduce) { + .mira-bg-container { + animation: none; + } +} + +/* Performance optimization for smaller screens */ +@media (max-width: 204px) { + .mira-circle-1, + .mira-circle-2, + .mira-circle-3, + .mira-circle-4, + .mira-circle-5 { + width: 300px; + height: 300px; + } +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.tsx new file mode 100644 index 0000000000..8434e5146e --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/MiraBackgroundAnimation.tsx @@ -0,0 +1,26 @@ +import './MiraBackgroundAnimation.css'; + +interface MiraBackgroundAnimationProps { + className?: string; +} + +export const MiraBackgroundAnimation: React.FC = ({ className }) => { + return ( +
+ {/* Blue circle - top right */} +
+ + {/* Pink circle - bottom left */} +
+ + {/* Red circle - bottom center */} +
+ + {/* Green gradient circle - right side */} +
+ + {/* Purple circle - top left */} +
+
+ ); +}; diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.css b/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.css new file mode 100644 index 0000000000..b5d5bf6e53 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.css @@ -0,0 +1,84 @@ +/** + * SettingsBackground — subtle living gradient backdrop for the Settings page. + * + * The colorful blobs are split across two layers (warm + cool) that very slowly + * drift, scale, and counter-rotate on long, offset loops. Everything sits under + * a heavy blur, so even a few px of motion reads as a soft, organic "breathing" + * glow rather than anything that draws the eye. Honors reduced-motion. + */ + +.settings-bg { + position: absolute; + inset: 0; + overflow: hidden; + background-color: #ffffff; + pointer-events: none; +} + +.settings-bg__layer { + position: absolute; + /* Oversize each layer so its motion never reveals a hard edge. */ + inset: -25%; + filter: blur(34px) saturate(104%); + will-change: transform, opacity; +} + +/* Warm blobs (pink / coral / peach) — drift up-right while gently breathing. */ +.settings-bg__warm { + background-image: + radial-gradient(ellipse 72% 72% at 82% 98% in oklab, oklab(70.8% 0.198 0.009 / 82%) 0%, oklab(70.8% 0.198 0.009 / 0%) 60%), + radial-gradient(ellipse 92% 84% at 52% 114% in oklab, oklab(77.2% 0.094 0.116 / 88%) 0%, oklab(77.2% 0.094 0.116 / 0%) 56%); + animation: settings-bg-warm 18s ease-in-out infinite alternate; +} + +/* Cool blobs (blue / violet) — drift the opposite way on a different period. */ +.settings-bg__cool { + background-image: + radial-gradient(ellipse 80% 75% at 26% 102% in oklab, oklab(69.7% -0.002 -0.158 / 80%) 0%, oklab(69.7% -0.002 -0.158 / 0%) 60%), + radial-gradient(ellipse 58% 66% at 60% 86% in oklab, oklab(70.7% 0.096 -0.157 / 48%) 0%, oklab(70.7% 0.096 -0.157 / 0%) 62%); + animation: settings-bg-cool 23s ease-in-out infinite alternate; +} + +@keyframes settings-bg-warm { + 0% { + transform: translate3d(0, 0, 0) scale(1) rotate(0deg); + opacity: 0.92; + } + 50% { + transform: translate3d(2.5%, -2%, 0) scale(1.06) rotate(2deg); + opacity: 1; + } + 100% { + transform: translate3d(-1.5%, -3.5%, 0) scale(1.03) rotate(-1.5deg); + opacity: 0.95; + } +} + +@keyframes settings-bg-cool { + 0% { + transform: translate3d(0, 0, 0) scale(1.04) rotate(0deg); + opacity: 0.95; + } + 50% { + transform: translate3d(-3%, 1.5%, 0) scale(1) rotate(-2.5deg); + opacity: 1; + } + 100% { + transform: translate3d(2%, 3%, 0) scale(1.07) rotate(1.5deg); + opacity: 0.9; + } +} + +@media (prefers-reduced-motion: reduce) { + .settings-bg__warm, + .settings-bg__cool { + animation: none; + } +} + +/* Freeze the drifting blobs while a bottom sheet is open — a moving blurred + layer behind the sheet's backdrop-blur is expensive and makes the open lag. */ +body.sheet-open .settings-bg__warm, +body.sheet-open .settings-bg__cool { + animation-play-state: paused; +} diff --git a/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.tsx b/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.tsx new file mode 100644 index 0000000000..52b1f2ef58 --- /dev/null +++ b/miniapps/mentra-ai-local/miniapp/src/ui/components/SettingsBackground.tsx @@ -0,0 +1,15 @@ +import './SettingsBackground.css'; + +/** + * Animated gradient backdrop for the Settings page. Two blurred blob layers + * (warm + cool) drift on long, offset loops for a subtle living-glow feel. + * Purely decorative — non-interactive and behind all content. + */ +export default function SettingsBackground() { + return ( +