[
  {
    "path": ".firebaserc",
    "content": "{\n  \"projects\": {\n    \"default\": \"aujourdhuilavenir\"\n  }\n}\n"
  },
  {
    "path": ".github/workflows/firebase-hosting-pull-request.yml",
    "content": "# This file was auto-generated by the Firebase CLI\n# https://github.com/firebase/firebase-tools\n\nname: Deploy to Firebase Hosting on PR\n'on': pull_request\npermissions:\n  checks: write\n  contents: read\n  pull-requests: write\njobs:\n  build_and_preview:\n    if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: subosito/flutter-action@v2\n        with:\n          channel: 'stable'\n      - run: flutter build web --release\n      - uses: FirebaseExtended/action-hosting-deploy@v0\n        with:\n          repoToken: '${{ secrets.GITHUB_TOKEN }}'\n          firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AUJOURDHUILAVENIR }}'\n          projectId: aujourdhuilavenir\n"
  },
  {
    "path": ".github/workflows/flutter_dep_get.yml",
    "content": "# An action to update flutter dep\n\nname: Deploy on merge with cache clearing\n'on':\n  push:\n    branches:\n      - main\njobs:\n  build_and_deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: subosito/flutter-action@v2\n        with:\n          channel: 'stable'\n      - run: flutter clean\n      - run: flutter pub upgrade\n      - run: flutter build web --release\n      - uses: FirebaseExtended/action-hosting-deploy@v0\n        with:\n          repoToken: '${{ secrets.GITHUB_TOKEN }}'\n          firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AUJOURDHUILAVENIR }}'\n          channelId: live\n          projectId: aujourdhuilavenir\n"
  },
  {
    "path": ".hintrc",
    "content": "{\n  \"extends\": [\n    \"development\"\n  ],\n  \"hints\": {\n    \"meta-viewport\": \"off\"\n  }\n}"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: \"a14f74ff3a1cbd521163c5f03d68113d50af93d3\"\n  channel: \"stable\"\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3\n      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3\n    - platform: web\n      create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3\n      base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "README.md",
    "content": "Visit [Aujourd'hui l'avenir](https://aujourdhuilavenir.org) to see how the website looks like.\n\n"
  },
  {
    "path": "analysis_options.yaml",
    "content": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n# The issues identified by the analyzer are surfaced in the UI of Dart-enabled\n# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be\n# invoked from the command line by running `flutter analyze`.\n\n# The following line activates a set of recommended lints for Flutter apps,\n# packages, and plugins designed to encourage good coding practices.\ninclude: package:flutter_lints/flutter.yaml\n\nlinter:\n  # The lint rules applied to this project can be customized in the\n  # section below to disable rules from the `package:flutter_lints/flutter.yaml`\n  # included above or to enable additional rules. A list of all available lints\n  # and their documentation is published at https://dart.dev/lints.\n  #\n  # Instead of disabling a lint rule for the entire project in the\n  # section below, it can also be suppressed for a single line of code\n  # or a specific dart file by using the `// ignore: name_of_lint` and\n  # `// ignore_for_file: name_of_lint` syntax on the line or in the file\n  # producing the lint.\n  rules:\n    # avoid_print: false  # Uncomment to disable the `avoid_print` rule\n    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule\n\n# Additional information about this file can be found at\n# https://dart.dev/guides/language/analysis-options\n"
  },
  {
    "path": "assets/animations/loading.json",
    "content": "{\"v\":\"4.8.0\",\"meta\":{\"g\":\"LottieFiles AE 3.5.7\",\"a\":\"\",\"k\":\"\",\"d\":\"\",\"tc\":\"\"},\"fr\":120,\"ip\":0,\"op\":1200,\"w\":3000,\"h\":3000,\"nm\":\"loading composition\",\"ddd\":0,\"assets\":[{\"id\":\"image_0\",\"w\":55,\"h\":45,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAtCAYAAAAKlvO7AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADQUlEQVRoge2aT1baQBzHvzMRulGRE5QbFE9QbmB6AmEjj50uKfoaXxvd4ooHG+EGeILGG+AN6AkwqStD5teFgCEJIX8mKL5+NjBMmPl9mMn8C8B/thMW9cKJdnug5GyVQZQJrPxaAI0IfOTYuWFRqz1mE2Yy1spNrjslxeEaGI7XlkYYOIrQis3GWEZwT3qvDAC7rZNRku+Hypl6V2PAj/iF0s3U/qTFbUnrqqtCQAWDCqDgyf4DgsFI9PcuGka0OAJ46YLPQwBf4wTnDYaDqVF+deuqq4LQBvA5Ytn3TAhtnaRPbqLdHig7zwYYvkSsKAwTYKf7rZN+UObsPu4DdJSkcAIuC626tirfJ2fpvWHSylbDal5BaT8iYeBM86dBtwB3J6yrripfDADo1tJ71XnqSe+VldzzSErvYDh+af2gLBeW3h0jer+PDQc7BAABMuAfMFIR1EUXcn9/dirE+W+ZFQZgzl6lis3hYIfuAey1W3KmZlGhhwIyEgMAAWju9ELOverYXuhoct0pzVM85MqtRBFKZf7+w8kxiEUP/HBy7tvrw8m5cQ0oMN4wDomwxUplIccYEm0r3hsE8s9z+9/rQ7xOslsLF8JYvF/KIQw3HYxkTPc2aEnOUYS26WhkQkDbnV6SKzYbYxAGmw1JGqbgou/+wDcVzFpv6+49AtresxufXLHZGBMtL0C3AFPY+bb3w5UHRJbeNZDuDGVzMHybjfZLrFyhOHZexVZ0T3YXJAaEyBW12iMTYhN7vDSYjp2rrsoMXVvuXTQMIpxJD0kSTAg17Gx07cK5cF5vv8/pgdVin1uuwvrVlXNaJQPCYP+8Xl13WeQtjzPNV0B4SBWUDCKKATFaDpg9FBF8hAwPeUKJIQbE3KwWm40xB6vgLaaImGJAgp34butktGlBAi7jigExu6WbJ71XzuLk2EPog5R1JJYDMheM/AhsFakOiLLrouzOsfPlNGJAypabI7EFTSJohfO6b4WfBClygARBwgNnrJq2tdxIkwMSC5oEtMOekCZFqhwQW/De4aIq698PXqTLAZEEUw3xUcnkON01it578xjoxrHzpazFXurKmMl1p7QzRQkApjsYZ9UFg/gH1DJFFF6qRFMAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_1\",\"w\":61,\"h\":50,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAyCAYAAADvNNM8AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADfUlEQVRoge2a23XaQBCG/1nxaIRdQdxBSAWhgpztwOIY/EwHoQR4tZMD7mDjBiJ3gCqIqQDL8SPayQOIALqg2wrfvicBw878Z3ZXqxkBH7wPqMifnq9lW1tos8b5ZiCBh0DAPeuqh6qCM0Vm0YuJPG8EGDDYAdBKMZ0z01Q3MDrrqscywS0m8lxoSNJagujr7q/sAWIGQNk9pfKMe1D0YiJPxRIDIv6eK2LAZ6ZREfGLiTy3AgwBvsjqi0DTpYVRlpmWKvr5Wra1YAXgU0bnccyFJnlypWZZjJ9+SgfMI6TPpiR8Zhq1+mqYZpQouqTzGE/UtS/VNM3k6Yec5shuCuwFlpBJWY8V/fdGdpj4d3nn+85o3Oypwf73i4k8tZZaRddtKXyhqRM3wyKiV+uJZ6gqwxHo1u4pZ8vfqRVoF6DPBpz5gUXt/YyLfStrqacwJhgA+MK/kUPAuGAAaK317LCT6fU6nhgKYM8zdcHoVLOGD/va3k92M621YzyAEOZJLYJXvobbHzeZXq/lP7UEcQSEpi/hprbJtBWgfbyQzBMQZHi9Ec38tkUTdCe8juze74EP0e8FsXVV6jHwpUMkNsfR7d3bPUo0NcGEqOj1Pcw/SkQ1EIj/Sd1b05SrAvF6YG/7oWNHNDGmdYdTCyRG2x93RDf7ygXzfb0RGccPBHZmcOSWRRDD2sKpAWaK1Ogiopt95QL0q7aozOLrBkb7X8YeTgILDt7ATh6XZSBB9MqQHONRmSU2y0DKMdTuKUWgsbmYDEM0SKq3Hyz2P918cyuuUpqH+d7u33WSfj74wBE0hFy1UF4NftAQTprBQdFnXfUotHDwWja21bR+SDPJ9Gh5cqVmQlMHL1443R7qogA5W7WmOh/VwJ7du8tU8spVRGj2lQuibrGgjDIPLNHJapy7cmJfqukLE+4LTTJPO7jQmwhAzd2QZBKbdGkUFg0cXXghwUBJ0cBmc1Mw2vSLUFgwUEE1tNlXbr23M/bKCAYqyHTI+lUNF2bbvF5giU7ZF3gqEw2EwvXUTL95t5lfaqQqBtnGQKPdB9Egy0krK5WLBqoUzp7QwimzfuMwIjqkzNtCBBovLQzLrt/4sQ1TQPicmJxVrc4Mxht4dk85WSswBBoHFrVNCl75qYn00xt7xGJgWmxIbaKB8PQGB9Dt9SY3Z6JR61LFFvA+qJB/5nd5iq2mrRcAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_2\",\"w\":66,\"h\":54,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAA2CAYAAABz508/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAD6klEQVRoge2bTX4aNxjGn1dTiBc22CcI2UC9CjcoNyg9QccbqFchJyg+QcmK4g2TG9Q3wCcorIi9cXwCPLiL/GyP3iw6QwYYeb5HTuz/ahBCevxYHyPpFfACAIB0C0jCcH7bEiSbIOyvEhk3ksX0+HBvkqTMxEYEigEgpZjs7DxMj94c3CQtW1WfIbjHwK9heQk4cyQN4pgSy4jTy/+azLIHoA2gGiaGAavbqPwTp45NhvPblhA8APA29o8Z55KpH8WQSEYM54uaIYxBlP9GANdSkpmkyY4u7D5Afyaocw0m+vBHfa/3WJ5QI04vlyYzBghpAWEQcFYqO2aULjO+Wuzf3xlWQuNVzMplp6Wq/1EjRhdLC8DvGYq5JhLtTn13qsowvlrs390ZEyTpCuEozVAakYMJHjaRaAWZkbMJHoFmiKCcOZoAAFVmORnOb1v+xIJMAIC393eGtZm41SJGn+weiP7KWQzgaxnubDRBynEoJr/5Z7Q1I4bzRU0IY1qgIJsIvSwG4wRcdxuVmvdhrWsIYfQLFlRlxrjgOj1ejy6Wbe/Dyojx1WIf+Y0LTxICTO95ZcT9vdEOzP0Dw0DLe14Zwfwt8RlRdXuCb4xg1HSp0cmXLz81AcV7xHPkxQiXZ2/Ezs7DFHgxwvbWHN+MIJ7oUqMLAibes69FkHJp/MNCWK01Vkak3VL7HimVnG0jXD4WrEUnH/17EmtGSElW4XI0sfm3bu9HXCw/A3hdkB49MM67P1da/qSt6ZMI/aL06IIErK20oIyjT8sJCL/krkgPs26j0txMDHyhkkz93OVoQkoKPN8INOL4cG/CRB/ylaQBxrnqoEn5iv2q9NAHcJ2TJC1IdkzVd0ojjt4c3EhJyh9+f/DJ8eHBZ9W3oUd+f1/eDoj5XaaaiidwgPQTuvp0D09nmUnSAJEww/JEWoZL6bQB2GkFaYH5/WNnrR6R4yPc06h/06kqFgLOOo1KpN35yBsznfrulAhHyWUVzqxUVs8Sm8TaoerUKxbAJ3EVacAmEpFiMTwSxVDlfFqeFmXYwWMk2rPsNiomnujeBRF6cU0AUoYXPrWWQYSj/7tvgt+mrfypmJHGBCCD7fxuo2KC+X3actKQ1gQgw8hbN/punFV5EbGlpHbSaFs/mYYgFxwClGh2UJHpSVenvjstl50a8l+bzKR0mlmZAOQYlJ7XqjVO4GrMcvPDjVGykFlX4ZNuo9rPpqx1cr+mkFE4cWaDoorC7mskbh2M8/Irp511V9ik0IsrbnTtAJFfwPLrCptoucHj3sGwoD5RmxEJM8tZIQytV5lOL5cmGG03zK8KwAZ4UFQreCGAr7eWeJMXlVNmAAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_3\",\"w\":72,\"h\":59,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAAA7CAYAAADYW8woAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAD0ElEQVR4nO2b3VXjMBCF7ygFLB2soQFogCBVsHSAqWChgg0dmAo2dBAqsEgaSBoApwNSwGr2IQ5JHDv+k2Un5HvhHFmWhxvNWBqPgBMn6kA2Bgk9eQXgbKNpqiL9aWPstqkkUOjJKwjjg0kCfJnei+cAaTCPVDQZ1bAxzxYJABBm+dcIDQAq0trG+KUECr1rH0Q+gJtyj+E5GAMVTYbl7suyQ0qQeQAgAfzI7kkzEI9gxEhFelrlWYUEig0aoLQwO7yBha8iHVW5uZ4dNAOboOyPlCtQeNEPwPhd3qBMFmD2y7qdPTtoBia/6IzKFCj05BmIdXaMqQnzfZFfszE7CE/qfTzI7+bSqCQ5IoWevAIZjb1xphYv6mPs7+sgUlvJjBoXBwCI/obetZ92yYE4AHAXnveH+zrsCBRe9AeoH4yLQxTE66i1DW7EWXEXXvSDrItbLhZ60gOZKdwYtmnGDExSRfpz6d7/pgD9dGoCC5W2dtqeQcI8wLk4AMCXIBOsY59jcQCAOHUWbc+g8/4nWhHoi0Wrz095aXzNoHjJ3qY4aP35RLfJprWLrfYy35tfoSc3N90bAjE819Z0lK036maQ9tza0VESnpS+UDzxxUmgHDYFOooMoG3WAhEqJZSOnbVAhk8CAYDhLU/acLHeSSAASR0SW43rqJV9UHdYqI9xxkIRAIga+/pwIOhkw7ZARgwdGdJNmIfJpp2Ua3h+M3WSTewcPFcfEy/ZurtQZJOZXTtqGIO05vSk/bcL1umzB8jaamSoebTs+X+zv4t9n1n0pj7GMuti9maVe751U7oIi8G+y5kCxRn+V8vmdAvCc14VyP50B4sHLBPpRwjPYfbPHiBHIBXpCMy5gxwk3POLFHnlJsxUNAlwbK5WwLVWFMsosvBxNK5GM/U+fijau5BAKtKfYLHzzegAWSzLBotTOCetIq3B/FjapC7BQpYtLi2VtI/j0Uspo7oC832VOsVqVa6HtuMvWM2WRrXPPkwSoFmle11DeK5TXVu5kNxZmV49ckvs8qhVad9xkWqLA1g4itBJkWrEnCS2zmp0RySL4gCWBAI6IdICLG5tndFYYa14YbnaJolW1kk0ixeB2vrItgcE4lJixp8mxk7hNT7/0UjxRSMCAV8ngwI0WXfI/Biv7hujMYGAVUE4D+3HJZ6De7dVjziVodECKhXpaRyXbOaTXsC9KxfiAA3PoE0suFylY1R1cSYQUMvlGg3E+3Aq0Iribzmex7lj3bhRGbQiEFBgNhGeYETQ9unp1gRaEccmiXWddgQWg6rnWk845j8zXJssMavYjQAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"image_4\",\"w\":77,\"h\":62,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAA+CAYAAABuv5bfAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAEfklEQVR4nO2cTXraSBCGvy556cH2CcINopwg3CAwzuz80zlByA3wDewTRLZnFzOyTzDyCQI3wCcgIixR1SwQDLYloX8JzLtD3VLX86m6JHVVA+xIjEp7oranpsdsKkgTokwoHK5cdQSREYsa7BmeY3WOfuVibU1IJJq2pyYLdyFoAzhIcOpQgEuDvPttEDCWaPrH7xaT9AB8zDieK0D39rhhZbxOpUSKpu3xIXuGBYVPOY/7SOS18/Y6bU9NzOT/MLE3GxTh2aGiaXtqMvM9gHd5D+rzRERtq7M/SHuBk7tJmwhtCEwA7yO6DqGUwyzO358b92nHWxAomi+Yg2RxKw0ukddM6g2n/YlWQA/pbqgLpSxSs0urczRKcf5r0bQ9bjIbAxQv2IIhkdeKI5xvm4XssXWOUlekZr2kN41eHmA27lGeYADwnsW4XNdJ//jd8m9mPoIBgMhXZmOg7amZ5LRnop323S6iY0MxCM5P+xMd1nzan2gm+RfF3Mx3zPwzavyXLKentseHzMaoIMPi4BJ55ss4c3I3aZOCXYYBAnyJ8zq09DSPjaQvrHlz4MerJdqemqRgBXfPHwV8jzNVl6IpoFusSbH4eNZ3e8DC89lCyTeSmR1tjw+j+ihgOTXH5Zi1HiL6wCIaIl8rMUDh+ubPhg5rnnvabC/R06NomNmpTDAAEJxre9wMayYAYOJWWfbEpMrYCgBgMXphba/e03b4zFdyAtmJFs7Byd0kULidaBGQksBYvxMtEtUKOkoAIFCjMk3ZdAgADN6JlgQCAOuvP5yK7dgoVmPaY2VWbBhL0QSSeRl46xAELk4uRTPIcEozZlNQEpi/WIrmJzieSjNoAyAmJ/D46g+BrF12fkO4YQ/IZ6IZxLu4tkAhVItnolmdoxEED8VbVH/IU1Zo26sDonZTFHiMend9JZrfeVigQbWHWPUi24MOCvCWvS3Sy4AQ0fw01pv8QiDy9No+oQ1rXHQ7kYs49R2RpVZnd5P7Asqs6srw5rgRK8EUuQhJhtcF4OZiUs0hIh27b1Tj3FW3/ytBIN+S1MnFKh89608GqKIwpgwEDzefG6GZpyBi5QiSuO6GMSRj/dPyJbFEszr7A4F8S2xSvXHT1v0mKonfoqepS0SttPW+iVJ4vitv+ppbJsGAFDtW/CLmn2kHrJjMggEpksXz+IYvWQatiFwEA1Jm2G+PGxaUuso6eInkJhiQYUMZAJz9M7EgOM/DkAKJXXIfl0y1HKS8Luq89iZ4yFswIKOnAcvSUwe1+2KQi5vjg14RV84sGlCLcvpVXBboPPZAhZFLqZXVOfpFRC1UvyLySOSZRQoG5ORpC0rciBZAcdPxJbmKBlQiXOYtkEnJvRLS6uwPSpuqSl3NtwaVJxhQgKctKNjjnoiVrqqurrCa2+I8Ti6IPLPKQsTCPG1Bjh43JCJd9lQMonDRgMzCuQLp3R4f1CZXUUpJ/Hyqek0kTUArXBN5Zp0EA0rytFVibdpXuCZFl3WYikGULtqC+ZT1nmWBtvVvdnYA+A/3ztJz3tw/3gAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"image_5\",\"w\":74,\"h\":63,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAAA/CAYAAABHP14DAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAElklEQVR4nO2cT3biRhDGv2oZMgsH4xOEOcGQEww5wXCDwMa82THLDM6L8mzGy+AVDzbgG9g3kE8wcIIxJ8Bgb2LoriwQRAxIIKE/zZjfCvSk7nof1erq7iqAA1tBSRsQNk8XzQIbIsuMPAAQ6IGUfJjKN71Ts/wYtN29F2podrLi6KVEhCKA9543M/pEbE0FN07/+Pjgp5+9FWpodrIi9VIloArgxH8LdCeFrG4r2F4KNf7SKoLRRSCBliHw9XTyk7lpWAYW6rnezktwkYACgDy+N9p2cyayMp8rt0H7cTI0O1nj6KUBwu9htLeA0RdEpePaWc/tFl9COdy9BOAXH48OmNFQ03Q36AvVFskC4V2Q57dgJEAFN7G2Fmp02aoSwcRu7j4AyMzUzrp+Hnqut/MKbO3Y9za4irVRqOFVM2dIcRvyL3kvQFUvV58To0hz1oolvJ54rrfzhhK9CNz9vQJ/HV22ql43jevtUswiAcCJYu4OzU7WedFVqPGXVlGBvyJCI4nwz7jesoZXzdxK//V2CeBOlP27G4Z3IvVSXb60hiTcHYTSfHYc1VsmAX/F1LcrUqi38zhrRaih2ckaqZce/M1qIUF3YH4MffoPCAN/n9QqJrBm6B2l/jWRiEgAwB90EQkA7DBo/vl/hlfNnKHEt9gt0hgB+vW4dtZb8ihDCjMhe7RFMhcAx9AbXjVzOrm9NhCygEMoIUUxOWv0hUB5wCGUvZ9zYAVe9ijMdgAOuOAUKv4IeA9gwAJsoZ4umoUkjdkHPBfFBwChlAUchNrIVL7pAY7IfFxvcXLmaAqjnzmvLIcHAEYJmaMtDHTnnx1CkRW/KXqjDLU4FFkIxcxWItboCqPvPPNbCOVU7wAAoobz60IoW737uO3RlJGcpJYcZyk8IKXMWM3RFAKvnD8uCfXznx8tHLwKU8GN76+tBJyv3qsYN+sSN1aEmnkV3cVhk45IY72jrF3CSCGreI0BqIs3AS5CzW4mz1PcH5CRmzcBHoviWSLF6xmCDHhm4XnuHshJqgRgELJNOjJQk/TKTOfEU6hTs/woQD/8XjopVdqUt7VxP2qW/kLl8MzSDbqz40dPttq4y9TOumDc7GyTfgzs18tGfKUmjuvtW4A/BDJJQ0ip37bxJsDnVrCcpEpg9ANZpRkEvt5WpNn9Pokh6TQO7jO1SsHPA74PF07N8qOcpgt77FkjOUn7nskDncLssVgjASoESeEOfFy1n2Jtl4m8jp3O9RZi7cFShxmf/Oa3OwmtFmZ82epqm1/FuMmcV0q7NBFq0ZAj5VkfQhAJiKC6KoHUa3dCEgmIIPfguHbWk5N0DknvvYcoEhBxvV5iifUhiwTEUNhoD8VbxJW7HoFIQAxpP/ZQzBP4Ouq+ACpHIRIQc6ns00WzwCQa0awTqbxLnLSx9aga9sJ+dwUsml5tzqtyMywSK76elZMYjZ32txh9aaii39L8ICRepR54ODJu5DRd3eVPH/yQuFBz7KjexBazIzM+nZxXPE9NwkYboeZsKPKO5X20Du2EAubFlZMimAsg5AB6ZGZrl78DOBAT/wHSltPK6CHTmQAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"image_6\",\"w\":83,\"h\":68,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAABECAYAAAD9YQkjAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAE5klEQVR4nO2cTVrjRhCGv2pjZ8OAOQHcAN9gdIOQE0RsIKzGs5w4eaJ5wDPLwIqBDeYGvkHsE8TcAE7gH1hkbEuVhWUhy5Jp/bUsj96dJbdUz9dVLXWrqoGCgnWE4l6g//X6oGSVNIJVY1DNPlwDsAvgCcAjQAMG94Rldd79edaJe891JZKYfeOuKrbGOgE6CIchmw/BaBNbrbSF7Rt31a3SfzVLCI0YByAczM8RuGeBBkl2cCgx+8Zddav83WCQjpnnxaVLlmUkLeroy80RmHSAf5ZsMgSjDYH2zu+n7aj3lRZzeHFTJ4KBZET0GMFX7xq/1eNeZ9S81QE2AOzHuMwTQMZO46QVtuGbYvaNu2qpPGmF6OVoMB7MaUXbM44HYZu+NG9rFvgSwPsELeoKUH27cdKTbbBSzP7X64OSKdoRxsVoRBDU9sZLpBAxM5Pwebdxasj8N1DMmUeOe4gXMuEJIejo4qYFwq8KbLo3p5X6Wzb5itk37qqlrXFHmUcu091pnGpBJ+2ObiPZsF6NRCcLv4Nb5e9GhkICwPvn5rdLvxNOR6sUEgAIh/Z9A1kS8/n8WmPQh9SMkoRBH0Zfbo68xzONGMJhUCcDPmKyEEaqBoWB0Xpp3s5nVfMxMsuICexkwDNmPp9fayzEP2rMksQeq0R5XCfgr6zNsXkyJ5Wad/xc8EwmoSs1SQbCYak8bq+RkACwL8rjpUnGYpireM2IhtqHjQQE6N5jjpjP59eaSmM2gH3v2OmIaQmhqbYm91jwF1OAq+qtyTkEzf3TEdO1sFsgz8JU23cGVCCP+z24EDMmbJnO8FiImSCvYjIeszNjM3h9AFEhZhRIlJwppSMmEaSX5wtecX/WcMQ0x5VOFsbkGsaD+6cj5p5xPPCeLHiThWheeJoTcUepKXlHoL3408VUcOAqcsESQ2/CwoKYe5/OHgF0VVqUWxhLmR9LL+1kWYYSY3KOWVrWaUlMO++n8M5VMO7tKF7AdzpZeOdq/LwSCBCz8M5gCHzl55XAioUOAYqdlbaBDKeTn4ygk4FibjdOemDcp2JSTmGGETo9Zo45rdQBDBO3Kp90d/84XfkevlLMWS8U4Q7IDXtvLg7bGbQ/9MOIgc8ySa9SK+2msHT8qOHOeJBNdpUSc+/T2SMzpC64YQzNkuWbpOVHqGqLUfO2nXpu+zpB+CVM9UWoD2rmpKxjVii18RD4KmwZS+iiKruy4d+w7XLGyjTwIEJ/6t1unPSY8TFsu9zAeDAnFelx0k3k2klllQ5qGQqQFqb2x02sQtTRxU0v67ToBIklJBAzo8OcVrQN+QgXW0ggpph7xvFAEOnI/Qt9uLK+wKskYYr9hO8gpZK7dKHjKEWnvldK4iJALgVNJLTdJCYmkCtBExcSSDilcLtx0hMgDes9hj6lISSQsGfOWVsPjVHTLkMqya5r6aGzMufUhARS8sw5L83bmsWcfb0j4+NbnxySIFUxgcxr14dkWUeqtv9JXcw5Gczlu+akcpRmWHtRJibg7EDzd9r3URXWXpSKCThl2G2k8aRnPAgiPY3XHhmUiwmksytNmF1e0iITMec8N79dxt7CImNvdJOpmECssB8yw8hibAwiczGBCLt6Se4zpJq1EHPObEM8tBDspalsxJcUayUm4NpOkuD5qEWtpNYdC3LA/zxI80YyvHGBAAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_7\",\"w\":87,\"h\":74,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABKCAYAAADOgMgpAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAE7klEQVR4nO2cTW7aWhTH/8d2Z2kIK0h2UHbw3B2A1ETqKCCVSB09uoLyVvB4o0pxpJBRpThSyApKdkB3ACsAQ2e1OW+AqWLA39f2hfg3SmKce/Xj+tyvcw2UlJSUeCBR/2hhmPoSqClEZ8xc8xRCNFoyj1Xm4dHVxUhUmbKTSu785qEO5jqAOoBKxNssAAPHtrvVzx/HacqXnURy59f3TRB1AZymLP8uT8kLw9TXP9uaNqq2GrMsy4sld2GYOgN9pJfqgYF/Ku3zrsj/+ev6vsaK0nRD1F8BH50AGDEwFB22Istd3Dz0mPlvUQXv4NnRtHra1iTgqZow0FtqWj9tXULlTm8fT9Tfv4cgepemoIhMFOZ6ktbjxv8exD1Vliu5l1RyoNycxa6xFGY9quDp7eOJats9AJcZ1WdCQPNt+3wY90Yl6GIBYgGgsiQaTr99Pwv74J8vPzuxAHDKwA/LMLtxb/SVu7h56BUgdk1FVdXB9PbxxO8DeT9VBHydG2Y/zj075S4MU8+48wqH6J37uG9RULgCgMs4gnfKZaArqjYpuZxf3zc3/6ja9qDAp+oyaojY6tDcsewP4VVKjuXYdm090bAMs0vA14LrBALeh3VyWy2XgWZWFUpIRdW0HrD64mUQCwC8GvYFstVy54Y5Q/R1gvwgaggex6aHuXV8ddH3u+xpue7cWz6xAMDch0xiAbgzQV88cpeAnmVdUiLjl3766/q+5nfRI1ch8h1XluyGFaXpd80jd3ORuyQcXi51v2uB09+SCASMt0u5AvCLu6VcAbBPX7Upd5x9VV4P3g6tlCsUZeOXYUH12GuIeedOhUeurWmvJqdAJH67Jh651VZjBuaf+VTpQAjwtb0qRtTPtDIHBinK0O/altylbQ8yrc2BwQH91M7d37lhDhGcSFGyYnLcPj/zu7h7EkEUuhBcArjZR77slHv86cMAqzSfEn+spbtD4ofv9Jfk2+6RCgZCM3ECM27K2OtLYKxdE7hwQ/JssUtF1Kc6UK67dXwnoD6HxF3UvLHQJUfHtrtYZYOXAJajaZ2oHw6VW/38ccxAOTQDAKJmnHTSyMnPc8McQ7at7Xx5Om6f1+PcEHkn4pUPzSaOpjXj3hRZ7mvu3BTmRMcJYu2hucH8VXVuDHxJegglltxqqzEDUTNJQXvKU6V9nrgzj7376647PCUtcG9g/pkkzr4k0da6W+ghL+xYjuOkPraVSG611Zgpq2Oph4ilMOsiTnUmTgo5uroYMfAlbQWkg7kj6hRl6lPr7gGMLI8q5UdIMnNcUqczOZrWOYgdY8FiAUHvW3BPMY4hZ4JyOBmIBQQl4rkdnI59nGBkJBYQ+KYQYJVKuSQaYl9acIZiAcFygb0RbBFQT3JYOg7C83OPri5GkoeIicKsZy0WyKDlrpG0BQt5YUZUMpMLyCU4i1e9hJGpXACYfvt+pqpqkQehc4mvu8hcLlDoEf5cw8AmucgF8hdcRBjYJDe5QG6CCwsDm+QqF8hccKFhYJPc5QLZCCai/95++hA5YSMPCjnkV201Zs6bNzrE7CZbBLyXTSxQUMt9Scr1YKnCwCaFywUAyzA7BPwb5xYGuml2ZvNACrnAnxcXDRA+m3t2bLu5D6+HlUYusOroFNvuENDBtuRnAroyDLGiIpXcl3jedWvb431oqSUlJSUlxfE/piYHXJOOSmUAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_8\",\"w\":86,\"h\":72,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABICAYAAABsigIcAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAFFklEQVR4nO2cX27qRhTGv2ObtxsIK2h2cLODegclUh0pTxekEilPpSsodwVNnyrFlUKeKoVKITsgKyhZQckKEuC+4eHchzjEgA1je/wHx78njI3n6ON4fGbmzAFKSkpKQKpuNLP7JjMfMdGRz+kXDRgdtK2hqvbCMrP75gI4BnC4fo6Yxxow+nR+OlLVXmRhn6/vDvX5vAGiBoCfQvz0HsyD6vlpL2rbskyvbpsh7ZsAGIBoUP3l50GctkML+/zXP0e6YXQBfInTMIAJA5e1ttWNeZ8NXEG7AH6IcZsnBnoLw7ist05ewv5YWtjn67tDQ4guM/8atpEdPGnMDRWP4czumwz0EE/QdSI5gJSwCRm8AgNf43jvxO53CfhdoUmrMD9qQFPWAXYK6z5W1/Etk+JGGEYnzKP3fH13qDtOD+H6+cgw8FutbV3uum6rsBO73yHgD3VmScD8KCoVU0Zc9wU6BNHnNEzzcFNtW81tFwQKm7KnriIhboaivrFVXM3vy5ndNzMTFQCIPuvz+fDb1e1x0CW64wwyFBUAvsz+/jewS9jwWLfPGgOoJWmVJBON2Vx/YUztfg/xwz01EJ34xbwbHqs7ziXyISoA1BZEK547vbptIi+iAgBz7/n6bnM05z1wg///07NKmonGbM6FeNENY4T8/PEA/EPFFY91R1R5pLYg+k83jCFyJioAENBZ99qlsO6JRupWhSOxAUpMaprjNL1fLIXV5/MGcugN+wIxN73H710BkZmyLcViLfR7F5Y5MGYskWNm9823z16PzTLYLhwasHxxlcRkAZhvnzUAMByn7AbUsJzb8J0rKImGBow8n0uSYDmkndp9ztKQIlBtW0s9S49Vx4P3QAs6URIOBlamDr3CjtM1pVjozEPvsXfkNURJVJ7WJ+OXwopKJVbmx0eGiIJXENyFu/tULSoItFj01r9bjQqINi4o2clGNwCsCesuij2lZlIBYMB3pXYzjmXuJm1MkVg4ju+7yTdhY2r3x8jvMkieCEza8B95lV4rBb0mCgad82d6dTsqJ7+38lBtW2bQycC5AiLqJGJOQSCgu+18oLDufoEbxfYUhftd+ym2zm4Jw+jgNS+/5J2JcJydT/NWYeutkxfe4fIfDQa69Yuz8a7rpFLlp3Z/CODHmDYVgftq25LKFpKa6Bav6TMfu0tgfhSG0ZS9XErY+sXZGETSNy0gEyFEI8zeCOmlGXce4SNGCRON2ZTpV72EWvMShtEB82Mos/Yb34xyGUIJW2+dvAghGvgY/W1kUYEIq7T1i7Mx5T+PNi6xRAUiLn8ftK0hmFtRG805sUUFYuQVVM9Pe0T0Z5zGc4gSUQEF9QpytTUoHspEBRQVgiiAuEpFBRSlGLmz6PsZ4zI/Csc5VikqoLB0CbCHnhtiQ3RYlAoL7JG4CYoKJCAssBfi7twWH5dE0jirbauZ41AscVGBhDz2jUxrHvjB3EqjehKQsLDAsp7MANnuepyAqBm35FMYEhcWAL5d3R4vgF5Gy+nKY1QZUkmV/3R+OhKViom0sxkTilFlSMVjvSRexumdB2EYoWb9VZK6sEAq/W4qb/5tZLJr5qBtDYVhHCGJroG5lbWoQEYe68Wt7dVFfO9N/c2/jcyFBZa1aHqInrugrD6iKnIh7BuRvDfhMX9UcrUzsda2LsXrTnTZzXw3eRQVyJnHenGHw0E1wBKrPauK3AoLvFdV9panJqKR0PVhHr20JAW+AxA5A6fDBsf5AAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_9\",\"w\":34,\"h\":28,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAYAAAAEN20fAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAB40lEQVRIie2WzXXaQBDHfzMmN2yggriDkApCB0H2yy32kztQKgjpgFSQxT4mPJ47wBUEOnAqsCE+ol0fBDx98CFhUHzI/yTtzox+u9qdGXglkm0G/uDhFN7UjVcdFQnsD56azFwdgMpsZLzGY2EQf/BQt+6oi6MN1JYTjlt10jWfjodr/awGIEHCL/pSTyXsGK9xnwvk869pWwWTCZTUnWrYjq8yp9/EQXBzfmI2glz0p77Ajw2BEkFVtWW86uiyP+mAfM3ph4OrNMwSxB88Na21v/MGW8DgGCJ8LOiHqr6PnztdPFhru0WDAbVdIABsaDsJMIgOGfBhl4A7K7WAaEdmlWapEHP5P/+2kiD/ShVZ3jpND5SpzGGdD/wplcJxG3+N/RpnyuRQJ4lbugRRtQaYlMRxly4TS5CoBrhdcklhqWqQHsvUmsv+dAS8OxiFyPfrs+MMSOb6qqp/MAgYq8w6qyYyIMarjhzuyyEoVNVf15esTGg357UuQm+fEA6uNjVXazOrShgA471QCL1VPUjSZIOijutoyEsOr9C7Pjvxt5tt0YtgckJAjqJnvMajathKp+Ttct/yQkCOHYlr3pd2gbcbzMZqJVjXYO8FZKGL/tQXoYXjNBbpXkMxRQH+69XrGRujo9Fd8L75AAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_10\",\"w\":35,\"h\":31,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACHklEQVRYhe2XPXLaQBTH/283oTICn8BKg4aOnCDKCeLcQDRoqOIbRLkBqZjQIN8A30C5AVRMaGydQOC4MRP2pcAiQqAvsHAmk3+n3afdn/at3gfwF4nKXLw/DXTglQ78uus2z+9ODjO8DerLpbgCyAJwEZnyAXYrFdVrvzmfF4bpTwNdSmkysw7GnIT0Oo2zcbL9T1MIHgGopSy7AGDZhjbKBdOfBroUssfAhz3TPsCubdSc6OBgdm8xY5gCsb0xod1paG4qzGD20GJWHtK/DgB8pcjqNqteUZCIPkZPaAumPw10IeQ4B8hGTPSVmK0i70Tk24amhw8iOiNIukUXJeZPB4IAwMVg9tDagRnM7i0Q3h246MFitTJ3YMC4PDUIAIBQ34FhwHwRGNAmVETvzKF+P0pKrfbCTF6AZRJNE1GYxMhalojQiz5vYJQi98QsfjwCb2C6zaoHxvcTwlzFB7aCnuKVhXUiK1UE3OxLlFswT5fJKpll8bqy2ruHiA/YhjYiQrtEGKtwPXNEJk4UATcdQ0uM9DsnE6rT0Fwi8RbPd4cS3ZMJswY6GxMJ8zmAlKLLJPfkggmBlFq1cFSE5i/dZtXLsspdkA9vg/ryUY4OKDOubUOz8hgW7g6+/Vg4AH3OaT6xDa2VbbZWppviso2aoxS9B+BnmF5XKn8Kpzw6qm96+v0dxPojIjjxvFM6TKiwc5SS5ml91X/9E/oN5Za0D/vto0EAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_11\",\"w\":35,\"h\":31,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACE0lEQVRYhe3XTW7aQBjG8f87fKwaB05QbtDeoM4JSk9Q2GCxKl22TiRXLWLLDtFN6A3IDcwNkhuEEwDpKpDxdMGXBYbYhA9VyrMyr63RT8N4/A68JjpyiEH//mzZRqVqYGzgfFbugXQst9I5CmbgXedS6XET4fOWx/oKKb5xK7eJMINGq6C0KiLkAES41eOsn/fKww0QH+FdPLqUV2cpEjPwrnOpzKQD5uOGgW4k0M2zq6o/rzzU2z7wIR5kNkoQXITHWMMMGq1CKlA+8DbGeD2F1AxBySBfkkBm6VuuU4jEJJ/qPUT4ZH13ugAqXE9nHr2jQgBjeD+/XmAGjVZhx6neWxYYpVXxlBAIYUTEPonAsNgmQmvG5E5hSYn48+slxnB/Aks/vBMvMSHh8SJe+NcCoyeZLjA6oqS/+jlYYPJeeWgM3tEoQm29tJKH+u/u5m/S3iQ3lltZ20rUakFPMiUMdweUjLTSa7MSicl75aF+ytqHAhmDl/9WvY+6t7WfefjV7jzTKCVNz3Ide9PNtZkJx7p0SsbwdU+QkVZBadsDWzEA55dOU4Lgghe/9lLb9PfExgCcXVV9PckWgN5ODsOfbY14IgxMF7blOraBHwkhd/opG/n2rGan08H0KKI6PNeaTiF2VAO/N8w8o3rbE6ixPBuF09OTbDEu5MUYmPbNKj0uTfshkwMZAt04a+Q1/2X+AcGOsv0Jar1XAAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_12\",\"w\":47,\"h\":37,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAlCAYAAADSvLDKAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACeElEQVRYheWZXVbaQBSAv3vx0YOygroD2UHZQUn1sbZxByyB7kBX0Fh9az3YHbAE3AGsgJ/2kcz0AfEQJMlkHETb74kkczLf3Mn83AHeMOJSKO6ND+dpraVimwAWGdZUB0m0P9iuXjGF8vGP3y2jtgu8zykyApuomoskakxcKz27ncViaSMcAcfAFBggMjDG9m9O63fe8nFvfGjSWoLwwdFnarHd65ODi1JpuAAOSt43stC9PqknRYWeyMe98aExtT6LiFRDuFJJO+u94BGMJfeqaTuJGsPN1a1X4iuerbC1bECAd05VtbVpfGXkP9/O+uR/31W4V03bwCRAMABGqmlzvUd1+ePTz1mbMOIAx8bUBoHEAd4ZW3synh7lVegEqGSVA8KIL7B8iXvjo9VbCovvknBR3xrGaLx6vYj8fK+5C5nqSGv1SnNKvQn+Afm9+XC3Gn4owMMKNtqtigMimYVKVx44bYZ2ico8M9dr3oNXh8jl+h7nUT6JGkOEqxeXcmOkMu+u38zMNipph8Xe+jUxVdX2pnwhI59EjYmxxC+m5YCFTl7G9mSevzmt3yFyuX0tB0QuixKS3DQw4PbYD+Hq+8d6XFQkd4V92I/vau6/fxh/heTKJ1FjoqptXn4AZzKxIkqPPuLen6Yxpk950hwCZ3Fw2Jgl0f7AEjxR2UQlcXA8dILHY4tvfl6lVBaHCvKwtQZ4iUNFeQjeAG9x8JCHYA14ljh4ZlLXJ/XEwrlvpVh+PVccPCO/xKsHHFZO91c9k0oNCCgOARLwlU+oZCW2X0OKQ4DILylaiS2clx1X+xBMfsnZ7SwWkSbWNrFMDCSufxb8V/wFQ/UDpEsq4BQAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_13\",\"w\":46,\"h\":37,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAlCAYAAAA9ftv0AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACm0lEQVRYhdWZz33aMBTHf3rmmPJngmSDskG9QXFpb22ibMAIjEAmqJP0ljaGDcgGsIGZgJjkiKQesI0xtpGNjcn3ZGFhfdFH1nt6AB8UptuRO+9drFU7aNs/Pk0rMdIkU5w/vZnSUBwKPQCtvQ4KE1JsVORHcGfZXgvDJKa628cx1yCa2dbFrJA4d5ZtqYwRFG40PV6IaKAz4M+/qx4xDAB8yei2UMDwsd+00zrsiXPnvSulHAO41DGOooDbtMF84VHO586JhGlbndf4jR1x7izbUhoukpaFLgz3D9+aPHzm05spSQ2RPcNZeETiKi7fiDakNMY4RhoAFG6un1cgwWxJaiihigoHtKQ0pgC60Q/DGf/1b8UZ8PvIQSojvgwpuGCbneNsYcAw2qbIna+nlsnJJXfew+VCwOYFqk0nB0IKM7imjH5nBwPCyP2hxKNsxBtrt16N/BAA2FbHBeDVq3IYqViYUmyXisK0Dpk8NAwxDa5DccUwrsVGF4VJNOyH4n5UWtThpIME7Gh7Z1dRseh0Riz+fG/urIgdcX/WX05ppEPShO7t40SC47x2mHlSjr8nblsdVwGDkyhpQJIluiRGzsd+0wbDfbVKGjB2l3aeTQ35/immzvU+J7Yept3MzFWIRA/AvGwjDTwi4klnzYBMcdvqvBIJEyeWJ8l6hyoGB7PDiPxJgpMCbnXqNFpp7Uaeeqh4m8wqb8TRzsdt62JGJK5Q0bLJIw3kqB0G+LWXKYDPeb+bgkdEpk4VLEruE1DJL+ycSHTzSgMFj26lyDN255fX3EJfLzwwChVHAcCTCjye7eXlKPGA6+eVrSWvMCFDZAYWXUoRBw7KL0gyXuafAaWJA2H9cYDtjuMBavTQbw3LHKdSqq6O/QdNc/dDsiyGYAAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"image_14\",\"w\":48,\"h\":38,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAmCAYAAACCjRgBAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACyUlEQVRYhdWZ3XnaMBSGv3PgMuFngrJB2aDuBMWhuUzqbMAGcSZoOkEFXPahwAR1NoANnAmI015iqRfYPAZskLD5e68kWT/fkeVj6Qi4cOhUAzvDWSOUJYugGlDUBKEGogmUfGPJHsrzibDrb7v62WnA3eDdIYUWCBaAauJRAAVPEUb9dkWYCJeq5ELh287KhC5T6Aq77mdXyRro119LshIAPmjoelWAu8uQu0HQIdB3jf7WUE+9dtVNe5JqwP0gcAF6NB8IL8yhkzZj97/fhdasZ0Ho9m4qzmZx0QMBAUtqidtrLy7Yf+bXIPrRu7nurBQlM3eDd4eAn7kHAqCAh367IqKl+KeIPgGAJX1OTs7SAGc4q0lZ8rH6oeZCAQ8EuND7jnQ7Hfe+VlpxluOElNxBgeIBIHqbxYlfdPrFGc5qcZYTT5xCBzog87BkxWkGFssHRc/UAWFSzWUaADAvNzNrnzm8u8p5c5EGKJAfpxkAkn71EigxT+J08g1MT6BlHwJhX6UZoEanUGMMYUXn0gBmKY4uZg+Y+HklHyeEXfdB6B5fkhEvyeUDrHkhptAFEBxTkQksyd0oS2aEXfcV1EalM+ElzVtu/Af67erzOS6ltNkHMn5kTGEH5+RWCd2sf1WqAcKuvzGHFoDXA8rSJYgmNJXMrcTCCG7hxB81S2ptC69s3QsJ+2rCzBZOZoR62rXN0QpsOcN/TSmlh4JPbFvJiEJsVtPkyEZMe+2K1hlFezudWE6H9k7TyIFoYRwbjaIXHoCPpm01mDKHlk5MNMb4QLN0sQpj07ZbIXRNxS+a5aCAKF6sQuuDTW+ak7zRvDiCt2/7Qu4HovDhCGYe6pWZW+vbY1MKOdSL22vPyEMpjJnDZl7xQME3NJGHGgH4lFElUEAnz5JZ5yBXTNH9goPVaF/m3UEeDnpH5gxnDczLDZTnftHCY/4DTdADXzyes/MAAAAASUVORK5CYII=\",\"e\":1},{\"id\":\"image_15\",\"w\":51,\"h\":41,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAApCAYAAACY7BHXAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADAElEQVRogeWZzXXaQBDH/7PS0QioIHQQOojSQLIdBD2Dr3EHER3ga3AeSgfrVCB3AB3gCohwjpYmB2GeAH1/IJz8brtazcyfN2J3Z4B/CGo7AADYLGRP82EyYxidJ4G1L+D2LbXOY6dVMc9zaTLhFuDP6St5BQjbGCuVtiqXmOe5NEGQzMHhL0diyYSlL6D6lvqdxxYAbBZyoPmYZYs4gvnR14VM8pUqZnsvJcAzAO8y3HgAKV+DnZUS3lzaRPwtw14KvPI1YcYJShSzvZcOwF8Ku2KaBjpmx87ClApmAL0vajPGy8oY/xoez56ICT/GwK3mlFciEKOrG7XcLGRP92Ez+Gt5ezEemKbdibKjcyditvNPLog+1ODPA0gBLAF0a7B3Yt/XaBDNAHHwdC7tmoQAQHeXpk0IAYCuFkBGJ/ZiNgs5qPZhtgAniNF93J4/mqqwGR3txXCY22+NgxQWQJhiyN5LLh4BAPoLBi3HUQsie8lF40UHb1sM8zI6FADwomPdSjAVYQg3OhYAsDscejHrL5pAhxMdR9KMUu8Klwevjk/oezHEhyovHhKzk6nooMZDZtM8GeOHwfHkwb8ZQdjniqYKzOTEzR+I6UyUS6C7s0RUHi/QcZJiQMw+86LBBvDUdESlIbotVAP4810OA8EumruLlCT+uvxK7Ang6kYtARo1FlNJRCBGqc+THhhjpUBk1R5RSZhpGv7IyWTWzbY/5AjMi/rCKkN6er2SedA0rpVDTB/R3nHH8zWR6+KY69TcmShXBGSiBUHEJPPWmnNfAa5u1NLXaBjWfc8EkdWZKDfv8kL3mb6l1r4mTIAeCoZVGGaaGtfKKfJO6S5A9ZpxGvTTGKtR4bequAzrx6xQ6+ZaTghQ8drcmSjX12gA5scqdvYQWWWFADU2myqnHZFV9Bs5MVHl5WN2aeegWA3OEwGZWbt7HmpvA+76k06+rlhy46gMjfU0d103Bwl/DgS664xVrfXtRhu0m4XsiQAjYpjgoBd6FGtiOEU2w/+Sv5ApGZYTyy8iAAAAAElFTkSuQmCC\",\"e\":1},{\"id\":\"image_16\",\"w\":66,\"h\":166,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAACmCAYAAABugVl8AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAKXUlEQVR4nO2dT37aSBbHf6/AxouMTU4QvPGfycLMCaIbjPsEDXF3/qziPsE4J5hk5e70OJAbuE/Q5ASNFxk73oScAONkYQzSm4URFiBA9UdSSZ/5roykKim/lKree/WqRMgx3Ua1XLy5qTJQIaAzXFtrP6y3r8KupaQfLil6x38/IuJDABsTJxgf3LXS4bQguRTi26+7bxh4Nf8KPnNLa05QDJHEgyXJt+MdZ7EIAEB74ub2MHgkd0Iw0eHyq4DRa3P/O57HSYduo1ou9PvdqNcLIf7x4NmnNpCzFlG47Tsy17Prlv2/cyUEMRzVsrkSgsGOzPVDoOP/nZs+onu8UykQfZEps/7ifPzvz02LKED2teCz4K/cCAGQI3U504RlmR8hhFyLIEJ7sngO+P7ucRWMRzJlvDy2CJc9R7aMgNea/J0DdOwHn1wIAekRA/jby4tW8Hfmhfh2vONgOuagQOaF8CAc6UKMj9OHMi8ESZrVo0Iz4bpMC9FtVMsgPJEtx0zt6WOZFkLW7R4jOF8tQnXYFB7nq0XIut0+QffbJ7NuuIrb7RN0v30y2yLk3e4RhK9hhzMrhLTb7ePNvhZAloWQdLt9pt3v++oySPd4pyLrdvtMu98+mRRCCNpXLUtidugEMiqEjttN3qwxBWRUCKiOGACGa2v5aBHf3z2uQsPtnpcfkTkhVMJyY0Lcb5/MCUEelDvKRWROCBW324dBrXnnMiXEKCynToj7PT6lVXHCKIXlAoS53+NzOhUnjVJYLli+UMhHi9DpHwDAz44JIzNCaPcPQG/RycwIAVL3LwAAHO51+mRGCNWwXIDOopOZEKLbqJYB2tOpg0GdReczIYRy2D4AwessOp8JIUzMdlMeXg0D/UNoCD+I9eF82WzaeYSF8INY3yJM9A/TGXRhWC+Eif5hOoMuDOuFMNE/zAvhB7FeCF37AZgfwg9itRAG/AsAsxl04ddYjG78wWfZ0AlYLoRu/AEAwPj48OVFZ9llVguhG38A0BMFEWlpk7VCaPUPhK8EvHVLpcqiYEyQovLNYsYTVCWWL8eEXzaen7+RLWetEAqGVE8I4QRbgL8S2P89nW0bxFohIDm/yYQjX4Ruo1ou9vtH3O+/Yrp3Ma5/3e2BcZqZlcDf3z2uep73V/QSfLb+4mL8P399vNta2NESvrqrpar1K4E9160uvyoAY9wn9H7bPVw62jAeFW76p8FDVgohmx/lAq1xSSDScAnCk7sQ4B12CkEs0yJ6vsEku5In2JFaJ4R0oDYQptdJGbBOiOD/UkQ6/h/kQbbsGOuEkHW0psL0FdX7WieEtKMVnOoXORICJNe8J6b6FXMvAcuEUEkU86f6u8c7FZ17WyWEtCGF+6n+okb/AFgmBBHJCjGe6mdB5UUXLsMqIZglh7+ADcGetIgTWCWEdEQqsFpPEOejRYw6SimCq/WkW9MU1gih0lGaxBohFDrKyfkKzUCvNUKYmNrTwRohVKb2/BikiRkxK4RQ6ShNELQ9rBBCqaMMLDnwhJoNEbQ9rBBCpaOcwNOzKgFLhFCxAYI5DyQX2gvFCiFkXW9gKueBkf0WMXKfpddoTeRNagRk7qtIGVX3eSJvUiMg45O6EKrJIH7yh25Axid1IQhcUSnnz2XoBmR8UhdCcjLH5z4gkxshVLLmggEZiIqJp0hVCBOmteqrNU2qQgQ335UqN7l+s2LiWVIVQnXEmGgFBmwIIOWMGeVmTdjvNqplcXN7CGZtGwJIP3Woolhuo9jvHzEt2xo+OumOGlrrvM2JAKQoRDBbxQZSE0IhDyJWUhPClEWoRSClIEUhzFiEOgRTClITwkRUySQpjhpmTGNTpCiE/hIlXYILWlIRwtQSJV2CC1pSEUJ1HiJOUhHCyFpOXab2pEqrj3BSuu9cEhfi+rfdfRjY2VyX9D8rEdPOYrKk+lmJ0YbeVgiR6mclRp+NS/21AGYXxSa2lGm0D0QHdgjRW39xPhEGSKxF2NQawrZiSkSI7+8eV4n4X0ncKwphuxjGLkS3US17ntuM+z4yhG0AHLsQhX6/aYODFcRdLbWmj8UqxPXxTg3AP+O8hzx8FrbvbbwtQnd/uRhgFqdhx5XmNdYa55WhJ2oAO0TUAVNrIFZOUd+cVJpxZdta40KBQoWQfsziyecjADMjAAFf2fNqw593W/4x+aXNsTNjP/hIvRor7z83ESICADDwCEL8uXJyMV6J++DZpzaY6zL3iBVGaGsAogrR+FIunly0mPHj8nvRv0eCAQDWX140bRGDwM3555bR+FIuerctAJJDIH8citK+329cH+/UQNSQq8MghK/rz88r804vbBErjcuqmggAQE+K3m0LjS9lwG8Z+CBfjxnYo+ai83OFWGlcVtnjFpREGLNX9G5ba427/4n1l+e1tMTw4DUXnQ8Vovj7uTMSwYSTtDf0RHulcVkFUhKD8WHZFkwzQqycXNYgxJ8w6ylusMetKTHmbuhvmkWdpM+EECsnlzUGx9WhTYjhrpX2o2yvqA3j46JNdnzGQsQsgs9YjIf19pVbWnPiFoPAR9Guw12fMHodkqJHgpxBfasda+RqyZAZRAAACdE0/hCLmWgZQggHS3YyV4E8rkW9Vqw0LqsM/ex2BTbg8SkaX8oPnn1qGxcjYt/gI3iolvRpAgYe+UbXg2ef2iDUTNUdtW/wEcNi+FeKEmRvZL1i/fn5qSG/5A+Z1gAAAvXNK6L0TN8Re76jZsBJ67nM0faiCiAAYECrh4Twrx4mBTN+LL6/fAPo+SXM9CbKRp7TjL3PgG+R6twDgeqDg60mAFwf7zZBy13/eyb3rJNhbFAN6lttEuQghmFMBgY3Jkxx4I+oZYUo1FTvO2FiD+pbbWZzPbcq7PHYfXdLpVoU65OZXkfdzTSMGafL/Wn7lEBpR5Q2/JEkkinO+Ljx8r9HOjcMdcMHB1tNC8TY8zvPezFCX9venQOnx9zAzOBgq5n6sMr8auXksgbciRFiffaEEM68DxXKsDRmufL+czNK0DZGxg4aMJ4iaAHYAOGH9efncyPTMkSa1yj+5/MpKNWpu7PhwfZ4WPz+7nGVXbcsaz0uItoEj3Ik2yBEb4dPt6QtxsjVR77SAjGY8YP707aRV2EauSm/OzE6SM/67A3FamVmjtUAcrPh9c2rlK3PjaJ724yjYqW56rT9kqLwNm/qux2TdSrlRwzqW214Xmq5D65XcEzXqZwoMvx5t5WW9ckxLHrRypixxBQ3gnbq0Ch28Fr/UaJDmP9tX1WM5FAND7aPEvVLhGgZr9JURYOn27VExCB66/sdRqs1XWHx5KIFkO63c0IhwofB0+1aHHUbTy8citI+AOPzmXGKAMSVnW/YL4lbBCCuhNP65tVQrDompggI/EvcIgBxZt7WN68gaB8afsldaH9H+gtLaveKGUW/ZCIqlQSxZ+crzJecFYVXTVIEIKGFK4P6VptAS6NLRPgwFKuOac8yCommjBd/P3dIiOacfIzXw4PtoySfJ0jyufN3Q+shgEMCrhjcYaY3cYXg/o8k/wNbcepbyG/CLwAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"image_17\",\"w\":64,\"h\":166,\"u\":\"\",\"p\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACmCAYAAABqdIlBAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAKPElEQVR4nO1dTXbbRhL+qkFKXMSidALLG0ucLMIbGDlBdAORcRKHq9gniHwCa1ZyEsukThD5BGFOMNQiI0ob0yeQqGQhWiRqFiQoAPxD/wBo6M33nt8j6O5G96fq6uqq6iYhgquj3W1HUJU9qgp47WGp1Nmqd66j5R4KyP9wdbS77YBaIDyLlOkz4aD84vww5b6lAgKAq2Z10xkMegDKiwoy4dVDJEEAgDMYtLBk8ABAjDdXR7vbKfQpVYjJoL6JU9gBHSTamwwgCsB27NKEveS6kg2EZPny30e7bhIdyQqyBMCDcI33IkOIIdCTqUBgN5muZAMCgJu3FZapNFpf33ooxtF4ChA+yVRyPg/cJDqTBcYEeJLTgOEm0JdM4CvBnkwlfkB6QAAAg3py1eirq2Z1M4H+pA4BAASvJ1vRub19EEbRhAC5KTAGuWa7kg0EAAxLpY5CTdd0Z7LA1B8gawsAwIj5yVaj2zPao5QRMIX5TLqyoNzrgXsCmKQtu4dgD0wJIIK8HsADIsBTkAAA5X9+/bJqsD+pQ9x/8NoqDYxGnGs9IO0PiCLv2+MpAY8a3bZSC7Nu9FxBWwIA4OaXSm6nQZgAxp8qjeR5OQwTQFDy8uR5exwigJlUbAHkeXsclgDByn6+vLrJQgQIjxUlAICXz6BJiABZF3mkJVezL5mAol+obIt95HF7PGsHSLrIg3ByuDmaJUDSRR5G/txkMwQobov91lydzmSBGQIUt8VjMB7nbXs8KwFCYykEMGLP1amfNmYJ8NSNISB/+4IZApS3xfdwNeunikXb4b5Gm7lyk80ngDVWAuRLD8wnQHFbPK2eIz0wlwD1bfEUrmb91DCXAJVocQS50QMLCNAxh8fIix6YS4BStDiCvOiBuQQYygBzDbSROJa4xeWjxRHkQg8sJkBnUzRBHvTAQgIY1NZtPA96YLEEaHiIpyDkdwpoeYh9MB7bfshiIQEmlkLAfj/hQgK26p1rAv6t/wq7/YRLo8OPfjx/qRownYLYaj2wMjy+0Th3iflrdSLsjhvGyg941Oi2NxrnLhNeqbzE5rhhIfrFVbO6Wbi9nYpt8ORo+cX54c3R7jWImjIvYY+qAE61e5sAphJw1axu/v22cugMBldM9If/zxkMev2jfx345TYa3RYzvZZ5ic15RFMCnMFtm4Gf5pQpE/HPN0eVlv+FV1o7hIzf0GKDSADA+C9MXy0tSdj3c4EmS2RL4j3WbozG6fKCazHLT88OkxAtmRd5o5GdBPzz65dVMB7HKh0IfX3xw19SliIR2UmAx962TIVQZqiEbcBspx4QkyUqNgi8rfQmSxMqVRIlt/0Psj4DGxWhPAFC4rR5BDYqQnkCAgpTNsPcRkWolCus6uSwUREqEeBfuiAdSrdQESoRwOFbJ6RC6bYpQkUCxHbgQcogsk0RKhEgiO8dHJKh9BB5FkBNAgLKTDaUbtvWWO3ESFACZOMHlm2NFY/M3G+dFeIHZZtiBdpnhlQyzKXuLkoYygT49wmpZIfbdBWPkVNjkLQFyKJYgTIBngjY9dJpdYpb6gSgLgEeKdsCK/2PKUKZgKAYq6TV2XInmboEMLTCXaEplCHUCQg4RlROngu2YynUkYB4nuRF1S3xDWgtg37UV+m4nSW+AS0C/CCq6lE5G0xiU4aQEhwLFKEWASGTViGBQjYmkQQylQAbfANaBGgPwALfgJ4EBBwjipml5azzhzSnwL1NLxFiDyGYjpMFZnKEZHFzVGmzwKmqYTRRpG3dfqiiAMHXUD4wD4DwjFjdqMnaNyCM5ATrIGNFmOkyCGCcUJ2hIsyeAGSrCAU5TuY3RGfpJBWyyU5JIEtFaMUUQIZnCpTuFk8AmUWLlO4WTwJZnSzxJSBzRZjVyZLx3eL6p8X1kdHvl4wlwMQROX2Us7iYUQCGjsiZgIeXab9yfLe4gePyRkB4lvZqIAB1r24SSPvHnAJXa2sejzMFwn6aUhC0BHtpvXQV0pSCKQEs9K7OMYoUpeD+am1bVoIJ0pKC0I2SOrdJJgFi/trA1V5LEdkNal+bYRScghSECCADt0YYBeFZ0pkkkYuV7dIDAMCgWpLth+ICI6DtJPk2gygeX9ZA7IK54wg+va1XeirtzLlWd7djURZXXwjhBt12zruLPUE4ZIQDMUQ4ccg7kCVi9kZJm/QA88vg4IvHlzUi/B4d/Lgo9oee6BSPu1IbqlmfILMdx9yZ6xuNbst/LB5f1hi86th+mUFvCsfdNpofY8UaZqYAANy8rVxjxc/wJorI4J13F3tE+F2ylT4Jcu/qT5cq9kU3SmYmBcz0OvSXb15WiaROqvsos8f/KR5f1pYVmkuAcEQ2vzDNOCk3/nvgPxabl1X2uA0NaWRwc5lemDsFAODml0pPNxdQCoyTjcZ5zX80MfggiHBy9+1OLfr9krvEkKYUfAgOHs2Pm/D4FAb1EDP2C+8vZ8a0kABvbb0Fvet1Y4LPRuvrtelj8+NmwfvcnrfU6b+Kf4rqhFU3SbWMdyLco7PResmdXuA4GTyAxAwxBjcLv527/vPS2OCQOblpQPgUGjyAgjc4RYKDn0KIU99OWErAVqPbA+MkgS70BYm94OCL7y9aAKWVP1wu8N0BECM6PAIfwKwumLHvi+8vWszYN/iO1eBxVttKArYa3R4zGZsK0cEXji8OUh/8GGUgZn6AV1o7NBJCZ65HNzcAftZuV6kv+ADEJGAyV/XCVmqbm+TA3iGwxBKch5ujSlvloAMTXpVfnE+nUeG3cxdC/CHbjjEwPgy/29kDJFNkRuAaZBUi4yQ4+GLzsgohstxynw2dtZr/IEXAVqPbY8JB7AoJ2/cK6A/Fmov6k+nyKzUFfNy8rZwC+GZpIcafG417iwvNj5tF73MnERM3Hub6B5SyxEbr67XlqwKfjUrr98kOSdr3MbHIOaJEwFa9cy1ILMjmiNj3AJK271eBQPVFniHlPMEvfvirA+Z65Ot+dPBjEzfjwT9/2lr0/1qJkhuNbmu6VyB8EkLMDD4jK8/H62WDBxSVYBQ3R7u1Ual0Ghr8cfclg96YaF8FizxAM+WSeHnWVl7cwQMJ5Ao77y72MjVxgbM7WottthuVAAsMnbOoobMK5ggYr/U9ZDR4Aj7dibWqzOABg1OgyJ8PkaGJC0F7soMHDBLAnNnP7sYKgS2CSSWYzV/f8/ZUBw/Yc2JECQSqD7+vtHXaMEYAId1TJ6tM3LgwpwMSD6KEsNLEjQtjBAzF2iGAxNPsiHAyfL5zYKo9czqg/uSaBNWQYDxRxsSN3abJxoBErcGz4fMd4+cLja8Cd/WnHRLkwqwkjE3cBJDIbhCAyUivtH0vg+QIAEyQ0C8Ir6qaBBkHyRpC9SfXQ7Hm+mEoSfRJkJvk4IGkJSCAwvvLQzDP+xGXedCy72WQmik8/PbpSwLVEUM5MqOWxuCBFCXAx2SZbGG+Xugzozb6bie10FnqBPiYOE1rGBPRJ8KpSrLz/6GJ/wHR0ty3T41iHwAAAABJRU5ErkJggg==\",\"e\":1},{\"id\":\"comp_0\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":0,\"nm\":\"croix\",\"refId\":\"comp_1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1503.25,2055,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[1502.778,2030.556,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.36,0.36,0.36],\"y\":[1,1,1]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[100,100,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,1.725]},\"o\":{\"x\":[0.21,0.21,0.21],\"y\":[0,0,0]},\"t\":144,\"s\":[100,100,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":207,\"s\":[110,110,100]},{\"t\":256,\"s\":[100,100,100]}],\"ix\":6,\"x\":\"var $bm_rt;\\n$bm_rt = loopOut();\"}},\"ao\":0,\"w\":3000,\"h\":3000,\"ip\":0,\"op\":1200,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\">>Controller\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.85,\"y\":1},\"o\":{\"x\":0.561,\"y\":0},\"t\":0,\"s\":[1496,1773,0],\"to\":[-541.11,-540.985,0],\"ti\":[515.428,-558.256,0]},{\"i\":{\"x\":0.92,\"y\":1},\"o\":{\"x\":0.79,\"y\":0},\"t\":171,\"s\":[1507.318,1763.037,0],\"to\":[-21.845,23.66,0],\"ti\":[28.351,-27.669,0]},{\"i\":{\"x\":0.92,\"y\":1},\"o\":{\"x\":0.99,\"y\":0},\"t\":224,\"s\":[1497,1772,0],\"to\":[-2.459,2.4,0],\"ti\":[-0.5,-0.333,0]},{\"t\":271,\"s\":[1498,1774,0]}],\"ix\":2,\"x\":\"var $bm_rt;\\n$bm_rt = loopOut();\"},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":0,\"s\":[88.91,29.737,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":40,\"s\":[122.798,41.072,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":119,\"s\":[132.501,44.317,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":157,\"s\":[141.611,47.364,100]},{\"t\":221,\"s\":[94.89,31.737,100]}],\"ix\":6,\"x\":\"var $bm_rt;\\nvar temp;\\ntemp = transform.scale[0];\\n$bm_rt = [\\n    temp,\\n    temp\\n];\"}},\"ao\":0,\"ef\":[{\"ty\":5,\"nm\":\"Falloff Master\",\"np\":5,\"mn\":\"Pseudo/b0OA8d132c8bv\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":7,\"nm\":\"Enable\",\"mn\":\"Pseudo/b0OA8d132c8bv-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":1,\"ix\":1}},{\"ty\":7,\"nm\":\"Invert\",\"mn\":\"Pseudo/b0OA8d132c8bv-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":0,\"ix\":2}},{\"ty\":0,\"nm\":\"Falloff\",\"mn\":\"Pseudo/b0OA8d132c8bv-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":16.674,\"ix\":3,\"x\":\"var $bm_rt;\\n$bm_rt = value > 100 ? 100 : value;\"}}]},{\"ty\":5,\"nm\":\"Falloff - Echelle\",\"np\":5,\"mn\":\"Pseudo/iSOkadb76865x\",\"ix\":2,\"en\":1,\"ef\":[{\"ty\":0,\"nm\":\"X Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":100,\"ix\":1}},{\"ty\":0,\"nm\":\"Y Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":100,\"ix\":2}},{\"ty\":0,\"nm\":\"Z Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}}]},{\"ty\":5,\"nm\":\"Falloff - OpacitÃ©\",\"np\":3,\"mn\":\"Pseudo/ajO511f0e9a91\",\"ix\":3,\"en\":1,\"ef\":[{\"ty\":0,\"nm\":\"X Amount\",\"mn\":\"Pseudo/ajO511f0e9a91-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":100,\"ix\":1}}]}],\"shapes\":[],\"ip\":0,\"op\":1209,\"st\":12,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1377.185,1626.348,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1313,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1331,1541.029,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"3\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1342.935,1449.728,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"4\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1407.099,1375.338,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"5\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1495,1350,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"6\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1592.053,1381.548,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"7\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1648.856,1449.728,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"8\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1660,1541.029,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"9\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[1622.046,1626.348,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"TracÃ© 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"bm\":0}]},{\"id\":\"comp_1\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"Calque de forme 15\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1744,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[49,244,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"rc\",\"d\":1,\"s\":{\"a\":0,\"k\":[42,236],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":4},\"nm\":\"TracÃ© rectangulaire 1\",\"mn\":\"ADBE Vector Shape - Rect\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.766274964576,0.137628996606,0.137628996606,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.211764720842,0.270588235294,0.309803921569,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[49,244],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"rd\",\"nm\":\"Sommets arrondis 1\",\"r\":{\"a\":0,\"k\":15,\"ix\":1},\"ix\":2,\"mn\":\"ADBE Vector Filter - RC\",\"hd\":false}],\"ip\":0,\"op\":1320,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"Calque de forme 14\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":90,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1694,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[49,244,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,56.78,100],\"ix\":6}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"rc\",\"d\":1,\"s\":{\"a\":0,\"k\":[42,236],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":4},\"nm\":\"TracÃ© rectangulaire 1\",\"mn\":\"ADBE Vector Shape - Rect\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.766274964576,0.137628996606,0.137628996606,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.211764720842,0.270588235294,0.309803921569,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[49,244],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"rd\",\"nm\":\"Sommets arrondis 1\",\"r\":{\"a\":0,\"k\":24,\"ix\":1},\"ix\":2,\"mn\":\"ADBE Vector Filter - RC\",\"hd\":false}],\"ip\":0,\"op\":1320,\"st\":0,\"bm\":0}]},{\"id\":\"comp_2\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":2,\"nm\":\"Calque 10/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_0\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":330,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":426,\"s\":[70.581]},{\"t\":566,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":330,\"s\":[1500,1500,0],\"to\":[23.389,-291.222,0],\"ti\":[223.278,79.556,0]},{\"t\":566,\"s\":[1030.333,1052.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[27.5,22.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":330,\"s\":[0,0,100]},{\"t\":564,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":2,\"nm\":\"Calque 11/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_1\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":393,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":489,\"s\":[70.581]},{\"t\":627,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":393,\"s\":[1500,1500,0],\"to\":[155.333,-334.278,0],\"ti\":[-128.667,114.278,0]},{\"t\":629,\"s\":[1492,1024.333,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[30.5,25,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":393,\"s\":[0,0,100]},{\"t\":627,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":63,\"op\":1297,\"st\":63,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":2,\"nm\":\"Calque 12/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_2\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":361,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":457,\"s\":[70.581]},{\"t\":596,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":361,\"s\":[1500,1500,0],\"to\":[12.556,-242.833,0],\"ti\":[2.444,362.833,0]},{\"t\":597,\"s\":[1925.333,1103,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[33,27,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":361,\"s\":[0,0,100]},{\"t\":596,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":31,\"op\":1265,\"st\":31,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":2,\"nm\":\"Calque 13/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_3\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":434,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":530,\"s\":[70.581]},{\"t\":668,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.474,\"y\":0.622},\"o\":{\"x\":0.153,\"y\":0},\"t\":434,\"s\":[1500,1500,0],\"to\":[-11.952,-214.891,0],\"ti\":[200.508,51.457,0]},{\"i\":{\"x\":0.628,\"y\":1},\"o\":{\"x\":0.296,\"y\":0.591},\"t\":584,\"s\":[1758.198,1215.93,0],\"to\":[-27.401,-7.032,0],\"ti\":[37.611,2.091,0]},{\"t\":670,\"s\":[1658.333,1206.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[36,29.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":434,\"s\":[0,0,100]},{\"t\":668,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":104,\"op\":1338,\"st\":104,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":2,\"nm\":\"Calque 14/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_4\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":358,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":454,\"s\":[70.581]},{\"t\":597,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":358,\"s\":[1500,1500,0],\"to\":[1.944,364.444,0],\"ti\":[-463.333,-446.667,0]},{\"t\":594,\"s\":[2171.667,1556.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[38.5,31,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":358,\"s\":[0,0,100]},{\"t\":597,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":28,\"op\":1262,\"st\":28,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":2,\"nm\":\"Calque 15/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_5\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":330,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":426,\"s\":[70.581]},{\"t\":566,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":330,\"s\":[1500,1500,0],\"to\":[2.222,282.222,0],\"ti\":[316.111,24.444,0]},{\"t\":566,\"s\":[906.667,1531.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[37,31.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":330,\"s\":[0,0,100]},{\"t\":566,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":2,\"nm\":\"Calque 16/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_6\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":410,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":506,\"s\":[70.581]},{\"t\":645,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":410,\"s\":[1500,1500,0],\"to\":[-24.444,-25.556,0],\"ti\":[81.667,128.611,0]},{\"t\":646,\"s\":[1353.333,1346.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[41.5,34,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":410,\"s\":[0,0,100]},{\"t\":645,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":80,\"op\":1314,\"st\":80,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":2,\"nm\":\"Calque 17/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_7\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":390,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":486,\"s\":[70.581]},{\"t\":503,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":390,\"s\":[1500,1500,0],\"to\":[340.278,-158.333,0],\"ti\":[-311.944,300,0]},{\"t\":626,\"s\":[1761.667,930,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[43.5,37,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":390,\"s\":[0,0,100]},{\"t\":626,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":60,\"op\":1294,\"st\":60,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":2,\"nm\":\"Calque 18/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_8\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":348,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":444,\"s\":[70.581]},{\"t\":586,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":348,\"s\":[1496.667,1498.333,0],\"to\":[-5.556,-277.778,0],\"ti\":[-609.444,-140.556,0]},{\"t\":584,\"s\":[2153.333,1233.333,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[43,36,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":348,\"s\":[0,0,100]},{\"t\":586,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":18,\"op\":1252,\"st\":18,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":2,\"nm\":\"Calque 3/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_9\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":402,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":498,\"s\":[70.581]},{\"t\":637,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":402,\"s\":[1500,1500,0],\"to\":[11.389,246.111,0],\"ti\":[-86.389,90.556,0]},{\"t\":638,\"s\":[1743.333,1446.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[17,14,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":402,\"s\":[0,0,100]},{\"t\":637,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":72,\"op\":1306,\"st\":72,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":2,\"nm\":\"Calque 4/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_10\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":330,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":426,\"s\":[70.581]},{\"t\":566,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":330,\"s\":[1500,1500,0],\"to\":[1.389,290.833,0],\"ti\":[-111.389,-32.5,0]},{\"t\":566,\"s\":[1728.333,1655,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[17.5,15.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":330,\"s\":[0,0,100]},{\"t\":566,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":12,\"ty\":2,\"nm\":\"Calque 5/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_11\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":386,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":482,\"s\":[70.581]},{\"t\":621,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":386,\"s\":[1500,1500,0],\"to\":[-4.167,-346.111,0],\"ti\":[130.833,249.444,0]},{\"t\":622,\"s\":[1833.333,1348.333,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[17.5,15.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":386,\"s\":[0,0,100]},{\"t\":621,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":56,\"op\":1290,\"st\":56,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":2,\"nm\":\"Calque 6/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_12\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":350,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":446,\"s\":[70.581]},{\"t\":586,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":350,\"s\":[1498.333,1501.667,0],\"to\":[5.278,137.5,0],\"ti\":[-0.278,-39.167,0]},{\"t\":586,\"s\":[1500,1736.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[23.5,18.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":350,\"s\":[0,0,100]},{\"t\":586,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":20,\"op\":1254,\"st\":20,\"bm\":0},{\"ddd\":0,\"ind\":14,\"ty\":2,\"nm\":\"Calque 7/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_13\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":374,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":470,\"s\":[70.581]},{\"t\":611,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":374,\"s\":[1500,1500,0],\"to\":[22.222,-262.778,0],\"ti\":[-80.556,181.111,0]},{\"t\":610,\"s\":[1283.333,1123.333,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[23,18.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":374,\"s\":[0,0,100]},{\"t\":611,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":44,\"op\":1278,\"st\":44,\"bm\":0},{\"ddd\":0,\"ind\":15,\"ty\":2,\"nm\":\"Calque 8/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_14\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":330,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":426,\"s\":[70.581]},{\"t\":566,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":330,\"s\":[1500,1500,0],\"to\":[-30,87.222,0],\"ti\":[-16.667,-28.889,0]},{\"t\":566,\"s\":[1600,1673.333,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[24,19,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":330,\"s\":[0,0,100]},{\"t\":566,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":16,\"ty\":2,\"nm\":\"Calque 9/petits coeurs.ai\",\"cl\":\"ai\",\"refId\":\"image_15\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":420,\"s\":[100]},{\"i\":{\"x\":[0.259],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":516,\"s\":[70.581]},{\"t\":657,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.444,\"y\":1},\"o\":{\"x\":0.129,\"y\":0},\"t\":420,\"s\":[1500,1500,0],\"to\":[12.778,408.056,0],\"ti\":[11.111,-1.944,0]},{\"t\":656,\"s\":[1593.333,1361.667,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[25.5,20.5,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.444,0.444,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.129,0.129,0.333],\"y\":[0,0,0]},\"t\":420,\"s\":[0,0,100]},{\"t\":657,\"s\":[395,395,100]}],\"ix\":6}},\"ao\":0,\"ip\":90,\"op\":1324,\"st\":90,\"bm\":0}]},{\"id\":\"comp_3\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":2,\"nm\":\"main droite/main de priere.ai\",\"cl\":\"ai\",\"refId\":\"image_16\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.999],\"y\":[1]},\"o\":{\"x\":[0.46],\"y\":[0]},\"t\":250,\"s\":[0]},{\"t\":380,\"s\":[100]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.999,\"y\":1},\"o\":{\"x\":0.46,\"y\":0},\"t\":250,\"s\":[854,856.333,0],\"to\":[12,280.667,0],\"ti\":[-435.667,-18,0]},{\"t\":380,\"s\":[1458,1544,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[29,83,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.999,0.999,0.999],\"y\":[1,1,1]},\"o\":{\"x\":[0.46,0.46,0.46],\"y\":[0,0,0]},\"t\":250,\"s\":[310,310,100]},{\"t\":380,\"s\":[100,100,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":2,\"nm\":\"main gauche/main de priere.ai\",\"cl\":\"ai\",\"refId\":\"image_17\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.999],\"y\":[1]},\"o\":{\"x\":[0.46],\"y\":[0]},\"t\":250,\"s\":[0]},{\"t\":380,\"s\":[100]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.999,\"y\":1},\"o\":{\"x\":0.46,\"y\":0},\"t\":250,\"s\":[1975,821.667,0],\"to\":[-1.667,321.333,0],\"ti\":[365.333,-5.667,0]},{\"t\":380,\"s\":[1534,1544,0]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[32,83,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.999,0.999,0.999],\"y\":[1,1,1]},\"o\":{\"x\":[0.46,0.46,0.46],\"y\":[0,0,0]},\"t\":250,\"s\":[310,310,100]},{\"t\":380,\"s\":[100,100,100]}],\"ix\":6}},\"ao\":0,\"ip\":0,\"op\":1234,\"st\":0,\"bm\":0}]}],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":0,\"nm\":\"chapelet\",\"refId\":\"comp_0\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.877],\"y\":[0.619]},\"o\":{\"x\":[0.23],\"y\":[0]},\"t\":516,\"s\":[100]},{\"t\":686,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1428,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[1500,1500,0],\"ix\":1},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.92,0.92,0.91],\"y\":[-0.117,-0.117,1]},\"o\":{\"x\":[0.23,0.23,0.23],\"y\":[0,0,0]},\"t\":516,\"s\":[100,100,100]},{\"t\":686,\"s\":[354.999,354.999,100]}],\"ix\":6}},\"ao\":0,\"w\":3000,\"h\":3000,\"ip\":1,\"op\":1201,\"st\":1,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":0,\"nm\":\"coeur\",\"refId\":\"comp_2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1500,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[1500,1500,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6}},\"ao\":0,\"w\":3000,\"h\":3000,\"ip\":308,\"op\":1508,\"st\":308,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":0,\"nm\":\"main\",\"refId\":\"comp_3\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":530,\"s\":[0]},{\"i\":{\"x\":[0.999],\"y\":[1]},\"o\":{\"x\":[0.69],\"y\":[0]},\"t\":723,\"s\":[100]},{\"t\":807,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1500,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[1500,1500,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6}},\"ao\":0,\"w\":3000,\"h\":3000,\"ip\":276,\"op\":1476,\"st\":276,\"bm\":0}],\"markers\":[{\"tm\":272,\"cm\":\"1\",\"dr\":0}]}"
  },
  {
    "path": "assets/content.md",
    "content": "---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n  resize in browser.\n- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly\n  i18n with plurals support and easy syntax.\n\nYou will like those projects!\n\n---\n\n# h1 Heading 8-)\n## h2 Heading\n### h3 Heading\n#### h4 Heading\n##### h5 Heading\n###### h6 Heading\n\n\n## Horizontal Rules\n\n___\n\n---\n\n***\n\n\n## Typographic replacements\n\nEnable typographer option to see result.\n\n(c) (C) (r) (R) (tm) (TM) (p) (P) +-\n\ntest.. test... test..... test?..... test!....\n\n!!!!!! ???? ,,  -- ---\n\n\"Smartypants, double quotes\" and 'single quotes'\n\n\n## Emphasis\n\n**This is bold text**\n\n__This is bold text__\n\n*This is italic text*\n\n_This is italic text_\n\n~~Strikethrough~~\n\n\n## Blockquotes\n\n\n> Blockquotes can also be nested...\n>> ...by using additional greater-than signs right next to each other...\n> > > ...or with spaces between arrows.\n\n\n## Lists\n\nUnordered\n\n+ Create a list by starting a line with `+`, `-`, or `*`\n+ Sub-lists are made by indenting 2 spaces:\n  - Marker character change forces new list start:\n    * Ac tristique libero volutpat at\n    + Facilisis in pretium nisl aliquet\n    - Nulla volutpat aliquam velit\n+ Very easy!\n\nOrdered\n\n1. Lorem ipsum dolor sit amet\n2. Consectetur adipiscing elit\n3. Integer molestie lorem at massa\n\n\n1. You can use sequential numbers...\n1. ...or keep all the numbers as `1.`\n\nStart numbering with offset:\n\n57. foo\n1. bar\n\n\n## Code\n\nInline `code`\n\nIndented code\n\n    // Some comments\n    line 1 of code\n    line 2 of code\n    line 3 of code\n\n\nBlock code \"fences\"\n\n```\nSample text here...\n```\n\nSyntax highlighting\n\n``` js\nvar foo = function (bar) {\n  return bar++;\n};\n\nconsole.log(foo(5));\n```\n\n## Tables\n\n| Option | Description |\n| ------ | ----------- |\n| data   | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext    | extension to be used for dest files. |\n\nRight aligned columns\n\n| Option | Description |\n| ------:| -----------:|\n| data   | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext    | extension to be used for dest files. |\n\n\n## Links\n\n[link text](http://dev.nodeca.com)\n\n[link with title](http://nodeca.github.io/pica/demo/ \"title text!\")\n\nAutoconverted link https://github.com/nodeca/pica (enable linkify to see)\n\n\n## Images\n\n![Minion](https://octodex.github.com/images/minion.png)\n![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg \"The Stormtroopocat\")\n\nLike links, Images also have a footnote style syntax\n\n![Alt text][id]\n\nWith a reference later in the document defining the URL location:\n\n[id]: https://octodex.github.com/images/dojocat.jpg  \"The Dojocat\"\n\n\n## Plugins\n\nThe killer feature of `markdown-it` is very effective support of\n[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).\n\n\n### [Emojies](https://github.com/markdown-it/markdown-it-emoji)\n\n> Classic markup: :wink: :cry: :laughing: :yum:\n>\n> Shortcuts (emoticons): :-) :-( 8-) ;)\n\nsee [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.\n\n\n### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)\n\n- 19^th^\n- H~2~O\n\n\n### [\\<ins>](https://github.com/markdown-it/markdown-it-ins)\n\n++Inserted text++\n\n\n### [\\<mark>](https://github.com/markdown-it/markdown-it-mark)\n\n==Marked text==\n\n\n### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)\n\nFootnote 1 link[^first].\n\nFootnote 2 link[^second].\n\nInline footnote^[Text of inline footnote] definition.\n\nDuplicated footnote reference[^second].\n\n[^first]: Footnote **can have markup**\n\n    and multiple paragraphs.\n\n[^second]: Footnote text.\n\n\n### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)\n\nTerm 1\n\n:   Definition 1\nwith lazy continuation.\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n_Compact style:_\n\nTerm 1\n  ~ Definition 1\n\nTerm 2\n  ~ Definition 2a\n  ~ Definition 2b\n\n\n### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)\n\nThis is HTML abbreviation example.\n\nIt converts \"HTML\", but keep intact partial entries like \"xxxHTMLyyy\" and so on.\n\n*[HTML]: Hyper Text Markup Language\n\n### [Custom containers](https://github.com/markdown-it/markdown-it-container)\n\n::: warning\n*here be dragons*\n:::\n"
  },
  {
    "path": "assets/qui_sommes_nous.md",
    "content": "![](gs://aujourdhuilavenir.appspot.com/articles/qui_somme_nous/les_soeurs_ndd.png)\n\n### Qui sommes nous?\n\n## Les Sœurs Dominicaines de Notre-Dame de la Délivrande à Madagascar\n\n**Un charisme au service de la communauté**\n\n![](gs://aujourdhuilavenir.appspot.com/articles/qui_somme_nous/20231105_113635.jpg)\n\nNous sommes les Sœurs Dominicaines de Notre-Dame de la Délivrande, une congrégation religieuse catholique fondée en 1811. Notre charisme se base sur quatre piliers: l'étude, la prière, la prédication et la vie fraternelle. Guidées par ces valeurs, nous nous investissons dans divers domaines pour servir les populations locales et contribuer au développement social et spirituel des communautés.\n\n**Arrivée à Madagascar et implantation à Antsirabe**\n\nEn 2008, **nous** avons répondu à l'appel de l'Église catholique de Madagascar et **avons** établi une communauté dans le quartier de Saharoaloha à Antsirabe. Depuis lors, **nous** nous activons dans plusieurs œuvres sociales et pastorales, apportant **notre** contribution au bien-être de la population locale.\n\n**Œuvres et actions multiples**\n\n![](gs://aujourdhuilavenir.appspot.com/articles/qui_somme_nous/20231114_133444.jpg)\n\nLe champ d'action des Sœurs Dominicaines à Madagascar est vaste et diversifié. **Nous** gérons une cantine qui offre des repas quotidiens aux enfants défavorisés. **Nous** nous impliquons également dans la pastorale de la paroisse de Bevokatra, de la Chapelle militaire et de Saint Luc Ambohimena.\n\nSoucieuses du développement holistique de la communauté, **nous** gérons également une ferme qui assure la production de denrées alimentaires et une source de revenus. **Nous** dirigeons aussi un dispensaire qui offre des soins médicaux aux populations démunies.\n\n![](gs://aujourdhuilavenir.appspot.com/articles/qui_somme_nous/20231113_213646.jpg)\n\nL'éducation est un autre domaine d'intervention important pour la congrégation. **Nous** avons mis en place une école de la seconde chance pour les jeunes en décrochage scolaire et parrainons une dizaine d'enfants pour leur assurer une éducation et un avenir meilleur.\n\n**Une communauté dynamique et en croissance**\n\nLa communauté des Sœurs Dominicaines à Madagascar est composée de 13 sœurs malgaches et de 3 sœurs martiniquaises. **Nous sommes** accompagnées par 43 jeunes en formation qui aspirent à suivre **notre** exemple et à embrasser la vie religieuse. Cette communauté dynamique et en croissance est un véritable pilier pour la communauté locale et un symbole de l'engagement de l'Église catholique au service des plus démunis.\n\n**Conclusion**\n\nLes Sœurs Dominicaines de Notre-Dame de la Délivrande constituent une force vive dans la communauté d'Antsirabe. Par **nos** œuvres multiples et **notre** engagement sans faille, **nous** contribuons de manière significative au développement social, éducatif et spirituel de la population. **Notre** présence est un précieux atout pour la ville et un modèle d'inspiration pour les générations futures.\n\n**Pour plus d'informations:**\n\n- Site web de la congrégation: <URL non valide supprimée>\n- Page Facebook de la communauté à Madagascar: <URL non valide supprimée>"
  },
  {
    "path": "assets/sample.md",
    "content": "---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n  resize in browser.\n- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly\n  i18n with plurals support and easy syntax.\n\nYou will like those projects!\n\n---\n\n# h1 Heading 8-)\n## h2 Heading\n### h3 Heading\n#### h4 Heading\n##### h5 Heading\n###### h6 Heading\n\n\n## Horizontal Rules\n\n___\n\n---\n\n***\n\n\n## Typographic replacements\n\nEnable typographer option to see result.\n\n(c) (C) (r) (R) (tm) (TM) (p) (P) +-\n\ntest.. test... test..... test?..... test!....\n\n!!!!!! ???? ,,  -- ---\n\n\"Smartypants, double quotes\" and 'single quotes'\n\n\n## Emphasis\n\n**This is bold text**\n\n__This is bold text__\n\n*This is italic text*\n\n_This is italic text_\n\n~~Strikethrough~~\n\n\n## Blockquotes\n\n\n> Blockquotes can also be nested...\n>> ...by using additional greater-than signs right next to each other...\n> > > ...or with spaces between arrows.\n\n\n## Lists\n\nUnordered\n\n+ Create a list by starting a line with `+`, `-`, or `*`\n+ Sub-lists are made by indenting 2 spaces:\n  - Marker character change forces new list start:\n    * Ac tristique libero volutpat at\n    + Facilisis in pretium nisl aliquet\n    - Nulla volutpat aliquam velit\n+ Very easy!\n\nOrdered\n\n1. Lorem ipsum dolor sit amet\n2. Consectetur adipiscing elit\n3. Integer molestie lorem at massa\n\n\n1. You can use sequential numbers...\n1. ...or keep all the numbers as `1.`\n\nStart numbering with offset:\n\n57. foo\n1. bar\n\n\n## Code\n\nInline `code`\n\nIndented code\n\n    // Some comments\n    line 1 of code\n    line 2 of code\n    line 3 of code\n\n\nBlock code \"fences\"\n\n```\nSample text here...\n```\n\nSyntax highlighting\n\n``` js\nvar foo = function (bar) {\n  return bar++;\n};\n\nconsole.log(foo(5));\n```\n\n## Tables\n\n| Option | Description |\n| ------ | ----------- |\n| data   | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext    | extension to be used for dest files. |\n\nRight aligned columns\n\n| Option | Description |\n| ------:| -----------:|\n| data   | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext    | extension to be used for dest files. |\n\n\n## Links\n\n[link text](http://dev.nodeca.com)\n\n[link with title](http://nodeca.github.io/pica/demo/ \"title text!\")\n\nAutoconverted link https://github.com/nodeca/pica (enable linkify to see)\n\n\n## Images\n\n![Minion](https://octodex.github.com/images/minion.png)\n![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg \"The Stormtroopocat\")\n\nLike links, Images also have a footnote style syntax\n\n![Alt text][id]\n\nWith a reference later in the document defining the URL location:\n\n[id]: https://octodex.github.com/images/dojocat.jpg  \"The Dojocat\"\n\n\n## Plugins\n\nThe killer feature of `markdown-it` is very effective support of\n[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).\n\n\n### [Emojies](https://github.com/markdown-it/markdown-it-emoji)\n\n> Classic markup: :wink: :cry: :laughing: :yum:\n>\n> Shortcuts (emoticons): :-) :-( 8-) ;)\n\nsee [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.\n\n\n### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)\n\n- 19^th^\n- H~2~O\n\n\n### [\\<ins>](https://github.com/markdown-it/markdown-it-ins)\n\n++Inserted text++\n\n\n### [\\<mark>](https://github.com/markdown-it/markdown-it-mark)\n\n==Marked text==\n\n\n### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)\n\nFootnote 1 link[^first].\n\nFootnote 2 link[^second].\n\nInline footnote^[Text of inline footnote] definition.\n\nDuplicated footnote reference[^second].\n\n[^first]: Footnote **can have markup**\n\n    and multiple paragraphs.\n\n[^second]: Footnote text.\n\n\n### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)\n\nTerm 1\n\n:   Definition 1\nwith lazy continuation.\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n_Compact style:_\n\nTerm 1\n  ~ Definition 1\n\nTerm 2\n  ~ Definition 2a\n  ~ Definition 2b\n\n\n### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)\n\nThis is HTML abbreviation example.\n\nIt converts \"HTML\", but keep intact partial entries like \"xxxHTMLyyy\" and so on.\n\n*[HTML]: Hyper Text Markup Language\n\n### [Custom containers](https://github.com/markdown-it/markdown-it-container)\n\n::: warning\n*here be dragons*\n:::\n"
  },
  {
    "path": "cors.json",
    "content": "[\n\t{\n\t\t\"origin\":[\"*\"],\n\t\t\"method\":[\"GET\"],\n\t\t\"maxAgeSeconds\": 3600\n\t}\n]\n"
  },
  {
    "path": "dap.ps1",
    "content": "# Simple powershell script for automating build and deploy in the [avant_premiere] channel.\n\n# flutter build web --release\n# firebase hosting:channel:deploy avant_premiere\n\nD:\\dev\\flutter\\bin\\cache\\dart-sdk\\bin\\dart.exe --disable-dart-dev D:\\dev\\flutter\\bin\\cache\\dart-sdk\\bin\\snapshots\\frontend_server.dart.snapshot --sdk-root D:\\dev\\flutter\\bin\\cache\\flutter_web_sdk/ --incremental --target=dartdevc --experimental-emit-debug-metadata -DFLUTTER_WEB_AUTO_DETECT=true -DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/3f3e560236539b7e2702f5ac790b2a4691b32d49/ --output-dill C:\\Users\\JOSEPH~1\\AppData\\Local\\Temp\\flutter_tools.a5149c9d\\flutter_tool.b6134d75\\app.dill --packages D:\\Projects\\ahl\\.dart_tool\\package_config.json -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --filesystem-root C:\\Users\\JOSEPH~1\\AppData\\Local\\Temp\\flutter_tools.a5149c9d\\flutter_tools.e8b57183 --filesystem-scheme org-dartlang-app --initialize-from-dill build\\a072907fec955372e484c180f3334617.cache.dill.track.dill --platform file:///D:/dev/flutter/bin/cache/flutter_web_sdk/kernel/ddc_outline_sound.dill --verbosity=error --sound-null-safety"
  },
  {
    "path": "devtools_options.yaml",
    "content": "extensions:\n  - provider: true"
  },
  {
    "path": "firebase.json",
    "content": "{\n  \"hosting\": {\n    \"public\": \"build/web/\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**/.*\",\n      \"**/node_modules/**\"\n    ],\n    \"rewrites\": [\n      {\n        \"source\": \"**\",\n        \"destination\": \"/index.html\"\n      }\n    ]\n  },\n  \"emulators\": {\n    \"auth\": {\n      \"port\": 9099\n    },\n    \"firestore\": {\n      \"port\": 46561\n    },\n    \"hosting\": {\n      \"port\": 5000\n    },\n    \"storage\": {\n      \"port\": 9199\n    },\n    \"ui\": {\n      \"enabled\": true\n    },\n    \"singleProjectMode\": true\n  },\n  \"storage\": {\n    \"rules\": \"storage.rules\"\n  },\n  \"firestore\": {\n    \"rules\": \"firestore.rules\",\n    \"indexes\": \"firestore.indexes.json\"\n  }\n}\n"
  },
  {
    "path": "firestore.indexes.json",
    "content": "{\n  \"indexes\": [],\n  \"fieldOverrides\": []\n}\n"
  },
  {
    "path": "firestore.rules",
    "content": "rules_version = '2';\n\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /{document=**} {\n      allow read: if true;\n    }\n    match /users/{document=**}{\n    \tallow write: if true;\n    }\n    match /prayer_requests/{document=**}{\n    allow write: if true;\n    allow read: if true;\n    }\n  }\n}"
  },
  {
    "path": "functions/main.py",
    "content": "# Welcome to Cloud Functions for Firebase for Python!\n# To get started, simply uncomment the below code or create your own.\n# Deploy with `firebase deploy`\n\nfrom firebase_functions import https_fn\nfrom firebase_admin import initialize_app\n\n# initialize_app()\n#\n#\n# @https_fn.on_request()\n# def on_request_example(req: https_fn.Request) -> https_fn.Response:\n#     return https_fn.Response(\"Hello world!\")"
  },
  {
    "path": "functions/requirements.txt",
    "content": "firebase_functions~=0.1.0"
  },
  {
    "path": "l10n.yaml",
    "content": "arb-dir: lib/src/localization\ntemplate-arb-file: app_fr.arb\noutput-localization-file: app_localizations.dart\nuntranslated-messages-file: untranslated_message.txt\n"
  },
  {
    "path": "lib/ahl_barrel.dart",
    "content": "library;\n\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\npart 'src/assets/assets.dart';\npart 'src/constants/constants.dart';\n"
  },
  {
    "path": "lib/firebase_options.dart",
    "content": "// File generated by FlutterFire CLI.\n// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members\nimport 'package:firebase_core/firebase_core.dart' show FirebaseOptions;\nimport 'package:flutter/foundation.dart'\n    show defaultTargetPlatform, kIsWeb, TargetPlatform;\n\n/// Default [FirebaseOptions] for use with your Firebase apps.\n///\n/// Example:\n/// ```dart\n/// import 'firebase_options.dart';\n/// // ...\n/// await Firebase.initializeApp(\n///   options: DefaultFirebaseOptions.currentPlatform,\n/// );\n/// ```\nclass DefaultFirebaseOptions {\n  static FirebaseOptions get currentPlatform {\n    if (kIsWeb) {\n      return web;\n    }\n    switch (defaultTargetPlatform) {\n      case TargetPlatform.android:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions have not been configured for android - '\n          'you can reconfigure this by running the FlutterFire CLI again.',\n        );\n      case TargetPlatform.iOS:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions have not been configured for ios - '\n          'you can reconfigure this by running the FlutterFire CLI again.',\n        );\n      case TargetPlatform.macOS:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions have not been configured for macos - '\n          'you can reconfigure this by running the FlutterFire CLI again.',\n        );\n      case TargetPlatform.windows:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions have not been configured for windows - '\n          'you can reconfigure this by running the FlutterFire CLI again.',\n        );\n      case TargetPlatform.linux:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions have not been configured for linux - '\n          'you can reconfigure this by running the FlutterFire CLI again.',\n        );\n      default:\n        throw UnsupportedError(\n          'DefaultFirebaseOptions are not supported for this platform.',\n        );\n    }\n  }\n\n  static const FirebaseOptions web = FirebaseOptions(\n    apiKey: 'AIzaSyB3NGL68GwU26EZyhuK1TgApgyjed6Xmuk',\n    appId: '1:452957179496:web:511c2c7b5acddca9e8b5dd',\n    messagingSenderId: '452957179496',\n    projectId: 'aujourdhuilavenir',\n    authDomain: 'aujourdhuilavenir.firebaseapp.com',\n    storageBucket: 'aujourdhuilavenir.appspot.com',\n    measurementId: 'G-RJLCGV14LF',\n  );\n}\n"
  },
  {
    "path": "lib/main.dart",
    "content": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_web_plugins/url_strategy.dart';\n\nimport 'package:lottie/lottie.dart';\nimport 'package:provider/provider.dart';\nimport 'package:meta_seo/meta_seo.dart';\n\nimport 'src/app.dart';\nimport 'src/firebase_constants.dart';\nimport 'src/settings/settings_controller.dart';\nimport 'src/settings/settings_service.dart';\nimport 'src/theme/theme.dart';\n// test on github auto deploy\n\nvoid main() async {\n  /// Meta Seo Setup\n  if(kIsWeb){\n    MetaSEO().config();\n  }\n\n  // ensure flutter is initialized\n  // WidgetsFlutterBinding.ensureInitialized();\n\n  // Make the app url based\n  usePathUrlStrategy();\n\n  // Set up the SettingsController, which will glue user settings to multiple\n  // Flutter Widgets.\n  final settingsController = SettingsController(SettingsService());\n\n  // Load the user's preferred theme while the splash screen is displayed.\n  // This prevents a sudden theme change when the app is first displayed.\n  settingsController.loadSettings();\n\n  // Run the app and pass in the SettingsController. The app listens to the\n  // SettingsController for changes, then passes it further down to the\n  // SettingsView.\n\n  // here we go with firebase setup.\n  // It is better to await this flutter app, but when working offline, it makes\n  // the app not loading.\n\n  runApp(\n    ChangeNotifierProvider.value(\n      value: settingsController,\n      child: FutureBuilder(\n        future: firebaseApp,\n        builder: (context, snapshot) {\n          if (snapshot.hasData) {\n            return MyApp(\n              settingsController: settingsController,\n            );\n          } else {\n            return Container(\n              color: AhlTheme.background,\n              child: LottieBuilder.asset(\n              'animations/loading.json',\n              repeat: true,),\n            );\n          }\n        },\n      ),\n    ),\n  );\n}\n"
  },
  {
    "path": "lib/src/app.dart",
    "content": "\nimport 'package:ahl/src/article_view/view/article_view.dart';\nimport 'package:ahl/src/pages/novena_page/novena_page.dart';\nimport 'package:ahl/src/pages/projects/project_page_view.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:flutter_localizations/flutter_localizations.dart';\n\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:go_router/go_router.dart';\n\nimport 'package:ahl/src/pages/homepage/donation/donation_page.dart';\nimport 'package:ahl/src/pages/prayers/prayers_page.dart';\nimport 'package:ahl/src/pages/projects/projects_page.dart';\nimport 'package:ahl/src/pages/rosary/rosary_page.dart';\nimport 'package:ahl/src/pages/who_we_are/who_we_are.dart';\nimport 'package:ahl/src/project_space/bloc.dart';\nimport 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'firebase_constants.dart';\nimport 'pages/homepage/homepage.dart';\nimport 'theme/theme.dart';\nimport 'settings/settings_controller.dart';\n\n/// The route widget of the website.\nclass MyApp extends StatefulWidget {\n  const MyApp({\n    super.key,\n    required this.settingsController,\n    this.home,\n  });\n\n  final SettingsController settingsController;\n  final Widget? home;\n\n  @override\n  State<MyApp> createState() => _MyAppState();\n\n  static void setLocal(BuildContext context, Locale newLocale) async {\n    _MyAppState? state = context.findAncestorStateOfType<_MyAppState>();\n    state?.changeLanguage(newLocale);\n  }\n}\n\nclass _MyAppState extends State<MyApp> {\n  Locale? _locale = const Locale('fr', 'FR');\n  late SettingsController settingsController;\n\n  final GoRouter router = GoRouter(\n    routes: [\n      GoRoute(\n        path: '/',\n        name: HomePage.routeName,\n        builder: (_, __) => const HomePage(),\n        routes: [\n          /// Project\n          GoRoute(\n            path: ProjectsPage.routeName,\n            name: ProjectsPage.routeName,\n            builder: (_, __) => const ProjectsPage(),\n            routes: [\n              GoRoute(\n                path: \":projectId\",\n                // name: ProjectsPage.routeName,\n                builder: (context, state) {\n                  // get article id from path\n                  String? projectId = state.pathParameters[\"projectId\"];\n\n                  //? Not working\n                  // when no project isn't specified, go to the all project.\n                  // if (state.pathParameters.isEmpty || articleId == null) {\n                  //   return const ProjectsPage();\n                  // } else {\n                  //   context.read<ProjectBloc>().add(\n                  //         GetArticleByIdEvent(id: articleId),\n                  //       );\n                  //   return BlocBuilder<ProjectBloc, ArticleState<Article>>(\n                  //     builder: (context, state) {\n                  //       // get project\n                  //       var project = state.articles?[articleId];\n                  //       if (project == null) {\n                  //         return const ProjectsPage();\n                  //       } else {\n                  //         return ProjectPageView(project: project);\n                  //       }\n                  //     },\n                  //   );\n                  // }\n\n                  // Passing the article name to ProjectPageView instead\n                  if (projectId != null && projectId.trim() != \"\") {\n                    return ProjectPageView(\n                      projectId: projectId,\n                    );\n                  } else {\n                    return const ProjectsPage();\n                  }\n                },\n              ),\n            ],\n          ),\n          // GoRoute(\n          //   path: ArticleView.routeName,\n          //   builder: (_, __) => const ProjectsPage(),\n          //   routes: [\n\n          // Articles\n          GoRoute(\n            name: ArticleContentPage.routeName,\n            path: \"${ArticleContentPage.routeName}/:articleId\",\n            // name: ProjectsPage.routeName,\n            builder: (context, state) {\n              // get article id from path\n              String? articleId = state.pathParameters[\"articleId\"];\n\n              // Passing the article name to ProjectPageView instead\n              if (state.extra != null) {\n                return ArticleContentPage(\n                  article: state.extra as Article,\n                );\n              } else /*if (articleId != null && articleId.trim() != \"\")*/ {\n                return ArticleContentPage.fromId(articleId: articleId);\n              }\n              // else {\n              //   return const ArticlesPage();\n              // }\n            },\n          ),\n\n          // Novena\n          GoRoute(\n            name: NovenaPage.routeName,\n            path: \"${NovenaPage.routeName}/:novenaId\",\n            // name: ProjectsPage.routeName,\n            builder: (context, state) {\n              // get article id from path\n              String? articleId = state.pathParameters[\"novenaId\"];\n\n              // Passing the article name to ProjectPageView instead\n              if (state.extra != null) {\n                return NovenaPage(\n                  novena: state.extra as Article,\n                );\n              } else /*if (articleId != null && articleId.trim() != \"\")*/ {\n                return NovenaPage.fromId(novenaId: articleId);\n              }\n              // else {\n              //   return const ArticlesPage();\n              // }\n            },\n          ),\n          //   ],\n          // ),\n\n          // Prayers\n          GoRoute(\n            path: PrayersPage.routeName,\n            name: PrayersPage.routeName,\n            builder: (_, __) => const PrayersPage(),\n            routes: [\n              GoRoute(\n                path: RosaryPage.routeName,\n                name: RosaryPage.routeName,\n                builder: (_, __) => const RosaryPage(),\n              ),\n            ],\n          ),\n\n          // Who we are\n          GoRoute(\n            path: WhoWeArePage.routeName,\n            name: WhoWeArePage.routeName,\n            builder: (_, __) => const WhoWeArePage(),\n          ),\n\n          //Donnation Page\n          GoRoute(\n            path: DonationPage.routeName,\n            name: DonationPage.routeName,\n            builder: (_, __) => const DonationPage(),\n          ),\n        ],\n      ),\n    ],\n  );\n\n  void changeLanguage(Locale locale) {\n    setState(\n      () {\n        _locale = locale;\n        settingsController.updateLocales([locale]);\n      },\n    );\n  }\n\n  @override\n  void initState() {\n    settingsController = widget.settingsController;\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // Glue the SettingsController to the MaterialApp.\n    //\n    // The ListenableBuilder Widget listens to the SettingsController for changes.\n    // Whenever the user updates their settings, the MaterialApp is rebuilt.\n    return MultiBlocProvider(\n      providers: [\n        BlocProvider(\n          create: (context) => ArticleBloc(\n            repo: ArticlesRepository<Article>(firestoreInstance: firestore),\n          ),\n        ),\n        BlocProvider(\n          create: (context) => ProjectBloc(\n            firebaseFirestore: firestore,\n          ),\n        ),\n      ],\n      child: ListenableBuilder(\n        listenable: settingsController,\n        builder: (BuildContext context, Widget? child) {\n          return LayoutBuilder(\n            builder: (context, constraints) => MaterialApp.router(\n              // Providing a restorationScopeId allows the Navigator built by the\n              // MaterialApp to restore the navigation stack when a user leaves and\n              // returns to the app after it has been killed while running in the\n              // background.\n              restorationScopeId: 'ahl',\n\n              // Provide the generated AppLocalizations to the MaterialApp. This\n              // allows descendant Widgets to display the correct translations\n              // depending on the user's locale.\n              localizationsDelegates: const [\n                AppLocalizations.delegate,\n                GlobalMaterialLocalizations.delegate,\n                GlobalWidgetsLocalizations.delegate,\n                GlobalCupertinoLocalizations.delegate,\n              ],\n              supportedLocales: AppLocalizations.supportedLocales,\n              locale: _locale,\n\n              // Use AppLocalizations to configure the correct application title\n              // depending on the user's locale.\n              //\n              // The appTitle is defined in .arb files found in the localization\n              // directory.\n              onGenerateTitle: (BuildContext context) =>\n                  AppLocalizations.of(context)!.appTitle,\n\n              // Define a light and dark color theme. Then, read the user's\n              // preferred ThemeMode (light, dark, or system default) from the\n              // SettingsController to display the correct theme.\n              theme: AhlTheme.lightTheme(\n                MediaQuery.maybeOf(context)!.size.width,\n              ),\n              darkTheme: ThemeData.dark(\n                useMaterial3: true,\n              ),\n              themeMode: settingsController.themeMode,\n\n              // Define a function to handle named routes in order to support\n              // Flutter web url navigation and deep linking.\n              // onGenerateRoute: (RouteSettings routeSettings) {\n              //   log(\"Route settings is $routeSettings\");\n\n              //   return MaterialPageRoute<void>(\n              //     settings: routeSettings,\n              //     builder: (BuildContext context) {\n              //       return FutureBuilder(\n              //         future: firebaseApp,\n              //         builder: (context, snapshot) {\n              //           if (snapshot.hasData) {\n              //             switch (routeSettings.name) {\n              //               case SettingsView.routeName:\n              //                 return SettingsView(\n              //                     controller: settingsController);\n              //               case SampleItemDetailsView.routeName:\n              //                 return const SampleItemDetailsView();\n              //               case HomePage.routeName:\n              //                 return HomePage();\n              //               case ProjectsPage.routeName:\n              //                 return const ProjectsPage();\n              //               case PrayersPage.routeName:\n              //                 return const PrayersPage();\n              //               case RosaryPage.routeName:\n              //                 return const RosaryPage();\n              //               case SaintsPage.routeName:\n              //                 return const SaintsPage();\n              //               case ArticlesPage.routeName:\n              //                 return const ArticlesPage();\n              //               case WhoWeArePage.routeName:\n              //                 return const WhoWeArePage();\n              //               case DonationPage.routeName:\n              //                 return const DonationPage();\n              //               // todo: add 400 not found page\n              //               default:\n              //                 return widget.home ?? HomePage();\n              //             }\n              //           } else {\n              //             return Scaffold(\n              //               body: LoadingView(\n              //                 work: firebaseApp,\n              //               ),\n              //             );\n              //           }\n              //         },\n              //       );\n              //     },\n              //   );\n              // },\n\n              routerConfig: router,\n            ),\n          );\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/article_view/bloc/bloc.dart",
    "content": "import 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:firebase_article/firebase_article.dart' as fire_art;\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'dart:developer' as developer;\n\nimport '../state/state.dart';\nimport '../event/event.dart';\n\nclass ArticleBloc extends Bloc<ArticleEvent, ArticleState<fire_art.Article>> {\n  ArticleBloc({required fire_art.ArticlesRepository<fire_art.Article> repo})\n      : _repo = repo,\n        super(const ArticleState(\n          articles: null,\n          status: ArticleStatus.initial,\n          error: null,\n        )) {\n    on<GetArticleByIdEvent>(_onGetArticleById);\n    on<GetArticleByPathEvent>(_onGetArticleByPath);\n    on<GetHighlightArticleEvent>(_onGetHighlightedArticle);\n    on<GetArticleListEvent>(_onGetArticleListEvent);\n    on<InitializeArticleBlocEvent>(_onInitializeArticleBlocEvent);\n    add(InitializeArticleBlocEvent());\n    on<GetHighlightPathEvent>(_onGetHighlightPath);\n    on<GetHighlightCollectionEvent>(_onGetHighlightCollection);\n  }\n\n  ArticleBloc.inCollection(\n      {required String collection, required FirebaseFirestore firestore})\n      : _repo = fire_art.ArticlesRepository<fire_art.Article>(\n            firestoreInstance: firestore, collection: collection),\n        super(const ArticleState(\n          articles: null,\n          status: ArticleStatus.initial,\n          error: null,\n        )) {\n    on<GetArticleByIdEvent>(_onGetArticleById);\n    on<GetArticleByPathEvent>(_onGetArticleByPath);\n    on<GetHighlightArticleEvent>(_onGetHighlightedArticle);\n    on<GetArticleListEvent>(_onGetArticleListEvent);\n    on<InitializeArticleBlocEvent>(_onInitializeArticleBlocEvent);\n    on<GetHighlightPathEvent>(_onGetHighlightPath);\n    on<GetHighlightCollectionEvent>(_onGetHighlightCollection);\n    add(InitializeArticleBlocEvent());\n  }\n\n  final fire_art.ArticlesRepository<fire_art.Article> _repo;\n\n  void _onGetHighlightPath(GetHighlightPathEvent event, Emitter emit) async {\n    emit(\n      state.copyWith(\n        status: ArticleStatus.initial,\n      ),\n    );\n\n    var highlightPath = await _repo.getHighlightedPath();\n\n    emit(\n      state.copyWith(\n        status: ArticleStatus.succeed,\n        highlightPath: highlightPath,\n      ),\n    );\n  }\n\n  void _onGetHighlightCollection(\n      GetHighlightCollectionEvent event, Emitter emit) async {\n    emit(\n      state.copyWith(\n        status: ArticleStatus.initial,\n      ),\n    );\n\n    var highlightCollection = await _repo.getHighlightedCollection();\n\n    emit(\n      state.copyWith(\n        status: ArticleStatus.succeed,\n        highlightCollection: highlightCollection,\n      ),\n    );\n  }\n\n  void _onInitializeArticleBlocEvent(\n    InitializeArticleBlocEvent event,\n    Emitter emit,\n  ) {\n    emit(state.copyWith(\n      status: ArticleStatus.initial,\n      articles: null,\n      error: null,\n    ));\n  }\n\n  void _onGetArticleById(GetArticleByIdEvent event, Emitter emit) async {\n    emit(\n      state.copyWith(\n        status: ArticleStatus.initial,\n        error: null,\n      ),\n    );\n\n    Object? error;\n    fire_art.Article? result;\n    try {\n      if (event.collection == null) {\n        result = await _repo.getArticleById(articleId: event.id!);\n      } else {\n        result = await _repo.getArticleByPath(\n            path: \"/${event.collection}/${event.id}\");\n      }\n    } catch (e) {\n      error = e;\n    }\n    if (result != null) {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.succeed,\n          articles: {result.id: result},\n          error: null,\n        ),\n      );\n    } else {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.failed,\n          articles: null,\n          error: error,\n        ),\n      );\n    }\n  }\n\n  void _onGetArticleByPath(GetArticleByPathEvent event, Emitter emit) async {\n    Object? error;\n    fire_art.Article? result;\n\n    try {\n      if (event.collection == null) {\n        if (event.path == null) {\n          result = await _repo.getArticleById(articleId: event.id!);\n        } else {\n          result = await _repo.getArticleByPath(path: event.path!);\n        }\n      } else {\n        result = await _repo.getArticleByPath(\n            path: \"/${event.collection}/${event.id}\");\n      }\n    } catch (e) {\n      error = e;\n    }\n    if (result != null) {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.succeed,\n          articles: {result.id: result},\n          error: null,\n        ),\n      );\n    } else {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.failed,\n          articles: null,\n          error: error,\n        ),\n      );\n    }\n  }\n\n  void _onGetHighlightedArticle(\n      GetHighlightArticleEvent event, Emitter emit) async {\n    Object? error;\n    fire_art.Article? result;\n\n    emit(state.copyWith(\n      status: ArticleStatus.initial,\n    ));\n\n    try {\n      result = await _repo.getHighlighted();\n      if (result != null) {\n        emit(\n          state.copyWith(\n            status: ArticleStatus.succeed,\n            articles: {result.id: result},\n            error: null,\n            highlightArticle: result,\n          ),\n        );\n        developer.log('[ArticleBloc]: state: $state');\n      }\n    } catch (e) {\n      error = 'Error getting highlight article : $e';\n      if (result == null) {\n        emit(state.copyWith(\n          status: ArticleStatus.failed,\n          error: error,\n          articles: null,\n          // highlightArticle: null,\n        ));\n      }\n    }\n  }\n\n  void _onGetArticleListEvent(GetArticleListEvent event, Emitter emit) async {\n    try {\n      List<fire_art.Article>? articles;\n      if (event.ids != null) {\n        articles = await _repo.getArticlesSubListByIds(event.ids!)\n            as List<fire_art.Article>;\n      }\n      if (event.foldLength != null) {\n        articles?.addAll(\n            await _repo.getArticlesSubListByLength(event.foldLength!)\n                as List<fire_art.Article>);\n      }\n\n      // build map articles\n      Map<String, Article>? mapArticles = (articles != null)\n          ? {for (var article in articles) article.id: article}\n          : null;\n      emit(\n        state.copyWith(\n            articles: mapArticles, status: ArticleStatus.succeed, error: null),\n      );\n    } catch (e) {\n      developer.log('[Article Bloc] Error getting article list: $e');\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/article_view/data/data.dart",
    "content": "// A barrel that contain every data implementation\n\n\n"
  },
  {
    "path": "lib/src/article_view/event/event.dart",
    "content": "final class ArticleEvent {\n  const ArticleEvent({this.id});\n\n  final String? id;\n}\n\nfinal class GetHighlightArticleEvent extends ArticleEvent {\n  const GetHighlightArticleEvent() : super(id: null);\n}\n\nfinal class GetArticleByIdEvent extends ArticleEvent {\n  const GetArticleByIdEvent({\n    required super.id,\n    this.collection,\n  });\n  final String? collection;\n}\n\nfinal class GetArticleByPathEvent extends ArticleEvent {\n  const GetArticleByPathEvent.fromCollection({\n    required super.id,\n    this.collection,\n  }): path = null;\n  const GetArticleByPathEvent({required this.path}):collection = null;\n\n  final String? path;\n\n  final String? collection;\n}\n\nfinal class GetHighlightPathEvent extends ArticleEvent {\n  const GetHighlightPathEvent();\n}\n\nfinal class GetHighlightCollectionEvent extends ArticleEvent {\n  const GetHighlightCollectionEvent();\n}\n\n/// Request A list of article from the server.\nfinal class GetArticleListEvent extends ArticleEvent {\n  const GetArticleListEvent({\n    this.foldLength = 1,\n    this.ids,\n  })  : assert(\n          ids == null && foldLength != null ||\n              ids != null && foldLength == null,\n          'ids and [foldLength] can\\'t be provided at the same time',\n        ),\n        super(\n          id: null,\n        );\n\n  final int? foldLength;\n  final List<String>? ids;\n}\n\nfinal class InitializeArticleBlocEvent extends ArticleEvent {\n  InitializeArticleBlocEvent() : super(id: null);\n}\n"
  },
  {
    "path": "lib/src/article_view/state/state.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:firebase_article/firebase_article.dart';\n\nenum ArticleStatus {\n  initial,\n\n  /// when no request has sent yet\n  succeed,\n\n  /// when a request has be done successfully\n  failed,\n\n  /// when a request\n}\n\nclass ArticleState<T extends Article> extends Equatable {\n  const ArticleState({\n    this.status = ArticleStatus.initial,\n    this.articles,\n    this.error,\n    this.highlightArticle,\n    this.highlightCollection,\n    this.highlightPath,\n  });\n\n  final ArticleStatus status;\n  final Map<String, T>? articles;\n  final Object? error;\n  final T? highlightArticle;\n  final String? highlightPath;\n  final String? highlightCollection;\n\n  ArticleState<T> copyWith({\n    ArticleStatus? status,\n    Map<String, T>? articles,\n    Object? error,\n    T? highlightArticle,\n    String? highlightPath,\n    String? highlightCollection,\n  }) {\n    Map<String, T> newArticles = {};\n\n    if (articles != null) {\n      newArticles.addAll(articles);\n    }\n    if (this.articles != null) {\n      newArticles.addAll(this.articles!);\n    }\n\n    return ArticleState<T>(\n      status: status ?? this.status,\n      articles: newArticles,\n      error: error ?? this.error,\n      highlightArticle: highlightArticle ?? this.highlightArticle,\n      highlightCollection: highlightCollection ?? this.highlightCollection,\n      highlightPath: highlightPath ?? this.highlightPath,\n    );\n  }\n\n  @override\n  List<Object?> get props => [\n        status,\n        articles,\n        error,\n        highlightArticle,\n        highlightPath,\n        highlightCollection,\n      ];\n}\n"
  },
  {
    "path": "lib/src/article_view/view/article_content_view.dart",
    "content": "part of 'article_view.dart';\n\n/// Article Page\nclass ArticleContentPage extends StatefulWidget {\n  /// Build [ArticleContentPage] from a article object.\n  ///\n  /// [article] is required to be not null.\n  const ArticleContentPage({\n    super.key,\n    required this.article,\n    this.collection = \"articles\",\n  }) : articleId = null;\n\n  /// Build article page from article id.\n  const ArticleContentPage.fromId({\n    super.key,\n    this.collection = \"articles\",\n    required this.articleId,\n  }) : article = null;\n\n  /// The article base route name\n  static const String routeName = 'articles';\n\n  /// The current article to be displayed.\n  final Article? article;\n\n  /// The collection where to look for article files\n  final String? collection;\n\n  /// Article id.\n  ///\n  /// It's a path where to search for the article data on the firestore.\n  final String? articleId;\n\n  @override\n  State<ArticleContentPage> createState() => ArticleContentPageState();\n}\n\nclass ArticleContentPageState extends State<ArticleContentPage> {\n  /// The page scrollController;\n  late ScrollController scrollController;\n\n  /// The current article to be displayed.\n  ///\n  /// If [widget.article] is not null, then it is that article.\n  /// If not, then [article] if fetched from  [ArticleBloc].\n  late Article? article;\n\n  Future<String> getImageUrl(Article article) async {\n    ArticleStorageUtils articleUtils = ArticleStorageUtils(\n        article: article, collection: widget.collection ?? \"articles\");\n    return await articleUtils.getCoverImageUrl() ?? \"\";\n  }\n\n  void articleSeoSetup(BuildContext context) {\n    if (kIsWeb) {\n      log('start seo setup');\n      WidgetsBinding.instance.addPostFrameCallback((timeStamp) {\n        if (context.mounted) {\n          HeadTagUtil.setHead(\n            title: article!.title!,\n            description: article!.relations![0]['preview'] as String,\n            keywords: [\n              'Madagascar',\n              'Notre Dame de la Delivrande',\n              'Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande',\n            ],\n            // imageUrl: getImageUrl(article!),\n            url:\n                \"https://aujourdhuilavenir.org/${widget.collection ?? \"articles\"}/${article!.id}\",\n          );\n          CreateHtml.makeWidgetTree(context);\n        }\n      });\n      // Define MetaSEO object\n      MetaSEO meta = MetaSEO();\n\n      // set document title to article title\n      web.document.title = article!.title!;\n\n      // Set decription to article preview\n      meta.description(\n          description: article!.relations![0]['preview'] as String);\n\n      // add meta seo data for web app as you want\n      meta.ogTitle(ogTitle: article!.title!);\n      meta.keywords(\n          keywords:\n              'Madagascar, Notre Dame de la Delivrande, Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande,');\n      // meta.ogImage(ogImage: await getImageUrl(article!));\n    } else {\n      log('SEO setup is not supported on mobile');\n    }\n  }\n\n  @override\n  void initState() {\n    /// get article from [widget]\n    article = widget.article;\n\n    super.initState();\n\n    scrollController = ScrollController(\n      keepScrollOffset: true,\n      initialScrollOffset: 0,\n    );\n  }\n\n  @override\n  void dispose() {\n    scrollController.dispose();\n    article = null;\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // setup seo\n    if (article != null) {\n      // Make Open Graph setup\n      articleSeoSetup(context);\n    }\n\n    /// If [article] is null, then retriever it from [ArticleBloc].\n    if (article == null) {\n      context.read<ArticleBloc>().add(\n            GetArticleByIdEvent(id: widget.articleId),\n          );\n    } else {\n      /// when article is not null\n      String? type = widget.article!.relations?[0]['type'];\n\n      switch (type) {\n        case 'novena':\n          context.goNamed(NovenaPage.routeName, extra: article);\n          return const SizedBox();\n\n        default:\n          return LayoutBuilder(\n            builder: (context, constraints) => Scaffold(\n              endDrawer: constraints.maxWidth <= ScreenSizes.large\n                  ? const AhlDrawer()\n                  : null,\n              appBar: const AhlAppBar(),\n              body: ListView(\n                controller: scrollController,\n                addAutomaticKeepAlives: true,\n                children: [\n                  ArticleContentView(\n                    collection: widget.collection,\n                    article: article!,\n                    controller: scrollController,\n                  ),\n                  const Gap(25),\n                  const NewsLetterPrompt(),\n                  const AhlFooter(),\n                ],\n              ),\n            ),\n          );\n      }\n    }\n    return BlocBuilder<ArticleBloc, ArticleState<Article>>(\n      // buildWhen: (previous, current) =>\n      //     previous.articles?[widget.articleId] == null,\n      builder: (context, state) {\n        String? type = widget.article?.relations?[0]['type'];\n        article = article ?? state.articles?[widget.articleId];\n\n        if (article == null) {\n          if (state.status == ArticleStatus.failed) {\n            context.goNamed(HomePage.routeName);\n          }\n          return Scaffold(\n            body: Container(\n              alignment: Alignment.center,\n              child: LottieBuilder.asset('animations/loading.json'),\n            ),\n          );\n        }\n        switch (type) {\n          case 'novena':\n            context.goNamed(NovenaPage.routeName, extra: article);\n            return const SizedBox();\n\n          default:\n            return LayoutBuilder(\n              builder: (context, constraints) => Scaffold(\n                endDrawer: constraints.maxWidth <= ScreenSizes.large\n                    ? const AhlDrawer()\n                    : null,\n                appBar: const AhlAppBar(),\n                body: ListView(\n                  controller: scrollController,\n                  addAutomaticKeepAlives: true,\n                  children: [\n                    ArticleContentView(\n                      collection: widget.collection,\n                      article: article!,\n                      controller: scrollController,\n                    ),\n                    const Gap(25),\n                    const NewsLetterPrompt(),\n                    const AhlFooter(),\n                  ],\n                ),\n              ),\n            );\n        }\n      },\n    );\n  }\n}\n\nclass ArticleContentView extends StatefulWidget {\n  ArticleContentView({\n    this.isProject = false,\n    super.key,\n    required this.article,\n    this.collection = \"articles\",\n    this.controller,\n    this.label,\n  }) : articleUtils =\n            ArticleStorageUtils(article: article, collection: collection!);\n\n  final Article article;\n  final String? collection;\n\n  final ArticleStorageUtils articleUtils;\n  final ScrollController? controller;\n  final bool isProject;\n  final String? label;\n\n  @override\n  State<ArticleContentView> createState() => _ArticleContentViewState();\n}\n\nclass _ArticleContentViewState extends State<ArticleContentView>\n    with AutomaticKeepAliveClientMixin {\n  @override\n  void initState() {\n    /// SEO setup\n    setupSeo(context);\n\n    super.initState();\n  }\n\n  /// Ask content.\n  Future<String> contentFetching() async {\n    SessionStorage cache = SessionStorage();\n\n    /// Read cache if it is available\n    String contentKey =\n        '${widget.collection}/${widget.article.id}/${widget.article.contentPath}';\n    if (cache[contentKey] != null) {\n      return cache[contentKey]!;\n    }\n\n    /// Make real request\n    final bytes = await firebase.storage\n        .child(\n          contentKey,\n        )\n        .getData();\n    String decodedString = utf8.decode(bytes!.toList());\n\n    /// Add result to cache\n    cache[contentKey] = decodedString;\n\n    return decodedString;\n  }\n\n  late Future<String> content;\n\n  late double screenWidth;\n\n  // late String articleKey = 'article_${widget.article.title}';\n  late SessionStorage cache = SessionStorage();\n  late Future<Uint8List?> _coverImage;\n  late MarkdownConfig minimalisticCorporateConfig;\n\n  @override\n  bool get wantKeepAlive => true;\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n    setupSeo(context);\n    content = contentFetching();\n    widget.articleUtils.getCoverImage();\n\n    _coverImage = widget.articleUtils.getCoverImage();\n\n    screenWidth = MediaQuery.of(context).size.width;\n\n    minimalisticCorporateConfig = MarkdownConfig(\n      configs: [\n        ImgConfig(\n          builder: (String url, Map<String, String>? attribute) {\n            SessionStorage cache = SessionStorage();\n            if (cache[url] != null) {\n              return Align(\n                key: SeoKey(\n                  TagType.img,\n                  src: url,\n                  attributes: attribute,\n                ),\n                child: AhlImageViewer.fromFuture(\n                  future: Future.value(\n                    decodeUint8ListFromString(\n                      cache[url]!,\n                    ),\n                  ),\n                ),\n              );\n            } else {\n              if (url.contains('://')) {\n                return Align(\n                  key: SeoKey(\n                    TagType.img,\n                    src: url,\n                    attributes: attribute,\n                  ),\n                  child: AhlImageViewer(\n                    url: url,\n                    attributes: attribute,\n                  ),\n                );\n              }\n\n              try {\n                log(url);\n                final Future<Uint8List?> future =\n                    firebase.storage.child(url).getData();\n\n                future.then(\n                  (value) {\n                    if (value != null) {\n                      if (cache[url] == null) {\n                        cache[url] = encodeUint8ListToString(value);\n                      }\n                    }\n                  },\n                );\n                return Container(\n                  alignment: Alignment.center,\n                  // constraints: BoxConstraints(\n                  //   maxHeight: resolveForBreakPoint(\n                  //     screenWidth,\n                  //     other: 575,\n                  //     small: 300,\n                  //   ),\n                  // ),\n                  child: AhlImageViewer.fromFuture(\n                    key: SeoKey(\n                      TagType.img,\n                      src: url,\n                      attributes: attribute,\n                    ),\n                    // key: ValueKey(url),\n                    future: future,\n                    attributes: attribute,\n                  ),\n                );\n                // return Container();\n              } catch (e) {\n                log(\"[ArticleContentViewState] Error getting image: $e\");\n                return Container(\n                  alignment: Alignment.center,\n                  child: const Icon(Icons.warning),\n                );\n              }\n            }\n          },\n        ),\n\n        H1Config(\n          style: const H1Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 32,\n                height: 1.25,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n\n        H2Config(\n          style: const H2Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 28,\n                height: 1.4,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n        H3Config(\n          style: const H2Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 24,\n                height: 1.4,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n        H4Config(\n          style: const H2Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 22,\n                height: 1.25,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n        H5Config(\n          style: const H2Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 16,\n                height: 1.5,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n        H6Config(\n          style: const H2Config().style.copyWith(\n                fontFamily: \"Poppins\",\n                color: AhlTheme.blackCharcoal,\n                fontSize: 14,\n                height: 1.4,\n                fontWeight: FontWeight.w600,\n              ),\n        ),\n        PConfig(\n          textStyle: const PConfig().textStyle.copyWith(\n                fontFamily: 'Poppins',\n                color: const Color(0xFF3F403C),\n              ),\n        ),\n        LinkConfig(\n          style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                color: Theme.of(context).primaryColor,\n                decoration: TextDecoration.underline,\n                decorationColor: Theme.of(context).primaryColor,\n                // height: 5,\n              ),\n          onTap: (url) {\n            launchUrl(Uri.parse(url));\n          },\n        ),\n\n        // ImgConfig(\n        //   builder: (url, attributes) {\n        //     return Column(\n        //       children: [\n        //         Container(\n        //           constraints: BoxConstraints(\n        //             minWidth: 320,\n        //             maxWidth: ContentSize.maxWidth(screenWidth),\n        //           ),\n        //           decoration: BoxDecoration(\n        //             image: DecorationImage(image: NetworkImage(url)),\n        //             borderRadius: BorderRadius.circular(BorderSizes.medium),\n        //           ),\n        //           clipBehavior: Clip.hardEdge,\n        //         ),\n        //         if (attributes['name'] != null) Text('${attributes[\"name\"]}'),\n        //       ],\n        //     );\n        //   },\n        // ),\n      ],\n    );\n\n    return Center(\n      child: Container(\n        key: ValueKey(widget.article.title),\n        constraints:\n            BoxConstraints(maxWidth: ContentSize.maxWidth(screenWidth)),\n        // constraints: const BoxConstraints(maxWidth: 1024),\n        margin: EdgeInsets.symmetric(\n          horizontal: resolveForBreakPoint(\n            screenWidth,\n            other: Margins.small / 2,\n            // extraHuge: Margins.extraHuge,\n            // huge: Margins.huge,\n            // extraLarge: Margins.extraLarge,\n            // large: Margins.large,\n          ),\n        ),\n        // padding: EdgeInsets.symmetric(\n        //   horizontal: resolveForBreakPoint(\n        //     screenWidth,\n        //     small: Margins.small,\n        //     medium: Margins.small,\n        //     large: Margins.large,\n        //     extraLarge: Margins.extraLarge,\n        //     other: Margins.huge,\n        //   ),\n        // ),\n\n        child: buildMarkdownBlock(context),\n      ),\n    );\n  }\n\n  // share button\n  Widget shareButtonBig = Builder(\n    builder: (context) => Container(\n      constraints: const BoxConstraints(maxWidth: 400),\n      alignment: Alignment.center,\n      child: OutlinedButton.icon(\n        onPressed: () {\n          var router = GoRouter.of(context);\n          String location = router.routeInformationProvider.value.uri.path;\n          Share.share(\"https://aujourdhuilavenir.org$location\");\n        },\n        icon: const Icon(\n          Icons.share_outlined,\n          size: IconSizes.large,\n        ),\n        label: Container(\n          height: 75,\n          alignment: Alignment.center,\n          child: Text(\n            'Partager',\n            style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                  fontSize: 22,\n                  color: Theme.of(context).primaryColor,\n                ),\n          ),\n        ),\n      ),\n    ),\n  );\n\n  // share button\n  Widget shareButton = Builder(\n    builder: (context) => OutlinedButton.icon(\n      onPressed: () {\n        var router = GoRouter.of(context);\n        String location = router.routeInformationProvider.value.uri.path;\n        Share.share(\"https://aujourdhuilavenir.org$location\");\n      },\n      label: const Text('Partager'),\n      icon: const Icon(Icons.share_outlined),\n    ),\n  );\n\n  Widget buildMarkdownBlock(BuildContext context) {\n    //seo\n    setupSeo(context);\n\n    // share button\n    Widget supportProjectButton = Builder(\n      builder: (context) => Container(\n        constraints: const BoxConstraints(maxWidth: 400),\n        child: ElevatedButton.icon(\n          style: ElevatedButton.styleFrom(\n            backgroundColor: Theme.of(context).primaryColor,\n            foregroundColor: Theme.of(context).colorScheme.onPrimary,\n          ),\n          onPressed: () => Navigator.of(context).pushNamed(\n            DonationPage.routeName,\n            arguments: widget.article,\n          ),\n          icon: SvgPicture.asset(\n            AhlAssets.dons,\n            width: IconSizes.large,\n            height: IconSizes.large,\n          ),\n          label: Container(\n            alignment: Alignment.center,\n            height: 75,\n            // width: 250,\n            child: Text(\n              AppLocalizations.of(context)!.supportProject,\n              style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                    fontSize: 22,\n                    color: Theme.of(context).colorScheme.onPrimary,\n                  ),\n            ),\n          ),\n        ),\n      ),\n    );\n\n    return Card(\n      color: Theme.of(context).colorScheme.surface,\n      child:\n          // padding: const EdgeInsets.all(Paddings.medium),\n          Column(\n        children: [\n          // label\n          Container(\n            padding: const EdgeInsets.all(Paddings.medium),\n            alignment: Alignment.centerLeft,\n            child: Text(\n              key: SeoKey(TagType.p,\n                  text: widget.label ?? \"\", alt: \"Article date\"),\n              widget.label ??\n                  DateTimeUtils.localizedFromStringDate(\n                      dateString: widget.article.releaseDate, context: context),\n              style: Theme.of(context)\n                  .textTheme\n                  .labelMedium!\n                  .copyWith(color: Theme.of(context).primaryColor),\n            ),\n          ),\n\n          // title\n          Container(\n            padding: const EdgeInsets.all(Paddings.medium),\n            alignment: Alignment.centerLeft,\n            child: Text(\n              widget.article.title ?? \"\",\n              key: SeoKey(TagType.h1, text: widget.article.title ?? \"\"),\n              style: resolveHeadlineTextThemeForBreakPoints(\n                MediaQuery.of(context).size.width,\n                context,\n              ),\n            ),\n          ),\n          // const Padding(\n          //   padding: EdgeInsets.symmetric(vertical: Paddings.medium),\n          //   child: AhlDivider(\n          //     leading: 0,\n          //     trailing: 50,\n          //     thickness: 16,\n          //   ),\n          // ),\n\n          Container(\n            padding: const EdgeInsets.all(Paddings.medium),\n            alignment: Alignment.centerLeft,\n            child: Text(widget.article.relations?[0]['preview'],\n                key: SeoKey(\n                  TagType.p,\n                  text: widget.article.relations?[0]['preview'],\n                )),\n          ),\n          // share button\n          Container(\n            alignment: Alignment.centerLeft,\n            padding: const EdgeInsets.symmetric(\n              vertical: 20,\n              horizontal: Paddings.medium,\n            ),\n            child: Wrap(\n              alignment: WrapAlignment.start,\n              runAlignment: WrapAlignment.start,\n              spacing: 20,\n              runSpacing: 20,\n              crossAxisAlignment: WrapCrossAlignment.start,\n              children: [\n                ListenPodcastButton(\n                  key: SeoKey(TagType.a,\n                      text: \"Listen Podcast\", alt: \"Play Podcast Button\"),\n                  article: widget.article,\n                  collection: widget.collection,\n                ),\n                shareButton,\n              ],\n            ),\n          ),\n          SizedBox(\n            height: resolveForBreakPoint(\n              screenWidth,\n              other: 575,\n              small: 300,\n            ),\n            width: double.maxFinite,\n            // constraints: const BoxConstraints.expand(),\n            child: AhlImageViewer.fromFuture(\n              fit: BoxFit.cover,\n              future: _coverImage,\n            ),\n          ),\n\n          // markdown content\n          Container(\n              padding: EdgeInsets.all(\n                resolveForBreakPoint(\n                  screenWidth,\n                  other: Paddings.big,\n                  small: 10,\n                  medium: 10,\n                ),\n              ),\n              child: FutureBuilder(\n                future: content,\n                builder: (context, snapshot) {\n                  switch (snapshot.connectionState) {\n                    case ConnectionState.done:\n                      if (snapshot.hasData) {\n                        return MarkdownBlock(\n                          key: SeoKey(TagType.p,\n                              text: snapshot.data ?? \"Empty article\"),\n                          data: snapshot.data ?? 'Error loading article.',\n                          config: minimalisticCorporateConfig,\n                        );\n                      } else {\n                        return Align(\n                          alignment: Alignment.center,\n                          child: Column(\n                            children: [\n                              Icon(\n                                Icons.warning_rounded,\n                                color: Theme.of(context).colorScheme.error,\n                              ),\n                              Text(\n                                  'Error loading article content: ${snapshot.error}')\n                            ],\n                          ),\n                        );\n                      }\n\n                    default:\n                      return Container(\n                        alignment: Alignment.center,\n                        width: MediaQuery.of(context).size.height - 50,\n                        child: const CircularProgressIndicator(),\n                      );\n\n                    // default:\n                    //   return Align(\n                    //     alignment: Alignment.center,\n                    //     child: Icon(\n                    //       Icons.warning_rounded,\n                    //       color: Theme.of(context).colorScheme.error,\n                    //     ),\n                    //   );\n                  }\n                },\n              )),\n          Container(\n            padding: const EdgeInsets.symmetric(\n                vertical: 20, horizontal: Paddings.medium),\n            child: shareButtonBig,\n          ),\n\n          if (widget.isProject)\n            Container(\n              padding: const EdgeInsets.all(Paddings.medium),\n              alignment: Alignment.center,\n              child: supportProjectButton,\n            ),\n          Gap(\n            resolveSeparatorSize(context),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass ListenPodcastButton extends StatelessWidget {\n  const ListenPodcastButton({\n    super.key,\n    required this.article,\n    this.collection,\n    this.iconSize = 24,\n  });\n\n  final Article article;\n  final String? collection;\n  final double iconSize;\n\n  @override\n  Widget build(BuildContext context) {\n    if (article.relations?[0]['audio'] != null) {\n      return ElevatedButton.icon(\n        // shape: const StadiumBorder(),\n        // backgroundColor: Colors.transparent,\n        style: ElevatedButton.styleFrom(\n          // padding: const EdgeInsets.symmetric(\n          //   vertical: 10,\n          //   horizontal: 16,\n          // ),\n          foregroundColor: Theme.of(context).colorScheme.onPrimary,\n          backgroundColor: Theme.of(context).colorScheme.primary,\n        ),\n        label: Text(\n          AppLocalizations.of(context)!.listenPodcast,\n        ),\n        icon: const Icon(Icons.play_arrow),\n        onPressed: () {\n          PersistentBottomSheetController? controller;\n          controller = Scaffold.maybeOf(context)?.showBottomSheet((context) {\n            return Container(\n              constraints: const BoxConstraints.tightFor(\n                height: 125,\n              ),\n              child: Stack(\n                children: [\n                  FirebaseAudioPlayer(\n                    article: article,\n                    collection: collection,\n                  ),\n                  Align(\n                    alignment: Alignment.topRight,\n                    child: Row(\n                      mainAxisSize: MainAxisSize.min,\n                      children: [\n                        IconButton(\n                          icon: Icon(Icons.minimize, size: iconSize),\n                          color: Theme.of(context).colorScheme.onPrimaryFixed,\n                          onPressed: () {\n                            controller?.close();\n                          },\n                        ),\n                        IconButton(\n                          icon: Icon(Icons.close_rounded, size: iconSize),\n                          color: Theme.of(context).colorScheme.onPrimaryFixed,\n                          onPressed: () {\n                            controller?.close();\n                          },\n                        ),\n                      ],\n                    ),\n                  ),\n                ],\n              ),\n            );\n          });\n        },\n      );\n    } else {\n      return const SizedBox.shrink();\n    }\n  }\n}\n\nclass AhlImageViewer extends StatefulWidget {\n  const AhlImageViewer({\n    super.key,\n    required this.url,\n    this.attributes,\n    this.fit = BoxFit.contain,\n  }) : future = null;\n\n  const AhlImageViewer.fromFuture(\n      {super.key, required this.future, this.attributes, this.fit})\n      : url = null;\n\n  final Future? future;\n  final String? url;\n  final Map<String, String>? attributes;\n  final BoxFit? fit;\n\n  @override\n  State<AhlImageViewer> createState() => _AhlImageViewerState();\n}\n\nclass _AhlImageViewerState extends State<AhlImageViewer> {\n  late Future imageFuture;\n\n  @override\n  void initState() {\n    developer.log(\"[AhlImageViewer] State is initialized.\");\n    super.initState();\n\n    if (widget.url != null) {\n      imageFuture = firebase.storage.child(widget.url!).getData();\n    } else {\n      imageFuture = widget.future!;\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    //seo\n    setupSeo(context);\n\n    if (widget.url != null && widget.url!.contains(\"://\")) {\n      return SizedBox(\n        height: double.tryParse(widget.attributes?['height'] ?? \"\"),\n        child: InkWell(\n          onTap: () {\n            Navigator.of(context).push(\n              DialogRoute(\n                context: context,\n                builder: (context) => ImageViewer(\n                  child: Image.network(\n                    cacheHeight: 500,\n                    cacheWidth: 500,\n                    gaplessPlayback: false,\n                    widget.url!,\n                    fit: widget.fit,\n                  ),\n                ),\n              ),\n            );\n          },\n          child: Image.network(\n            key: SeoKey(TagType.img, src: widget.url ?? \"\"),\n            widget.url!,\n            fit: widget.fit,\n          ),\n        ),\n      );\n    }\n    return SizedBox(\n      height: double.tryParse(widget.attributes?['height'] ?? \"\"),\n      child: FutureBuilder(\n        future: imageFuture,\n        key: ValueKey(widget.url),\n        builder: (context, snapshot) {\n          switch (snapshot.connectionState) {\n            case ConnectionState.done:\n              if (snapshot.hasData) {\n                return InkWell(\n                  onTap: () {\n                    Navigator.of(context).push(\n                      DialogRoute(\n                        context: context,\n                        builder: (context) => ImageViewer(\n                          child: Image.memory(snapshot.data!),\n                        ),\n                      ),\n                    );\n                  },\n                  child: Image.memory(\n                    Uint8List.fromList(\n                      snapshot.data!,\n                    ),\n                    fit: widget.fit,\n                  ),\n                );\n              }\n              if (snapshot.hasError) {\n                return Container(\n                  height: 400,\n                  alignment: Alignment.center,\n                  child: Column(\n                    children: [\n                      const Icon(Icons.error),\n                      Text(\"Error getting Image: ${snapshot.error}\"),\n                      Text('Data: $snapshot'),\n                    ],\n                  ),\n                );\n              }\n              return Container(\n                height: 400,\n                alignment: Alignment.center,\n                child: const CircularProgressIndicator(),\n              );\n            default:\n              return Container(\n                height: 400,\n                alignment: Alignment.center,\n                child: const CircularProgressIndicator(),\n              );\n          }\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/article_view/view/article_view.dart",
    "content": "import 'dart:developer';\nimport 'dart:convert';\nimport 'dart:developer' as developer;\n\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:web/web.dart' as web;\n\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_svg/flutter_svg.dart';\nimport 'package:lottie/lottie.dart';\nimport 'package:share_plus/share_plus.dart';\nimport 'package:meta_seo/meta_seo.dart';\nimport 'package:logger/logger.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\n\nimport 'package:gap/gap.dart';\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:markdown_widget/markdown_widget.dart';\nimport 'package:url_launcher/url_launcher.dart';\nimport 'package:session_storage/session_storage.dart';\n\nimport 'package:ahl/src/pages/homepage/donation/donation_page.dart';\nimport 'package:ahl/src/utils/firebase_utils.dart';\nimport 'package:ahl/src/pages/homepage/homepage.dart';\nimport 'package:ahl/src/pages/novena_page/novena_page.dart';\nimport 'package:ahl/src/newsletter/newsletter.dart';\nimport 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/article_view/state/state.dart';\nimport 'package:ahl/src/firebase_constants.dart' as firebase;\nimport 'package:ahl/src/theme/theme.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport '../../utils/date_time_utils.dart';\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\n\nimport '../../utils/seo.dart';\nimport '../../utils/storage_utils.dart';\n\npart 'article_content_view.dart';\npart 'highlight_article_tile.dart';\n\n// import 'package:markdown_widget/markdown_widget.dart';\n\nString monthTextResolve(BuildContext context, String monthName) {\n  List vowels = ['a', 'e', 'i', 'o', 'u', 'y'];\n\n  /// If the first element is a vowel.\n  //todo: change based on locale to.\n  if (vowels.contains(monthName.characters.first.toLowerCase())) {\n    return \"Mois d'$monthName\";\n  } else {\n    return 'Mois de $monthName';\n  }\n}\n\n/// A tile of article\nclass ArticleTile extends StatefulWidget {\n  const ArticleTile({\n    super.key,\n    required this.article,\n  });\n\n  final Article article;\n\n  @override\n  State<ArticleTile> createState() => ArticleTileState();\n}\n\nclass ArticleTileState extends State<ArticleTile> {\n  // article of the tile\n  late Article article;\n\n  late ArticleStorageUtils articleStorageUtils;\n\n  @override\n  void initState() {\n    article = widget.article;\n\n    articleStorageUtils =\n        ArticleStorageUtils(article: article, collection: 'articles');\n    super.initState();\n  }\n\n  void goToReadingPage() {\n    Navigator.push(\n      context,\n      MaterialPageRoute(\n        builder: (context) {\n          return ArticleContentPage(article: article);\n        },\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    TextStyle? titleTheme = resolveHeadlineTextThemeForBreakPoints(\n      MediaQuery.of(context).size.width,\n      context,\n    );\n    return LayoutBuilder(\n      builder: (context, constraints) => Container(\n        // padding: const EdgeInsets.all(Paddings.big),\n        // clipBehavior: Clip.hardEdge,\n        decoration: BoxDecoration(\n          borderRadius: BorderRadius.circular(BorderSizes.big),\n        ),\n        child: Material(\n          borderOnForeground: true,\n          child: InkWell(\n            onTap: goToReadingPage,\n            child: Container(\n              // margin: const EdgeInsets.symmetric(\n              //   horizontal: Margins.mobileMedium,\n              // ),\n              constraints: const BoxConstraints(\n                maxWidth: 1130,\n                minWidth: 350,\n              ),\n              child: Column(\n                crossAxisAlignment: CrossAxisAlignment.start,\n                children: [\n                  if (article.title != null)\n                    Padding(\n                      padding: const EdgeInsets.only(\n                          bottom: Paddings.big, top: Paddings.small),\n                      child: Text(\n                        article.title!,\n                        style: titleTheme,\n                      ),\n                    ),\n                  SizedBox(\n                    height: 135,\n                    // maxHeight: 232,\n                    width: constraints.maxWidth,\n                    child: Row(\n                      children: [\n                        Expanded(\n                          flex: 1,\n                          child: ConstrainedBox(\n                            constraints: const BoxConstraints(\n                              minHeight: 135,\n                              maxHeight: 232,\n                            ),\n                            child: (article.relations\n                                        ?.first[RepoSetUp.coverImageKey] !=\n                                    null)\n                                ? FutureBuilder(\n                                    future: articleStorageUtils\n                                        .getCoverImage(), //getHeroHeaderImage(),\n                                    builder: (context, snapshot) {\n                                      switch (snapshot.connectionState) {\n                                        case ConnectionState.done:\n                                          if (snapshot.hasData) {\n                                            return Container(\n                                              constraints: const BoxConstraints(\n                                                maxHeight: 135,\n                                                maxWidth: 185,\n                                                minWidth: 107,\n                                              ),\n                                              decoration: BoxDecoration(\n                                                image: DecorationImage(\n                                                  fit: BoxFit.cover,\n                                                  image: MemoryImage(\n                                                      snapshot.data!),\n                                                ),\n                                              ),\n                                            ).animate().fadeIn(\n                                                  curve: Curves.easeInOutBack,\n                                                );\n                                          } else {\n                                            return Container(\n                                              decoration: BoxDecoration(\n                                                borderRadius:\n                                                    BorderRadius.circular(\n                                                        BorderSizes.small),\n                                                color: Theme.of(context)\n                                                    .colorScheme\n                                                    .errorContainer,\n                                              ),\n                                              child: Text(\n                                                'Error getting image: ${snapshot.error}',\n                                                style: Theme.of(context)\n                                                    .textTheme\n                                                    .labelSmall!\n                                                    .copyWith(\n                                                      color: Theme.of(context)\n                                                          .colorScheme\n                                                          .error,\n                                                    ),\n                                              ).animate().fadeIn(),\n                                            );\n                                          }\n                                        case ConnectionState.waiting:\n                                          return Container(\n                                            alignment: Alignment.center,\n                                            decoration: BoxDecoration(\n                                              borderRadius:\n                                                  BorderRadius.circular(\n                                                      BorderSizes.small),\n                                              color: Theme.of(context)\n                                                  .colorScheme\n                                                  .primaryContainer,\n                                            ),\n                                            child: SizedBox.square(\n                                              dimension: 50,\n                                              child: CircularProgressIndicator(\n                                                color: Theme.of(context)\n                                                    .colorScheme\n                                                    .primary,\n                                              ),\n                                            ),\n                                          );\n                                        default:\n                                          return Container(\n                                            alignment: Alignment.center,\n                                            decoration: BoxDecoration(\n                                              borderRadius:\n                                                  BorderRadius.circular(\n                                                      BorderSizes.small),\n                                              color: Theme.of(context)\n                                                  .colorScheme\n                                                  .secondaryContainer,\n                                            ),\n                                            child: SizedBox.square(\n                                              dimension: 50,\n                                              child: CircularProgressIndicator(\n                                                color: Theme.of(context)\n                                                    .colorScheme\n                                                    .secondary,\n                                              ),\n                                            ),\n                                          );\n                                      }\n                                    },\n                                  )\n                                : Expanded(\n                                    child: Container(\n                                      decoration: BoxDecoration(\n                                        borderRadius: BorderRadius.circular(\n                                            BorderSizes.small),\n                                        color: Theme.of(context)\n                                            .colorScheme\n                                            .primaryContainer,\n                                      ),\n                                    ),\n                                  ),\n                          ),\n                        ),\n                        Expanded(\n                          flex: 2,\n                          child: Column(\n                            children: [\n                              Expanded(\n                                flex: 1,\n                                child: Row(\n                                  children: [\n                                    Container(\n                                      margin: const EdgeInsets.only(\n                                          left: Paddings.big,\n                                          right: Paddings.medium),\n                                      color: AhlTheme.yellowRelax,\n                                      constraints: const BoxConstraints.expand(\n                                        width: 25,\n                                        // height: 85,\n                                      ),\n                                    ),\n                                    Expanded(\n                                      flex: 1,\n                                      child: FutureBuilder(\n                                        future: Future.value(article.relations\n                                                ?.first[RepoSetUp.previewKey]\n                                            as String),\n                                        builder: (context, snapshot) {\n                                          if (snapshot.hasData) {\n                                            return Container(\n                                              alignment: Alignment.topCenter,\n                                              child: Text(\n                                                snapshot.data!,\n                                                maxLines: 4,\n                                                style: Theme.of(context)\n                                                    .textTheme\n                                                    .bodyMedium!\n                                                    .copyWith(\n                                                        overflow: TextOverflow\n                                                            .ellipsis),\n                                              ),\n                                            );\n                                          } else if (snapshot.connectionState ==\n                                              ConnectionState.waiting) {\n                                            return Container(\n                                              alignment: Alignment.center,\n                                              decoration: BoxDecoration(\n                                                borderRadius:\n                                                    BorderRadius.circular(\n                                                        BorderSizes.small),\n                                                color: Theme.of(context)\n                                                    .colorScheme\n                                                    .primaryContainer,\n                                              ),\n                                              child: SizedBox.square(\n                                                dimension: 50,\n                                                child:\n                                                    CircularProgressIndicator(\n                                                  color: Theme.of(context)\n                                                      .colorScheme\n                                                      .primary,\n                                                ),\n                                              ),\n                                            );\n                                          } else {\n                                            return Container(\n                                              decoration: BoxDecoration(\n                                                borderRadius:\n                                                    BorderRadius.circular(\n                                                        BorderSizes.small),\n                                                color: Theme.of(context)\n                                                    .colorScheme\n                                                    .errorContainer,\n                                              ),\n                                              child: Text(\n                                                'Error getting content: ${snapshot.error}',\n                                                style: Theme.of(context)\n                                                    .textTheme\n                                                    .labelSmall!\n                                                    .copyWith(\n                                                      color: Theme.of(context)\n                                                          .colorScheme\n                                                          .error,\n                                                    ),\n                                              ),\n                                            );\n                                          }\n                                        },\n                                      ),\n                                    ),\n                                  ],\n                                ),\n                              ),\n                              // Align(\n                              //   alignment: Alignment.centerRight,\n                              //   child: ElevatedButton(\n                              //     style: ElevatedButton.styleFrom(\n                              //       foregroundColor:\n                              //           Theme.of(context).colorScheme.onPrimary,\n                              //       backgroundColor:\n                              //           Theme.of(context).colorScheme.primary,\n                              //     ),\n                              //     onPressed: () {\n                              //       goToReadingPage();\n                              //     },\n                              //     child: const Text('Lire'),\n                              //   ),\n                              // ),\n                            ],\n                          ),\n                        ),\n                      ],\n                    ),\n                  ),\n                ],\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\n/// A tile of article\nclass CardArticleTile extends StatefulWidget {\n  const CardArticleTile(\n      {super.key,\n      required this.article,\n      this.collection = 'articles',\n      this.callback,\n      this.direction,\n      this.maxHeight,\n      this.label,\n      this.title,\n      this.preview})\n      : articleId = null;\n\n  const CardArticleTile.fromId({\n    super.key,\n    required this.articleId,\n    this.collection = 'articles',\n    this.callback,\n    this.direction,\n    this.maxHeight,\n    this.label,\n    this.title,\n    this.preview,\n  }) : article = null;\n\n  final Article? article;\n  final String collection;\n  final VoidCallback? callback;\n  final String? articleId;\n  final Axis? direction;\n  final double? maxHeight;\n\n  /// A replacement string for the title\n  final String? label;\n\n  /// A replacement string for the title\n  final String? title;\n\n  /// A replacement string for the title\n  final String? preview;\n\n  @override\n  State<CardArticleTile> createState() => _CardArticleTileState();\n}\n\nclass _CardArticleTileState extends State<CardArticleTile>\n    with AutomaticKeepAliveClientMixin {\n  // article of the tile\n  late Article? article;\n\n  late ArticleStorageUtils? articleStorageUtils;\n\n  /// The collection where to search the article image. This also the name of\n  /// firestore collection of the article.\n  late String collection;\n\n  final double elevation = 0;\n\n  late double _maxHeight;\n\n  @override\n  void initState() {\n    collection = getCollection(widget.articleId ?? \"\") ?? widget.collection;\n    // elevation = 5.0;\n    _maxHeight = (widget.direction == Axis.vertical) ? 400 : 300;\n\n    /// Make article transaction\n    ///\n    /// Use from widget if it is not null. Trigger a request article event if not.\n    if (widget.article != null) {\n      article = widget.article!;\n      articleStorageUtils =\n          ArticleStorageUtils(article: article!, collection: collection);\n    } else {\n      article = null;\n      articleStorageUtils = null;\n      context.read<ArticleBloc>().add(\n            GetArticleByPathEvent.fromCollection(\n              id: widget.articleId!,\n              collection: collection,\n            ),\n          );\n    }\n\n    super.initState();\n  }\n\n  /// Default callback.\n  ///\n  /// Called when the the card is clicked.\n  void goToReadingPage() {\n    String articleId = widget.article?.id ?? widget.articleId!;\n    if (collection.startsWith('/')) {\n      collection = collection.substring(1);\n    }\n\n    context.go(\n      '/$collection/$articleId',\n      extra: article,\n    );\n  }\n\n  /// on Hover callback.\n  ///\n  /// It is mainly used in the ui update.\n  void _onHover(bool isHovered) {\n    // if (isHovered) {\n    //   setState(() {\n    //     elevation = 25;\n    //   });\n    // } else {\n    //   setState(() {\n    //     elevation = 5;\n    //   });\n    // }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n\n    if (article != null) {\n      return buildTile(context, article!);\n    } else {\n      return BlocBuilder<ArticleBloc, ArticleState<Article>>(\n        buildWhen: (previous, current) =>\n            previous.articles == null ||\n            !previous.articles!.containsKey(widget.articleId),\n        builder: (context, state) {\n          article = state.articles?[widget.articleId];\n\n          if (article != null) {\n            articleStorageUtils =\n                ArticleStorageUtils(article: article!, collection: collection);\n            return buildTile(context, article!);\n          }\n          if (state.error != null) {\n            log(\"[CardArticleTile]: Error getting article: ${widget.articleId}. ${state.error}\");\n            return const SizedBox.shrink();\n          } else {\n            return Align(\n              child: Container(\n                decoration: BoxDecoration(\n                  color: Theme.of(context).colorScheme.surfaceContainerHigh,\n                  borderRadius: BorderRadius.circular(BorderSizes.medium),\n                ),\n                width: 330,\n                height: 400,\n              )\n                  .animate(\n                    onPlay: (controller) => controller.repeat(),\n                  )\n                  .then(delay: Durations.long1)\n                  .shimmer(),\n            );\n          }\n        },\n      );\n    }\n  }\n\n  Widget buildTile(BuildContext context, Article article) {\n    super.build(context);\n    TextStyle? titleTheme = // Theme.of(context).textTheme.headlineSmall;\n        resolveHeadlineTextThemeForBreakPoints(\n      MediaQuery.of(context).size.width,\n      context,\n    );\n\n    DateTime releaseDate =\n        DateTimeUtils.parseReleaseDate(article.releaseDate ?? \"\");\n    return Card(\n      color: Colors.white,\n      elevation: elevation,\n      borderOnForeground: true,\n      clipBehavior: Clip.antiAlias,\n      shape: RoundedRectangleBorder(\n        borderRadius: BorderRadius.circular(BorderSizes.medium),\n      ),\n      child: InkWell(\n        onHover: _onHover,\n        onTap: widget.callback ?? goToReadingPage,\n        child: Container(\n          // padding: const EdgeInsets.all(Paddings.medium),\n          constraints: BoxConstraints(\n            maxWidth: resolveForBreakPoint(\n              MediaQuery.of(context).size.width,\n              // small: 330,\n              // medium: 330,\n              other: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n            ),\n            minWidth: 330,\n            maxHeight: widget.maxHeight ?? _maxHeight,\n          ),\n          child: Flex(\n            direction: widget.direction ??\n                resolveForBreakPoint(\n                  MediaQuery.of(context).size.width,\n                  other: Axis.horizontal,\n                  small: Axis.vertical,\n                  medium: Axis.vertical,\n                ),\n            children: [\n              Flexible(\n                child: Container(\n                  alignment: Alignment.topLeft,\n                  padding: (widget.direction == Axis.horizontal)\n                      ? const EdgeInsets.only(\n                          top: Paddings.big,\n                          left: Paddings.big,\n                          right: Paddings.big,\n                        )\n                      : const EdgeInsets.only(\n                          top: Paddings.medium,\n                          right: Paddings.medium,\n                          left: Paddings.medium,\n\n                          // vertical: Paddings.big,\n                        ),\n                  child: Column(\n                    crossAxisAlignment: CrossAxisAlignment.start,\n                    mainAxisSize: MainAxisSize.max,\n                    mainAxisAlignment: MainAxisAlignment.end,\n                    children: [\n                      // Flexible(\n                      //   child:\n                      FittedBox(\n                        child: Text(\n                          widget.label ??\n                              \"${releaseDate.day} ${DateTimeUtils.localMonth(releaseDate.month, context)} ${releaseDate.year}\",\n                          style: Theme.of(context)\n                              .textTheme\n                              .labelMedium!\n                              .copyWith(color: Theme.of(context).primaryColor),\n                        ),\n                      ),\n\n                      //title\n                      // Flexible(\n                      //   child:\n                      //   Padding(\n                      //     padding: const EdgeInsets.only(\n                      //         bottom: Paddings.small, top: Paddings.small),\n                      //     child:\n                      // FittedBox(\n                      // child:\n                      Flexible(\n                        flex: 1,\n                        child: Align(\n                          alignment: Alignment.bottomLeft,\n                          child: Text(\n                            widget.title ?? article.title ?? \"\",\n                            style: titleTheme,\n                            maxLines: 3,\n                            overflow: TextOverflow.ellipsis,\n                          ),\n                        ),\n                      ),\n                      // ),\n                      // ),\n\n                      // separator\n                      // Flexible(\n                      //   child: Container(\n                      //     margin: const EdgeInsets.symmetric(\n                      //       vertical: Paddings.small,\n                      //     ),\n                      //     color: AhlTheme.yellowRelax,\n                      //     constraints: const BoxConstraints.expand(\n                      //       width: 100,\n                      //       height: 16,\n                      //     ),\n                      //   ),\n                      // ),\n                      const Gap(20),\n                      Flexible(\n                        flex: 2,\n                        child: (widget.preview != null)\n                            ? Text(\n                                widget.preview!,\n                              )\n                            : ArticlePreviewTextView(\n                                article: article,\n                                collection: collection,\n                                callback: goToReadingPage,\n                              ),\n                      ),\n                    ],\n                  ),\n                ),\n              ),\n              // SizedBox(\n              //                 ],\n              //               ),\n              //             ),\n              //             // Align(\n              //             //   alignment: Alignment.centerRight,\n              //             //   child: ElevatedButton(\n              //             //     style: ElevatedButton.styleFrom(\n              //             //       foregroundColor:\n              //             //           Theme.of(context).colorScheme.onPrimary,\n              //             //       backgroundColor:\n              //             //           Theme.of(context).colorScheme.primary,\n              //             //     ),\n              //             //     onPressed: () {\n              //             //       goToReadingPage();\n              //             //     },\n              //             //     child: const Text('Lire'),\n              //             //   ),\n              //             // ),\n              //           ],\n              //         ),\n              //       ),\n              Expanded(\n                child: ArticleCoverImage(\n                  direction: widget.direction,\n                  article: article,\n                  collection: collection,\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n\n  @override\n  bool get wantKeepAlive => true; // articleStorageUtils?.coverImage != null;\n\n  @override\n  void updateKeepAlive() {\n    super.updateKeepAlive();\n  }\n}\n\nclass MobileArticleClipper extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    final path = Path();\n    path.moveTo(size.width, 0); // Start at top right corner\n    path.lineTo(0, size.height * 1 / 10); // Draw line to top right corner\n    path.lineTo(0, size.height); // Diagonal line down\n    path.lineTo(size.width, size.width);\n\n    // path.lineTo(0, size.height); // Line to bottom left corner\n    path.close(); // Close the path\n\n    return path;\n  }\n\n  @override\n  bool shouldReclip(MobileArticleClipper oldClipper) =>\n      false; // Optimizes performance if path doesn't change\n}\n\nclass LargeArticleClipper extends CustomClipper<Path> {\n  @override\n  Path getClip(Size size) {\n    final path = Path();\n    path.moveTo(size.width * 1 / 4, 0); // Start at top right corner\n    path.lineTo(0, size.height); // Draw line to top right corner\n    path.lineTo(size.width, size.width);\n    path.lineTo(size.width, 0); // Diagonal line down\n\n    // path.lineTo(0, size.height); // Line to bottom left corner\n    path.close(); // Close the path\n\n    return path;\n  }\n\n  @override\n  bool shouldReclip(LargeArticleClipper oldClipper) =>\n      false; // Optimizes performance if path doesn't change\n}\n\nclass ArticleCoverImage extends StatefulWidget {\n  const ArticleCoverImage({\n    super.key,\n    required this.article,\n    this.direction,\n    this.collection = 'articles',\n  });\n  final String collection;\n  final Article article;\n  final Axis? direction;\n\n  @override\n  State<ArticleCoverImage> createState() => ArticleCoverImageState();\n}\n\nclass ArticleCoverImageState extends State<ArticleCoverImage> {\n  late ArticleStorageUtils articleStorageUtils;\n  late Future articleCoverImage;\n  late Article article;\n\n  final SessionStorage cache = SessionStorage();\n\n  late String coverImageCacheKey;\n  @override\n  void initState() {\n    super.initState();\n    articleStorageUtils = ArticleStorageUtils(\n      article: widget.article,\n      collection: widget.collection,\n    );\n    article = widget.article;\n\n    coverImageCacheKey = \"${article.id}_cover_image\";\n\n    articleCoverImage =\n        articleStorageUtils.getCoverImage(); //getHeroHeaderImage()\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    Axis direction = widget.direction ??\n        resolveForBreakPoint<Axis>(\n          MediaQuery.of(context).size.width,\n          other: Axis.horizontal,\n          small: Axis.vertical,\n          medium: Axis.vertical,\n        );\n    return\n        // (cache[coverImageCacheKey] == null)\n        //     ?\n        ConstrainedBox(\n            constraints: const BoxConstraints(\n                // minHeight: 135,\n                // maxHeight: 232,\n                ),\n            child:\n                // (article.relations?.first[RepoSetUp.coverImageKey] != null)\n                //     ?\n                FutureBuilder(\n              future: articleCoverImage,\n              builder: (context, snapshot) {\n                // switch (snapshot.connectionState) {\n                //   case ConnectionState.done:\n                try {\n                  if (snapshot.hasData) {\n                    try {\n                      cache[coverImageCacheKey] =\n                          encodeUint8ListToString(snapshot.data!);\n                    } catch (e) {\n                      // error adding image to cache\n                    }\n                    return ClipPath(\n                      clipper: (direction == Axis.vertical)\n                          ? MobileArticleClipper()\n                          : LargeArticleClipper(),\n                      child: Container(\n                        // constraints: const BoxConstraints(\n                        //   // maxHeight: 135,\n                        //   // maxWidth: 185,\n                        //   // minWidth: 107,\n                        // ),\n                        decoration: BoxDecoration(\n                          image: DecorationImage(\n                            fit: BoxFit.cover,\n                            image: MemoryImage(snapshot.data!),\n                          ),\n                        ),\n                      ).animate().fadeIn(),\n                    );\n                  } else {\n                    return const SizedBox.shrink();\n                  }\n                } catch (e) {\n                  log(\"Error getting HighLight Article\");\n                  return const SizedBox.shrink();\n                }\n                //      else {\n                //       return Container(\n                //         decoration: BoxDecoration(\n                //           borderRadius:\n                //               BorderRadius.circular(BorderSizes.small),\n                //           color: Theme.of(context)\n                //               .colorScheme\n                //               .errorContainer,\n                //         ),\n                //         child: Text(\n                //           'Error getting image: ${snapshot.error}',\n                //           style: Theme.of(context)\n                //               .textTheme\n                //               .labelSmall!\n                //               .copyWith(\n                //                 color:\n                //                     Theme.of(context).colorScheme.error,\n                //               ),\n                //         ).animate().fadeIn(),\n                //       );\n                //     }\n                //   case ConnectionState.waiting:\n                //     return Container(\n                //       alignment: Alignment.center,\n                //       decoration: BoxDecoration(\n                //         borderRadius:\n                //             BorderRadius.circular(BorderSizes.small),\n                //         color: Theme.of(context)\n                //             .colorScheme\n                //             .primaryContainer,\n                //       ),\n                //       child: SizedBox.square(\n                //         dimension: 50,\n                //         child: CircularProgressIndicator(\n                //           color: Theme.of(context).colorScheme.primary,\n                //         ),\n                //       ),\n                //     );\n                //   default:\n                //     return Container(\n                //       alignment: Alignment.center,\n                //       decoration: BoxDecoration(\n                //         borderRadius:\n                //             BorderRadius.circular(BorderSizes.small),\n                //         color: Theme.of(context)\n                //             .colorScheme\n                //             .secondaryContainer,\n                //       ),\n                //       child: SizedBox.square(\n                //         dimension: 50,\n                //         child: CircularProgressIndicator(\n                //           color: Theme.of(context).colorScheme.secondary,\n                //         ),\n                //       ),\n                //     );\n                // }\n              },\n            )\n            // : Expanded(\n            //     child: Container(\n            //       decoration: BoxDecoration(\n            //         borderRadius: BorderRadius.circular(BorderSizes.small),\n            //         color: Theme.of(context).colorScheme.primaryContainer,\n            //       ),\n            //     ),\n            //   ),\n            )\n        // : ClipPath(\n        //     clipper: resolveForBreakPoint(\n        //       MediaQuery.of(context).size.width,\n        //       other: LargeArticleClipper(),\n        //       small: MobileArticleClipper(),\n        //       medium: MobileArticleClipper(),\n        //     ),\n        //     child: Container(\n        //       // constraints: const BoxConstraints(\n        //       //   // maxHeight: 135,\n        //       //   // maxWidth: 185,\n        //       //   // minWidth: 107,\n        //       // ),\n        //       decoration: BoxDecoration(\n        //         image: DecorationImage(\n        //           fit: BoxFit.cover,\n        //           image: MemoryImage(decodeUint8ListFromString(\n        //               cache[coverImageCacheKey] ?? \"[[]]\")),\n        //         ),\n        //       ),\n        //     ).animate().fadeIn(\n        //           curve: Curves.easeInOutBack,\n        //         ),\n        //   );\n        ;\n  }\n}\n\nclass ArticlePreviewTextView extends StatefulWidget {\n  const ArticlePreviewTextView(\n      {super.key,\n      required this.article,\n      this.collection = 'articles',\n      this.callback});\n\n  final Article article;\n  final String collection;\n  final VoidCallback? callback;\n\n  @override\n  State<StatefulWidget> createState() {\n    return ArticlePreviewViewState();\n  }\n}\n\nclass ArticlePreviewViewState extends State<ArticlePreviewTextView> {\n  // late ArticleStorageUtils articleStorageUtils;\n\n  @override\n  void initState() {\n    // articleStorageUtils = ArticleStorageUtils(\n    //     article: widget.article, collection: widget.collection);\n\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return (widget.article.relations?.first[RepoSetUp.coverImageKey] != null)\n        ? FutureBuilder(\n            future: Future.value(widget\n                .article.relations?.first[RepoSetUp.previewKey] as String),\n            builder: (context, snapshot) {\n              if (snapshot.hasData) {\n                return Container(\n                  alignment: Alignment.topCenter,\n                  child: RichText(\n                    overflow: TextOverflow.ellipsis,\n                    maxLines: 5,\n                    softWrap: true,\n                    // overflow: TextOverflow.ellipsis,\n                    text: TextSpan(\n                      text: snapshot.data!,\n                      //  softWrap: true,\n                      // maxLines: 5,\n\n                      style: Theme.of(context)\n                          .textTheme\n                          .bodySmall!\n                          .copyWith(overflow: TextOverflow.ellipsis),\n                      // children: [\n                      //   WidgetSpan(\n                      //     child: TextButton(\n                      //       child: Text(\n                      //         AppLocalizations.of(context)!.read,\n                      //       ),\n                      //       onPressed: () {\n                      //         if (widget.callback != null) widget.callback!();\n                      //       },\n                      //     ),\n                      //   ),\n                      // ],\n                    ),\n                  ),\n                );\n              } else if (snapshot.connectionState == ConnectionState.waiting) {\n                return Container(\n                  alignment: Alignment.center,\n                  decoration: BoxDecoration(\n                    borderRadius: BorderRadius.circular(BorderSizes.small),\n                    color: Theme.of(context).colorScheme.primaryContainer,\n                  ),\n                  child: SizedBox.square(\n                    dimension: 50,\n                    child: CircularProgressIndicator(\n                      color: Theme.of(context).colorScheme.primary,\n                    ),\n                  ),\n                );\n              } else {\n                return Container(\n                  decoration: BoxDecoration(\n                    borderRadius: BorderRadius.circular(BorderSizes.small),\n                    color: Theme.of(context).colorScheme.errorContainer,\n                  ),\n                  child: Text(\n                    'Error getting content: ${snapshot.error}',\n                    style: Theme.of(context).textTheme.labelSmall!.copyWith(\n                          color: Theme.of(context).colorScheme.error,\n                        ),\n                  ),\n                );\n              }\n            },\n          )\n        : Container(\n            decoration: BoxDecoration(\n              borderRadius: BorderRadius.circular(BorderSizes.small),\n              color: Theme.of(context).colorScheme.primaryContainer,\n            ),\n          );\n  }\n}\n\n/// Build related Article\n/// This Dart function builds a list of related article tiles in a Flutter app.\n///\n/// Args:\n///   context (BuildContext): The `BuildContext` parameter in the `buildRelatedArticleTiles` method\n/// represents the location of a widget within the widget tree. It provides information about the\n/// current build context, such as the theme, media query data, and localization information. This\n/// context is essential for building widgets correctly and accessing resources like themes\nclass RelatedArticles extends StatefulWidget {\n  const RelatedArticles({\n    super.key,\n    required this.collection,\n    required this.article,\n    this.relationKey = 'relatedArticles',\n  });\n\n  final String collection;\n  final Article article;\n  final String relationKey;\n\n  @override\n  State<RelatedArticles> createState() => _RelatedArticlesState();\n}\n\nclass _RelatedArticlesState extends State<RelatedArticles>\n    with AutomaticKeepAliveClientMixin {\n  late List<Widget> cards = [];\n\n  List<Widget> buildRelatedArticleTiles(BuildContext context, Article article) {\n    List relatedArticle = article.relations?[0][widget.relationKey] ?? [];\n    cards = [];\n\n    for (String articleId in relatedArticle) {\n      cards.add(\n        Align(\n          child: Container(\n            margin: const EdgeInsets.symmetric(horizontal: Paddings.medium),\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(MediaQuery.sizeOf(context).width),\n            ),\n            child: CardArticleTile.fromId(\n              articleId: articleId,\n              collection: widget.collection,\n            ),\n          ),\n        ),\n      );\n    }\n    return cards;\n  }\n\n  @override\n  bool get wantKeepAlive => true;\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n    return Wrap(\n      children: buildRelatedArticleTiles(context, widget.article),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/article_view/view/highlight_article_tile.dart",
    "content": "part of 'article_view.dart';\n\nclass HighlightArticleTile extends StatefulWidget {\n  const HighlightArticleTile({\n    super.key,\n    this.labelBuilder,\n  });\n  final String Function({Article? article})? labelBuilder;\n\n  @override\n  State<HighlightArticleTile> createState() => _HighlightArticleTileState();\n}\n\nclass _HighlightArticleTileState extends State<HighlightArticleTile>\n    with AutomaticKeepAliveClientMixin {\n  final SessionStorage _cache = SessionStorage();\n\n  final String _highlightArticleStateKey = 'isHighlightArticleReady';\n  late Future computation;\n  late String? label;\n\n  @override\n  void initState() {\n    super.initState();\n\n    computation = firebase.firebaseApp;\n  }\n\n  String? buildLabel({required Article? article}) {\n    var type = article?.relations?[0]['type'];\n\n    if (type != null && type == 'novena') {\n      return \"NEUVAINE\";\n    }\n    return null;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n\n    return FutureBuilder(\n      key: const Key('Highlight Article'),\n      future: computation,\n      builder: (context, snapshot) {\n        // if firebase is correctly initialized\n        if (snapshot.hasData) {\n          return BlocProvider(\n            create: (BuildContext context) => ArticleBloc(\n              repo: ArticlesRepository(\n                firestoreInstance: firebase.firestore,\n                // collection: 'articles',\n              ),\n            )\n              ..add(\n                const GetHighlightArticleEvent(),\n              )\n              ..add(const GetHighlightCollectionEvent()),\n            child: Align(\n              alignment: Alignment.center,\n              child: Container(\n                constraints: BoxConstraints(\n                  maxWidth: ContentSize.maxWidth(\n                    MediaQuery.of(context).size.width,\n                  ),\n                ),\n                child: BlocBuilder<ArticleBloc, ArticleState<Article>>(\n                  // buildWhen: (previous, current) =>\n                  //     current.highlightCollection == null || current.articles == null || current.articles!.isEmpty,\n                  builder: (context, state) {\n                    /// generate label\n                    label = (widget.labelBuilder != null)\n                        ? widget.labelBuilder!(article: state.highlightArticle)\n                        : buildLabel(article: state.highlightArticle);\n\n                    String? highlightCollection = state.highlightCollection;\n\n                    switch (state.status) {\n                      /// failed to trigger state\n                      case ArticleStatus.failed:\n                        developer.log('${state.error}');\n                        return Container(\n                          padding: const EdgeInsets.all(4.0),\n                          // color: Theme.of(context).colorScheme.onErrorContainer,\n                          margin: const EdgeInsets.symmetric(\n                            horizontal: Margins.medium,\n                          ),\n                          alignment: Alignment.center,\n                          child: Icon(\n                            Icons.warning_rounded,\n                            color: Theme.of(context).colorScheme.error,\n                          ),\n                        );\n\n                      /// case done;\n                      case ArticleStatus.succeed:\n                        // update caching info\n\n                        _cache[_highlightArticleStateKey] = 'true';\n\n                        // String releaseMonth = DateTimeUtils.localMonth(\n                        //   DateTimeUtils.parseReleaseDate(\n                        //           state.articles![0]!.releaseDate ??\n                        //               '2024-04-28')\n                        //       .month,\n                        //   context,\n                        // );\n                        return Container(\n                          margin: const EdgeInsets.symmetric(\n                            horizontal: Margins.medium,\n                          ),\n                          child: Column(\n                            crossAxisAlignment: CrossAxisAlignment.start,\n                            children: [\n                              // Text(\n                              //   monthTextResolve(\n                              //     context,\n                              //     releaseMonth,\n                              //   ).toUpperCase(),\n                              //   style: Theme.of(context)\n                              //       .textTheme\n                              //       .labelLarge!\n                              //       .copyWith(\n                              //         color:\n                              //             Theme.of(context).colorScheme.primary,\n                              //       ),\n                              // ),\n                              Align(\n                                alignment: Alignment.center,\n                                child: (state.highlightArticle != null)\n                                    ? CardArticleTile(\n                                        label: label,\n                                        article: state.highlightArticle!,\n                                        collection:\n                                            highlightCollection ?? 'articles',\n                                      )\n                                    : const Text(\n                                        \"[HighLightArticleTile] Error: HighLightArticle is null\"),\n                              ),\n                              // Container(\n                              //   margin: const EdgeInsets.symmetric(\n                              //     vertical: Margins.medium,\n                              //   ),\n                              //   alignment: Alignment.centerRight,\n                              //   child: TextButton(\n                              //     onPressed: () {\n                              //       Navigator.of(context)\n                              //           .pushNamed(ArticlesPage.routeName);\n                              //     },\n                              //     child: Text(\n                              //       AppLocalizations.of(context)!.allArticles,\n                              //     ),\n                              //   ),\n                              // ),\n                            ],\n                          ),\n                        );\n\n                      /// while waiting\n                      default:\n                        return Container(\n                          decoration: BoxDecoration(\n                            color: Theme.of(context)\n                                .colorScheme\n                                .surfaceContainerHighest,\n                            borderRadius:\n                                BorderRadius.circular(BorderSizes.medium),\n                          ),\n\n                          height: 408,\n                          margin: const EdgeInsets.symmetric(\n                            horizontal: Margins.medium,\n                          ),\n                          alignment: Alignment.center,\n                          // child: const CircularProgressIndicator(),\n                        )\n                            .animate(\n                              onPlay: (controller) => controller.repeat(),\n                            )\n                            .shimmer()\n                            .then(delay: Durations.long1);\n                    }\n                  },\n                ),\n              ),\n            ),\n          );\n        } else {\n          developer.log('article error: ${snapshot.error}');\n          return Container(\n            height: 310,\n            margin: const EdgeInsets.symmetric(\n              horizontal: Margins.medium,\n            ),\n            alignment: Alignment.center,\n            child: const CircularProgressIndicator(\n              color: Colors.red,\n            ),\n          );\n        }\n      },\n    );\n  }\n\n  void goToReadingPage() {\n    Navigator.push(\n      context,\n      MaterialPageRoute(\n        builder: (context) {\n          return ArticleContentPage(\n            article: context.read<ArticleBloc>().state.highlightArticle,\n          );\n        },\n      ),\n    );\n  }\n\n  //\n  bool keepAlive = false;\n  @override\n  bool get wantKeepAlive {\n    return _cache[_highlightArticleStateKey] == 'true';\n  }\n}\n"
  },
  {
    "path": "lib/src/assets/assets.dart",
    "content": "part of '../../ahl_barrel.dart';\n\n/// This source file collect all assets in the project and provide handier\n/// way to interact with them.\n///\n/// To each assets correspond an\n\nclass AhlAssets {\n  const AhlAssets._(); // Prevent for instantiation\n\n  static String get releasePath =>\n      kDebugMode ? '' : 'assets/'; // used to set up path when deployed\n\n  static String heroBk = \"${releasePath}images/hero_bk.webp\";\n  static String heroBkAlt = \"${releasePath}images/praying_alt.webp\";\n  static String logoForm = \"${releasePath}images/logo_form_colored.webp\";\n  static String logoFormTypoHorizontalColored =\n      \"${releasePath}images/logo_form_typo_horizon_colored.webp\";\n  static String logoFormTypoHorizontalColoredDark =\n      \"${releasePath}images/logo_form_typo_horizontal_colored_dark.webp\";\n  static String logoNdd = \"${releasePath}images/logo_ndd.webp\";\n  static String priorAvatar = \"${releasePath}images/prior_avatar.webp\";\n\n  static String prayersSpaceCover =\n      \"${releasePath}images/prayers_space_banner.webp\";\n  @Deprecated(\"use projectSpaceCover instead.\")\n  static String projectHeroHeader =\n      \"${releasePath}images/projects_hero_header.webp\";\n  static String cantineImage = \"${releasePath}images/cantine_hero.webp\";\n  static String rosaryHeroHeader =\n      \"${releasePath}images/rosary_hero_header.webp\";\n  static String praying = \"${releasePath}images/praying.webp\";\n  static String prayingAlt = \"${releasePath}images/praying_alt.webp\";\n  static String requestMotif = \"${releasePath}images/motif_prayer.jpg\";\n  static String projectSpaceCover =\n      '${releasePath}images/project_space_banner.webp';\n  static String dons = '${releasePath}images/SVG/dons.svg';\n  static String doneAnimation = '${releasePath}animations/done.lottie';\n}\n"
  },
  {
    "path": "lib/src/constants/constants.dart",
    "content": "part of '../../ahl_barrel.dart';\n\n/// Maximum number of suggestions in Article Based architecture.\nconst int maxSuggestionArticle = 10;\n\nclass BorderSizes {\n  /// 45\n  static const double huge = 45;\n\n  /// 30\n  static const double big = 30;\n\n  /// 26\n  static const double medium = 26;\n\n  /// 15\n  static const double small = 15;\n}\n\nclass Margins {\n  /// 236\n  static const double extraHuge = 236;\n\n  /// 200\n  static const double huge = 200;\n\n  /// 50\n  static const double extraLarge = 48;\n\n  /// 37\n  static const double large = 32;\n\n  /// 24\n  static const double medium = 24;\n\n  /// 16\n  static const double small = 16;\n\n  /// 166 : Top margin of the hero header\n  static const double heroHeaderExtraTop = 166;\n}\n\n/// Compute content size based on breakpoints\nclass ContentSize {\n  /// MaxWidth considering the breakpoints as widthConstraints.\n  static double maxWidth(double widthConstraints) {\n    return resolveForBreakPoint<double>(\n      widthConstraints,\n      extraHuge: 1128,\n      other: 966,\n    );\n  }\n}\n\nclass ScreenSizes {\n  /// Phone size small than 480.\n  static const double small = 480;\n\n  /// Phone size when in landscape mode : 780.\n  static const double medium = 780;\n\n  /// Tablet in portrait mode : 1024\n  static const double large = 1024;\n\n  /// Tablet in landscape mode and laptop or desktop : 1280\n  static const double extraLarge = 1280;\n\n  /// Laptop and desktop more than 1600\n  static const double huge = 1600;\n}\n\nclass Paddings {\n  Paddings._();\n\n  /// 45 px\n  static const double huge = 45;\n\n  /// 30 px\n  static const double big = 30;\n\n  /// 27 px\n  static const double drawerAppBarPadding = 27;\n\n  /// 8 px\n  static const double appBarPadding = 8;\n\n  /// 15 px\n  static const double listSeparator = 15;\n\n  /// 21 px\n  static const double actionSeparator = 21;\n\n  /// A padding of 15 px\n  static const double medium = 15;\n\n  /// A padding of 7.5 px.\n  ///\n  /// It is computed as the half of medium.\n  static const double small = medium / 2;\n}\n\nclass Sizes {\n  Sizes._();\n  static const double appBarSize = 75; // 64 from design\n  static const double menuButtonWidth = 400;\n  static const double menuButtonListHeight = 400;\n  static const double mobileHeroHeaderImageHeight = 350;\n  static const double nddLogoSize = 76;\n\n  //  48 px\n  static const double iconSize = 48;\n}\n\nclass IconSizes {\n  IconSizes._();\n\n  /// 64\n  static const double extraLarge = 64;\n\n  /// 24\n  static const double medium = 24;\n\n  /// 48\n  static const double large = medium * 2;\n\n  /// 12\n  static const double small = medium / 2;\n}\n\nclass ButtonGeometry {\n  ButtonGeometry._();\n\n  static const EdgeInsets elevatedButtonPaddings =\n      EdgeInsets.symmetric(vertical: 10);\n}\n\nclass HeroHeaderGeometry {\n  HeroHeaderGeometry._();\n\n  static const double heroHeaderExtrasHeight = 200;\n  static const double heroHeaderExtrasWidth = 650;\n}\n\nclass AhlDurations {\n  AhlDurations._();\n\n  /// 300 ms\n  static const Duration subtle = Duration(milliseconds: 300);\n}\n"
  },
  {
    "path": "lib/src/firebase_constants.dart",
    "content": "import 'dart:async';\nimport 'dart:developer';\n\nimport 'package:ahl/firebase_options.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:firebase_core/firebase_core.dart';\nimport 'package:firebase_storage/firebase_storage.dart';\nimport 'package:flutter/foundation.dart';\n\n/// Change this to true if using emulator\nconst bool isUsingEmulator = false;\n\n/// Email key in users document in firestore.\nconst String emailKey = 'email:';\n\n/// Subscription Date key in users document in firestore.\nconst String dateKey = 'subscriptionDate';\n\n/// Collection names\n\n/// collections name in the root document.\nconst String newsletterCollection = 'users';\n\n/// The name of the collection containing articles.\nconst String articlesCollection = 'articles';\n\n/// The name of projects collection.\nconst String projectsCollection = 'projects';\n\n/// PrayerRequest collection name\nconst String prayerRequestCollection = 'prayer_requests';\n\nfinal FirebaseFirestore _firestore = FirebaseFirestore.instance;\nfinal Reference _storage = FirebaseStorage.instance.ref();\n\nconst String emulatorHost = 'localhost';\nconst int firestorePort = 46561;\nconst int storagePort = 9199;\nconst int authPort = 9099;\nconst int hostingPort = 5000;\n\nFirebaseApp? _firebaseAppInstance;\n\n/// Get firebase initialization\nFuture<FirebaseApp?> get firebaseApp async {\n  if (_firebaseAppInstance == null) {\n    try {\n      // firebase initialization\n      final FirebaseApp firebaseApp = await Firebase.initializeApp(\n        // doesn't await this allows the app to run without firebase\n        options: DefaultFirebaseOptions.currentPlatform,\n      ).then((value) {\n        return value;\n      });\n\n      // env update\n      _firebaseAppInstance = firebaseApp;\n\n      return firebaseApp;\n    } catch (e) {\n      _isInitialized = false;\n      _firebaseAppInstance = null;\n      return null;\n    }\n  } else {\n    return _firebaseAppInstance!;\n  }\n}\n\n/// Get the instance of firestore in the app.\nFirebaseFirestore get firestore {\n  initialize();\n  return _firestore;\n}\n\nReference get storage {\n  initialize();\n  return _storage;\n}\n\n/// Get status if plugins are initialized.\nbool get isInitialized => _isInitialized;\n\n/// internal initialization state.\nbool _isInitialized = false;\n\n/// we re initialize the firebase plugin.\nvoid initialize() {\n  if (_isInitialized == false) {\n    _initialize();\n  }\n}\n\n/// Perform firebase initialization.\n///\n/// Typically, it setup firebase to work on emulator in debug mode.\n/// This enable offline data caching too.\nFuture<void> _initialize() async {\n  if (!_isInitialized) {\n    try {\n      if (_firebaseAppInstance == null) {\n        await firebaseApp;\n      }\n\n      // persistence data settings\n      _firestore.settings = const Settings(\n        persistenceEnabled: true,\n      );\n\n      // emulator setup\n      if (kDebugMode && isUsingEmulator) {\n        _firestore.useFirestoreEmulator(emulatorHost, firestorePort);\n        _storage.storage.useStorageEmulator(emulatorHost, storagePort);\n      }\n\n      // automatic caching\n      _storage.storage.app.setAutomaticResourceManagementEnabled(true);\n\n      // env update\n      _isInitialized = true;\n\n      //     // notify that the firebase plugin in correctly initialized\n      log('[Firebase Init] : Correctly initialized.');\n    } catch (e) {\n      _isInitialized = false;\n      log('[Firebase Init] : Failed initializing firebase: e');\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/localization/app_en.arb",
    "content": "{\n  \"appTitle\": \"Aujourd'hui l'avenir\",\n  \"@appTitle\": {\n    \"description\": \"The title of the application\"\n  },\n  \"longAppTitle\": \"Aujourd'hui l'avenir\",\n  \"heroTitle\": \"Love and Serve\",\n  \"@heroTitle\": {\n    \"description\": \"The invitation text in the hero header\"\n  },\n  \"heroExplanation\": \"Love is the most powerful force in the universe. It can defeat hate.\",\n  \"@heroExplanation\": {\n    \"description\": \"Use this under the Hero header Title\"\n  },\n  \"homeText\": \"Home\",\n  \"@homeText\": {\n    \"description\": \"The text on the HomePage Tab in the app bar\"\n  },\n  \"aboutUs\": \"About Us\",\n  \"prayers\": \"Prayers\",\n  \n  \"ourProjects\": \"Our Projects\",\n  \"news\": \"News\",\n  \"makeDonation\": \"Support us\",\n  \"contact\": \"Contact us\",\n  \"welcomingTitle\": \"Welcome\",\n  \"@welcomingTitle\": {\n    \"description\": \"The title of the welcoming message.\"\n  },\n  \"welcomingBody\": \"Welcome on the Dominican Missionary Sister of Our Délivrande Lady, Madagascar, Saharoaloha.\\nEn tant que Sœur Supérieure, je vous accueille chaleureusement pour partager notre histoire, notre mission et notre engagement envers la foi.\\nUnissez-vous à nous dans la prière, en explorant ce site dédié à cultiver ensemble une vie spirituelle enrichissante.\",\n  \"sister\": \"Sister\",\n  \"@sister\": {\n    \"description\": \"Denomination fo the sisters\"\n  },\n  \"sisterDenomination\": \"Dominicans Missionaries Sisters Of Our Lady of Délivrande\",\n  \"@sisterDenomination\": {\n    \"description\": \"The text that is used as Signature for the website\"\n  },\n  \"prior\": \"Prioress of the community\",\n  \"inConstructionPromotionalMessage\": \"This Website is under construction.\",\n  \"invitingNewsLetter\": \"To stay informed\",\n  \"@invitingNewsLetter\": {\n    \"description\": \"Sous titre dans le widget d'invitation à la news letter\"\n  },\n  \"newsLetterWidgetTitle\": \"Register to Ahl newsletter\",\n  \"@newsLetterWidgetTitle\": {\n    \"description\": \"Title dans le widget d'invitation à la news letter\"\n  },\n  \"exampleMail\": \"yourname@example.com\",\n  \"register\": \"Register\",\n\n  \"priesSpace\": \"Prayers Space\",\n  \"@priesSpace\": {\n    \"description\": \"Title for prayers space\"\n  }\n}\n"
  },
  {
    "path": "lib/src/localization/app_fr.arb",
    "content": "{\n  \"@@locale\": \"fr\",\n  \"appTitle\": \"Aujourd'hui l'avenir\",\n  \"@appTitle\": {\n    \"description\": \"The title of the application\"\n  },\n  \"longAppTitle\": \"Aujourd'hui l'avenir\",\n  \"heroTitle\": \"\\\"Aimer et servir\\\"\",\n  \"slogan\":\"\\\"Amour et Service\\\"\",\n  \"@heroTitle\": {\n    \"description\": \"Le text d'invitation qui s'affiche dans le hero header\"\n  },\n  \"heroHeaderSubtitle\": \"Avec les Sœurs Dominicaines Missionnaires de Notre Dame de la Délivrande à Saharoaloha Antsirabe.\",\n  \"heroExplanation\": \"Solidarité et Prière pour Madagascar.\\n Découvrez nos missions auprès des enfants, rejoignez nos prières quotidiennes et partagez la vie de notre communauté.\",\n  \"@heroExplanation\": {\n    \"description\": \"Text d'accroche en dessous du text principale de l'Hero header.\"\n  },\n  \"homeText\": \"Accueil\",\n  \"@homeText\": {\n    \"description\": \"Le text du boutton page d'acceuil\"\n  },\n  \"aboutUs\": \"À propos de nous\",\n  \"prayers\": \"Prières\",\n  \"ourProjects\": \"Nos Projets\",\n  \"news\": \"Actualités de la communauté\",\n  \"makeDonation\": \"Nous soutenir\",\n  \"articles\": \"Articles\",\n  \"read\": \"Lire\",\n  \"contact\": \"Nous Contacter\",\n  \"welcomingTitle\": \"Bienvenue!\",\n  \"@welcomingTitle\": {\n    \"description\": \"The title of the welcoming message.\"\n  },\n  \"welcomingBody\": \"Bienvenu sur le site des Soeurs Dominicaines Missionnaires de Notre Dame de la Délivrande, Madagascar, Saharoaloha.\\n\\nEn tant que Sœur Supérieure, je vous accueille chaleureusement pour partager notre histoire, notre mission et notre engagement envers la foi.\\n\\nUnissez-vous à nous dans la prière, en explorant ce site dédié à cultiver ensemble une vie spirituelle enrichissante.\",\n  \"sister\": \"Sœur\",\n  \"sisterDenomination\": \"Sœurs Dominicaines Missionnaires de Notre Dame de la Délivrande\",\n  \"@sisterDenomination\": {\n    \"description\": \"Text qui est utiliser dans le footer comme signiture du site internet\"\n  },\n  \"@sister\": {\n    \"description\": \"Denomination des Sœurs\"\n  },\n  \"prior\": \"Prieure de la communauté\",\n  \"inConstructionPromotionalMessage\": \"Ce site internet est en construction.\",\n  \"invitingNewsLetter\": \"Pour rester informé\",\n  \"@invitingNewsLetter\": {\n    \"description\": \"Sous titre dans le widget d'invitation à la news letter\"\n  },\n  \"newsLetterWidgetTitle\": \"Abonnez-vous à la newsletter\",\n  \"@newsLetterWidgetTitle\": {\n    \"description\": \"Title dans le widget d'invitation à la news letter\"\n  },\n  \"exampleMail\": \"votrenom@example.com\",\n  \"register\": \"S'inscrire\",\n  \"thanksForRegistering\": \"Merci pour votre abonnement\",\n  \"invalidEmail\": \"Email non valide.\",\n  \"cantBeEmpty\": \"Ne peut pas être vide\",\n  \"unknownError\": \"Erreur inconnue, Verifier votre connexion internet\",\n  \"priesIntention\": \"Intentions de prières\",\n  \"proverb\": \"\\\"Priez les uns les autres, afin que vous soyez guéris\\\"\\nSt Jacques 5:16\",\n  \"priersInvitation\": \"Vos intentions seront portées dans nos prières quotidiennes dans notre Communauté Sainte Catherine de Sienne à Saharoaloha, Madagascar.\",\n  \"nameAndFirstName\": \"Nom et Prénom\",\n  \"priers\": \"Prières\",\n  \"sendPray\": \"Soumettre mon intention\",\n  \"optional\": \"Facultatif\",\n  \"yourPrayer\": \"Votre intention de prière\",\n  \"prayerRequestInvitation\": \"Unissons nous dans la prière. Confiez vos intentions à notre communauté.\",\n  \"priesSpace\": \"Espace Prière\",\n  \"@priesSpace\": {\n    \"description\": \"Titre pour espace de prières\"\n  },\n  \"whenWePray\": \"Quand pronnoncer votre prière?\",\n  \"wePrayOn\": \"On prie pour vous le:\",\n  \"prayingDate\": \"{date} à {hour}, pendant {prayerType}.\",\n  \"@prayingDate\": {\n    \"description\": \"The message that shows the date when the prayer will be prayed\",\n    \"placeholders\": {\n      \"prayerType\": {\n        \"type\": \"String\",\n        \"example\": \"Rosary\"\n      },\n      \"date\": {\n        \"type\": \"DateTime\",\n        \"format\": \"yMMMMEEEEd\"\n      },\n      \"hour\": {\n        \"type\": \"DateTime\",\n        \"format\": \"jm\"\n      }\n    }\n  },\n  \"priersOf\": \"Intention de prière de {name},\\n{email}\",\n  \"@priersOf\": {\n    \"description\": \"Presentation of Prayer owner in Prayer Request\",\n    \"placeholders\": {\n      \"name\": {\n        \"type\": \"String\",\n        \"example\": \"John Doe\"\n      },\n      \"email\": {\n        \"type\": \"String\",\n        \"example\": \"johndoe@example.com\"\n      }\n    }\n  },\n  \"mass\": \"la Messe\",\n  \"rosary\": \"le Rosaire\",\n  \"vesper\": \"le Vêpre\",\n  \"choiceMass\": \"Messe\",\n  \"choiceRosary\": \"Rosaire\",\n  \"choiceVesper\": \"Vêpre\",\n  \"projectsSpace\": \"Nos projets\",\n  \"projectsSpaceSubtitle\": \"Aimons et servons.\",\n  \"projectsSpaceIntroduction\": \"Nous sommes engagées dans de nombreux projets qui visent à promouvoir la dignité humaine, la justice sociale, l’éducation et la santé. Nous vous invitons à découvrir sur cette page les initiatives que nous menons.\",\n  \"ourPartners\": \"Nos Partenaires\",\n\n  \"inProgress\": \"Projet en cours\",\n  \"waitingBudget\":\"En attente de financement\",\n  \"done\": \"Términé\",\n\n  \"supportProject\": \"Soutenir ce projet\",\n\n  \"realized\": \"Réalisation\",\n  \"initiative\": \"Initiative des soeurs\",\n  \"projectSpaceTitle\": \"Nos projets\",\n  \"projectLongTitle\": \"Nos projets et nos œuvres sociaux\",\n  \"projectSpaceDescription\": \"Découvrez les initiatives concrètes qui animent notre mission au service du peuple malgache et de l’eglise locale. Nous vous invitons à découvrir sur cette page les initiatives que nous menons.\",\n  \"january\": \"Janvier\",\n  \"february\": \"Fevrier\",\n  \"march\": \"Mars\",\n  \"april\": \"Avril\",\n  \"may\": \"Mai\",\n  \"june\": \"Juin\",\n  \"july\": \"Juillet\",\n  \"august\": \"Août\",\n  \"september\": \"Septembre\",\n  \"october\": \"Octobre\",\n  \"november\": \"Novembre\",\n  \"december\": \"Decembre\",\n  \"whoWeAre\": \"Qui sommes nous?\",\n  \"domSisters\": \"Les soeurs Dominicaines NDD\",\n  \"allArticles\": \"Tous les articles\",\n  \"share\" : \"Partager\",\n  \"todaysRosary\": \"Chapelet du jour\",\n  \"rosarySlogan\": \"Mediter la vie de Jesus avec Marie\",\n  \"getNotified\": \"Être notifier\",\n  \"allProjects\": \"Voir projets\",\n  \"devInProgress\": \"Bientôt disponible\",\n  \"prayerSpace\": \"Espace de prière\",\n  \"@prayerSpace\": {\n    \"description\": \"Title of the prayer space\"\n  },\n  \"todaySaint\":\"Saint du jour\",\n  \"office\":\"Office du jour\",\n  \"novena\": \"Neuvaine\",\n  \"availableSoon\": \"Bientôt Disponible\",\n  \"listenPodcast\": \"Ecouter Podcast\"\n\n}\n"
  },
  {
    "path": "lib/src/localization/locale_utils.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport '../app.dart';\n\nclass LocaleUtils {\n  /// Switch app locale to\n  static void changeLocale(BuildContext context, Locale newLocale) {\n    MyApp.setLocal(context, newLocale);\n    Scaffold.of(context).closeEndDrawer();\n  }\n}\n"
  },
  {
    "path": "lib/src/newsletter/bloc/bloc.dart",
    "content": "part of '../newsletter.dart';\n\nconst invalidEmailError = \"Invalid Email\";\n\nclass NewsletterSubscriptionBloc\n    extends Bloc<NewsletterSubscriptionEvent, NewsletterSubscriptionState> {\n  /// in super we add initial state.\n  ///\n  /// You should add an initialization state to make it work.\n  NewsletterSubscriptionBloc({\n    required this.repo,\n  }) : super(\n          NewsletterSubscriptionState.initial(),\n        ) {\n    on<SubscriptionRequestEvent>(_onSubscriptionRequest);\n    on<InitializeRequestEvent>(_onInitializeRequest);\n    on<LoadingEvent>(_onLoadingEvent);\n    on<SuccessEvent>(_onSuccessEvent);\n    on<ErrorEvent>(_onErrorEvent);\n    // then, register a callback on subscribe event\n    if (!_isListening) {\n      _isListening = true;\n      repo.status.listen(\n        (event) {\n          switch (event) {\n            // Error\n            case NewsletterSubscriptionStatus.error:\n              add(\n                ErrorEvent(),\n              );\n              break;\n\n            // Loading\n            case NewsletterSubscriptionStatus.loading:\n              add(\n                LoadingEvent(),\n              );\n              break;\n\n            // Success\n            case NewsletterSubscriptionStatus.success:\n              add(\n                SuccessEvent(),\n              );\n              break;\n\n            default:\n              break;\n          }\n        },\n      );\n    }\n  }\n\n  void _onErrorEvent(ErrorEvent event, emit) => emit(\n        state.copyWith(\n            status: NewsletterSubscriptionStatus.error, error: event.error),\n      );\n\n  // Loading\n  void _onLoadingEvent(LoadingEvent event, emit) => emit(\n        state.copyWith(status: NewsletterSubscriptionStatus.loading),\n      );\n\n  // Success\n  void _onSuccessEvent(SuccessEvent event, emit) => emit(\n        state.copyWith(\n            status: NewsletterSubscriptionStatus.success, error: null),\n      );\n\n  /// The repo to be used when storing data.\n  final NewsletterSubscriptionRepository repo;\n\n  /// To prevent re listening to the stream\n  bool _isListening = false;\n\n  // Initialization Handler\n  void _onInitializeRequest(\n    InitializeRequestEvent event,\n    Emitter<NewsletterSubscriptionState> emit,\n  ) {\n    /// emit initial state\n    emit(NewsletterSubscriptionState.initial());\n  }\n\n  // Subscription event handler\n  void _onSubscriptionRequest(SubscriptionRequestEvent event,\n      Emitter<NewsletterSubscriptionState> emit) async {\n    emit(\n      state.copyWith(\n        email: event.email,\n        status: NewsletterSubscriptionStatus.loading,\n        error: null,\n      ),\n    );\n\n    // Test if the email is working and acting according to it\n    if (event.email != null && event.email!.isNotEmpty) {\n      if (isValidEmail(event.email!)) {\n        emit(state.copyWith(\n          status: NewsletterSubscriptionStatus.loading,\n        ));\n        await repo.subscribe(email: event.email!);\n      } else {\n        emit(\n          state.copyWith(\n              status: NewsletterSubscriptionStatus.error,\n              error: invalidEmailError),\n        );\n      }\n    } else {\n      emit(\n        state.copyWith(\n          status: NewsletterSubscriptionStatus.error,\n          error: invalidEmailError,\n        ),\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/newsletter/event/event.dart",
    "content": "part of '../newsletter.dart';\n\n/// The event carry data (here email) from the UI to the\n/// bloc. Then the bloc return the state object containing status.\n///\nclass NewsletterSubscriptionEvent {\n  const NewsletterSubscriptionEvent({this.email});\n\n  /// The email string gathered from prompt.\n  final String? email;\n}\n\nclass SubscriptionRequestEvent extends NewsletterSubscriptionEvent {\n  SubscriptionRequestEvent({required String email}) : super(email: email);\n}\n\nclass InitializeRequestEvent extends NewsletterSubscriptionEvent {\n  InitializeRequestEvent() : super(email: null);\n}\n\n/// Closing the Subscription mechanism will re initialize it.\ntypedef CloseRequestEvent = InitializeRequestEvent;\n\nclass LoadingEvent extends NewsletterSubscriptionEvent {}\n\nclass SuccessEvent extends NewsletterSubscriptionEvent {}\n\nclass ErrorEvent extends NewsletterSubscriptionEvent {\n  ErrorEvent({this.error = \"Unknown Error\"});\n\n  final Object? error;\n}\n"
  },
  {
    "path": "lib/src/newsletter/newsletter.dart",
    "content": "import 'dart:async';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:equatable/equatable.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:ahl/ahl_barrel.dart';\nimport '../theme/theme.dart' as theme;\nimport '../validation/email_validation.dart';\n\npart 'view/news_letter_view.dart';\npart 'bloc/bloc.dart';\npart 'event/event.dart';\npart 'state/state.dart';\npart 'newsletter_repository.dart';\n"
  },
  {
    "path": "lib/src/newsletter/newsletter_repository.dart",
    "content": "part of 'newsletter.dart';\n\nclass NewsletterSubscriptionRepository {\n  NewsletterSubscriptionRepository({\n    required FirebaseFirestore database,\n  }) : _db = database;\n\n  final _controller = StreamController<NewsletterSubscriptionStatus>();\n\n  final FirebaseFirestore _db;\n\n  Stream<NewsletterSubscriptionStatus> get status async* {\n    yield* _controller.stream;\n  }\n\n  /// Getter of the data to be written\n  Map<String, dynamic> data(String email) => {\n        emailKey: email,\n        dateKey: Timestamp.now(),\n      };\n\n  /// Handle initialization\n  void initialize() {\n    _controller.add(NewsletterSubscriptionStatus.initial);\n  }\n\n  /// Handle subscription\n  Future<void> subscribe({\n    required String email,\n  }) async {\n    // Writes to firebase firestore document\n    return _db\n        .collection(newsletterCollection)\n        .doc(email)\n        .set(\n          data(email),\n          SetOptions(merge: true),\n        )\n        .then(\n          (value) => _controller.add(NewsletterSubscriptionStatus.success),\n        )\n        .onError(\n          (e, _) => _controller.add(NewsletterSubscriptionStatus.error),\n        );\n  }\n}\n"
  },
  {
    "path": "lib/src/newsletter/state/state.dart",
    "content": "part of '../newsletter.dart';\n\nenum NewsletterSubscriptionStatus {\n  /// When the prompt is empty\n  initial,\n\n  /// When the prompt is ready to submit\n  loading,\n\n  /// When the mail is submitted\n  success,\n\n  /// When an error occurred\n  error,\n}\n\nfinal class NewsletterSubscriptionState extends Equatable {\n  const NewsletterSubscriptionState({\n    this.email,\n    this.error,\n    this.status = NewsletterSubscriptionStatus.initial,\n  });\n\n  /// an helper when building initial state\n  factory NewsletterSubscriptionState.initial() =>\n      const NewsletterSubscriptionState();\n\n  final String? email;\n\n  final NewsletterSubscriptionStatus status;\n\n  final Object? error;\n\n  NewsletterSubscriptionState copyWith({\n    String? email,\n    NewsletterSubscriptionStatus? status,\n    Object? error,\n  }) =>\n      NewsletterSubscriptionState(\n          email: email ?? this.email,\n          status: status ?? this.status,\n          error: error ?? this.error);\n\n  @override\n  List<Object?> get props => [email, status, error];\n\n  bool get hasError => error != null;\n\n  String? getError(BuildContext context) {\n    switch (error) {\n      case \"Invalid Email\":\n        return AppLocalizations.of(context)!.invalidEmail;\n      default:\n        return AppLocalizations.of(context)!.unknownError;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/newsletter/view/news_letter_view.dart",
    "content": "part of '../newsletter.dart';\n\nclass NewsLetterPrompt extends StatefulWidget {\n  const NewsLetterPrompt({super.key});\n\n  @override\n  State<NewsLetterPrompt> createState() => _NewsLetterPromptState();\n}\n\nclass _NewsLetterPromptState extends State<NewsLetterPrompt>\n    with AutomaticKeepAliveClientMixin {\n  @override\n  bool get wantKeepAlive => true;\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n    return FutureBuilder(\n      future: firebaseApp, // listen to firebaseApp initialization\n      builder: (context, snapshot) {\n        switch (snapshot.connectionState) {\n          case ConnectionState.done:\n            return BlocProvider<NewsletterSubscriptionBloc>(\n              create: (context) => NewsletterSubscriptionBloc(\n                repo: NewsletterSubscriptionRepository(\n                  database: firestore,\n                ),\n              ),\n              // Setup bloc providing\n              // child: Container(\n              // constraints: BoxConstraints(\n              // maxWidth: ContentSize.maxWidth(\n              //   MediaQuery.of(context).size.width,\n              // ),\n              // ),\n              child: const NewsletterPromptView(),\n              // ),\n            );\n\n          default:\n            return const SizedBox.shrink();\n        }\n      },\n    );\n  }\n}\n\nclass NewsletterPromptView extends StatefulWidget {\n  const NewsletterPromptView({super.key});\n\n  @override\n  State<NewsletterPromptView> createState() => _NewsletterPromptViewState();\n}\n\nclass _NewsletterPromptViewState extends State<NewsletterPromptView> {\n  final TextEditingController emailInputController = TextEditingController();\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<NewsletterSubscriptionBloc, NewsletterSubscriptionState>(\n      buildWhen: (previous, current) => previous != current,\n      builder: (context, state) => Container(\n        padding: const EdgeInsets.all(Paddings.huge),\n        color: theme.AhlTheme.yellowRelax,\n        alignment: Alignment.center,\n        child: ConstrainedBox(\n          constraints: BoxConstraints(\n            maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n          ),\n          child: Column(\n            mainAxisSize: MainAxisSize.min,\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              /// This handle 2 state object\n              NewsletterTextPrompt(\n                test: () => false,\n              ),\n              Padding(\n                padding: const EdgeInsets.symmetric(\n                  vertical: Paddings.big,\n                ),\n                child: TextField(\n                  controller: emailInputController,\n                  onTap: () {\n                    context\n                        .read<NewsletterSubscriptionBloc>()\n                        .add(InitializeRequestEvent());\n                  },\n                  onEditingComplete: () {\n                    context.read<NewsletterSubscriptionBloc>().add(\n                          SubscriptionRequestEvent(\n                            email: emailInputController.text,\n                          ),\n                        );\n                  },\n                  decoration: InputDecoration(\n                    label: const Text('e-mail'),\n                    hintText: AppLocalizations.of(context)!.exampleMail,\n                    border: const OutlineInputBorder(),\n                    error: state.hasError\n                        ? Text('${state.getError(context)}')\n                        : null,\n                  ),\n                ),\n              ),\n              ElevatedButton(\n                style: ElevatedButton.styleFrom(\n                  backgroundColor: Theme.of(context).primaryColor,\n                  foregroundColor: Theme.of(context).colorScheme.onPrimary,\n                ),\n                onPressed:\n                    (state.status == NewsletterSubscriptionStatus.initial)\n                        ? () {\n                            context.read<NewsletterSubscriptionBloc>().add(\n                                  SubscriptionRequestEvent(\n                                    email: emailInputController.text,\n                                  ),\n                                );\n                            emailInputController.clear();\n                          }\n                        : null,\n                child: Builder(\n                  builder: (context) {\n                    switch (state.status) {\n                      case NewsletterSubscriptionStatus.loading:\n                        return const CircularProgressIndicator();\n                      case NewsletterSubscriptionStatus.success:\n                        return Row(\n                          mainAxisSize: MainAxisSize.min,\n                          children: [\n                            const Padding(\n                              padding: EdgeInsets.only(right: Paddings.small),\n                              child: Icon(Icons.done_all_rounded),\n                            ),\n                            Text(\n                              AppLocalizations.of(context)!\n                                  .thanksForRegistering,\n                            ),\n                          ],\n                        );\n                      default:\n                        return Text(\n                          AppLocalizations.of(context)!.register,\n                        );\n                    }\n                  },\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass NewsletterTextPrompt extends StatelessWidget {\n  const NewsletterTextPrompt({super.key, this.test});\n\n  final bool Function()? test;\n\n  @override\n  Widget build(BuildContext context) {\n    Function testHelper = test ?? () => true;\n\n    Widget child;\n    if (testHelper()) {\n      child = Text(\n        \"Thanks for registering to our newsletter!\",\n        style: Theme.of(context).textTheme.displayMedium!.copyWith(\n              fontWeight: FontWeight.bold,\n            ),\n      );\n    } else {\n      child = Column(\n        mainAxisAlignment: MainAxisAlignment.start,\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          Text(\n            AppLocalizations.of(context)!.invitingNewsLetter,\n            style: Theme.of(context).textTheme.bodyLarge,\n          ),\n          Text(\n            AppLocalizations.of(context)!.newsLetterWidgetTitle,\n            style: Theme.of(context).textTheme.headlineMedium,\n          )\n        ],\n      );\n    }\n\n    return child;\n  }\n}\n\n/// Return the right axis based on the the constraints and threshold.\n///\n/// If the constraints.maxWidth is upper than the threshold,\n/// it return [Axis.horizontal]. It return [Axis.vertical] in the else case.\nAxis evaluateAxis(\n  /// Constraints to evaluate with.\n  BoxConstraints constraints, {\n  /// The minimum required threshold to maintain the larger than state\n  double threshold = ScreenSizes.small,\n}) {\n  Axis axis;\n\n  if (constraints.maxWidth >= threshold) {\n    axis = Axis.horizontal;\n  } else {\n    axis = Axis.vertical;\n  }\n\n  return axis;\n}\n"
  },
  {
    "path": "lib/src/pages/articles/articles_page.dart",
    "content": "import 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter/material.dart';\n\nclass ArticlesPage extends StatefulWidget {\n  const ArticlesPage({super.key});\n\n  static const String routeName = '/articles';\n\n  @override\n  State<ArticlesPage> createState() => _ArticlesPageState();\n}\n\nclass _ArticlesPageState extends State<ArticlesPage> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: const AhlAppBar(),\n      body: Center(\n        child: Text(\n          'Article Space',\n          style: Theme.of(context).textTheme.displayLarge,\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/homepage/donation/donation_page.dart",
    "content": "import 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter/material.dart';\n\nclass DonationPage extends StatefulWidget {\n  const DonationPage({super.key});\n\n  static const String routeName = \"helpUs\";\n\n  @override\n  State<DonationPage> createState() => _DonationPageState();\n}\n\nclass _DonationPageState extends State<DonationPage> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: const AhlAppBar(),\n      body: Center(\n        child: Text(\n          \"Donation Page\",\n          style: Theme.of(context).textTheme.displayLarge,\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/homepage/hero_header/hero_header.dart",
    "content": "import 'package:ahl/src/utils/seo.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\n\nimport 'package:gap/gap.dart';\nimport 'package:go_router/go_router.dart';\n\nimport '../../prayers/prayers_page.dart';\nimport '../..//who_we_are/who_we_are.dart';\nimport '../../../utils/breakpoint_resolver.dart';\nimport '../../../../ahl_barrel.dart';\n\nclass HeroHeaderView extends StatelessWidget {\n  const HeroHeaderView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    // seo\n    setupSeo(context);\n\n    return LayoutBuilder(\n      builder: (context, constraints) {\n        if (constraints.maxWidth <= ScreenSizes.large) {\n          // HeroHeader fo mobile\n\n          return const MobileHeroHeader();\n        } else {\n          return const DefaultHeroHeader();\n        }\n      },\n    );\n  }\n}\n\nclass MobileHeroHeader extends StatefulWidget {\n  const MobileHeroHeader({\n    super.key,\n  });\n\n  @override\n  State<MobileHeroHeader> createState() => _MobileHeroHeaderState();\n}\n\nclass _MobileHeroHeaderState extends State<MobileHeroHeader> {\n  @override\n  Widget build(BuildContext context) {\n    //seo\n    setupSeo(context);\n    return Column(\n      children: [\n        // Hero header Image\n        // AnimatedContainer(\n        Container(\n          // duration: Durations.short1,\n          // curve: Curves.easeOut,\n          color: Theme.of(context).colorScheme.surfaceContainer,\n          constraints: const BoxConstraints(\n            minHeight: Sizes.mobileHeroHeaderImageHeight,\n          ),\n          child: Image.asset(\n            key: SeoKey(\n              TagType.img,\n              text: \"HeroHeader image\",\n              alt:\n                  \"A image with 3 part, a Dominican Sister praying on the left, Notre Dame de la Delivrande chapel in the midle, and smiling Saharoaloha' children on the right\",\n              src: AhlAssets.heroBk,\n            ),\n            AhlAssets.heroBk,\n          ),\n        ),\n        Container(\n          color: Theme.of(context).colorScheme.surfaceContainer,\n          // color: AhlTheme.yellowLight, //.withAlpha(0xB6),\n          // margin: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.72),\n          padding: const EdgeInsets.symmetric(\n            horizontal: Paddings.big,\n          ),\n          child: const HeroTextView(\n            needMargin: true,\n            margin: 0,\n          ),\n        ),\n      ],\n    );\n  }\n}\n\nclass HeroActions extends StatefulWidget {\n  const HeroActions({\n    super.key,\n    this.primaryCallback,\n    this.secondaryCallback,\n  });\n\n  final VoidCallback? primaryCallback;\n  final VoidCallback? secondaryCallback;\n\n  @override\n  State<HeroActions> createState() => _HeroActionsState();\n}\n\nclass _HeroActionsState extends State<HeroActions> {\n  void primaryAction() {\n    context.goNamed(PrayersPage.routeName);\n  }\n\n  void secondaryAction() {\n    context.goNamed(WhoWeArePage.routeName);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    //seo\n    setupSeo(context);\n\n    return Container(\n      key: SeoKey(TagType.div),\n      padding: const EdgeInsets.only(top: 30),\n      child: Wrap(\n        // mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n        // direction: ,\n        spacing: 20,\n        runSpacing: 20,\n        children: [\n          OutlinedButton(\n            key: SeoKey(TagType.a,\n                alt: \"Link to about us page\",\n                src: \"aujourdhuilavenir.org/aboutus\"),\n            onPressed: widget.secondaryCallback ?? secondaryAction,\n            child: Padding(\n              padding: const EdgeInsets.symmetric(\n                vertical: Paddings.small,\n              ),\n              child: Text(\n                AppLocalizations.of(context)!.aboutUs,\n                // overflow: TextOverflow.ellipsis,\n                textAlign: TextAlign.center,\n              ),\n            ),\n          ),\n          ElevatedButton(\n            key: SeoKey(TagType.a,\n                alt: \"Link to prayer space\",\n                text: AppLocalizations.of(context)!.priesSpace,\n                src: \"aujourdhuilavenir.org/prierSpace\"),\n            onPressed: widget.primaryCallback ?? primaryAction,\n            style: ElevatedButton.styleFrom(\n              foregroundColor: Theme.of(context).colorScheme.onPrimary,\n              backgroundColor: Theme.of(context).primaryColor,\n            ),\n            child: Padding(\n              padding: const EdgeInsets.symmetric(\n                vertical: Paddings.small,\n              ),\n              child: Text(\n                AppLocalizations.of(context)!.priesSpace,\n                // overflow: TextOverflow.ellipsis,\n                textAlign: TextAlign.center,\n              ),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass DefaultHeroHeader extends StatefulWidget {\n  const DefaultHeroHeader({\n    super.key,\n  });\n\n  @override\n  State<DefaultHeroHeader> createState() => _DefaultHeroHeaderState();\n}\n\nclass _DefaultHeroHeaderState extends State<DefaultHeroHeader> {\n  @override\n  Widget build(BuildContext context) {\n    // var screenWidth = MediaQuery.sizeOf(context).width;\n    return Container(\n      key: const Key(\"HeroHeader_Container\"),\n      constraints: BoxConstraints(\n        maxHeight: MediaQuery.of(context).size.height * 1.2,\n        maxWidth: ContentSize.maxWidth(\n          MediaQuery.of(context).size.width,\n        ),\n      ),\n      alignment: Alignment.center,\n      child: Stack(\n        children: [\n          // const HeroImageView(),\n          Align(\n            alignment: Alignment.bottomCenter,\n            child: Container(\n              constraints: const BoxConstraints(maxHeight: 470),\n              color: Theme.of(context)\n                  .colorScheme\n                  .surfaceContainer\n                  .withAlpha(0xB2),\n              padding:\n                  const EdgeInsets.symmetric(horizontal: Margins.extraLarge)\n                      .add(\n                const EdgeInsets.only(top: 45),\n              ),\n              alignment: Alignment.bottomCenter,\n              child: const HeroTextView(\n                alignment: Alignment.topCenter,\n              ),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass HeroImageView extends StatelessWidget {\n  const HeroImageView({\n    super.key,\n    this.isWithBorder = true,\n  });\n\n  final bool isWithBorder;\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      // color: AhlTheme.yellowLight,\n      // child: Container(\n      decoration: BoxDecoration(\n        borderRadius: isWithBorder\n            ? const BorderRadius.only(\n                bottomLeft: Radius.circular(BorderSizes.big),\n                bottomRight: Radius.circular(BorderSizes.big),\n              )\n            : null,\n        image: DecorationImage(\n          fit: BoxFit.cover,\n          image: AssetImage(AhlAssets.heroBk),\n        ),\n      ),\n      // ),\n    );\n  }\n}\n\nclass HeroTextView extends StatelessWidget {\n  const HeroTextView({\n    super.key,\n    this.needMargin = false,\n    this.alignment,\n    this.margin,\n  });\n\n  /// The margin is needed when the text should\n  /// go some pixel under the image\n  final bool needMargin;\n  final double? margin;\n  final AlignmentGeometry? alignment;\n\n  @override\n  Widget build(BuildContext context) {\n    return LayoutBuilder(builder: (context, constraints) {\n      TextStyle? explanationTheme = resolveForBreakPoint<TextStyle?>(\n        MediaQuery.of(context).size.width,\n        small: Theme.of(context).textTheme.bodyMedium,\n        medium: Theme.of(context).textTheme.bodyMedium,\n        other: Theme.of(context).textTheme.bodyLarge,\n      );\n\n      TextStyle? titleTheme = resolveForBreakPoint<TextStyle?>(\n        MediaQuery.of(context).size.width,\n        small: Theme.of(context).textTheme.displaySmall,\n        medium: Theme.of(context).textTheme.displayMedium,\n        other: Theme.of(context).textTheme.displayLarge,\n      );\n      TextStyle? subtitleTheme = resolveForBreakPoint<TextStyle?>(\n        MediaQuery.of(context).size.width,\n        small: Theme.of(context).textTheme.titleSmall,\n        medium: Theme.of(context).textTheme.titleMedium,\n        other: Theme.of(context).textTheme.titleLarge,\n      );\n      return Container(\n        alignment: alignment ?? Alignment.center,\n        margin: EdgeInsets.only(\n          top: needMargin ? margin ?? Margins.heroHeaderExtraTop : 0,\n        ),\n        child: Container(\n          constraints: const BoxConstraints(\n              maxWidth: HeroHeaderGeometry.heroHeaderExtrasWidth),\n          child: Column(\n            crossAxisAlignment: CrossAxisAlignment.center,\n            mainAxisSize: MainAxisSize.min,\n            mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n            children: [\n              const Gap(30),\n              Padding(\n                padding: const EdgeInsets.only(bottom: 0),\n                child: Text(\n                  AppLocalizations.of(context)!.heroTitle,\n                  textAlign: TextAlign.center,\n                  style: titleTheme,\n                ),\n              ),\n\n              const Gap(20),\n              // Padding(\n              //   padding: const EdgeInsets.only(bottom: Paddings.huge),\n              //   child:\n              Text(\n                AppLocalizations.of(context)!.heroHeaderSubtitle,\n                textAlign: TextAlign.center,\n                style: subtitleTheme,\n              ),\n              // ),\n              const Gap(20),\n              Text(\n                AppLocalizations.of(context)!.heroExplanation,\n                textAlign: TextAlign.center,\n                style: explanationTheme,\n              ),\n              const HeroActions(),\n            ],\n          ),\n        ),\n      );\n    });\n  }\n}\n\nclass ScrollIncitation extends StatefulWidget {\n  const ScrollIncitation({super.key});\n\n  @override\n  State<StatefulWidget> createState() {\n    return _ScrollIncitation();\n  }\n}\n\nclass _ScrollIncitation extends State<ScrollIncitation>\n    with SingleTickerProviderStateMixin {\n  late AnimationController controller;\n\n  @override\n  void initState() {\n    super.initState();\n    controller = AnimationController(\n      vsync: this,\n      duration: Durations.medium1,\n    )..repeat();\n\n    // controller.forward();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      alignment: Alignment.topCenter,\n      child: Container(\n        height: 500,\n        width: 10,\n        color: Theme.of(context).colorScheme.surface,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/homepage/homepage.dart",
    "content": "import 'dart:developer';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\nimport 'package:gap/gap.dart';\nimport 'package:meta_seo/meta_seo.dart';\nimport 'package:web/web.dart' as web;\n\nimport '../../widgets/widgets.dart';\nimport '../../article_view/view/article_view.dart';\nimport '../../pages/homepage/hero_header/hero_header.dart';\nimport '../../pages/homepage/welcoming/welcoming.dart';\nimport '../../newsletter/newsletter.dart';\nimport '../../partners/view.dart';\nimport '../../prayers_space/view.dart';\nimport '../../utils/breakpoint_resolver.dart';\nimport '../../../ahl_barrel.dart';\n\nimport '../../project_space/view.dart';\nimport '../../who_we_are/view.dart';\n\n/// Home page\n\nclass HomePage extends StatefulWidget {\n  static const String routeName = \"home\";\n\n  const HomePage({super.key});\n\n  @override\n  State<StatefulWidget> createState() {\n    return _HomePageState();\n  }\n}\n\nclass _HomePageState extends State<HomePage> {\n  static late ScrollController scrollController;\n\n  bool controllerIsAttached = false;\n\n  final List<Widget> _children = [\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const WelcomingView(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    Container(color: Colors.white, height: 4),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const HighlightArticleTile(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    Container(color: Colors.white, height: 4),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const PrayerSpaceView(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const ProjectsSpaceView(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const PartnersView(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const WhoWeAreSpace(),\n    Builder(builder: (context) => Gap(resolveSeparatorSize(context))),\n    const NewsLetterPrompt(),\n    const AhlFooter(),\n  ];\n\n  @override\n  void initState() {\n    super.initState();\n\n    scrollController = ScrollController(\n      onAttach: (position) async {\n        await Future.delayed(Duration.zero);\n        setState(\n          () => controllerIsAttached = true,\n        );\n      },\n      onDetach: (position) async {\n        await Future.delayed(Durations.short1);\n        setState(\n          () => controllerIsAttached = false,\n        );\n      },\n    );\n  }\n\n  void seoSetup() {\n    String title =\n        \"Aujourd'hui l'avenir | Mission des Sœurs Dominicaines Missionnaires De Notre Dame de la Delivrande à Madagascar\";\n    String description = \"\"\"\nAimer et Servir avec les sœurs Dominicaines Missionnaires de Notre Dame de la Délivrande à Saharoaloha Antsirabe. Solidarité et Prière pour Madagascar. Découvrer nos missions auprès des enfants, rejoignez nos prières quotidiennes et partagez la vie de notre communauté.\n\"\"\";\n    if (kIsWeb) {\n      log('start seo setup');\n      WidgetsBinding.instance.addPostFrameCallback((timeStamp) {\n        if (context.mounted) {\n          HeadTagUtil.setHead(\n            title: title,\n            description: description,\n            keywords: [\n              'Madagascar',\n              'Notre Dame de la Delivrande',\n              'Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande',\n            ],\n            // imageUrl: getImageUrl(article!),\n            url: \"https://aujourdhuilavenir.org/\",\n          );\n          CreateHtml.makeWidgetTree(context);\n        }\n      });\n      // Define MetaSEO object\n      MetaSEO meta = MetaSEO();\n\n      // set document title to article title\n      web.document.title = title;\n\n      // Set decription to article preview\n      meta.description(\n        description: description,\n      );\n\n      // add meta seo data for web app as you want\n      meta.ogTitle(ogTitle: title);\n      meta.keywords(\n          keywords:\n              \"Aimer et servir, Madagascar, Notre Dame de la Delivrande, Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande,\");\n      // meta.ogImage(ogImage: await getImageUrl(article!));\n    } else {\n      log('SEO setup is not supported on mobile');\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // seo setup\n    seoSetup();\n\n    /// Optimize hero header image.\n    precacheImage(AssetImage(AhlAssets.heroBk), context);\n\n    return LayoutBuilder(\n      key: const Key('main_scroll_view'),\n      builder: (BuildContext context, BoxConstraints constraints) {\n        return Scaffold(\n          endDrawer: constraints.maxWidth <= ScreenSizes.large\n              ? const AhlDrawer()\n              : null,\n          appBar: AhlAppBar(\n            key: SeoKey(\n              TagType.div,\n              text: \"Aujourd'hui l'avenir\",\n              alt: \"Web site title\",\n            ),\n          ),\n          // AppBar(\n          //   title: const AhlLogo(),\n          //   actions: [\n          //     TabBar(\n          //       tabs: [\n          //         Tab(\n          //           text: AppLocalizations.of(context)!.homeText,\n          //         ),\n          //         Tab(\n          //           text: AppLocalizations.of(context)!.aboutUs,\n          //         ),\n          //         Tab(\n          //           text: AppLocalizations.of(context)!.prayers,\n          //         ),\n          //         Tab(\n          //           text: AppLocalizations.of(context)!.ourProjects,\n          //         ),\n          //         Tab(\n          //           text: AppLocalizations.of(context)!.listening,\n          //         ),\n          //       ],\n          //     )\n          //   ],\n          // ),\n\n          // Here are placed all components that build the entire\n          // HomePage\n          body: Stack(\n            children: [\n              // const SingleChildScrollView(\n              // AnimatedPositioned(\n              //   duration: Durations.medium1,\n              //   // curve: Curves.easeInOut,\n              //   bottom: _bottom,\n\n              //   child:\n              (constraints.maxWidth > ScreenSizes.large)\n                  ? Align(\n                      alignment: Alignment.topCenter,\n                      child: Container(\n                        height: 700,\n                        constraints: BoxConstraints(\n                          maxWidth: resolveForBreakPoint(\n                            MediaQuery.of(context).size.width,\n                            // other: 1483,\n                            other: 1325,\n                            large: 925,\n                          ),\n                        ),\n                        child: Image.asset(\n                          AhlAssets.heroBk,\n                          key: SeoKey(\n                            TagType.img,\n                            src: \"./${AhlAssets.heroBk}\",\n                            text: \"Aimer et servir. Mission pour Madagascar\",\n                            alt:\n                                \"Hero background image: the 3 missions of Dominican sister of Delivrande: Praying, Serving and Helping\",\n                          ),\n                        ),\n                      ).animate().fadeIn(\n                            curve: Curves.easeIn,\n                            duration: Durations.long4,\n                          ),\n                      // ),\n                    )\n                  : const SizedBox.shrink(),\n              Scrollbar(\n                controller: scrollController,\n                // thumbVisibility: true,\n                trackVisibility: true,\n\n                thickness: 10,\n                child: ListView(\n                  addAutomaticKeepAlives: true,\n                  controller: scrollController,\n\n                  // itemCount: _children.length,\n                  // itemBuilder: (context, index) => _children[index],\n                  // separatorBuilder: (context, index) {\n                  //   if (index == _children.length - 2) {\n                  //     return const SizedBox.shrink();\n                  //   } else {\n                  //     return SizedBox.fromSize(\n                  //       size: const Size.fromHeight(Margins.extraLarge),\n                  //     );\n                  //   }\n                  // },\n                  restorationId: \"home_list_view\",\n\n                  children: [\n                    // HeroHeaderView(),\n                    // Container(\n                    //   margin: const EdgeInsets.only(\n                    //           top: Sizes.mobileHeroHeaderImageHeight)\n                    //       .add(\n                    //     const EdgeInsets.symmetric(\n                    //       horizontal: Paddings.big,\n                    //     ),\n                    //   ),\n                    //   child: const HeroTextView(\n                    //     needMargin: true,\n                    //     margin: 50,\n                    //   ),\n                    // ),\n                    const HeroHeaderView(),\n                    Container(\n                      constraints: const BoxConstraints(\n                          // maxHeight: 6000,\n                          ),\n                      // fix transparent background error.\n                      color: Theme.of(context).colorScheme.surfaceContainer,\n                      child: Column(\n                        mainAxisSize: MainAxisSize.min,\n                        key: const Key(\"main_homepage_column\"),\n                        children: _children,\n                      ),\n                    ),\n                  ],\n                  // child: Column(\n                  //   children: _children,\n                ),\n              ),\n\n              inConstructionPromotionalBar,\n            ],\n          ),\n        );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/homepage/welcoming/welcoming.dart",
    "content": "import 'dart:math';\n\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\n\nimport '../../../theme/theme.dart';\n\nclass WelcomingView extends StatelessWidget {\n  const WelcomingView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      margin: const EdgeInsets.symmetric(\n        horizontal: Margins.medium,\n      ).copyWith(bottom: 85),\n      child: const _WelcomingContent(),\n    );\n  }\n}\n\nclass _WelcomingContent extends StatelessWidget {\n  const _WelcomingContent();\n  @override\n  Widget build(BuildContext context) {\n    // Build html tree\n    WidgetsBinding.instance.addPostFrameCallback((timestamp) {\n      CreateHtml.makeWidgetTree(context);\n    });\n\n    String welcomingBody = AppLocalizations.of(context)!.welcomingBody;\n    String welcomingTitle = AppLocalizations.of(context)!.welcomingTitle;\n\n    double avatarWidth = 174;\n    double avatarHeight = 155;\n    // GlobalKey containerKey = GlobalKey(debugLabel: 'welcoming_container');\n    return LayoutBuilder(\n      builder: (context, constraints) {\n        return Stack(\n          clipBehavior: Clip.none,\n          children: [\n            Align(\n              alignment: Alignment.center,\n              child: Container(\n                // key: containerKey,\n                constraints: BoxConstraints(\n                  minWidth: 342,\n                  maxWidth:\n                      ContentSize.maxWidth(MediaQuery.of(context).size.width),\n                ),\n                padding: const EdgeInsets.all(Paddings.big)\n                    .copyWith(top: Paddings.big + Sizes.nddLogoSize / 2),\n                margin: const EdgeInsets.only(top: Sizes.nddLogoSize / 2),\n                alignment: Alignment.center,\n                decoration: BoxDecoration(\n                  color: AhlTheme.affiche,\n                  borderRadius: BorderRadius.circular(BorderSizes.medium),\n                ),\n                child: Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    Text(\n                      AppLocalizations.of(context)!.welcomingTitle,\n                      style: resolveHeadlineTextThemeForBreakPoints(\n                        MediaQuery.of(context).size.width,\n                        context,\n                      ),\n                      key: SeoKey(\n                        TagType.h2,\n                        text: welcomingTitle,\n                        alt: \"Welcoming\",\n                      ),\n                    ),\n                    SelectableText(\n                      '\\n$welcomingBody',\n                      key: SeoKey(TagType.p, text: welcomingBody),\n                      style: resolveBodyTextThemeForBreakPoints(\n                        MediaQuery.of(context).size.width,\n                        context,\n                      ),\n                    ),\n                    Container(\n                      // constraints: BoxConstraints(\n                      //   // minWidth: 480,\n                      //   maxWidth: constraints.maxWidth - 135,\n                      // ),\n                      padding: EdgeInsets.only(\n                        top: 45,\n                        right: resolveForBreakPoint<double>(\n                          MediaQuery.of(context).size.width,\n                          small: 0,\n                          other: avatarWidth / 2 + 140,\n                          medium: avatarWidth / 2 + 80,\n                        ),\n                      ),\n                      alignment: resolveForBreakPoint<AlignmentGeometry>(\n                        MediaQuery.of(context).size.width,\n                        small: Alignment.center,\n                        other: Alignment.centerRight,\n                      ),\n                      child: const Signature(),\n                    ),\n                    Visibility(\n                      visible: resolveForBreakPoint<bool>(\n                        MediaQuery.of(context).size.width,\n                        small: true,\n                        other: false,\n                      ),\n                      child: const SizedBox(\n                        height: 50,\n                      ),\n                    ),\n                  ],\n                ),\n              ),\n            ),\n            const Align(\n              alignment: Alignment.topCenter,\n              child: LogoNDD(),\n            ),\n            Positioned(\n              bottom:\n                  (-avatarHeight / 2) - 10, // avatarHeight is the image height\n              left: resolveForBreakPoint<double>(\n                MediaQuery.of(context).size.width,\n                small: constraints.maxWidth / 2 - avatarWidth / 2,\n                medium: constraints.maxWidth / 2 +\n                    min(\n                          MediaQuery.of(context).size.width,\n                          ContentSize.maxWidth(\n                              MediaQuery.of(context).size.width),\n                        ) /\n                        2 -\n                    50 -\n                    avatarWidth,\n                other: constraints.maxWidth / 2 +\n                    min(\n                          MediaQuery.of(context).size.width,\n                          ContentSize.maxWidth(\n                              MediaQuery.of(context).size.width),\n                        ) /\n                        2 -\n                    100 -\n                    avatarWidth,\n              ),\n              child: SizedBox(\n                width: avatarWidth,\n                child: Image.asset(\n                  AhlAssets.priorAvatar,\n                ),\n              ),\n            ),\n          ],\n        );\n      },\n    );\n  }\n}\n\nclass LogoNDD extends StatelessWidget {\n  const LogoNDD({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    // seo: Html element creation\n    WidgetsBinding.instance.addPostFrameCallback((timestamp) {\n      CreateHtml.makeWidgetTree(context);\n    });\n\n    return SizedBox.square(\n      dimension: Sizes.nddLogoSize,\n      child: Image.asset(\n        key: SeoKey(TagType.img,\n            alt:\n                \"Logo des Soeurs Dominicaines Missionnaires de Notre Dame de la Delivrande\",src: AhlAssets.logoNdd,),\n        filterQuality: FilterQuality.high,\n        isAntiAlias: true,\n        AhlAssets.logoNdd,\n      ),\n    );\n  }\n}\n\nclass Signature extends StatelessWidget {\n  const Signature({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    //seo: create html tag\n    WidgetsBinding.instance.addPostFrameCallback((timestamp) {\n      CreateHtml.makeWidgetTree(context);\n    });\n\n    String title = '${AppLocalizations.of(context)!.sister} Michèle Marie, o.p';\n\n    return RichText(\n        key:SeoKey(TagType.p),\n      text: TextSpan(\n        text: title,\n        style: AhlTheme.name,\n        children: [\n          TextSpan(\n            text: '\\n${AppLocalizations.of(context)!.prior}',\n            style: AhlTheme.peopleTitle,\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/novena_page/novena_article_extension.dart",
    "content": ""
  },
  {
    "path": "lib/src/pages/novena_page/novena_page.dart",
    "content": "import 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/article_view/view/article_view.dart';\nimport 'package:ahl/src/newsletter/newsletter.dart';\nimport 'package:ahl/src/pages/homepage/homepage.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:gap/gap.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:lottie/lottie.dart';\n\nimport '../../article_view/state/state.dart';\n\nclass NovenaPage extends StatefulWidget {\n  const NovenaPage({\n    super.key,\n    required this.novena,\n    this.collection = \"novena\",\n  }) : novenaId = null;\n\n  const NovenaPage.fromId({\n    super.key,\n    required this.novenaId,\n    this.collection = \"novena\",\n  }) : novena = null;\n\n  static const routeName = 'novena';\n  final Article? novena;\n  final String? novenaId;\n  final String collection;\n\n  @override\n  State<NovenaPage> createState() => _NovenaPageState();\n}\n\nclass _NovenaPageState extends State<NovenaPage> {\n  @override\n  void initState() {\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    if (widget.novena != null) {\n      if (widget.novena!.relations![0]['type'] != 'novena') {\n        // Future.microtask(() => context.go('/articles/${widget.novena!.id}'));\n        return ArticleContentPage(\n          article: widget.novena,\n          collection: widget.collection,\n        );\n      }\n      return NovenaContentView(novena: widget.novena!);\n    } else {\n      context.read<ArticleBloc>().add(\n            GetArticleByIdEvent(\n                id: widget.novenaId, collection: widget.collection),\n          );\n      return BlocBuilder<ArticleBloc, ArticleState<Article>>(\n        buildWhen: (previous, current) =>\n            previous.articles?[widget.novenaId] == null,\n        builder: (context, state) {\n          Article? novena = state.articles?[widget.novenaId];\n\n          if (novena != null) {\n            if (novena.relations![0]['type'] != 'novena') {\n              // Future.microtask(() => context.go('/articles/${widget.novena!.id}'));\n              return ArticleContentPage(\n                key: ValueKey(\"article_${novena.id}\"),\n                article: novena,\n                collection: widget.collection,\n              );\n            }\n            return NovenaContentView(\n              novena: novena,\n              collection: widget.collection,\n            );\n          } else {\n            if (state.status == ArticleStatus.failed && novena == null) {\n              return FutureBuilder(\n                future: Future(\n                  () => context.goNamed(HomePage.routeName),\n                ),\n                builder: (_, __) => const SizedBox.shrink(),\n              );\n            }\n            return Scaffold(\n              body: Center(\n                child: LottieBuilder.asset('animations/loading.json'),\n              ),\n            );\n          }\n        },\n      );\n    }\n  }\n}\n\nclass NovenaContentView extends StatefulWidget {\n  const NovenaContentView({\n    super.key,\n    required this.novena,\n    this.collection = \"novena\",\n  });\n  final Article novena;\n  final String collection;\n\n  @override\n  State<NovenaContentView> createState() {\n    return _NovenaContentViewState();\n  }\n\n  /// The current day of the novena\n  int get currentDay {\n    return sortedDaysId.indexOf(novena.id) + 1;\n  }\n\n  /// A list of all days that is sorted.\n  List<String> get sortedDaysId {\n    var sortedDays = days.keys.toList();\n    sortedDays.sort();\n    List<String> sortedDaysId = [];\n    for (String key in sortedDays) {\n      sortedDaysId.add(days[key]);\n    }\n    return sortedDaysId;\n  }\n\n  /// A Map of all the novena document for upcoming and past days.\n  Map<String, dynamic> get days {\n    return novena.relations![0]['days'] as Map<String, dynamic>;\n  }\n\n  /// A list of all the novena document for upcoming and past days.\n  List<String> get daysId {\n    List<String> daysId = [];\n    for (int i = 1; i <= days.length; i++) {\n      String novenaDayId = days['day_$i'] ?? \"\";\n      if (novenaDayId.isNotEmpty) {\n        daysId.add(novenaDayId);\n      }\n    }\n\n    return daysId;\n  }\n\n  List<Widget> buildNovenaDaysArticleTiles(\n    BuildContext context, {\n    void Function(String? novenaId)? callback,\n  }) {\n    List<Widget> cards = [];\n\n    for (String novenaId in sortedDaysId) {\n      int day = sortedDaysId.indexOf(novenaId) + 1;\n      cards.add(\n        Container(\n          constraints: const BoxConstraints(\n            maxHeight: 425,\n            maxWidth: 330,\n          ),\n          alignment: Alignment.center,\n          child: Container(\n            margin: const EdgeInsets.symmetric(horizontal: Paddings.medium + 3),\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(MediaQuery.sizeOf(context).width),\n            ),\n            child: CardArticleTile.fromId(\n              preview: \"\",\n              label: \"Neuvaine - Jour $day\",\n              callback: () {\n                if (callback != null) {\n                  callback(novenaId);\n                }\n              },\n              direction: Axis.vertical,\n              articleId: novenaId,\n              collection: collection,\n            ),\n          ),\n        ),\n      );\n    }\n    return cards;\n  }\n}\n\nclass _NovenaContentViewState extends State<NovenaContentView> {\n  late ScrollController controller;\n\n  late ScrollController daysController;\n\n  @override\n  void initState() {\n    super.initState();\n    controller = ScrollController(\n      initialScrollOffset: 0,\n      keepScrollOffset: false,\n      // onAttach: (position) => controller.animateTo(\n      //   0,\n      //   duration: Durations.medium3,\n      //   curve: Curves.easeInOut,\n      // ),\n    );\n\n    daysController = ScrollController();\n  }\n\n  @override\n  void dispose() {\n    daysController.dispose();\n    controller.dispose();\n\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // Future.microtask(\n    //   () => controller.animateTo(\n    //     0,\n    //     duration: Durations.extralong1,\n    //     curve: Curves.easeInOut,\n    //   ),\n    // );\n\n    Size screenSize = MediaQuery.sizeOf(context);\n\n    String label = 'Neuvaine - Jour ${widget.currentDay}';\n\n    PreferredSizeWidget appBar = AhlAppBar(\n      preferredSize: const Size.fromHeight(75 + 36),\n      bottomBar: Container(\n        // padding: const EdgeInsets.all(Paddings.small),\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(screenSize.width),\n        ),\n        child: PopupMenuButton(\n          child: DefaultTextStyle(\n            style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                  color: Theme.of(context).colorScheme.primary,\n                ),\n            child: Row(\n              children: [\n                Icon(\n                  Icons.keyboard_arrow_down_rounded,\n                  color: Theme.of(context).colorScheme.primary,\n                ),\n                Text(label),\n              ],\n            ),\n          ),\n          itemBuilder: (context) => List.generate(\n            widget.sortedDaysId.length,\n            (index) => PopupMenuItem(\n              child: Text('Jour ${index + 1}'),\n              onTap: () {\n                context.goNamed(\n                  NovenaPage.routeName,\n                  pathParameters: {\"novenaId\": widget.sortedDaysId[index]},\n                  extra: context\n                      .read<ArticleBloc>()\n                      .state\n                      .articles?[widget.sortedDaysId[index]],\n                );\n                controller.animateTo(\n                  0,\n                  duration: Durations.medium4,\n                  curve: Curves.easeInOut,\n                );\n              },\n            ),\n          ),\n        ),\n      ),\n    );\n\n    return Scaffold(\n      appBar: appBar,\n      endDrawer: const AhlDrawer(),\n      body: ListView(\n        controller: controller,\n        addAutomaticKeepAlives: true,\n        cacheExtent: 6000,\n        children: [\n          ArticleContentView(\n            label: label,\n            article: widget.novena,\n            collection: widget.collection,\n          ),\n          Gap(\n            resolveSeparatorSize(context),\n          ),\n          RelatedArticles(\n            article: widget.novena,\n            collection: widget.collection,\n          ),\n          Gap(\n            resolveSeparatorSize(context),\n          ),\n\n          /// related article place\n          /// newsletter prompt\n          const NewsLetterPrompt(),\n          Gap(\n            resolveSeparatorSize(context),\n          ),\n          Container(\n            alignment: Alignment.center,\n            constraints: BoxConstraints(\n              maxHeight: 480,\n              maxWidth: MediaQuery.sizeOf(context).width,\n            ),\n            child: ListView(\n              addAutomaticKeepAlives: true,\n              controller: daysController,\n              scrollDirection: Axis.horizontal,\n              children: widget.buildNovenaDaysArticleTiles(\n                context,\n                callback: (novenaId) {\n                  context.goNamed(\n                    NovenaPage.routeName,\n                    pathParameters: {'novenaId': novenaId!},\n                  );\n                  controller.animateTo(0,\n                      duration: Durations.medium4, curve: Curves.easeInOut);\n                },\n              ),\n            ),\n          ),\n          Container(\n            alignment: Alignment.center,\n            child: Container(\n              constraints: const BoxConstraints(maxWidth: 160),\n              decoration: BoxDecoration(\n                color: Theme.of(context).colorScheme.surface,\n                borderRadius: BorderRadius.circular(BorderSizes.medium),\n              ),\n              alignment: Alignment.center,\n              child: Row(\n                mainAxisAlignment: MainAxisAlignment.spaceBetween,\n                // mainAxisSize: MainAxisSize.min,\n                children: [\n                  IconButton(\n                    onPressed: () {\n                      double newOffset = daysController.offset - 330;\n                      daysController.animateTo(newOffset,\n                          duration: Durations.medium2, curve: Curves.easeInOut);\n                    },\n                    icon: const Icon(Icons.arrow_back_rounded),\n                  ),\n                  IconButton(\n                    onPressed: () {\n                      double newOffset = daysController.offset + 330;\n\n                      daysController.animateTo(newOffset,\n                          duration: Durations.medium2, curve: Curves.easeInOut);\n                    },\n                    icon: const Icon(Icons.arrow_forward_rounded),\n                  ),\n                ],\n              ),\n            ),\n          ),\n\n          Gap(\n            resolveSeparatorSize(context),\n          ),\n\n          /// other day\n          /// Ahl footer\n          const AhlFooter(),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/prayers/prayers_page.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:gap/gap.dart';\n\nimport 'package:ahl/src/newsletter/newsletter.dart';\nimport 'package:ahl/src/prayers_space/view.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\nimport '../../../ahl_barrel.dart';\nimport '../../utils/breakpoint_resolver.dart';\nimport '../projects/projects_page.dart';\n\nclass PrayersPage extends StatefulWidget {\n  const PrayersPage({super.key});\n\n  static const String routeName = 'prayers';\n\n  @override\n  State<PrayersPage> createState() => _PrayersPageState();\n}\n\nclass _PrayersPageState extends State<PrayersPage> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: const AhlAppBar(),\n      body: ListView(\n        children: [\n          const PrayerSpaceView(),\n          Gap(resolveSeparatorSize(context)),\n          const AhlDivider.symmetric(\n            space: 25,\n          ),\n          Gap(resolveSeparatorSize(context)),\n          SuggestionSection(\n            callback: () => Navigator.pushNamed(context, PrayersPage.routeName),\n            image: Future.value(\n              AssetImage(\n                AhlAssets.prayersSpaceCover,\n              ),\n            ),\n            child: Text(\n              AppLocalizations.of(context)!.prayerSpace,\n            ),\n          ),\n          Gap(resolveSeparatorSize(context)),\n          SuggestionSection(\n            callback: () =>\n                Navigator.pushNamed(context, ProjectsPage.routeName),\n            image: Future.value(\n              AssetImage(\n                AhlAssets.projectSpaceCover,\n              ),\n            ),\n            child: Text(\n              AppLocalizations.of(context)!.projectSpaceTitle,\n            ),\n          ),\n          Gap(resolveSeparatorSize(context)),\n          const AhlDivider.symmetric(\n            space: 25,\n          ),\n          Gap(resolveSeparatorSize(context)),\n          const NewsLetterPrompt(),\n          const AhlFooter(),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/projects/project_page_view.dart",
    "content": "import 'package:ahl/ahl_barrel.dart';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/theme/theme.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'package:flutter_svg/flutter_svg.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_animate/flutter_animate.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:gap/gap.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:lottie/lottie.dart';\n\nimport '../../article_view/state/state.dart';\nimport '../../article_view/view/article_view.dart';\nimport '../../newsletter/newsletter.dart';\nimport '../../pages/homepage/donation/donation_page.dart';\nimport '../../pages/projects/projects_page.dart';\nimport '../../project_space/bloc.dart';\nimport '../../widgets/widgets.dart';\n\nclass ProjectPageView extends StatelessWidget {\n  const ProjectPageView({\n    super.key,\n    this.project,\n    this.collection = \"projects\",\n    this.projectId,\n  }) : assert(project != null || projectId != null,\n            \"On the project or projectId must be supplied\"); // change this to the build relations\n\n  /// The current project to be displayed\n  final Article? project;\n  final String collection;\n  final String? projectId;\n\n  @override\n  Widget build(BuildContext context) {\n    if (project != null) {\n      return _ProjectPageContentView(project: project);\n    }\n    // When no project is provided but instead, a projectId\n    return BlocBuilder<ProjectBloc, ArticleState<Article>>(\n      buildWhen: (previous, current) {\n        bool needCallBuilder = true;\n\n        if (previous.articles == null) {\n          needCallBuilder = true;\n        } else {\n          needCallBuilder = !previous.articles!.keys.contains(projectId);\n        }\n\n        return needCallBuilder;\n      },\n      builder: (context, state) {\n        context.read<ProjectBloc>().add(GetArticleByIdEvent(id: projectId));\n        // get project\n        var project = state.articles?[projectId!];\n\n        // Make decision based on UI\n\n        // 1 case: every thing works fine:\n        //    - a real project is returned by project bloc\n        if (project != null) {\n          return _ProjectPageContentView(\n            project: project,\n            collection: collection,\n          );\n        } else if (state.status == ArticleStatus.initial) {\n          return Container(\n            color: AhlTheme.background,\n            child: Center(\n              child: LottieBuilder.asset(\n                'animations/loading.json',\n                repeat: true,\n              ),\n            ),\n          );\n        } else {\n          return Container(\n            color: AhlTheme.background,\n            child: Center(\n              child: LottieBuilder.asset(\n                'animations/loading.json',\n                repeat: true,\n              ),\n            ),\n          );\n        }\n      },\n    );\n  }\n}\n\nclass _ProjectPageContentView extends StatefulWidget {\n  const _ProjectPageContentView({\n    required this.project,\n    this.collection = \"projects\",\n  });\n  final Article? project;\n  final String collection;\n\n  @override\n  State<_ProjectPageContentView> createState() =>\n      _ProjectPageContentViewState();\n}\n\nclass _ProjectPageContentViewState extends State<_ProjectPageContentView>\n    with SingleTickerProviderStateMixin {\n  late TabController _tabController;\n  late ScrollController _descriptionScrollController;\n  late ScrollController _newsScrollController;\n  late bool needDisplayTitleInAppBar;\n\n  @override\n  void initState() {\n    super.initState();\n    _tabController = TabController(length: 2, vsync: this);\n\n    _descriptionScrollController = ScrollController();\n    _newsScrollController = ScrollController();\n\n    needDisplayTitleInAppBar = false;\n    _descriptionScrollController.addListener(updateNeedDisplayTitle);\n  }\n\n  void updateNeedDisplayTitle() {\n    if (_descriptionScrollController.offset >= 64) {\n      if (!needDisplayTitleInAppBar) {\n        setState(() => needDisplayTitleInAppBar = true);\n      }\n    } else if (needDisplayTitleInAppBar) {\n      setState(() => needDisplayTitleInAppBar = false);\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    \n    // var screenWidth = MediaQuery.sizeOf(context).width;\n    \n    var title = widget.project?.title;\n\n    // var value = needDisplayTitleInAppBar ? 1.0 : 0.0;\n    return Scaffold(\n      key: ValueKey(widget.project),\n      appBar: AhlAppBar(\n        preferredSize: Size.fromHeight(\n          (needDisplayTitleInAppBar) ? 75 + 64 : 75 + 29,\n        ),\n        bottomBar: Flexible(\n          flex: 1,\n          child: Column(\n            children: [\n              Align(\n                alignment: Alignment.centerLeft,\n                child: Container(\n                  // constraints: const BoxConstraints(maxWidth: 1024),\n                  // width: screenWidth / 2 - 20,\n                  alignment: const Alignment(-0.5, 0),\n                  // margin: EdgeInsets.symmetric(\n                  //   horizontal: resolveForBreakPoint(\n                  //     screenWidth,\n                  //     other: Margins.small,\n                  //     extraHuge: Margins.extraHuge,\n                  //     huge: Margins.huge,\n                  //     extraLarge: Margins.extraLarge,\n                  //     large: Margins.large,\n                  //   ),\n                  // ),\n                  // padding: EdgeInsets.symmetric(\n                  //   horizontal: resolveForBreakPoint(\n                  //     screenWidth,\n                  //     small: Margins.small,\n                  //     medium: Margins.small,\n                  //     large: Margins.large,\n                  //     extraLarge: Margins.extraLarge,\n                  //     other: Margins.huge,\n                  //   ),\n                  // ),\n                  child: AnimatedCrossFade(\n                    firstChild: const SizedBox.shrink(),\n                    secondChild: Text(\n                      title!,\n                      style: Theme.of(context).textTheme.titleMedium,\n                    ),\n                    crossFadeState: !needDisplayTitleInAppBar\n                        ? CrossFadeState.showFirst\n                        : CrossFadeState.showSecond,\n                    duration: Durations.medium1,\n                    layoutBuilder:\n                        (topChild, topChildKey, bottomChild, bottomChildKey) {\n                      return Container(\n                        key: topChildKey,\n                        child: topChild\n                            .animate(\n                              autoPlay: false,\n                              target: needDisplayTitleInAppBar ? 1 : 0,\n                            )\n                            .fadeIn()\n                            .slideY(begin: 1),\n                      );\n                    },\n                  ),\n                ),\n              ),\n              // Container(\n              //         child: Visibility(\n              //             visible: needDisplayTitleInAppBar,\n              //             child: Text(\n              //               title!,\n              //               style: Theme.of(context).textTheme.titleLarge,\n              //             )))\n              //     .animate(\n              //       autoPlay: false,\n              //       target: needDisplayTitleInAppBar ? 1 : 0,\n              //     )\n              //     .fadeIn()\n              //     .slideY(begin: 1),\n              TabBar(\n                controller: _tabController,\n                tabs: const [\n                  Tab(\n                    text: \"Description\",\n                  ),\n                  Tab(\n                    text: \"Actualités\",\n                  ),\n                ],\n              ),\n            ],\n          ),\n        ),\n      ),\n      body: (widget.project != null)\n          ? TabBarView(\n              controller: _tabController,\n              children: [\n                ProjectDescriptionContentView(\n                  key: ValueKey(\"${widget.project?.id}_description\"),\n                  article: widget.project!,\n                  scrollController: _descriptionScrollController,\n                ),\n                ProjectNewsView(\n                  key: ValueKey(\"${widget.project?.id}_news\"),\n                  scrollController: _newsScrollController,\n                ),\n              ],\n            )\n          : Builder(\n              builder: (context) {\n                ScaffoldMessenger.maybeOf(context)?.showSnackBar(\n                  SnackBar(\n                    content: Container(\n                      color: Theme.of(context).colorScheme.surfaceContainerHigh,\n                      child: DefaultTextStyle(\n                        style: Theme.of(context)\n                            .textTheme\n                            .labelMedium!\n                            .copyWith(\n                              color: Theme.of(context).colorScheme.onSurface,\n                            ),\n                        child: Row(\n                          children: [\n                            const Text(\n                              \"Le contenu est introuvable.\",\n                            ),\n                            IconButton(\n                              onPressed: () => context.pop(),\n                              icon: Icon(\n                                Icons.close_rounded,\n                                color: Theme.of(context).colorScheme.onSurface,\n                              ),\n                            ),\n                          ],\n                        ),\n                      ),\n                    ),\n                  ),\n                );\n                context.goNamed(ProjectsPage.routeName);\n                return const Center(\n                  child: Text(\"Project non disponible.\"),\n                );\n              },\n            ),\n      floatingActionButton: FloatingActionButton.small(\n        backgroundColor: Theme.of(context).colorScheme.surfaceContainer,\n        child: SizedBox.square(\n          dimension: IconSizes.medium,\n          child: SvgPicture.asset('images/SVG/dons_alt.svg'),\n        ),\n        onPressed: () {\n          Navigator.pushNamed(context, DonationPage.routeName,\n              arguments: widget.project);\n        },\n      ),\n    );\n  }\n}\n\nclass ProjectDescriptionContentView extends StatelessWidget {\n  const ProjectDescriptionContentView({\n    super.key,\n    required Article article,\n    this.scrollController,\n  }) : _currentArticle = article;\n\n  final Article _currentArticle;\n  final ScrollController? scrollController;\n\n  Article get currentArticle => _currentArticle;\n\n  Widget buildSuggestions(BuildContext context) {\n    return BlocBuilder<ProjectBloc, ArticleState<Article>>(\n      key: ValueKey(\"suggestion_${currentArticle.id}\"),\n      buildWhen: (previous, currentArticle) {\n        bool isUnique = false;\n        bool isCorrectlyCharged = false;\n        if (previous.status == ArticleStatus.succeed) {\n          if (previous.articles!.keys.length <= 1) {\n            isUnique = true;\n          } else {\n            isCorrectlyCharged = true;\n          }\n        }\n\n        return !isUnique || !isCorrectlyCharged;\n      },\n      builder: (context, state) {\n        context.read<ProjectBloc>().add(\n              const GetArticleListEvent(\n                foldLength: maxSuggestionArticle,\n              ),\n            );\n        Map<String, Article>? otherArticles =\n            context.read<ProjectBloc>().state.articles;\n        List<Widget> projectCards = [];\n        if (otherArticles != null || otherArticles!.keys.isNotEmpty) {\n          for (String articleId in otherArticles.keys) {\n            if (articleId != currentArticle.id) {\n              projectCards.add(\n                ProjectCard(article: otherArticles[articleId]!),\n              );\n            }\n          }\n        }\n        return Wrap(children: projectCards);\n      },\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // List<Widget> suggestion = context.read<ProjectBloc>().state.articles?.map<Widget>((element)=>).toList();\n    return ListView(\n      controller: scrollController,\n      addAutomaticKeepAlives: true,\n      children: [\n        ArticleContentView(\n          isProject: true,\n          article: currentArticle,\n          collection: \"projects\",\n        ),\n        Gap(\n          resolveSeparatorSize(context),\n        ),\n        const NewsLetterPrompt(),\n        Gap(resolveSeparatorSize(context)),\n        const AhlDivider(leading: 0, trailing: 0),\n        Gap(resolveSeparatorSize(context)),\n        Center(\n          child: ConstrainedBox(\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(MediaQuery.sizeOf(context).width),\n            ),\n            child: buildSuggestions(context),\n          ),\n        ),\n        Gap(resolveSeparatorSize(context)),\n        const AhlDivider(leading: 0, trailing: 0),\n        Gap(resolveSeparatorSize(context)),\n        const AhlFooter(),\n      ],\n    );\n  }\n}\n\nclass ProjectNewsView extends StatelessWidget {\n  const ProjectNewsView({\n    super.key,\n    this.scrollController,\n  });\n\n  final ScrollController? scrollController;\n\n  static List<Article> buildRelatedArticle(Article article) {\n    List<Article> relatedArticles = [];\n\n    //  building articles;\n    //todo: replace with the real implementation\n    relatedArticles.addAll(\n      [\n        const Article(\n          id: 'Fête de fin d\\'année',\n          releaseDate: '22/06/2024',\n          contentPath: 'fete_fin_d\\'annee.md',\n          title: 'Fête de fin d\\'année Cantine',\n        ),\n        const Article(\n          id: 'Rapport fin',\n          releaseDate: '17/07/2024',\n          contentPath: 'rapport.md',\n          title: 'Rapport Cantine 2023-2024',\n        ),\n      ],\n    );\n\n    return relatedArticles;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // List<Widget> suggestion = context.read<ProjectBloc>().state.articles?.map<Widget>((element)=>).toList();\n    return ListView(\n      controller: scrollController,\n      children: [\n        Container(\n          alignment: Alignment.center,\n          height: 500,\n          child: Text(\n            AppLocalizations.of(context)!.availableSoon,\n            style: Theme.of(context).textTheme.headlineMedium,\n          ),\n        ),\n        const NewsLetterPrompt(),\n        const AhlDivider(leading: 0, trailing: 0),\n        //  ...suggestion,\n        const AhlDivider(leading: 0, trailing: 0),\n        const AhlFooter(),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/projects/projects_page.dart",
    "content": "import 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/article_view/state/state.dart';\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:ahl/src/pages/prayers/prayers_page.dart';\nimport 'package:ahl/src/pages/who_we_are/who_we_are.dart';\nimport 'package:ahl/src/partners/view.dart';\nimport 'package:ahl/src/project_space/bloc.dart';\nimport 'package:ahl/src/project_space/view.dart';\nimport 'package:ahl/src/theme/theme.dart';\nimport 'package:ahl/src/utils/storage_utils.dart';\nimport 'package:ahl/src/who_we_are/view.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'package:gap/gap.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:session_storage/session_storage.dart';\n\n\nclass ProjectsPage extends StatefulWidget {\n  const ProjectsPage({super.key});\n\n  /// projects\n  static const String routeName = 'projects';\n  static ScrollController controller = ScrollController();\n\n  @override\n  State<ProjectsPage> createState() => _ProjectsPageState();\n}\n\nclass _ProjectsPageState extends State<ProjectsPage> {\n  @override\n  void initState() {\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      endDrawer: const AhlDrawer(),\n      appBar: const AhlAppBar(),\n\n      /// The project and all page are organized as list views\n      /// and individual components that follows each over.\n      body: ListView(\n        controller: ProjectsPage.controller,\n        children: [\n          const HeroImage(),\n          const Gap(45),\n          const Header(),\n          const Gap(50),\n          const PartnersView(),\n          const Gap(50),\n          const InProgressProjectListView(),\n          const Gap(50),\n          const AhlDivider.symmetric(\n            space: 25,\n          ),\n          const Gap(25),\n          SuggestionSection(\n            callback: () =>\n                Navigator.pushNamed(context, WhoWeArePage.routeName),\n            child: Text(\n              AppLocalizations.of(context)!.whoWeAre,\n            ),\n          ),\n          Gap(resolveSeparatorSize(context)),\n          SuggestionSection(\n            callback: () => Navigator.pushNamed(context, PrayersPage.routeName),\n            image: Future.value(\n              AssetImage(\n                AhlAssets.prayersSpaceCover,\n              ),\n            ),\n            child: Text(\n              AppLocalizations.of(context)!.prayerSpace,\n            ),\n          ),\n          Gap(resolveSeparatorSize(context)),\n          const AhlDivider.symmetric(\n            space: 25,\n          ),\n          Gap(resolveSeparatorSize(context)),\n          const AhlFooter(),\n        ],\n      ),\n    );\n  }\n}\n\nclass AhlDivider extends StatelessWidget {\n  const AhlDivider({\n    super.key,\n    required this.leading,\n    required this.trailing,\n    this.thickness,\n    this.isSized = true,\n  });\n\n  const AhlDivider.symmetric({\n    super.key,\n    required double space,\n    this.thickness,\n    this.isSized = true,\n  })  : leading = space,\n        trailing = space;\n\n  final double leading;\n  final double trailing;\n  final double? thickness;\n  final bool isSized;\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      child: Container(\n        constraints: (isSized)\n            ? BoxConstraints(\n                maxWidth:\n                    ContentSize.maxWidth(MediaQuery.of(context).size.width),\n              )\n            : null,\n        margin: EdgeInsets.only(\n          left: leading,\n          right: trailing,\n        ),\n        child: Container(\n          height: thickness ?? 5,\n          color: AhlTheme.yellowRelax,\n        ),\n      ),\n    );\n  }\n}\n\nclass SuggestionSection extends StatefulWidget {\n  const SuggestionSection({\n    super.key,\n    this.image,\n    required this.callback,\n    this.child,\n  });\n\n  final Future? image;\n  final VoidCallback callback;\n  final Widget? child;\n\n  @override\n  State<StatefulWidget> createState() => _SuggestionSectionState();\n}\n\nclass _SuggestionSectionState extends State<SuggestionSection>\n    with AutomaticKeepAliveClientMixin {\n  late Future image;\n\n  static const String coverImageKey = 'coverImage';\n\n  @override\n  void initState() {\n    image = widget.image ?? getImage();\n    super.initState();\n  }\n\n  Future<Uint8List?> getImage() async {\n    final cache = SessionStorage();\n\n    return await WhoWeAreTileState.getImage().then((value) {\n      cache[coverImageKey] = 'loaded';\n      return value;\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n    return FutureBuilder(\n      future: image,\n      builder: (context, snapshot) {\n        return Align(\n          child: Container(\n            margin: const EdgeInsets.symmetric(horizontal: Margins.small),\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(\n                MediaQuery.of(context).size.width,\n              ),\n            ),\n            child: ElevatedButton(\n              style: ElevatedButton.styleFrom(\n                // overlayColor: Colors.black26,\n                backgroundBuilder: (context, states, child) {\n                  return Align(\n                    child: AnimatedContainer(\n                      duration: Durations.long1,\n                      curve: Curves.easeInOut,\n                      height: 150,\n                      decoration: (snapshot.hasData)\n                          ? BoxDecoration(\n                              image: DecorationImage(\n                                alignment: const Alignment(-1, -0.3),\n                                image: (snapshot.data is ImageProvider)\n                                    ? snapshot.data!\n                                    : MemoryImage(snapshot.data!),\n                                fit: BoxFit.cover,\n                              ),\n                            )\n                          : null,\n                      alignment: Alignment.center,\n                      child: Container(\n                        color: (snapshot.hasData) ? Colors.black38 : null,\n                        alignment: Alignment.center,\n                        child: DefaultTextStyle(\n                          style: Theme.of(context)\n                              .textTheme\n                              .titleLarge!\n                              .copyWith(\n                                  color: (snapshot.hasData)\n                                      ? Theme.of(context).colorScheme.onPrimary\n                                      : null),\n                          child: child ?? const SizedBox.shrink(),\n                        ),\n                      ),\n                    ),\n                  );\n                },\n              ),\n              onPressed: widget.callback,\n              child: widget.child,\n            ),\n          ),\n        );\n      },\n    );\n  }\n\n  @override\n  bool get wantKeepAlive => SessionStorage()[coverImageKey] != null;\n}\n\nclass HeroImage extends StatelessWidget {\n  const HeroImage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      child: Container(\n        margin: const EdgeInsets.symmetric(\n          horizontal: Margins.small,\n        ),\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(\n            MediaQuery.of(context).size.width,\n          ),\n          maxHeight: resolveForBreakPoint(\n            MediaQuery.of(context).size.width,\n            other: 300,\n            small: 133,\n            medium: 133,\n          ),\n        ),\n        decoration: BoxDecoration(\n          borderRadius: BorderRadius.circular(\n            resolveForBreakPoint(\n              MediaQuery.of(context).size.width,\n              other: BorderSizes.huge,\n              small: BorderSizes.small,\n              medium: BorderSizes.small,\n            ),\n          ),\n          image: DecorationImage(\n            fit: BoxFit.contain,\n            image: AssetImage(\n              AhlAssets.projectSpaceCover,\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass Header extends StatelessWidget {\n  const Header({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      child: Container(\n        margin: const EdgeInsets.symmetric(\n          horizontal: Margins.small,\n        ),\n        alignment: Alignment.center,\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n        ),\n        child: Column(\n          crossAxisAlignment: CrossAxisAlignment.center,\n          children: [\n            Text(\n              AppLocalizations.of(context)!.projectLongTitle,\n              style: resolveDisplayTextThemeForBreakPoints(\n                  MediaQuery.of(context).size.width, context),\n              textAlign: TextAlign.center,\n            ),\n            const Gap(10),\n            Text(\n              AppLocalizations.of(context)!.slogan,\n              style: resolveTitleTextThemeForBreakPoints(\n                  MediaQuery.of(context).size.width, context),\n              textAlign: TextAlign.center,\n            ),\n            const Gap(45),\n            Text(\n              AppLocalizations.of(context)!.projectSpaceDescription,\n              style: Theme.of(context).textTheme.bodySmall,\n            ),\n            const Gap(45),\n            Align(\n              child: ElevatedButton(\n                style: ElevatedButton.styleFrom(\n                  backgroundColor: Theme.of(context).primaryColor,\n                  foregroundColor: Theme.of(context).colorScheme.onPrimary,\n                ),\n                onPressed: () {\n                  ProjectsPage.controller.animateTo(\n                    947,\n                    duration: Durations.long1,\n                    curve: Curves.easeIn,\n                  );\n                },\n                child: Text(\n                  AppLocalizations.of(context)!.allProjects,\n                ),\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass InProgressProjectListView extends StatefulWidget {\n  const InProgressProjectListView({super.key});\n\n  @override\n  State<InProgressProjectListView> createState() =>\n      _InProgressProjectListViewState();\n}\n\nclass _InProgressProjectListViewState extends State<InProgressProjectListView> {\n  @override\n  void initState() {\n    super.initState();\n\n    context.read<ProjectBloc>().add(\n          const GetArticleListEvent(foldLength: 100),\n        );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return const AllArticleView();\n  }\n}\n\n/// This widget displays all article based on their status in a horizontal list.\n///\n/// First, we trigger all article list and then make a filter to separate\n/// in progress and achieved projects. To do so, we listen to ProjectBloc.\nclass AllArticleView extends StatefulWidget {\n  const AllArticleView({super.key});\n\n  @override\n  State<AllArticleView> createState() => _AllArticleViewState();\n}\n\nclass _AllArticleViewState extends State<AllArticleView> {\n  @override\n  Widget build(BuildContext context) {\n    return BlocConsumer<ProjectBloc, ArticleState<Article>>(\n      builder: (BuildContext context, ArticleState<Article> state) {\n        List<Article?>? projectInProgress = state.articles?.values\n            .where((article) => article.relations?[0]['status'] == 'inProgress')\n            .toList();\n        List<Article?>? projectWaiting = state.articles?.values\n            .where(\n                (article) => article.relations?[0]['status'] == 'waitingBudget')\n            .toList();\n\n        List<Article?>? projectDone = state.articles?.values\n            .where((article) => article.relations?[0]['status'] == 'done')\n            .toList();\n\n        switch (state.status) {\n          case ArticleStatus.succeed:\n            return Column(\n              children: [\n                if (projectInProgress != null && projectInProgress.isNotEmpty)\n                  ProjectsView(\n                    title: 'Projet en cours',\n                    articles: projectInProgress,\n                  ),\n                if (projectWaiting != null && projectWaiting.isNotEmpty) ...[\n                  const Gap(45),\n                  ProjectsView(\n                    title: 'En attente financement',\n                    articles: projectWaiting,\n                  ),\n                ],\n                if (projectDone != null && projectDone.isNotEmpty) ...[\n                  const Gap(45),\n                  Container(\n                    constraints: BoxConstraints(\n                      maxWidth: ContentSize.maxWidth(\n                          MediaQuery.of(context).size.width),\n                    ),\n                    child: ProjectsView(\n                      alignment: Alignment.centerLeft,\n                      title: 'Projet achevé',\n                      articles: projectDone,\n                    ),\n                  ),\n                ],\n              ],\n            );\n          case ArticleStatus.failed:\n            return Align(child: Text(\"Failed:${state.error}\"));\n          default:\n            return Container(\n              alignment: Alignment.center,\n              height: 702,\n              child: const CircularProgressIndicator(),\n            );\n        }\n      },\n      listener: (context, state) {},\n    );\n  }\n}\n\nclass ProjectsView extends StatefulWidget {\n  const ProjectsView({\n    super.key,\n    required this.title,\n    this.subtitle,\n    required this.articles,\n    this.alignment,\n  });\n\n  final List<Article?> articles;\n\n  final String title;\n  final String? subtitle;\n  final Alignment? alignment;\n\n  @override\n  State<ProjectsView> createState() {\n    return ProjectsViewState();\n  }\n}\n\nclass ProjectsViewState extends State<ProjectsView> {\n  final ScrollController _controller = ScrollController();\n\n  List<Widget> buildProjectWidget(BuildContext context) {\n    List<Widget> projectWidgets = [];\n    for (Article? article in widget.articles) {\n      if (article != null) {\n        projectWidgets.add(\n          ProjectCard(\n            article: article,\n          ),\n        );\n      }\n    }\n    return projectWidgets;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      constraints: BoxConstraints(\n        maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n      ),\n      child: Column(\n        children: [\n          Container(\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n            ),\n            margin: const EdgeInsets.symmetric(horizontal: Margins.small),\n            child: Row(\n              mainAxisAlignment: MainAxisAlignment.spaceBetween,\n              children: [\n                Text(\n                  widget.title,\n                  style: /*resolveTitleTextThemeForBreakPoints(\n                          MediaQuery.of(context).size.width, context)!*/\n                      Theme.of(context).textTheme.titleMedium!.copyWith(\n                            color: AhlTheme.darkNight,\n                          ),\n                ),\n                Container(\n                  padding: const EdgeInsets.all(4.0),\n                  decoration: const ShapeDecoration(\n                    color:\n                        Colors.white, //Theme.of(context).colorScheme.surface,\n                    shape: StadiumBorder(),\n                  ),\n                  child: Row(\n                    children: [\n                      IconButton(\n                        onPressed: () => _controller.animateTo(\n                          _controller.offset - 300,\n                          duration: Durations.long1,\n                          curve: Curves.easeInOut,\n                        ),\n                        icon: const Icon(Icons.arrow_back_outlined),\n                      ),\n                      ConstrainedBox(\n                        constraints: BoxConstraints(\n                            maxWidth: resolveForBreakPoint<double>(\n                              MediaQuery.of(context).size.width,\n                              other: 150,\n                              small: 0,\n                              medium: 0,\n                              large: 50,\n                            ),\n                            maxHeight: 5),\n                        child: const SizedBox.expand(),\n                      ),\n                      IconButton(\n                        onPressed: () => _controller.animateTo(\n                          _controller.offset + 300,\n                          duration: Durations.long1,\n                          curve: Curves.easeInOut,\n                        ),\n                        icon: const Icon(\n                          Icons.arrow_forward_rounded,\n                        ),\n                      )\n                    ],\n                  ),\n                ),\n              ],\n            ),\n          ),\n          Container(\n            constraints: BoxConstraints(\n              maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n            ),\n            alignment: Alignment.centerLeft,\n            child: (widget.subtitle != null) ? Text(widget.subtitle!) : null,\n          ),\n          Container(\n            constraints: BoxConstraints(\n              maxWidth: MediaQuery.of(context).size.width,\n              maxHeight: 330,\n            ),\n            alignment: Alignment.centerLeft,\n            child: ListView(\n              controller: _controller,\n              shrinkWrap: true,\n              scrollDirection: Axis.horizontal,\n              children: buildProjectWidget(context),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\n/// A widget that build the project cards.\nclass ProjectCard extends StatelessWidget {\n  const ProjectCard({\n    super.key,\n    required this.article,\n  });\n\n  final Article article;\n\n  @override\n  Widget build(BuildContext context) {\n    return AhlCard(\n      callback: () {\n        context.go(\"/${ProjectsPage.routeName}/${article.id}\"\n            // MaterialPageRoute(\n            //   builder: (context) => ProjectPageView(\n            //     collection: projectsCollection,\n            //     project: article,\n            //   ),\n            // ),\n            );\n\n        log(\"${article.contentPath}\");\n      },\n      image: FutureBuilder(\n          future: ArticleStorageUtils(\n            article: article,\n            collection: projectsCollection,\n          ).getCoverImage(),\n          builder: (context, snapshot) {\n            if (snapshot.hasData) {\n              return Container(\n                // margin: const EdgeInsets.all(Paddings.medium),\n                decoration: BoxDecoration(\n                  image: DecorationImage(\n                    image: MemoryImage(snapshot.data!),\n                    fit: BoxFit.cover,\n                  ),\n                  borderRadius: BorderRadius.circular(BorderSizes.small),\n                ),\n              );\n            } else {\n              return Container(\n                alignment: Alignment.center,\n                child: const CircularProgressIndicator(),\n              );\n            }\n          }),\n      // label: Text(\n      //   \"${article.relations?[0]['status']}\",\n      // ),\n      title: Text(\n        \"${article.title}\",\n      ),\n    ).animate().fadeIn(curve: Curves.easeIn).slideY(begin: 0.125, end: 0);\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/rosary/rosary_page.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:ahl/src/newsletter/newsletter.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\n\nimport '../../../ahl_barrel.dart';\n\nclass RosaryPage extends StatefulWidget {\n  const RosaryPage({super.key});\n\n  static const String routeName = 'rosary';\n\n  @override\n  State<RosaryPage> createState() => _RosaryPageState();\n}\n\nclass _RosaryPageState extends State<RosaryPage> {\n  late PageController controller;\n\n  @override\n  void initState() {\n    super.initState();\n\n    controller = PageController();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: const AhlAppBar(),\n      drawer: const AhlDrawer(),\n      body: Container(\n        decoration: const BoxDecoration(\n          image: DecorationImage(\n            fit: BoxFit.cover,\n            image: AssetImage(\n              'images/view-boat-water-with-flowers.webp',\n            ),\n          ),\n        ),\n        alignment: Alignment.center,\n        child: Container(\n          clipBehavior: Clip.antiAlias,\n          alignment: Alignment.center,\n          constraints: const BoxConstraints(\n            maxWidth: 500,\n            maxHeight: 350,\n          ),\n          decoration: BoxDecoration(\n            borderRadius: BorderRadius.circular(BorderSizes.big),\n            color: Colors.white.withAlpha(0x88),\n          ),\n          child: PageView(\n            controller: controller,\n            children: [\n              Padding(\n                padding: const EdgeInsets.all(Paddings.medium),\n                child: Column(\n                  mainAxisSize: MainAxisSize.min,\n                  crossAxisAlignment: CrossAxisAlignment.center,\n                  children: [\n                    Text(\n                      'Espace du Rosaire',\n                      textAlign: TextAlign.center,\n                      style: Theme.of(context).textTheme.displayLarge,\n                    ),\n                    const Text(\"Bientôt Disponible\"),\n                    const Spacer(),\n                    ElevatedButton(\n                      style: ElevatedButton.styleFrom(\n                        fixedSize: const Size.fromHeight(45),\n                        foregroundColor:\n                            Theme.of(context).colorScheme.onPrimary,\n                        backgroundColor: Theme.of(context).colorScheme.primary,\n                      ),\n                      onPressed: () {\n                        controller.nextPage(\n                          duration: Durations.medium3,\n                          curve: Curves.easeIn,\n                        );\n                      },\n                      child: Text(\n                        AppLocalizations.of(context)!.getNotified,\n                      ),\n                    ),\n                  ],\n                ),\n              ),\n              Stack(\n                children: [\n                  const NewsLetterPrompt(),\n                  Padding(\n                    padding: const EdgeInsets.all(Paddings.medium),\n                    child: IconButton(\n                      onPressed: () => controller.previousPage(\n                        curve: Curves.easeIn,\n                        duration: Durations.medium3,\n                      ),\n                      icon: const Icon(\n                        Icons.arrow_back_rounded,\n                      ),\n                    ),\n                  ),\n                ],\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/saints/saints.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass SaintsPage extends StatefulWidget {\n  const SaintsPage({super.key});\n\n  static const String routeName = '/saints';\n\n  @override\n  State<SaintsPage> createState() => _SaintsPageState();\n}\n\nclass _SaintsPageState extends State<SaintsPage> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(),\n      body: Center(\n        child: Text(\n          'Saints Space',\n          style: Theme.of(context).textTheme.displayLarge,\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/pages/who_we_are/who_we_are.dart",
    "content": "import 'dart:developer' as developer;\nimport 'dart:math';\n\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/who_we_are/view.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_animate/flutter_animate.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nclass WhoWeArePage extends StatefulWidget {\n  const WhoWeArePage({super.key});\n\n  static const String routeName = 'whoWeAre';\n\n  @override\n  State<WhoWeArePage> createState() => _WhoWeArePageState();\n}\n\n/// The WhoWeArePage is a show to who are the sisters in a suitable animation.\n/// - Problem: Display sister information in a beautiful and consumable way.\n/// - Approach: Use a GestureDetector to trigger scroll event that animate an\n///             animation controller that control the animation.\n/// - Step: 1. implement ViewUI: text that displays the current animation value.\n///         2. Make Gesture Detector Scrolling change the animation state.\n///\nclass _WhoWeArePageState extends State<WhoWeArePage>\n    with SingleTickerProviderStateMixin {\n  late AnimationController animationController;\n  late ScrollController scrollController;\n\n  @override\n  void initState() {\n    super.initState();\n    animationController =\n        AnimationController(vsync: this, lowerBound: 0, upperBound: 100);\n\n    scrollController = ScrollController();\n    scrollController.addListener(incrementScrolling);\n  }\n\n  @override\n  void dispose() {\n    animationController.dispose();\n    super.dispose();\n  }\n\n  void incrementDragging(DragUpdateDetails details) {\n    setState(() {\n      animationController.value += details.delta.dy / 100;\n    });\n  }\n\n  void incrementScrolling() {\n    setState(() {\n      animationController.value += scrollController.offset / 100;\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n        appBar: const AhlAppBar(),\n        endDrawer: const AhlDrawer(),\n        body: Container(\n          height: MediaQuery.sizeOf(context).height,\n          alignment: Alignment.center,\n          child: Text(AppLocalizations.of(context)!.availableSoon,\n              style: Theme.of(context).textTheme.headlineLarge),\n        )\n        // ListView(\n        //   children: [\n        //     Container(\n        //       constraints: BoxConstraints(\n        //           maxHeight:\n        //               MediaQuery.sizeOf(context).height - Sizes.appBarSize),\n        //       child:\n        //   ScrollingAnimationPage(\n        // animationBuilder: (animationValue) => MyAnimatedWidget(\n        //   animation: animationValue,\n        // ),\n        //     ),\n        //   ),\n        // ],\n\n        );\n  }\n}\n\n/// Implement animation on who we are\n// todo:\n// todo    step 1: - create all widget in a scrolling list\n//\n\nclass ScrollingAnimationPage extends StatefulWidget {\n  final double maxAnimationValue;\n  final Function(AnimationController animation) animationBuilder;\n\n  const ScrollingAnimationPage({\n    super.key,\n    this.maxAnimationValue = 2000,\n    required this.animationBuilder,\n  });\n\n  @override\n  State<ScrollingAnimationPage> createState() => _ScrollingAnimationPageState();\n}\n\nclass _ScrollingAnimationPageState extends State<ScrollingAnimationPage>\n    with TickerProviderStateMixin {\n  late final AnimationController _controller;\n  late final ScrollController _scrollController;\n\n  @override\n  void initState() {\n    super.initState();\n    _scrollController = ScrollController();\n\n    _scrollController.addListener(updateAnimation);\n    _controller = AnimationController(\n      lowerBound: 0,\n      upperBound: widget.maxAnimationValue,\n      duration: const Duration(seconds: 2),\n      vsync: this,\n    );\n  }\n\n  void updateAnimation() {\n    _controller.value = _scrollController.offset;\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    _scrollController.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Stack(\n      children: [\n        AnimatedBuilder(\n          animation: _controller,\n          builder: (context, child) => widget.animationBuilder(_controller),\n        ),\n        Scrollbar(\n          controller: _scrollController,\n          child: ListView(\n            controller: _scrollController,\n            physics: const AlwaysScrollableScrollPhysics(),\n            children: [\n              Container(\n                // color: Colors.accents[Random().nextInt(Colors.accents.length)]\n                //     .withAlpha(0x8F),\n                height: widget.maxAnimationValue,\n              ),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n}\n\nclass MyAnimatedWidget extends StatelessWidget {\n  final AnimationController animation;\n\n  const MyAnimatedWidget({super.key, required this.animation});\n\n  @override\n  Widget build(BuildContext context) {\n    developer.log('${animation.value}');\n    return SizedBox(\n      height: MediaQuery.of(context).size.height,\n      width: MediaQuery.of(context).size.width,\n      child: Column(\n        children: [\n          FutureBuilder(\n            future: WhoWeAreTileState.getImage(),\n            builder: (context, snapshot) {\n              CrossFadeState crossFadeState = CrossFadeState.showFirst;\n              if (snapshot.hasData) {\n                crossFadeState = CrossFadeState.showSecond;\n              }\n              return AnimatedCrossFade(\n                layoutBuilder:\n                    (topChild, topChildKey, bottomChild, bottomChildKey) =>\n                        Stack(\n                  children: [bottomChild, topChild.animate().fade()],\n                ),\n                duration: Durations.long4,\n                crossFadeState: crossFadeState,\n                secondChild: (snapshot.hasData)\n                    ? Align(\n                        child: Image.memory(\n                          fit: BoxFit.cover,\n                          snapshot.data!,\n                          height: MediaQuery.sizeOf(context).height / 2,\n                        ),\n                      )\n                    : Container(\n                        height: MediaQuery.sizeOf(context).height / 2,\n                      ),\n                firstChild: Container(\n                  height: MediaQuery.sizeOf(context).height / 2,\n                ),\n              );\n            },\n          ),\n          Container(\n            padding: const EdgeInsets.symmetric(vertical: Paddings.huge),\n            child: SectionTitle(\n              caretColor: Theme.of(context).primaryColor,\n              isUpperCase: true,\n              titleColor: Theme.of(context).colorScheme.onSurface,\n              title: AppLocalizations.of(context)!.whoWeAre,\n            ),\n          ),\n          AnimatedSlide(\n            // alignment: Alignment(sloganDx(animation), 0),\n            // width: MediaQuery.sizeOf(context).width,\n            // duration: Durations.medium2,\n            duration: Duration.zero,\n            offset: Offset(max(2.0 - animation.value / 400, -4.0), 0),\n            child: Text(\n              maxLines: 1,\n              overflow: TextOverflow.visible,\n              AppLocalizations.of(context)!.slogan,\n              style: const TextStyle(\n                fontSize: 64,\n                fontFamily: 'Butler',\n              ),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n\n  Offset sloganSlide(AnimationController animation) {\n    double dx = 0.0;\n    double dy = 0.0;\n\n    if (0 <= animation.value && animation.value <= 150) {\n      dx = -animation.value / 100;\n    }\n\n    Offset offset = Offset(dx, dy);\n    return offset;\n  }\n\n  double sloganDx(AnimationController animation) {\n    if (0 <= animation.value && animation.value <= 150) {\n      double xDistance = -animation.value / 100 + 1;\n      developer.log(\"animation triggered: $xDistance\");\n      return xDistance;\n    }\n\n    return 0;\n  }\n}\n"
  },
  {
    "path": "lib/src/partners/view.dart",
    "content": "import 'dart:developer';\n\nimport \"package:flutter/material.dart\";\n\nimport \"package:firebase_storage/firebase_storage.dart\";\nimport \"package:flutter/foundation.dart\";\nimport \"package:flutter_animate/flutter_animate.dart\";\nimport \"package:flutter_gen/gen_l10n/app_localizations.dart\";\nimport \"package:gap/gap.dart\";\n\nimport \"package:ahl/ahl_barrel.dart\";\nimport \"package:ahl/src/firebase_constants.dart\";\nimport \"package:ahl/src/theme/theme.dart\";\nimport \"package:ahl/src/utils/breakpoint_resolver.dart\";\n\nimport \"package:session_storage/session_storage.dart\";\n\nclass PartnersView extends StatefulWidget {\n  const PartnersView({super.key});\n\n  @override\n  State<PartnersView> createState() => _PartnersViewState();\n}\n\nclass _PartnersViewState extends State<PartnersView>\n    with AutomaticKeepAliveClientMixin {\n  Uint8List? imageData;\n\n  @override\n  bool get wantKeepAlive => true;\n\n  /// Get images from firebase_storage\n  Future<List<Uint8List>?> computeImage() async {\n    String partnersLogoCacheKey = 'partnersLogo';\n    SessionStorage cache = SessionStorage();\n\n    List<Uint8List> partnersLogo = [];\n\n    ListResult? results;\n    try {\n      await storage.child('/partners').list().then(\n        (value) {\n          results = value;\n        },\n      );\n    } catch (e) {\n      log('[Partners]: Error loading partners logo: $e');\n    }\n    if (results != null) {\n      for (Reference ref in results!.items) {\n        final Uint8List? data = await ref.getData();\n        if (data != null) {\n          partnersLogo.add(data);\n        }\n      }\n    }\n\n    if (partnersLogo != []) {\n      cache[partnersLogoCacheKey] = partnersLogo.toString();\n    }\n\n    return partnersLogo;\n  }\n\n  @override\n  void initState() {\n    super.initState();\n\n    images = computeImage();\n  }\n\n  Future<List<Uint8List>?>? images;\n\n  @override\n  Widget build(BuildContext context) {\n    computeImage();\n    super.build(context);\n    return Container(\n      alignment: Alignment.center,\n      // constraints: const BoxConstraints.expand(height: 245),\n      color: Colors.white,\n      child: Container(\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n          maxHeight: 300,\n        ),\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          mainAxisAlignment: MainAxisAlignment.center,\n          crossAxisAlignment: CrossAxisAlignment.center,\n          children: [\n            Container(\n              alignment: Alignment.center,\n              padding: const EdgeInsets.all(Paddings.big),\n              child: Text(\n                AppLocalizations.of(context)!.ourPartners,\n                style: resolveHeadlineTextThemeForBreakPoints(\n                  MediaQuery.of(context).size.width,\n                  context,\n                )!\n                    .copyWith(color: AhlTheme.blackCharcoal),\n              ),\n            ),\n            Row(\n              mainAxisAlignment: MainAxisAlignment.center,\n              children: [\n                Container(\n                  constraints: BoxConstraints.tight(const Size.square(150)),\n                  child: FutureBuilder(\n                    future: images,\n                    builder: (context, snapshot) {\n                      if (snapshot.hasData) {\n                        return Row(\n                          children: snapshot.data!\n                              .map<Widget>(\n                                (element) => Container(\n                                  clipBehavior: Clip.hardEdge,\n\n                                  decoration: BoxDecoration(\n                                    borderRadius: BorderRadius.circular(\n                                      BorderSizes.small,\n                                    ),\n                                  ),\n                                  // borderOnForeground: true,\n                                  child: Image.memory(element),\n                                ).animate().fadeIn(),\n                              )\n                              .toList(),\n                        );\n                      } else if (snapshot.connectionState ==\n                          ConnectionState.waiting) {\n                        return const Align(\n                          // alignment: Alignment.center,\n                          child: CircularProgressIndicator(),\n                        );\n                      } else {\n                        return const Icon(Icons.warning_rounded);\n                      }\n                    },\n                  ),\n                ),\n              ],\n            ),\n            const Gap(45),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/prayers_intention/bloc.dart",
    "content": "part of 'prayer_request.dart';\n\nenum PrayerRequestStatus {\n  initial,\n  filledDate,\n  filledForm,\n\n  /// When the PrayerRequest is ready to send.\n  complete,\n}\n\nclass PrayerRequestBloc extends Bloc<PrayerRequestEvent, PrayerRequestState> {\n  PrayerRequestBloc(\n    PrayerRequestRepo repository,\n  )   : _repo = repository,\n        super(_initialState) {\n    on<PrayerRequestInitializeEvent>(_onInitializedEvent);\n    on<PrayerRequestFilledFormEvent>(_onFilledFormEvent);\n    on<PrayerRequestFilledDateEvent>(_onFilledDateEvent);\n    on<PrayerRequestCompletedEvent>(_onCompletedEvent);\n\n    /// Add an initialization event at creation.\n    add(PrayerRequestInitializeEvent());\n  }\n\n  /// short hand variable for initial\n  static const PrayerRequestState _initialState = PrayerRequestInitialState();\n\n  /// PrayerRequestrepo\n  final PrayerRequestRepo _repo;\n\n  void _onInitializedEvent(PrayerRequestEvent event, Emitter emit) {\n    if (state != _initialState) {\n       /// Re emit a new state if the state is not initial.\n\n    emit(_initialState);\n    }\n\n   \n  }\n\n  void _onFilledFormEvent(PrayerRequestFilledFormEvent event, Emitter emit) {\n    emit(\n      PrayerRequestFilledFormState(\n        oldRequest: state.request,\n        email: event.email,\n        prayer: event.prayer,\n        name: event.name,\n      ),\n    );\n    print(state);\n  }\n\n  void _onFilledDateEvent(PrayerRequestFilledDateEvent event, Emitter emit) {\n    emit(\n      PrayerRequestFilledDateState(\n        oldRequest: state.request,\n        date: event.date,\n        prayerType: event.prayerType,\n      ),\n    );\n    print(state);\n  }\n\n  void _onCompletedEvent(PrayerRequestCompletedEvent event, Emitter emit) {\n    emit(\n      PrayerRequestCompleteState(\n        name: event.name,\n        email: event.email,\n        prayer: event.prayer,\n        date: event.date,\n        prayerType: event.prayerType,\n      ),\n    );\n\n    /// write request to back\n    _repo.write(state.request!);\n  }\n}\n"
  },
  {
    "path": "lib/src/prayers_intention/event.dart",
    "content": "part of 'prayer_request.dart';\n\n\nabstract class PrayerRequestEvent {}\n\nclass PrayerRequestInitializeEvent implements PrayerRequestEvent {}\n\nclass PrayerRequestFilledFormEvent implements PrayerRequestEvent {\n  const PrayerRequestFilledFormEvent({\n    required this.email,\n    required this.prayer,\n    this.name,\n  });\n\n  final String email;\n  final String prayer;\n  final String? name;\n}\n\nclass PrayerRequestFilledDateEvent implements PrayerRequestEvent {\n  const PrayerRequestFilledDateEvent({\n    required this.date,\n    required this.prayerType,\n  });\n\n  final DateTime date;\n  final PrayerType prayerType;\n}\n\nclass PrayerRequestCompletedEvent implements PrayerRequestEvent {\n  const PrayerRequestCompletedEvent({\n    required this.email,\n    required this.prayer,\n    this.name,\n    required this.date,\n    required this.prayerType,\n  });\n\n  final String email;\n  final String prayer;\n  final String? name;\n  final DateTime date;\n  final PrayerType prayerType;\n}\n"
  },
  {
    "path": "lib/src/prayers_intention/model.dart",
    "content": "part of 'prayer_request.dart';\n\nconst option = [\n  \"Messe\",\n  \"Chapelet\",\n  \"Vêpre\",\n];\n\nenum PrayerType {\n  mass,\n  rosary,\n  vesper,\n}\n\nextension PrayerTypeToString on PrayerType {\n  static List getList(BuildContext context) {\n    return [\n      AppLocalizations.of(context)!.choiceMass,\n      AppLocalizations.of(context)!.choiceRosary,\n      AppLocalizations.of(context)!.choiceVesper,\n    ];\n  }\n\n  String localizedToString(BuildContext context) {\n    switch (this) {\n      case PrayerType.mass:\n        return AppLocalizations.of(context)!.choiceMass;\n      case PrayerType.rosary:\n        return AppLocalizations.of(context)!.choiceRosary;\n      case PrayerType.vesper:\n        return AppLocalizations.of(context)!.choiceVesper;\n      default:\n        return \"$this\";\n    }\n  }\n\n  String localizedToStringWithArticle(BuildContext context) {\n    switch (this) {\n      case PrayerType.mass:\n        return AppLocalizations.of(context)!.mass;\n      case PrayerType.rosary:\n        return AppLocalizations.of(context)!.rosary;\n      case PrayerType.vesper:\n        return AppLocalizations.of(context)!.vesper;\n      default:\n        return \"$this\";\n    }\n  }\n\n  TimeOfDay get time {\n    switch (this) {\n      case PrayerType.mass:\n        return const TimeOfDay(\n          hour: 6,\n          minute: 0,\n        );\n      case PrayerType.rosary:\n        return const TimeOfDay(\n          hour: 11,\n          minute: 45,\n        );\n      case PrayerType.vesper:\n        return const TimeOfDay(\n          hour: 18,\n          minute: 0,\n        );\n      default:\n        return const TimeOfDay(\n          hour: 18,\n          minute: 0,\n        );\n    }\n  }\n\n  String get name {\n    switch (this) {\n      case PrayerType.rosary:\n        return 'Rosary';\n      case PrayerType.mass:\n        return 'Mass';\n      case PrayerType.vesper:\n        return 'Vesper';\n      default:\n        return '$this';\n    }\n  }\n}\n\nclass PrayerRequest {\n  const PrayerRequest({\n    this.name,\n    required this.email,\n    required this.dateTime,\n    required this.prayer,\n    required this.prayerType,\n  });\n\n  final String? name;\n  final String email;\n  final DateTime dateTime;\n  final String prayer;\n  final PrayerType prayerType;\n\n  PrayerRequest copyWith({\n    String? name,\n    String? email,\n    DateTime? dateTime,\n    String? prayer,\n    PrayerType? prayerType,\n  }) =>\n      PrayerRequest(\n          email: email ?? this.email,\n          dateTime: dateTime ?? this.dateTime,\n          prayer: prayer ?? this.prayer,\n          prayerType: prayerType ?? this.prayerType,\n          name: name ?? this.name);\n\n  @override\n  String toString() => \"\"\"\n  Request: {\n    name: ${name ?? \"null\"},\n    email: $email,\n    prayer: $prayer,\n    date: ${dateTime.toLocal().toString()},\n    prayerType: $prayerType\n  }\n\"\"\";\n\n  Map<String, dynamic> toDoc() {\n    return {\n      'name': name,\n      'email': email,\n      'prayer': prayer,\n      'date': dateTime,\n      'prayerType': prayerType.name,\n    };\n  }\n\n  factory PrayerRequest.fromDoc(Map<String, dynamic> doc) {\n    return PrayerRequest(\n      email: doc['email'],\n      dateTime: doc['date'],\n      prayer: doc['prayer'],\n      prayerType: doc['prayerType'],\n      name: doc['name'],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/prayers_intention/prayer_request.dart",
    "content": "\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:ahl/src/validation/email_validation.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:dotlottie_loader/dotlottie_loader.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:gap/gap.dart';\nimport 'package:lottie/lottie.dart';\n\nimport '../../ahl_barrel.dart';\nimport '../widgets/widgets.dart';\n\npart 'view.dart';\npart 'bloc.dart';\npart 'model.dart';\npart 'event.dart';\npart 'state.dart';\npart 'repository.dart';\n"
  },
  {
    "path": "lib/src/prayers_intention/repository.dart",
    "content": "part of 'prayer_request.dart';\n\nclass PrayerRequestRepo {\n  PrayerRequestRepo({required this.db});\n\n  FirebaseFirestore db;\n\n  void write(PrayerRequest request) {\n\n    /// updating setup\n    Map<String, dynamic> data = {\n      '${request.hashCode}': {\n        'id': request.hashCode,\n        'date': dayMonthYear(request.dateTime),\n        'prayerType': request.prayerType.name,\n      },\n    };\n\n    /// saving prayer\n    db.doc('$prayerRequestCollection/setup').set(\n          data,\n          SetOptions(\n            merge: true,\n          ),\n        );\n    db\n        .doc(\n            '$prayerRequestCollection/${dayMonthYear(request.dateTime)}/${request.prayerType.name}/${request.hashCode}')\n        .set(\n          request.toDoc(),\n        );\n  }\n\n  /// Helper on dd-mm-yyyy date formatting\n  String dayMonthYear(DateTime date) =>\n      '${date.day}-${date.month}-${date.year}';\n\n  //todo: add how to know all path mechanism\n  List getPrayersWithDate(\n    DateTime date,\n    PrayerType prayerType,\n  ) {\n    db.collection(\n        '$prayerRequestCollection/${date.day}-${date.month}-${date.year}/${prayerType.name}/');\n\n    return [];\n  }\n}\n"
  },
  {
    "path": "lib/src/prayers_intention/state.dart",
    "content": "part of 'prayer_request.dart';\n\nclass PrayerRequestState implements Equatable {\n  const PrayerRequestState({this.request, required this.currentStatus});\n\n  /// the prayer itself\n  final PrayerRequest? request;\n\n  /// status of the state\n  final PrayerRequestStatus currentStatus;\n  @override\n  bool? get stringify => false;\n  @override\n  List<Object?> get props => [currentStatus, request];\n\n  /// Create a copy of this state in a new object.\n  PrayerRequestState copyWith({\n    PrayerRequest? request,\n    PrayerRequestStatus? status,\n  }) =>\n      PrayerRequestState(\n        request: request ?? this.request,\n        currentStatus: status ?? currentStatus,\n      );\n\n  @override\n  String toString() => \"\"\"\nRequest: $request,\ncurrentStatus: $currentStatus,\n\n\"\"\";\n}\n\nclass PrayerRequestInitialState extends PrayerRequestState {\n  const PrayerRequestInitialState()\n      : super(request: null, currentStatus: PrayerRequestStatus.initial);\n}\n\nclass PrayerRequestCompleteState extends PrayerRequestState {\n  PrayerRequestCompleteState({\n    required String email,\n    required String prayer,\n    String? name,\n    required DateTime date,\n    required PrayerType prayerType,\n  }) : super(\n          request: PrayerRequest(\n            email: email,\n            dateTime: date,\n            prayer: prayer,\n            prayerType: prayerType,\n            name: name,\n          ),\n          currentStatus: PrayerRequestStatus.complete,\n        );\n}\n\nclass PrayerRequestFilledDateState extends PrayerRequestState {\n  PrayerRequestFilledDateState({\n    this.oldRequest,\n    required DateTime date,\n    required PrayerType prayerType,\n  }) : super(\n            request: PrayerRequest(\n              name: oldRequest?.name,\n              email: oldRequest?.email ?? 'email',\n              dateTime: date,\n              prayer: oldRequest?.prayer ?? \"prayer\",\n              prayerType: prayerType,\n            ),\n            currentStatus: PrayerRequestStatus.filledDate);\n\n  final PrayerRequest? oldRequest;\n}\n\nclass PrayerRequestFilledFormState extends PrayerRequestState {\n  PrayerRequestFilledFormState({\n    this.oldRequest,\n    required String email,\n    required String prayer,\n    String? name,\n  }) : super(\n          request: PrayerRequest(\n            name: name ?? oldRequest?.name,\n            email: email,\n            dateTime: oldRequest?.dateTime ?? DateTime.now(),\n            prayer: prayer,\n            prayerType: oldRequest?.prayerType ?? PrayerType.mass,\n          ),\n          currentStatus: PrayerRequestStatus.filledForm,\n        );\n\n  final PrayerRequest? oldRequest;\n}\n\n// to be continued.\n// class Smthg extends Cubit<PrayerRequest> {\n//   Smthg()\n//       : super(\n//           PrayerRequest(\n//             email: \"email\",\n//             dateTime: DateTime.now(),\n//             prayer: \"prayer\",\n//             prayerType: PrayerType.mass,\n//           ),\n//         );\n\n//   void fillDate(DateTime time, PrayerType prayerType)\n// }\n"
  },
  {
    "path": "lib/src/prayers_intention/view.dart",
    "content": "part of 'prayer_request.dart';\n\nconst Color prayerIntentionTextColor = Colors.white;\n\n/// The route view to collect, setup date and confirm prayers\n/// request.\n///\n/// This widget is an AnimatedSwitcher with 4 children.\n///\n/// This class should be used under the bloc of managing it's state.\n///\n/// [email],[dateTime],[prayer] and [prayerType] should be not null.\n// // todo: Change variable to a PrayerRequests model.\nclass PrayersIntentionRequestView extends StatefulWidget {\n  const PrayersIntentionRequestView({super.key});\n\n  @override\n  State<PrayersIntentionRequestView> createState() =>\n      _PrayersIntentionRequestViewState();\n}\n\nclass _PrayersIntentionRequestViewState\n    extends State<PrayersIntentionRequestView>\n    with SingleTickerProviderStateMixin {\n  late List<Widget> views;\n\n  late String? name;\n  late String email;\n  late DateTime dateTime;\n  late String prayer;\n  late PrayerType prayerType;\n  late PageController _controller;\n  late AnimationController lottieController;\n\n  @override\n  void initState() {\n    views = [\n      PrayerCollectView(\n        key: const ValueKey(1),\n        callback: nextView,\n      ),\n      PrayerDateCollectionView(\n        key: const ValueKey(2),\n        callback: nextView,\n        backCallback: previousView,\n      ),\n      ReviewPrayerView(\n        backCallback: previousView,\n        callback: nextView,\n      ),\n      FormsLayoutBase(\n        child: Container(\n          alignment: Alignment.center,\n          child: DotLottieLoader.fromAsset(\n            AhlAssets.doneAnimation,\n            frameBuilder: (BuildContext ctx, DotLottie? dotlottie) {\n              if (dotlottie != null) {\n                return Lottie.memory(\n                  dotlottie.animations.values.single,\n                  controller: lottieController,\n                  onLoaded: (p0) => lottieController.forward(),\n                );\n              } else {\n                return Container(\n                \n                );\n              }\n            },\n          ),\n        ),\n      ),\n    ];\n\n    _controller = PageController(\n      keepPage: true,\n    );\n    lottieController =\n        AnimationController(vsync: this, duration: const Duration(seconds: 3))\n          ..addListener(\n            () {\n              if (lottieController.status == AnimationStatus.completed) {\n                _controller.jumpToPage(0);\n                // duration: duration, curve: Curves.easeIn);\n                lottieController.reset();\n              }\n            },\n          );\n\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    lottieController.dispose();\n    super.dispose();\n  }\n\n  // // todo: change to 0 after building dateView view\n  final duration = Durations.medium2;\n  final curvesIn = Curves.easeIn;\n  final curvesOut = Curves.easeOut;\n\n  void _submitPrayer() => setState(\n        () {\n          _controller.animateToPage(\n            0,\n            duration: duration,\n            curve: curvesIn,\n          );\n        },\n      );\n\n  void nextView() => setState(\n        () {\n          _controller.nextPage(\n            duration: duration,\n            curve: curvesIn,\n          );\n        },\n      );\n\n  void previousView() => setState(() {\n        _controller.previousPage(\n          duration: duration,\n          curve: curvesIn,\n        );\n      });\n\n  // test to setup animation\n  // final bool _isGoingForward = true;\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider<PrayerRequestBloc>(\n      create: (context) => PrayerRequestBloc(\n        PrayerRequestRepo(\n          db: firestore,\n        ),\n      ),\n      lazy: true,\n      child: LayoutBuilder(\n        builder: (context, constraints) => ConstrainedBox(\n          constraints: BoxConstraints(\n            maxWidth: MediaQuery.sizeOf(context).width,\n            maxHeight:\n                (MediaQuery.of(context).size.width < ScreenSizes.extraLarge)\n                    ? 990\n                    : 747,\n          ),\n          child: PageView(\n            controller: _controller,\n            allowImplicitScrolling: false,\n            physics: const NeverScrollableScrollPhysics(),\n            scrollDirection: Axis.horizontal,\n            children: views,\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass PrayerDateCollectionView extends StatefulWidget {\n  const PrayerDateCollectionView({\n    super.key,\n    void Function()? callback,\n    void Function()? backCallback,\n  })  : _callback = callback,\n        _backCallback = backCallback;\n\n  final void Function()? _callback;\n  final void Function()? _backCallback;\n\n  @override\n  State<PrayerDateCollectionView> createState() =>\n      _PrayerDateCollectionViewState();\n}\n\nclass _PrayerDateCollectionViewState extends State<PrayerDateCollectionView> {\n  final DateTime firstDate = DateTime.now();\n\n  final DateTime lastDate = DateTime.now().add(const Duration(days: 365));\n\n  late DateTime _date;\n\n  final _option = PrayerType.values;\n\n  late Set<PrayerType> selected;\n\n  void _onSelectionChange(Set<PrayerType> p0) {\n    setState(\n      () => selected = p0,\n    );\n  }\n\n  late PrayerRequest? _request;\n\n  @override\n  void initState() {\n    super.initState();\n\n    /// get the PrayerRequest object from the bloc\n    _request = context.read<PrayerRequestBloc>().state.request;\n\n    selected = {_request?.prayerType ?? _option[2]};\n    _date = _request?.dateTime ?? DateTime.now();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    Axis direction =\n        (MediaQuery.of(context).size.width > ScreenSizes.extraLarge)\n            ? Axis.horizontal\n            : Axis.vertical;\n    final Widget child = LayoutBuilder(\n      builder: (context, constraints) => ConstrainedBox(\n        constraints: constraints,\n        child: Flex(\n          direction: direction,\n          children: [\n            Flexible(\n              // flex: 2,\n              child: Column(\n                crossAxisAlignment: CrossAxisAlignment.start,\n                children: [\n                  // Flexible(\n                  //   flex: 2,\n                  //   child: prayerDecorationImage,\n                  // ),\n                  Flexible(\n\n                    // flex: 1,\n                    child: title,\n                  ),\n                  // Flexible(\n                  //   // flex: 1,\n                  //   child: Container(\n                  //     alignment: Alignment.centerLeft,\n                  //     height: 350,\n                  //     child: Text(\n                  //       \"${context.read<PrayerRequestBloc>().state.request?.prayer}\",\n                  //       style: resolveBodyTextThemeForBreakPoints(\n                  //           MediaQuery.of(context).size.width, context)?.copyWith(color: Theme.of(context).colorScheme.onPrimary,),\n                  //     ),\n                  //   ),\n                  // ),\n                  // Flexible(\n                  // flex: 1,\n                  //   child: DefaultTextStyle(\n                  //     style: Theme.of(context).textTheme.labelLarge!,\n                  //     child: (context.read<PrayerRequestBloc>().state.request !=\n                  //             null)\n                  //         ? (context\n                  //                     .read<PrayerRequestBloc>()\n                  //                     .state\n                  //                     .request!\n                  //                     .name !=\n                  //                 null)\n                  //             ? Text(\n                  //                 AppLocalizations.of(context)!.priersOf(\n                  //                   context\n                  //                       .read<PrayerRequestBloc>()\n                  //                       .state\n                  //                       .request!\n                  //                       .name!,\n                  //                   context\n                  //                       .read<PrayerRequestBloc>()\n                  //                       .state\n                  //                       .request!\n                  //                       .email,\n                  //                 ),\n                  //                 style: ,\n                  //               )\n                  //             : Text(context\n                  //                 .read<PrayerRequestBloc>()\n                  //                 .state\n                  //                 .request!\n                  //                 .email)\n                  //         : Container(),\n                  //   ),\n                  // ),\n                ],\n              ),\n            ),\n            // const Gap(Paddings.big),\n            Flexible(\n              flex: (direction == Axis.vertical) ? 3 : 2,\n              child: Column(\n                mainAxisSize: MainAxisSize.max,\n                children: [\n                  Flexible(\n                    child: Container(\n                      margin:\n                          const EdgeInsets.only(top: Paddings.listSeparator),\n                      padding: //(constraints.maxWidth > ScreenSizes.mobile)\n                          // ?\n\n                          const EdgeInsets.all(Margins.medium),\n                      //: const EdgeInsets.all(Margins.mobileSmall),\n                      decoration: BoxDecoration(\n                        color: Theme.of(context).colorScheme.surface,\n                        borderRadius: BorderRadius.circular(BorderSizes.big),\n                      ),\n                      child: Column(\n                        children: [\n                          Container(\n                            alignment: Alignment.centerLeft,\n                            padding: const EdgeInsets.only(\n                              bottom: Paddings.listSeparator,\n                            ),\n                            child: Text(\n                              AppLocalizations.of(context)!.whenWePray,\n                              style: Theme.of(context).textTheme.headlineSmall,\n                            ),\n                          ),\n                          Padding(\n                            padding: const EdgeInsets.only(\n                              bottom: Paddings.listSeparator,\n                            ),\n                            child: FittedBox(\n                              fit: BoxFit.contain,\n                              child: SegmentedButton<PrayerType>(\n                                style: ButtonStyle(\n                                  backgroundColor:\n                                      WidgetStateProperty.resolveWith(\n                                    (states) {\n                                      if (states\n                                          .contains(WidgetState.selected)) {\n                                        return Theme.of(context)\n                                            .colorScheme\n                                            .secondaryContainer;\n                                      }\n                                      return null; // Use default button color\n                                    },\n                                  ),\n                                  visualDensity: VisualDensity.comfortable,\n                                ),\n                                onSelectionChanged: _onSelectionChange,\n                                showSelectedIcon: true,\n                                selected: selected,\n                                multiSelectionEnabled: false,\n                                selectedIcon: const Icon(Icons.done)\n                                    .animate()\n                                    .scale(\n                                      duration: AhlDurations.subtle,\n                                      alignment: Alignment.center,\n                                      curve: Curves.easeOut,\n                                      begin: const Offset(0.7, 0.7),\n                                      end: const Offset(1.0, 1.0),\n                                    )\n                                    .rotate(begin: 1.1, end: 1),\n                                segments: List.generate(\n                                  _option.length,\n                                  (index) => ButtonSegment(\n                                    label: Container(\n                                      alignment: Alignment.center,\n                                      width: 60,\n                                      child: Text(\n                                        _option[index]\n                                            .localizedToString(context),\n                                      ),\n                                    ),\n                                    value: _option[index],\n                                  ),\n                                ),\n                              ),\n                            ),\n                          ),\n                          Container(\n                            alignment: Alignment.centerLeft,\n                            padding: const EdgeInsets.only(\n                              bottom: Paddings.listSeparator,\n                            ),\n                            child: const Text(\"Choisir la date:\"),\n                          ),\n                          Flexible(\n                            child: Container(\n                              padding: const EdgeInsets.only(\n                                bottom: Paddings.listSeparator,\n                              ),\n                              decoration: BoxDecoration(\n                                color: const Color(0xFFF7EFD4),\n                                borderRadius: BorderRadius.circular(\n                                    BorderSizes.big - Paddings.listSeparator),\n                              ),\n                              child: CalendarDatePicker(\n                                initialCalendarMode: DatePickerMode.day,\n                                currentDate: DateTime.now(),\n                                onDateChanged: (value) {\n                                  _date = value;\n                                },\n                                initialDate: _date,\n                                firstDate: firstDate,\n                                lastDate: lastDate,\n                              ),\n                            ),\n                          ),\n                        ],\n                      ),\n                    ),\n                  ),\n                  Container(\n                    padding: const EdgeInsets.symmetric(\n                      vertical: Paddings.listSeparator,\n                    ),\n                    child: Row(\n                      mainAxisAlignment: MainAxisAlignment.end,\n                      children: [\n                        IconButton(\n                            onPressed: widget._backCallback,\n                            icon: const Icon(Icons.arrow_back)),\n                        ElevatedButton(\n                          style: ElevatedButton.styleFrom(\n                            backgroundColor:\n                                Theme.of(context).colorScheme.primary,\n                            foregroundColor:\n                                Theme.of(context).colorScheme.onPrimary,\n                          ),\n                          onPressed: () {\n                            context.read<PrayerRequestBloc>().add(\n                                  PrayerRequestFilledDateEvent(\n                                    date: _date.copyWith(\n                                      hour: selected.first.time.hour,\n                                      minute: selected.first.time.minute,\n                                    ),\n                                    prayerType: selected.first,\n                                  ),\n                                );\n                            // execute callback or nothing\n                            Function fun = widget._callback ?? () {};\n                            fun();\n                          },\n                          child: const Text(\"Suivant\"),\n                        ),\n                      ],\n                    ),\n                  ),\n                ],\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n    return FormsLayoutBase(child: child);\n  }\n}\n\nclass PrayerCollectView extends StatefulWidget {\n  const PrayerCollectView({super.key, Function? callback})\n      : _callback = callback;\n\n  final Function? _callback;\n\n  @override\n  State<PrayerCollectView> createState() => _PrayerCollectViewState();\n}\n\nclass _PrayerCollectViewState extends State<PrayerCollectView> {\n  final TextEditingController _email = TextEditingController();\n  final TextEditingController _name = TextEditingController();\n  final TextEditingController _prayer = TextEditingController();\n\n  late final GlobalKey<FormState> _formKey;\n\n  PrayerRequest? _request;\n  @override\n  void initState() {\n    _formKey = GlobalKey<FormState>(debugLabel: toString());\n    super.initState();\n\n    try {\n      _request = context.read<PrayerRequestBloc>().state.request;\n    } catch (e) {\n      _request = PrayerRequest(\n        name: \"Unknown\",\n        email: \"\",\n        prayer: \"(vide)\",\n        dateTime: DateTime.now(),\n        prayerType: PrayerType.rosary,\n      );\n    }\n    _name.text = _request?.name ?? \"\";\n    _email.text = _request?.email ?? \"\";\n    _prayer.text = _request?.prayer ?? \"\";\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    Axis direction =\n        (MediaQuery.of(context).size.width > ScreenSizes.extraLarge)\n            ? Axis.horizontal\n            : Axis.vertical;\n    final Widget child = Form(\n      key: _formKey,\n      child: Flex(\n        direction: direction,\n        children: [\n          Flexible(\n            flex: 3,\n            fit: FlexFit.tight,\n            child: Column(\n              mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n              crossAxisAlignment: CrossAxisAlignment.start,\n              children: [\n                Flexible(\n                  flex: 2,\n                  child: prayerDecorationImage,\n                ),\n                const Gap(Margins.large),\n                Flexible(\n                  // flex: 1,\n                  child: title,\n                ),\n                const Gap(Margins.large),\n                Container(\n                  alignment: Alignment.centerLeft,\n                  // padding: const EdgeInsets.only(\n                  // top: Paddings.big, bottom: Paddings.listSeparator),\n                  child: Text(\n                    AppLocalizations.of(context)!.proverb,\n                    style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                          color: prayerIntentionTextColor,\n                          fontStyle: FontStyle.italic,\n                        ),\n                  ),\n                ),\n                const Gap(Margins.large),\n                Flexible(\n                  // flex: 1,\n                  child: Align(\n                    alignment: Alignment.topLeft,\n                    child: Text(\n                      AppLocalizations.of(context)!.priersInvitation,\n                      style: Theme.of(context)\n                          .textTheme\n                          .bodyMedium\n                          ?.copyWith(color: prayerIntentionTextColor),\n                    ),\n                  ),\n                ),\n                const Gap(Margins.large),\n              ],\n            ),\n          ),\n          // const Gap(Paddings.big),\n          Flexible(\n            flex: 3,\n            child: Column(\n              mainAxisSize: MainAxisSize.max,\n              children: [\n                Flexible(\n                  flex: 1,\n                  child: Container(\n                    // margin: const EdgeInsets.symmetric(vertical: Paddings.big),\n                    padding: const EdgeInsets.all(Paddings.medium),\n                    decoration: BoxDecoration(\n                      color: Theme.of(context).colorScheme.surface,\n                      borderRadius: BorderRadius.circular(BorderSizes.small),\n                    ),\n                    child: Column(\n                      mainAxisSize: MainAxisSize.min,\n                      children: [\n                        Align(\n                          alignment: Alignment.centerLeft,\n                          child: Text(\n                            AppLocalizations.of(context)!\n                                .prayerRequestInvitation,\n                            style: Theme.of(context).textTheme.titleSmall,\n                          ),\n                        ),\n                        //name and First name\n                        Padding(\n                          padding: const EdgeInsets.symmetric(\n                              vertical: Paddings.listSeparator),\n\n                          /// Name\n                          child: TextFormField(\n                            controller: _name,\n                            decoration: InputDecoration(\n                              helperText:\n                                  AppLocalizations.of(context)!.optional,\n                              label: Text(AppLocalizations.of(context)!\n                                  .nameAndFirstName),\n                            ),\n                          ),\n                        ),\n\n                        /// Email\n                        Padding(\n                          padding: const EdgeInsets.only(\n                              bottom: Paddings.listSeparator),\n                          child: TextFormField(\n                            controller: _email,\n                            decoration: const InputDecoration(\n                              label: Text(\"Email*\"),\n                            ),\n                            validator: (value) {\n                              if (!isValidEmail(value ?? \"\")) {\n                                return AppLocalizations.of(context)!\n                                    .invalidEmail;\n                              }\n\n                              return null;\n                            },\n                          ),\n                        ),\n\n                        /// Prayer\n                        Flexible(\n                          child: TextFormField(\n                            // minLines: 5,\n                            maxLines: 10,\n                            controller: _prayer,\n                            // maxLines: 3,\n                            decoration: InputDecoration(\n                              // constraints: const BoxConstraints(minHeight: 250),\n                              label: Text(\n                                  \"${AppLocalizations.of(context)!.priers}*\"),\n                              hintText:\n                                  AppLocalizations.of(context)!.yourPrayer,\n                            ),\n                            validator: (value) {\n                              if (value == null || value == \"\") {\n                                return AppLocalizations.of(context)!\n                                    .cantBeEmpty;\n                              }\n                              return null;\n                            },\n                          ),\n                        ),\n                      ],\n                    ),\n                  ),\n                ),\n\n                const Gap(45),\n\n                /// Buttons\n                Container(\n                  alignment: Alignment.centerRight,\n                  // padding: const EdgeInsets.only(bottom: Paddings.listSeparator),\n                  child: ElevatedButton(\n                    style: ElevatedButton.styleFrom(\n                      backgroundColor: Theme.of(context).colorScheme.secondary,\n                      foregroundColor: Theme.of(context).colorScheme.onSurface,\n                    ),\n                    onPressed: () {\n                      if (_formKey.currentState!.validate()) {\n                        trySnack(() {\n                          // execute callback or nothing\n                          if (widget._callback != null) widget._callback!();\n                          context.read<PrayerRequestBloc>().add(\n                                PrayerRequestFilledFormEvent(\n                                  name: _name.value.text,\n                                  email: _email.value.text,\n                                  prayer: _prayer.value.text,\n                                ),\n                              );\n                        }, context);\n                      }\n                    },\n                    child: Text(AppLocalizations.of(context)!.sendPray),\n                  ),\n                ),\n              ],\n            ),\n          ),\n        ],\n      ),\n    );\n\n    return FormsLayoutBase(\n      child: child,\n    );\n  }\n}\n\n/// Prayer request confirmation page.\nclass ReviewPrayerView extends StatefulWidget {\n  const ReviewPrayerView({\n    super.key,\n    VoidCallback? callback,\n    VoidCallback? backCallback,\n  })  : _callback = callback,\n        _backCallback = backCallback;\n\n  /// callback\n  final VoidCallback? _callback;\n\n  /// back callback\n  final VoidCallback? _backCallback;\n\n  @override\n  State<ReviewPrayerView> createState() => _ReviewPrayerState();\n}\n\nclass _ReviewPrayerState extends State<ReviewPrayerView> {\n  @override\n  Widget build(BuildContext context) {\n    PrayerRequest? request = context.watch<PrayerRequestBloc>().state.request;\n\n    Widget contentView = Container(\n      padding: const EdgeInsets.all(Margins.medium),\n      decoration: BoxDecoration(\n        color: Theme.of(context).colorScheme.surface,\n        borderRadius: BorderRadius.circular(38),\n      ),\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          if (request?.name != null)\n            FittedBox(\n              fit: BoxFit.scaleDown,\n              child: Text(\n                \"${request?.name},\",\n                style: const TextStyle(\n                  fontFamily: 'Aileron',\n                  fontWeight: FontWeight.w600,\n                  fontSize: 36,\n                ),\n              ),\n            ),\n          Text(AppLocalizations.of(context)!.wePrayOn),\n          InkWell(\n            splashFactory: InkRipple.splashFactory,\n            canRequestFocus: true,\n            enableFeedback: true,\n            onTap: widget._backCallback,\n            child: request != null\n                ? Text(\n                    AppLocalizations.of(context)!.prayingDate(\n                      request.prayerType.localizedToStringWithArticle(context),\n                      request.dateTime,\n                      request.dateTime,\n                    ),\n                    style: TextStyle(\n                      fontFamily: 'Aileron',\n                      fontWeight: FontWeight.bold,\n                      color: Theme.of(context).primaryColor,\n                      fontSize: 26,\n                    ),\n                  )\n                : const SizedBox.shrink(),\n          ),\n          Padding(\n            padding:\n                const EdgeInsets.symmetric(vertical: Paddings.listSeparator),\n            child: Text(\n              \"\\\"${request?.prayer}\\\"\",\n              style: const TextStyle(\n                fontStyle: FontStyle.italic,\n                fontWeight: FontWeight.bold,\n              ),\n            ),\n          ),\n          Text(\n            \"-${request?.email}\",\n            style: Theme.of(context).textTheme.labelSmall,\n          ),\n          Container(\n            padding: const EdgeInsets.symmetric(\n              vertical: Paddings.listSeparator,\n            ),\n            child: Row(\n              mainAxisAlignment: MainAxisAlignment.end,\n              children: [\n                TextButton.icon(\n                  onPressed: widget._backCallback,\n                  label: const Text(\"Modifier\"),\n                  icon: const Icon(Icons.arrow_back),\n                ),\n                ElevatedButton(\n                  style: ElevatedButton.styleFrom(\n                    backgroundColor: Theme.of(context).colorScheme.primary,\n                    foregroundColor: Theme.of(context).colorScheme.onPrimary,\n                  ),\n                  onPressed: (request != null)\n                      ? () {\n                          context.read<PrayerRequestBloc>().add(\n                                PrayerRequestCompletedEvent(\n                                  name: request.name,\n                                  email: request.email,\n                                  prayer: request.prayer,\n                                  date: request.dateTime,\n                                  prayerType: request.prayerType,\n                                ),\n                              );\n                          context\n                              .read<PrayerRequestBloc>()\n                              .add(PrayerRequestInitializeEvent());\n\n                          if (widget._callback != null) widget._callback!();\n                        }\n                      : null,\n                  child: const Text(\"Confirmer\"),\n                ),\n              ],\n            ),\n          )\n        ],\n      ),\n    );\n\n    Widget child = Column(\n      children: [\n        Flexible(\n          flex: 2,\n          child: prayerDecorationImage,\n        ),\n        contentView,\n      ],\n    );\n\n    return FormsLayoutBase(child: child);\n  }\n}\n\n/// Title of the prayer request prompt.\nfinal Widget title = Builder(\n  builder: (context) => Text(\n    AppLocalizations.of(context)!.priesIntention,\n    style: Theme.of(context).textTheme.headlineLarge!.copyWith(\n          color: prayerIntentionTextColor,\n        ),\n  ),\n);\n\nWidget prayerDecorationImage = Container(\n  // width: 215,\n  // height: 141,\n  decoration: BoxDecoration(\n    image: DecorationImage(\n      fit: BoxFit.contain,\n      image: AssetImage(\n        AhlAssets.praying,\n      ),\n    ),\n  ),\n);\n\nvoid trySnack(\n  Function fun,\n  BuildContext context, {\n  String message = \"Erreur Server. Recharger la page!\",\n}) {\n  try {\n    fun();\n  } catch (e) {\n    ScaffoldMessenger.of(context).showSnackBar(\n      SnackBar(\n        action: SnackBarAction(\n          label: 'Close',\n          onPressed: () {},\n        ),\n        content: Text(\n          message,\n          style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                color: Theme.of(context).colorScheme.error,\n              ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/prayers_space/view.dart",
    "content": "import 'package:ahl/src/rosary/rosary.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:gap/gap.dart';\n\nimport '../../ahl_barrel.dart';\nimport '../widgets/widgets.dart';\nimport '../prayers_intention/prayer_request.dart';\n// import 'package:ahl/src/prayers_intention/prayers_intention.dart';\n\nclass PrayerSpaceView extends StatelessWidget {\n  const PrayerSpaceView({super.key});\n\n  static void showAvailableSoonSnackBar(BuildContext context) {\n    ScaffoldMessenger.maybeOf(context)?.showSnackBar(\n      SnackBar(\n        backgroundColor: Theme.of(context).colorScheme.tertiaryContainer,\n        content: Row(\n          mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n          children: [\n            Text(\n              AppLocalizations.of(context)!.availableSoon,\n              style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                    color: Theme.of(context).colorScheme.onTertiaryContainer,\n                  ),\n            ),\n            IconButton(\n              onPressed: () => ScaffoldMessenger.of(context).clearSnackBars(),\n              icon: Icon(\n                Icons.close_rounded,\n                color: Theme.of(context).colorScheme.onTertiaryContainer,\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n\n  static final saintCard = Builder(\n    builder: (context) => Padding(\n      padding: const EdgeInsets.all(Paddings.big),\n      child: PromptCard(\n        callback: () => showAvailableSoonSnackBar(context),\n        backgroundImage: AssetImage(\n          AhlAssets.heroBkAlt,\n        ),\n        title: Text(\n          AppLocalizations.of(context)!.todaySaint,\n        ),\n        subtitle: Text(\n          AppLocalizations.of(context)!.availableSoon,\n        ),\n      ),\n    ),\n  );\n\n  static final officeCard = Builder(\n    builder: (context) => Padding(\n      padding: const EdgeInsets.all(Paddings.big),\n      child: PromptCard(\n        callback: () => showAvailableSoonSnackBar(context),\n        backgroundImage: AssetImage(\n          AhlAssets.heroBkAlt,\n        ),\n        title: Text(\n          AppLocalizations.of(context)!.office,\n        ),\n        subtitle: Text(\n          AppLocalizations.of(context)!.availableSoon,\n        ),\n      ),\n    ),\n  );\n  @override\n  Widget build(BuildContext context) {\n    final List<Widget> children = [\n      Gap(resolveSeparatorSize(context)),\n      // title\n      SectionTitle(\n        title: AppLocalizations.of(context)!.priesSpace,\n      ),\n      Wrap(\n        alignment: WrapAlignment.center,\n        direction: Axis.horizontal,\n        children: [\n          // rosary\n          const Padding(\n            padding: EdgeInsets.all(Paddings.big),\n            child: RosaryPrompt(),\n          ),\n          saintCard,\n          officeCard,\n          const SizedBox(\n            height: 45,\n          ),\n        ],\n      ),\n      // prayers intention\n      const Align(\n        alignment: Alignment.bottomCenter,\n        child: PrayersIntentionRequestView(),\n      ),\n    ];\n\n    return SpaceView(\n      useGradient: false,\n      headerImage: AssetImage(\n        AhlAssets.prayersSpaceCover,\n      ),\n      children: children,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/project_space/bloc.dart",
    "content": "import 'package:firebase_article/firebase_article.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'dart:developer' as developer;\n\nimport '../article_view/event/event.dart';\nimport '../article_view/state/state.dart';\n\nclass ProjectBloc extends Bloc<ArticleEvent, ArticleState<Article>> {\n  ProjectBloc({\n    required FirebaseFirestore firebaseFirestore,\n    String collection = 'projects',\n  })  : _repo = ArticlesRepository<Article>(\n          firestoreInstance: firebaseFirestore,\n          collection: collection,\n        ),\n        super(\n          const ArticleState<Article>(\n            status: ArticleStatus.initial,\n            error: null,\n          ),\n        ) {\n    on<GetArticleByIdEvent>(_onGetArticleById);\n    on<GetHighlightArticleEvent>(_onGetHighlightedArticle);\n    on<GetArticleListEvent>(_onGetArticleListEvent);\n    on<InitializeArticleBlocEvent>(_onInitializeArticleBlocEvent);\n    add(InitializeArticleBlocEvent());\n  }\n\n  final ArticlesRepository<Article> _repo;\n\n  void _onInitializeArticleBlocEvent(\n    InitializeArticleBlocEvent event,\n    Emitter emit,\n  ) {\n    emit(\n      state.copyWith(\n        status: ArticleStatus.initial,\n        error: null,\n      ),\n    );\n  }\n\n  void _onGetArticleById(GetArticleByIdEvent event, Emitter emit) async {\n    Object? error;\n    Article? result;\n    emit(\n      state.copyWith(status: ArticleStatus.initial,)\n    );\n    try {\n      result = await _repo.getArticleById(articleId: event.id!) as Article;\n    } catch (e) {\n      error = e;\n    }\n    if (result != null) {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.succeed,\n          articles: {event.id!: result},\n          error: null,\n        ),\n      );\n    } else {\n      emit(\n        state.copyWith(\n          status: ArticleStatus.failed,\n          articles: null,\n          error: error,\n        ),\n      );\n    }\n  }\n\n  void _onGetHighlightedArticle(\n      GetHighlightArticleEvent event, Emitter emit) async {\n    Object? error;\n    Article? result;\n\n    try {\n      result = await _repo.getHighlighted();\n\n      if (result != null) {\n        emit(\n          state.copyWith(\n            status: ArticleStatus.succeed,\n            articles: {\n              \"highLight\": result,\n              result.id: result,\n            },\n            error: null,\n            highlightArticle: result,\n          ),\n        );\n        developer.log('[ProjectBloc]: state: $state');\n      }\n    } catch (e) {\n      error = 'Error getting highlight article : $e';\n      if (result == null) {\n        emit(state.copyWith(\n          status: ArticleStatus.failed,\n          error: error,\n          articles: null,\n          // highlightArticle: null,\n        ));\n      }\n    } finally {}\n  }\n\n  void _onGetArticleListEvent(GetArticleListEvent event, Emitter emit) async {\n    try {\n      List<Article>? articles;\n      if (event.ids != null) {\n        developer.log('[ProjectBlocEvent] : ${event.ids}');\n        articles =\n            await _repo.getArticlesSubListByIds(event.ids!) as List<Article>;\n      }\n      if (event.foldLength != null) {\n        developer.log('[ProjectBlocEvent] : ${event.foldLength}');\n        articles = await _repo.getArticlesSubListByLength(event.foldLength!)\n            as List<Article>;\n      }\n\n      // build map articles\n      Map<String, Article>? mapArticles = (articles != null)\n          ? {for (var article in articles) article.id: article}\n          : null;\n      emit(\n        state.copyWith(\n            articles: mapArticles, status: ArticleStatus.succeed, error: null),\n      );\n    } catch (e) {\n      developer.log('[ProjectBloc] Error getting article list: $e');\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/project_space/model.dart",
    "content": "import 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nclass Project extends Article {\n  Project({\n    required super.id,\n    required super.title,\n    super.contentPath,\n    super.relations,\n    super.releaseDate,\n  });\n\n  String? get status {\n    return relations?[0]['status'];\n  }\n}\n\nextension LocalizedProject on Project {\n  static String? getProjectStatus(BuildContext context, String projectStatus) {\n    switch (projectStatus) {\n      case \"inProgress\":\n        return AppLocalizations.of(context)?.inProgress;\n      case \"waitingBudget\":\n        return AppLocalizations.of(context)?.waitingBudget;\n      case \"done\":\n        return AppLocalizations.of(context)?.done;\n      default:\n        return \"\";\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/project_space/view.dart",
    "content": "import 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/pages/homepage/donation/donation_page.dart';\nimport 'package:ahl/src/pages/projects/projects_page.dart';\nimport 'package:ahl/src/project_space/bloc.dart';\nimport 'package:ahl/src/utils/storage_utils.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'dart:developer' as developer;\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:session_storage/session_storage.dart';\n\nimport '../../ahl_barrel.dart';\nimport '../article_view/state/state.dart';\nimport '../theme/theme.dart';\nimport '../widgets/widgets.dart';\nimport 'model.dart';\n\nclass ProjectsSpaceView extends StatefulWidget {\n  const ProjectsSpaceView({super.key});\n\n  @override\n  State<ProjectsSpaceView> createState() => _ProjectsSpaceViewState();\n}\n\nclass _ProjectsSpaceViewState extends State<ProjectsSpaceView>\n    with AutomaticKeepAliveClientMixin {\n  List<ArticleStorageUtils> storageUtils = [];\n  late List<Future> futureImageCovers;\n\n  ArticleState<Article>? state;\n\n  Map<String, Article?>? projects;\n\n  final SessionStorage _cache = SessionStorage();\n  final String _projectsCardsKey = '_ProjectCardsKey';\n\n  @override\n  void initState() {\n    super.initState();\n\n    final ProjectBloc bloc = context.read<ProjectBloc>();\n\n    // Listen for state changes\n    bloc.stream.listen(\n      (incomingState) {\n        updateState(\n          incomingState,\n        );\n      },\n    );\n\n    // Fetch the initial project list\n    bloc.add(const GetArticleListEvent(foldLength: 3));\n\n    // Initialize state\n    state = bloc.state;\n\n    updateState(state!);\n  }\n\n  void updateState(ArticleState<Article> incomingState) {\n    setState(\n      () {\n        state = incomingState;\n        projects = state?.articles;\n\n        /// Build firebase storage utils for each project.\n        if (projects != null) {\n          for (var project in projects!.values) {\n            storageUtils.add(\n              ArticleStorageUtils(\n                article: project!,\n                collection: 'projects',\n              ),\n            );\n          }\n        }\n\n        /// Launch get image for each of the Storage utils.\n        if (storageUtils.isNotEmpty) {\n          futureImageCovers = storageUtils\n              .map<Future>(\n                (element) => element.getCoverImage(),\n              )\n              .toList();\n        }\n      },\n    );\n\n    developer.log('state in projects has changed: $incomingState');\n  }\n\n  @override\n  bool get wantKeepAlive {\n    if (_cache[_projectsCardsKey] != null &&\n        _cache[_projectsCardsKey] == \"true\") {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n\n    if (state == null) {\n      return const Padding(\n        padding: EdgeInsets.symmetric(vertical: Paddings.big),\n        child: LinearProgressIndicator(),\n      );\n    }\n    // Transform project list into widgets\n    final projectCards = buildProjectCards(state?.articles?.values.toList());\n\n    return SpaceView(\n      useGradient: false,\n      // headerImage: AssetImage(AhlAssets.projectSpaceCover),\n      children: [\n        // Title\n        SectionTitle(\n          titleColor: AhlTheme.blackCharcoal,\n          title: AppLocalizations.of(context)!.projectsSpace,\n          subtitle: AppLocalizations.of(context)!.projectsSpaceSubtitle,\n        ),\n        // Introduction\n        Container(\n          constraints: BoxConstraints(\n            maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n          ),\n          padding: const EdgeInsets.all(Paddings.medium),\n          child: Text(\n            AppLocalizations.of(context)!.projectsSpaceIntroduction,\n          ),\n        ),\n        // Projects Carousel\n        Wrap(\n          alignment: WrapAlignment.center,\n          direction: Axis.horizontal,\n          runSpacing: Paddings.listSeparator,\n          spacing: Paddings.listSeparator,\n          children: projectCards,\n        ),\n        // Buttons\n        Padding(\n          padding: const EdgeInsets.symmetric(\n            horizontal: 8.0,\n            // vertical: Paddings.huge,\n          ).copyWith(top: Paddings.huge),\n          child: Wrap(\n            alignment: WrapAlignment.center,\n            crossAxisAlignment: WrapCrossAlignment.center,\n            runAlignment: WrapAlignment.center,\n            direction: Axis.horizontal,\n            spacing: 20,\n            runSpacing: 20,\n            children: [\n              TextButton(\n                onPressed: () {\n                  context.goNamed(\n                    DonationPage.routeName,\n                  );\n                },\n                child: Text(AppLocalizations.of(context)!.supportProject),\n              ),\n              const SizedBox(width: Paddings.listSeparator),\n              ElevatedButton(\n                style: ElevatedButton.styleFrom(\n                  backgroundColor: Theme.of(context).colorScheme.primary,\n                  foregroundColor: Theme.of(context).colorScheme.onPrimary,\n                ),\n                onPressed: () {\n                  context.goNamed(ProjectsPage.routeName);\n                },\n                child: Text(AppLocalizations.of(context)!.allProjects),\n              ),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n\n  Widget buildCard(BuildContext context, Uint8List imageData, Article project) {\n    return AhlCard(\n      callback: () {\n        // Navigator.push(\n        //   context,\n        //   MaterialPageRoute(\n        //     builder: (context) => ProjectPageView(\n        //       collection: projectsCollection,\n        //       project: project,\n        //     ),\n        //   ),\n        // );\n        context.go(\n          \"/${ProjectsPage.routeName}/${project.id}\",\n        );\n\n        log(\"${project.contentPath}\");\n      },\n      image: Container(\n        // margin: const EdgeInsets.all(Paddings.medium),\n        decoration: BoxDecoration(\n          image: DecorationImage(\n            image: MemoryImage(imageData),\n            fit: BoxFit.cover,\n          ),\n          borderRadius: BorderRadius.circular(BorderSizes.small),\n        ),\n      ),\n      label: Text(\n        LocalizedProject.getProjectStatus(\n                context, \"${project.relations?[0]['status']}\") ??\n            \"\",\n      ),\n      title: Text(\n        \"${project.title}\",\n      ),\n    );\n  }\n\n  List<Widget> buildProjectCards(List<Article?>? projects) {\n    _cache[_projectsCardsKey] = \"true\";\n\n    return (projects != null)\n        ? projects.map<Widget>((project) {\n            if (project != null) {\n              final futureImageCover =\n                  futureImageCovers[projects.indexOf(project)];\n              return FutureBuilder(\n                future: futureImageCover,\n                builder: (context, snapshot) {\n                  if (snapshot.hasData) {\n                    return buildCard(\n                      context,\n                      snapshot.data!,\n                      project,\n                    );\n                  } else {\n                    return Container(\n                      height: 250,\n                      width: 270,\n                      alignment: Alignment.center,\n                      child: const CircularProgressIndicator(),\n                    );\n                  }\n                },\n              );\n            } else {\n              return const SizedBox.shrink();\n            }\n          }).toList()\n        : [];\n    // } else {\n    //   return projects!.map<Widget>(\n    //     (project) {\n    //       final storageUtil = storageUtils?[projects.indexOf(project)];\n    //       return buildCard(\n    //           context,\n    //           decodeUint8ListFromString(\n    //             storageUtil!.cache[storageUtil.coverImageDataKey]!,\n    //           ),\n    //           project!);\n    //     },\n    //   ).toList();\n    // }\n  }\n}\n\nclass ProjectsCarousel extends StatefulWidget {\n  const ProjectsCarousel({\n    super.key,\n    required this.children,\n  });\n  final List<Widget> children;\n\n  @override\n  State<ProjectsCarousel> createState() => _ProjectsCarouselState();\n}\n\nclass _ProjectsCarouselState extends State<ProjectsCarousel> {\n  late PageController _pageController;\n  late ScrollController _listController;\n  late int _currentIndex;\n  // final int _opacity = 0x25;\n\n  bool _isHovered = false;\n\n  @override\n  void initState() {\n    super.initState();\n\n    _pageController = PageController(\n      keepPage: true,\n    );\n\n    _listController = ScrollController();\n    _currentIndex = 0;\n  }\n\n  void updateCurrentIndex(int value) {\n    int oldIndex = _currentIndex;\n    print('{list} Current old: $oldIndex');\n    setState(() {\n      _currentIndex = value % widget.children.length;\n\n      developer.log('Screen size: ${MediaQuery.of(context).size.width}');\n    });\n    if (MediaQuery.of(context).size.width <= ScreenSizes.small) {\n      print('{page}Current Index: $_currentIndex');\n\n      _pageController.animateToPage(\n        _currentIndex,\n        duration: const Duration(milliseconds: 300),\n        curve: Curves.easeInOutBack,\n      );\n    } else {\n      print('{list} Current Index: $_currentIndex');\n\n      _listController.animateTo(\n        350.0 * (_currentIndex - oldIndex),\n        duration: const Duration(milliseconds: 300),\n        curve: Curves.easeInOutBack,\n      );\n    }\n  }\n\n  @override\n  void dispose() {\n    _pageController.dispose();\n    _listController.dispose();\n    super.dispose();\n  }\n\n  void isHovered(bool isHovered) {\n    setState(\n      () => _isHovered = isHovered,\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return ConstrainedBox(\n      constraints: const BoxConstraints(maxHeight: 493 + 15 * 2 + 10),\n      child: Stack(\n        children: [\n          Column(\n            mainAxisSize: MainAxisSize.min,\n            children: [\n              Flexible(\n                child: ConstrainedBox(\n                  constraints: BoxConstraints.loose(\n                    const Size.fromHeight(493),\n                  ),\n                  child: (MediaQuery.of(context).size.width <=\n                          ScreenSizes.small)\n                      ? PageView(\n                          controller: _pageController,\n                          onPageChanged: (value) => updateCurrentIndex(value),\n                          children: widget.children,\n                        )\n                      : ListView(\n                          controller: _listController,\n                          scrollDirection: Axis.horizontal,\n                          shrinkWrap: false,\n                          children: widget.children,\n                        ),\n                ),\n              ),\n              Padding(\n                padding: const EdgeInsets.symmetric(\n                    vertical: Paddings.listSeparator),\n                child: CustomPageIndicator(\n                  pageCount: widget.children.length,\n                  currentIndex: _currentIndex,\n                ),\n              )\n            ],\n          ),\n          Align(\n            alignment: Alignment.centerLeft,\n            child: InkWell(\n              onTap: () {\n                updateCurrentIndex(_currentIndex - 1);\n              },\n              onHover: isHovered,\n              child: AnimatedContainer(\n                duration: const Duration(milliseconds: 300),\n                color:\n                    Theme.of(context).colorScheme.secondaryContainer.withAlpha(\n                          _isHovered ? 0xAA : 0x25,\n                        ),\n                child: const Icon(\n                  Icons.keyboard_arrow_left,\n                  size: 48,\n                ),\n              ),\n            ),\n          ),\n          Align(\n            alignment: Alignment.centerRight,\n            child: InkWell(\n              onTap: () {\n                updateCurrentIndex(_currentIndex + 1);\n              },\n              onHover: isHovered,\n              child: AnimatedContainer(\n                duration: const Duration(milliseconds: 300),\n                color:\n                    Theme.of(context).colorScheme.secondaryContainer.withAlpha(\n                          _isHovered ? 0xAA : 0x25,\n                        ),\n                child: const Icon(\n                  Icons.keyboard_arrow_right,\n                  size: 48,\n                ),\n              ),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass AhlCard extends StatefulWidget {\n  const AhlCard({\n    super.key,\n    this.constraints,\n    this.outerDecoration,\n    required this.image,\n    this.title,\n    this.label,\n    this.description,\n    this.content,\n    this.callback,\n  });\n\n  final BoxConstraints? constraints;\n  final BoxDecoration? outerDecoration;\n  final Widget image;\n  final Widget? title;\n  final Widget? label;\n  final Widget? description;\n  final VoidCallback? callback;\n\n  /// if [content] is provided then [title], [label] and [description] is omitted.\n  final Widget? content;\n\n  @override\n  State<AhlCard> createState() => _AhlCardState();\n}\n\nclass _AhlCardState extends State<AhlCard> with SingleTickerProviderStateMixin {\n  bool _isHovered = false;\n  late AnimationController animation;\n\n  @override\n  void initState() {\n    super.initState();\n    animation = AnimationController(vsync: this);\n  }\n\n  void setHoveringTo(bool isHovered) {\n    setState(\n      () => _isHovered = isHovered,\n    );\n    if (isHovered) {\n      animation.forward();\n    } else {\n      animation.reverse();\n    }\n  }\n\n  @override\n  void dispose() {\n    animation.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // double borderThickness = _isHovered ? 5 : 3;\n    BorderRadius borderRadius = BorderRadius.circular(BorderSizes.big);\n    return LayoutBuilder(\n      builder: (context, constraints) => Container(\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n        ),\n        padding: const EdgeInsets.all(Paddings.medium),\n        child: Material(\n          clipBehavior: Clip.antiAliasWithSaveLayer,\n          borderOnForeground: true,\n          borderRadius: borderRadius,\n          child: InkWell(\n            onHover: (value) {\n              setHoveringTo(value);\n            },\n            onTap: () {\n              // Implement navigation to article view\n              if (widget.callback != null) widget.callback!();\n            },\n            child: AnimatedContainer(\n              duration: const Duration(milliseconds: 300),\n              curve: Curves.easeInOut,\n              clipBehavior: Clip.hardEdge,\n              constraints: widget.constraints ??\n                  const BoxConstraints(\n                    maxHeight: 270,\n                    maxWidth: 278,\n                  ),\n              decoration: widget.outerDecoration ??\n                  BoxDecoration(\n                    border: Border.all(\n                      strokeAlign: BorderSide.strokeAlignInside,\n                      width: 3, //borderThickness,\n                      color: _isHovered\n                          ? Theme.of(context).primaryColor\n                          : AhlTheme.lightGrey,\n                      style: BorderStyle.solid,\n                    ),\n                    borderRadius: borderRadius,\n                  ),\n              child: ConstrainedBox(\n                constraints: const BoxConstraints(maxHeight: 770),\n                child: Column(\n                  mainAxisSize: MainAxisSize.min,\n                  children: [\n                    Flexible(\n                      child: Container(\n                        margin: const EdgeInsets.all(Paddings.medium),\n                        clipBehavior: Clip.antiAlias,\n                        decoration: BoxDecoration(\n                          // image: DecorationImage(\n                          //   image: MemoryImage(snapshot.data!),\n                          //   fit: BoxFit.cover,\n                          // ),\n                          borderRadius:\n                              BorderRadius.circular(BorderSizes.small),\n                        ),\n                        child: widget.image\n                            .animate(controller: animation, autoPlay: false)\n                            .scale(\n                              begin: const Offset(1, 1),\n                              end: const Offset(1.25, 1.25),\n                            ),\n                      ),\n                    ),\n                    widget.content ??\n                        Container(\n                          // constraints: const BoxConstraints.expand(height: 100),\n                          padding: const EdgeInsets.all(\n                            Paddings.medium,\n                          ),\n                          alignment: Alignment.centerLeft,\n                          child: Column(\n                            mainAxisSize: MainAxisSize.min,\n                            mainAxisAlignment: MainAxisAlignment.start,\n                            crossAxisAlignment: CrossAxisAlignment.start,\n                            children: [\n                              /// Label\n                              DefaultTextStyle(\n                                  style: Theme.of(context)\n                                      .textTheme\n                                      .labelMedium!\n                                      .copyWith(\n                                        overflow: TextOverflow.ellipsis,\n                                      ),\n                                  child:\n                                      widget.label ?? const SizedBox.shrink()),\n\n                              /// title\n                              DefaultTextStyle(\n                                style: Theme.of(context)\n                                    .textTheme\n                                    .headlineMedium!\n                                    .copyWith(\n                                      overflow: TextOverflow.ellipsis,\n                                    ),\n                                child: widget.title ?? const SizedBox.shrink(),\n                              ),\n\n                              /// Description\n                              DefaultTextStyle(\n                                style: Theme.of(context)\n                                    .textTheme\n                                    .bodyMedium!\n                                    .copyWith(\n                                      overflow: TextOverflow.ellipsis,\n                                    ),\n                                child: widget.description ??\n                                    const SizedBox.shrink(),\n                              ),\n                            ],\n                          ),\n                        ),\n                  ],\n                ),\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass CustomPageIndicator extends StatefulWidget {\n  final int pageCount;\n  final int currentIndex;\n\n  const CustomPageIndicator(\n      {super.key, required this.pageCount, required this.currentIndex});\n\n  @override\n  _CustomPageIndicatorState createState() => _CustomPageIndicatorState();\n}\n\nclass _CustomPageIndicatorState extends State<CustomPageIndicator> {\n  @override\n  Widget build(BuildContext context) {\n    return Row(\n      mainAxisAlignment: MainAxisAlignment.center,\n      children: List.generate(widget.pageCount, (index) => _buildDot(index)),\n    );\n  }\n\n  Widget _buildDot(int index) {\n    return AnimatedContainer(\n      duration: const Duration(milliseconds: 200),\n      curve: Curves.easeInOutBack,\n      margin: const EdgeInsets.symmetric(horizontal: Margins.small),\n      decoration: BoxDecoration(\n        color: index == widget.currentIndex\n            ? Theme.of(context).colorScheme.secondary\n            : Colors.grey,\n        borderRadius: BorderRadius.circular(4),\n      ),\n      width: index == widget.currentIndex ? 30.0 : 8.0,\n      height: 8.0,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/rosary/rosary.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:go_router/go_router.dart';\n\nimport '../pages/rosary/rosary_page.dart';\nimport '../widgets/widgets.dart';\nimport '../../ahl_barrel.dart';\n\npart 'rosary_prompt.dart';"
  },
  {
    "path": "lib/src/rosary/rosary_prompt.dart",
    "content": "part of 'rosary.dart';\n\nclass RosaryPrompt extends StatelessWidget {\n  const RosaryPrompt({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    // todo: make it dynamic image with storage\n    // final Reference imageRef =\n    //     storage.child('/static/sj.jpg');\n    // final imageUrl = imageRef.getDownloadURL();\n\n    // var image = imageRef.getData();\n\n    return PromptCard(\n      callback: () => context.goNamed(RosaryPage.routeName),\n      backgroundImage: AssetImage(\n        AhlAssets.rosaryHeroHeader,\n      ),\n      title: Text(\n        AppLocalizations.of(context)!.todaysRosary,\n      ),\n      subtitle: Text(\n        AppLocalizations.of(context)!.rosarySlogan,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/sample_feature/sample_item.dart",
    "content": "/// A placeholder class that represents an entity or model.\nclass SampleItem {\n  const SampleItem(this.id);\n\n  final int id;\n}\n"
  },
  {
    "path": "lib/src/sample_feature/sample_item_details_view.dart",
    "content": "import 'package:flutter/material.dart';\n\n/// Displays detailed information about a SampleItem.\nclass SampleItemDetailsView extends StatelessWidget {\n  const SampleItemDetailsView({super.key});\n\n  static const routeName = '/sample_item';\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: const Text('Item Details'),\n      ),\n      body: const Center(\n        child: Text('More Information Here'),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/sample_feature/sample_item_list_view.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport '../settings/settings_view.dart';\nimport 'sample_item.dart';\nimport 'sample_item_details_view.dart';\n\n/// Displays a list of SampleItems.\nclass SampleItemListView extends StatelessWidget {\n  const SampleItemListView({\n    super.key,\n    this.items = const [SampleItem(1), SampleItem(2), SampleItem(3)],\n  });\n\n  static const routeName = '/';\n\n  final List<SampleItem> items;\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: const Text('Sample Items'),\n        actions: [\n          IconButton(\n            icon: const Icon(Icons.settings),\n            onPressed: () {\n              // Navigate to the settings page. If the user leaves and returns\n              // to the app after it has been killed while running in the\n              // background, the navigation stack is restored.\n              Navigator.restorablePushNamed(context, SettingsView.routeName);\n            },\n          ),\n        ],\n      ),\n\n      // To work with lists that may contain a large number of items, it’s best\n      // to use the ListView.builder constructor.\n      //\n      // In contrast to the default ListView constructor, which requires\n      // building all Widgets up front, the ListView.builder constructor lazily\n      // builds Widgets as they’re scrolled into view.\n      body: ListView.builder(\n        // Providing a restorationId allows the ListView to restore the\n        // scroll position when a user leaves and returns to the app after it\n        // has been killed while running in the background.\n        restorationId: 'sampleItemListView',\n        itemCount: items.length,\n        itemBuilder: (BuildContext context, int index) {\n          final item = items[index];\n\n          return ListTile(\n            title: Text('SampleItem ${item.id}'),\n            leading: const CircleAvatar(\n              // Display the Flutter Logo image asset.\n              foregroundImage: AssetImage('assets/images/flutter_logo.png'),\n            ),\n            onTap: () {\n              // Navigate to the details page. If the user leaves and returns to\n              // the app after it has been killed while running in the\n              // background, the navigation stack is restored.\n              Navigator.restorablePushNamed(\n                context,\n                SampleItemDetailsView.routeName,\n              );\n            }\n          );\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/settings/settings_controller.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport 'settings_service.dart';\n\n/// A class that many Widgets can interact with to read user settings, update\n/// user settings, or listen to user settings changes.\n///\n/// Controllers glue Data Services to Flutter Widgets. The SettingsController\n/// uses the SettingsService to store and retrieve user settings.\nclass SettingsController with ChangeNotifier {\n  SettingsController(this._settingsService);\n\n  // Make SettingsService a private variable so it is not used directly.\n  final SettingsService _settingsService;\n\n  // Make ThemeMode a private variable so it is not updated directly without\n  // also persisting the changes with the SettingsService.\n  late ThemeMode _themeMode;\n\n  // actual local\n  late List<Locale> _locales;\n\n  // Allow Widgets to read the user's preferred ThemeMode.\n  ThemeMode get themeMode => _themeMode;\n\n  // Changing language\n  List<Locale> get locales => _locales;\n\n  /// Load the user's settings from the SettingsService. It may load from a\n  /// local database or the internet. The controller only knows it can load the\n  /// settings from the service.\n  Future<void> loadSettings() async {\n    _themeMode = await _settingsService.themeMode();\n    _locales = await _settingsService.local();\n    // Important! Inform listeners a change has occurred.\n    notifyListeners();\n  }\n\n  /// Update and persist the ThemeMode based on the user's selection.\n  Future<void> updateThemeMode(ThemeMode? newThemeMode) async {\n    if (newThemeMode == null) return;\n\n    // Do not perform any work if new and old ThemeMode are identical\n    if (newThemeMode == _themeMode) return;\n\n    // Otherwise, store the new ThemeMode in memory\n    _themeMode = newThemeMode;\n\n    // Important! Inform listeners a change has occurred.\n    notifyListeners();\n\n    // Persist the changes to a local database or the internet using the\n    // SettingService.\n    await _settingsService.updateThemeMode(newThemeMode);\n  }\n\n  /// Update and persist the ThemeMode based on the user's selection.\n  Future<void> updateLocales(List<Locale>? newLocales) async {\n    if (newLocales == null) return;\n\n    // Do not perform any work if new and old ThemeMode are identical\n    if (newLocales == _locales) return;\n\n    // Otherwise, store the new ThemeMode in memory\n    _locales = newLocales;\n\n    // Important! Inform listeners a change has occurred.\n    notifyListeners();\n\n    // Persist the changes to a local database or the internet using the\n    // SettingService.\n    // await _settingsService.updateThemeMode(newThemeMode);\n  }\n}\n"
  },
  {
    "path": "lib/src/settings/settings_service.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\n/// A service that stores and retrieves user settings.\n///\n/// By default, this class does not persist user settings. If you'd like to\n/// persist the user settings locally, use the shared_preferences package. If\n/// you'd like to store settings on a web server, use the http package.\nclass SettingsService {\n  /// Loads the User's preferred ThemeMode from local or remote storage.\n  Future<ThemeMode> themeMode() async => ThemeMode.light;\n\n  /// Loads the User's preferred language\n  Future<List<Locale>> local() async => AppLocalizations.supportedLocales;\n\n  /// Persists the user's preferred ThemeMode to local or remote storage.\n  Future<void> updateThemeMode(ThemeMode theme) async {\n    // Use the shared_preferences package to persist settings locally or the\n    // http package to persist settings over the network.\n  }\n}\n"
  },
  {
    "path": "lib/src/settings/settings_view.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport 'settings_controller.dart';\n\n/// Displays the various settings that can be customized by the user.\n///\n/// When a user changes a setting, the SettingsController is updated and\n/// Widgets that listen to the SettingsController are rebuilt.\nclass SettingsView extends StatelessWidget {\n  const SettingsView({super.key, required this.controller});\n\n  static const routeName = '/settings';\n\n  final SettingsController controller;\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: const Text('Settings'),\n      ),\n      body: Padding(\n        padding: const EdgeInsets.all(16),\n        // Glue the SettingsController to the theme selection DropdownButton.\n        //\n        // When a user selects a theme from the dropdown list, the\n        // SettingsController is updated, which rebuilds the MaterialApp.\n        child: DropdownButton<ThemeMode>(\n          // Read the selected themeMode from the controller\n          value: controller.themeMode,\n          // Call the updateThemeMode method any time the user selects a theme.\n          onChanged: controller.updateThemeMode,\n          items: const [\n            DropdownMenuItem(\n              value: ThemeMode.system,\n              child: Text('System Theme'),\n            ),\n            DropdownMenuItem(\n              value: ThemeMode.light,\n              child: Text('Light Theme'),\n            ),\n            DropdownMenuItem(\n              value: ThemeMode.dark,\n              child: Text('Dark Theme'),\n            )\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/theme/theme.dart",
    "content": "import 'package:flutter/material.dart';\n\nimport '../utils/breakpoint_resolver.dart';\n\nclass AhlTheme {\n  AhlTheme._();\n\n  static const Color greenOlive = Color(0xFF728C6D);\n  static const Color yellowRelax = Color(0xFFFFD166);\n  static const Color yellowLight = Color(0xFFFFF9E6);\n  static const Color blackCharcoal = Color(0xFF282828);\n  static const Color blueNight = Color(0xFF36454F);\n  static const Color darkNight = Color(0xFF1A202C);\n  static const Color lightGrey = Color(0xFF8E8E8E);\n  static const Color affiche = Color(0xFFFFECC0);\n\n  static ThemeData lightTheme(double constraints) => ThemeData(\n        brightness: Brightness.light,\n        colorScheme: ColorScheme.fromSeed(\n          seedColor: greenOlive,\n          secondary: yellowRelax,\n          // secondaryContainer: yellowLight,\n          // s: yellowLight,\n        ),\n        inputDecorationTheme: const InputDecorationTheme(\n          border: OutlineInputBorder(),\n        ),\n        textTheme: textTheme,\n        useMaterial3: true,\n        iconTheme: const IconThemeData(size: 24.0),\n        buttonTheme: buttonTheme(constraints),\n      );\n\n  static const Color primaryColor = Color(0xFF007bff);\n  static const Color onPrimaryColor = Color(0xFFFFFFFF);\n  static const Color secondaryColor = Color(0xFF673ab7);\n  static const Color onSecondaryColor = Color(0xFFFFFFFF);\n  static const Color background = Color(0xFFFFFFFF);\n  static const Color onBackground = blackCharcoal; //Color(0xFF000000);\n  static const Color surface = Color(0xFFF2F2F2);\n  static const Color onSurface = Color(0xFF212121);\n  static const Color error = Color(0xFFF44336);\n  static const Color onError = Color(0xFFFFFFFF);\n\n  static const TextStyle displayLarge = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 57,\n    fontWeight: FontWeight.w900,\n    fontStyle: FontStyle.normal,\n    letterSpacing: -0.5,\n    color: onBackground,\n  );\n\n  static const TextStyle displayMedium = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 45,\n    fontWeight: FontWeight.w900,\n    fontStyle: FontStyle.normal,\n    letterSpacing: -0.25,\n    color: onBackground,\n  );\n\n  static const TextStyle displaySmall = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 36,\n    fontWeight: FontWeight.w900,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0,\n    color: onBackground,\n  );\n\n  static const TextStyle headlineLarge = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 32,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.15,\n    color: onBackground,\n  );\n\n  static const TextStyle headlineMedium = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 28,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.2,\n    color: onBackground,\n  );\n\n  static const TextStyle headlineSmall = TextStyle(\n    fontFamily: 'Butler',\n    fontSize: 24,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.15,\n    color: onBackground,\n  );\n\n  static const TextStyle titleLarge = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 22,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.1,\n    color: onBackground,\n  );\n\n  static const TextStyle titleMedium = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 16,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.1,\n    color: onBackground,\n  );\n\n  static const TextStyle titleSmall = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 14,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.05,\n    color: onBackground,\n  );\n\n  static const TextStyle bodyLarge = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 16,\n    fontWeight: FontWeight.w400,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.5,\n    color: onBackground,\n  );\n\n  static const TextStyle bodyMedium = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 14,\n    fontWeight: FontWeight.w400,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.25,\n    color: onBackground,\n  );\n\n  static const TextStyle bodySmall = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 12,\n    fontWeight: FontWeight.w400,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0.25,\n    color: onBackground,\n  );\n\n  static const TextStyle label = TextStyle(\n    fontFamily: 'Poppins',\n    fontSize: 14,\n    fontWeight: FontWeight.w500,\n    fontStyle: FontStyle.normal,\n    letterSpacing: 0,\n    color: onSurface,\n  );\n  static TextStyle labelMedium = label.copyWith(\n    fontSize: 12,\n    fontWeight: FontWeight.w400,\n  );\n\n  static TextStyle labelSmall = label.copyWith(\n    fontSize: 11,\n    fontWeight: FontWeight.w700,\n  );\n\n  static TextStyle name = // TextStyle(\n      //   fontFamily: 'Poppins',\n      //   fontSize: 12,\n      //   fontWeight: FontWeight.w400,\n      //   fontStyle: FontStyle.italic,\n      //   letterSpacing: 0,\n      //   color: onSurface,\n      // );\n      label;\n\n  static TextStyle peopleTitle =\n      // TextStyle(\n      //   fontFamily: 'Poppins',\n      //   fontSize: 10,\n      //   fontWeight: FontWeight.w400,\n      //   fontStyle: FontStyle.italic,\n      //   letterSpacing: 0,\n      //   color: Color(0xFF4d4d4d),\n      // );\n      labelSmall;\n\n  // static TextTheme textTheme = Typography.material2021().copyWith();\n  static TextTheme get textTheme => Typography.blackMountainView.copyWith(\n        displayLarge: displayLarge,\n        displayMedium: displayMedium,\n        displaySmall: displaySmall,\n        headlineLarge: headlineLarge,\n        headlineSmall: headlineSmall,\n        headlineMedium: headlineMedium,\n        titleLarge: titleLarge,\n        titleMedium: titleMedium,\n        titleSmall: titleSmall,\n        bodyLarge: bodyLarge,\n        bodyMedium: bodyMedium,\n        bodySmall: bodySmall,\n        labelLarge: label,\n        labelMedium: labelMedium,\n        labelSmall: labelSmall,\n      );\n\n  static const TextStyle buttonTextStyle = label;\n\n  static ButtonThemeData buttonTheme(double constraints) => ButtonThemeData(\n        alignedDropdown: true,\n        textTheme: ButtonTextTheme.normal,\n        height: resolveForBreakPoint<double>(\n          constraints,\n          other: 48,\n          small: 40,\n          medium: 40,\n          large: 40,\n        ),\n      );\n}\n"
  },
  {
    "path": "lib/src/utils/breakpoint_resolver.dart",
    "content": "import '../../ahl_barrel.dart';\nimport 'package:flutter/material.dart';\n\nT resolveForBreakPoint<T>(\n  double screenWidth, {\n  T? small,\n  T? medium,\n  T? large,\n  T? extraLarge,\n  T? huge,\n  T? extraHuge,\n  required T other,\n}) {\n  switch (screenWidth) {\n    case < ScreenSizes.small:\n      return small ?? other;\n\n    case > ScreenSizes.small && < ScreenSizes.medium:\n      return medium ?? other;\n\n    case > ScreenSizes.medium && < ScreenSizes.large:\n      return large ?? other;\n    case > ScreenSizes.large && < ScreenSizes.extraLarge:\n      return extraLarge ?? other;\n    case > ScreenSizes.extraLarge && < ScreenSizes.huge:\n      return huge ?? other;\n    case > ScreenSizes.huge:\n      return extraHuge ?? other;\n\n    default:\n      return other;\n  }\n}\n\nTextStyle? resolveLabelTextThemeForBreakPoints(\n    double constraints, BuildContext context) {\n  return resolveForBreakPoint<TextStyle?>(\n    constraints,\n    small: Theme.of(context).textTheme.labelSmall,\n    medium: Theme.of(context).textTheme.labelMedium,\n    other: Theme.of(context).textTheme.labelLarge,\n  );\n}\n\nTextStyle? resolveBodyTextThemeForBreakPoints(\n    double constraints, BuildContext context) {\n  return resolveForBreakPoint<TextStyle?>(\n    constraints,\n    small: Theme.of(context).textTheme.bodyMedium,\n    medium: Theme.of(context).textTheme.bodyMedium,\n    other: Theme.of(context).textTheme.bodyLarge,\n  );\n}\n\nTextStyle? resolveTitleTextThemeForBreakPoints(\n    double constraints, BuildContext context) {\n  return resolveForBreakPoint<TextStyle?>(\n    constraints,\n    small: Theme.of(context).textTheme.titleSmall,\n    medium: Theme.of(context).textTheme.titleMedium,\n    other: Theme.of(context).textTheme.titleLarge,\n  );\n}\n\nTextStyle? resolveHeadlineTextThemeForBreakPoints(\n    double constraints, BuildContext context) {\n  return resolveForBreakPoint<TextStyle?>(\n    constraints,\n    small: Theme.of(context).textTheme.headlineSmall,\n    medium: Theme.of(context).textTheme.headlineMedium,\n    other: Theme.of(context).textTheme.headlineLarge,\n  );\n}\n\nTextStyle? resolveDisplayTextThemeForBreakPoints(\n    double constraints, BuildContext context) {\n  return resolveForBreakPoint<TextStyle?>(\n    constraints,\n    small: Theme.of(context).textTheme.displaySmall,\n    medium: Theme.of(context).textTheme.displayMedium,\n    other: Theme.of(context).textTheme.displayLarge,\n  );\n}\n\ndouble resolveSeparatorSize(BuildContext context) {\n  return resolveForBreakPoint<double>(\n    MediaQuery.of(context).size.width,\n    small: 45,\n    medium: 45,\n    other: 50,\n  );\n}\n"
  },
  {
    "path": "lib/src/utils/date_time_utils.dart",
    "content": "import 'dart:developer';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/widgets.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nextension DateTimeUtils on DateTime {\n  static DateTime parseReleaseDate(String dateString) {\n    // dateString.split('/').map<int?>((e) => int.tryParse(e));\n    DateTime? date;\n    try {\n      date = DateTime.parse(dateString);\n    } on FormatException catch (e) {\n      log(\n        'Error formatting release date: e. The required format should follow this pattern: yyyy-mm-dd. ReleaseDate: $dateString',\n        error: e,\n      );\n    } catch (e, stacktrace) {\n      log('Error occurred when parsing Article.releaseDate',\n          error: e, stackTrace: stacktrace);\n    } finally {\n      date = date ?? DateTime.now();\n    }\n    return date;\n  }\n\n  static String localMonth(int month, BuildContext context) {\n    switch (month) {\n      case DateTime.january:\n        return AppLocalizations.of(context)!.january;\n      case DateTime.february:\n        return AppLocalizations.of(context)!.february;\n      case DateTime.march:\n        return AppLocalizations.of(context)!.march;\n      case DateTime.april:\n        return AppLocalizations.of(context)!.april;\n      case DateTime.may:\n        return AppLocalizations.of(context)!.may;\n      case DateTime.june:\n        return AppLocalizations.of(context)!.june;\n      case DateTime.july:\n        return AppLocalizations.of(context)!.july;\n      case DateTime.august:\n        return AppLocalizations.of(context)!.august;\n      case DateTime.september:\n        return AppLocalizations.of(context)!.september;\n      case DateTime.october:\n        return AppLocalizations.of(context)!.october;\n      case DateTime.november:\n        return AppLocalizations.of(context)!.november;\n      case DateTime.december:\n        return AppLocalizations.of(context)!.december;\n      default:\n        return 'Month';\n    }\n  }\n\n  static String localizedToString(\n      {required DateTime dateTime, required BuildContext context}) {\n    return \"${dateTime.day} ${localMonth(dateTime.month, context)} ${dateTime.year}\";\n  }\n\n  static String localizedFromStringDate(\n      {required String? dateString, required BuildContext context}) {\n    if (dateString == null || dateString.isEmpty) {\n      throw ArgumentError('dateString is empty or null');\n    }\n    DateTime dateTime = parseReleaseDate(dateString);\n\n    return localizedToString(dateTime: dateTime, context: context);\n  }\n}\n"
  },
  {
    "path": "lib/src/utils/firebase_utils.dart",
    "content": "String? getCollection(String path) {\n  List entry = path.split('/').where((element) => element != \"\").toList();\n  String? collection;\n  try {\n    collection = entry.getRange(0, entry.length - 1).join('/');\n  } on RangeError catch (_) {\n    return null;\n  }\n\n  if (collection.isEmpty) {\n    return null;\n  }\n  return collection;\n}\n"
  },
  {
    "path": "lib/src/utils/seo.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\n\nvoid setupSeo(BuildContext context) {\n  WidgetsBinding.instance.addPostFrameCallback((timestamp) {\n    CreateHtml.makeWidgetTree(context);\n  });\n}\n"
  },
  {
    "path": "lib/src/utils/storage_utils.dart",
    "content": "import 'dart:async';\nimport 'dart:convert';\nimport 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:firebase_storage/firebase_storage.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:session_storage/session_storage.dart';\n\nimport '../firebase_constants.dart';\n\nfinal class ArticleStorageUtils {\n  // Image of the cover image\n  Uint8List? coverImage;\n\n  // content response\n  http.Response? contentResponse;\n\n  // Cover image url\n  String? coverImageUrl;\n\n  ArticleStorageUtils({\n    required Article article,\n    required this.collection,\n    Reference? storageRef,\n  })  : _article = article,\n        coverImageUrlKey = '${article.id}_coverImageUrl',\n        coverImageDataKey = '${article.id}_coverImageData',\n        contentDataKey = '${article.id}_contentData',\n        _storage = storageRef ?? storage;\n\n  /// The article on which this utils perform\n  final Article _article;\n\n  /// Collection name where to look for items.\n  final String collection;\n\n  /// Key to trigger cover image data\n  final String coverImageDataKey;\n\n  // key to trigger cover image url from cache.\n  final String coverImageUrlKey;\n\n  // key to trigger cover image url from cache.\n  final String contentDataKey;\n\n  // Firebase storage instance\n  final Reference _storage;\n\n  final SessionStorage cache = SessionStorage();\n\n  /// Ask storage Reference the coverImage url.\n  Future<String?> getCoverImageUrl() async {\n    // Cache check\n\n    String? coverImageUrl = cache[coverImageUrlKey];\n    if (coverImageUrl != null) {\n      return coverImageUrl;\n    }\n\n    // perform true operation on database\n    final heroHeaderImageRef = _storage.child(\n      \"$collection/${_article.id}/${_article.relations?[0][RepoSetUp.coverImageKey]}\",\n      // \"articles/qui_est_laure_sabes/hero_header_image.jpg\",\n    );\n    try {\n      final String url = await heroHeaderImageRef.getDownloadURL();\n\n      // storing to cache\n      coverImageUrl = url;\n      cache[coverImageUrlKey] = coverImageUrl;\n    } catch (e) {\n      log('[storage] Error getting coverImage: e');\n      coverImageUrl = null;\n    }\n\n    return coverImageUrl;\n  }\n\n  Future<Uint8List?> getCoverImage() async {\n    if (coverImage != null) {\n      return coverImage;\n    }\n    Uint8List? data;\n    String? dataString = cache[coverImageDataKey];\n    //cache check\n    try {\n      data =\n          (dataString != null) ? decodeUint8ListFromString(dataString) : null;\n      if (data != null) {\n        coverImage = data;\n        return data;\n      }\n    } catch (e) {\n      log('[cache] Error getting data: $e');\n    }\n\n    // perform truth reading\n    try {\n      final heroHeaderImageRef = _storage.child(\n        \"$collection/${_article.id}/${_article.relations?[0][RepoSetUp.coverImageKey]}\",\n        // \"articles/qui_est_laure_sabes/hero_header_image.jpg\",\n      );\n      data = await heroHeaderImageRef.getData();\n      log('Image got: ${heroHeaderImageRef.name} ');\n\n      // write data to cache\n      cache[coverImageDataKey] = encodeUint8ListToString(data!);\n\n      // update coverImage\n    } catch (e) {\n      log('Error loading image: $e');\n      data = Uint8List(0);\n    }\n\n    coverImage = data;\n    return data;\n  }\n\n  /// Get the content of the article.\n  Future<http.Response?> getContent() async {\n    // cache\n    String? contentString = cache[contentDataKey];\n    http.Response? response =\n        (contentString != null) ? decodeStringToResponse(content) : null;\n    if (response != null) {\n      return response;\n    }\n\n    //perform true operation\n    final contentRef = storage.child(\n      \"$collection/${_article.id}/${_article.contentPath}\",\n      // \"articles/qui_est_laure_sabes/hero_header_image.jpg\",\n    );\n    final String url = await contentRef.getDownloadURL();\n\n    response = await http.get(Uri.parse(url));\n    cache[contentDataKey] = encodeResponseToString(response);\n\n    return response;\n  }\n}\n\n// Function to encode Response to string\nString encodeResponseToString(http.Response response) {\n  // Read the response body as a stream of bytes\n  final bytes = response.bodyBytes;\n  // Encode the bytes to a base64 string\n  final encodedBody = base64Encode(bytes);\n\n  // Extract other important fields from the response\n  final headers = response.headers;\n  final statusCode = response.statusCode;\n  final reasonPhrase = response.reasonPhrase;\n\n  // Combine all data into a JSON object\n  final data = {\n    'headers': headers.toString(),\n    'statusCode': statusCode,\n    'reasonPhrase': reasonPhrase,\n    'url': response.request?.url.toString(),\n    'body': encodedBody,\n    'baseRequest': {\n      'method': response.request?.method,\n      'contentLength': response.request?.contentLength,\n      'url': response.request?.url.toString(),\n      'finalized': response.request?.finalized,\n      'headers': response.request?.headers,\n      'followRedirects': response.request?.followRedirects,\n      'hashCode': response.request?.hashCode,\n      'maxRedirects': response.request?.maxRedirects,\n      'persistentConnection': response.request?.persistentConnection,\n      'runtimeType': response.request?.runtimeType,\n    }\n  };\n\n  // Convert the data map to a JSON string\n  return jsonEncode(data);\n}\n\nhttp.Response decodeStringToResponse(String encodedString) {\n  // Decode the JSON string into a map\n  final decodedData = jsonDecode(encodedString) as Map<String, dynamic>;\n\n  // Extract data from the map\n  final headers = Map<String, String>.from(decodedData['headers']);\n  final statusCode = decodedData['statusCode'] as int;\n  final reasonPhrase = decodedData['reasonPhrase'] as String;\n  final url = Uri.parse(decodedData['url'] as String);\n  final bodyBytes = base64Decode(decodedData['body'] as String);\n\n  // Extract request data (if available)\n  http.Request? request;\n  if (decodedData.containsKey('baseRequest')) {\n    final requestData = decodedData['baseRequest'] as Map<String, dynamic>;\n    request = http.Request(\n      requestData['method'] as String,\n      url,\n      // headers: Map<String, String>.from(requestData['headers']),\n      // bodyBytes: requestData['contentLength'] != null ? Uint8List.fromList(requestData['body'] as List) : null,\n    );\n  }\n\n  // Rebuild the Response object with the decoded data\n  return http.Response.bytes(\n    bodyBytes,\n    statusCode,\n    reasonPhrase: reasonPhrase,\n    headers: headers,\n    request: request,\n  );\n}\n\nString encodeUint8ListToString(Uint8List data) {\n  // Use the built-in converter to transform the list into a base64 encoded string\n  return base64Encode(data);\n}\n\nUint8List decodeUint8ListFromString(String encodedString) {\n  // Use the built-in converter to decode the base64 string back into a Uint8List\n  return base64Decode(encodedString);\n}\n"
  },
  {
    "path": "lib/src/validation/email_validation.dart",
    "content": "\nfinal emailRegex = RegExp(\n  r\"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$\",\n);\nbool isValidEmail(String email) => emailRegex.hasMatch(email);\n"
  },
  {
    "path": "lib/src/who_we_are/view.dart",
    "content": "import 'dart:developer';\n\nimport '../../ahl_barrel.dart';\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:ahl/src/pages/who_we_are/who_we_are.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:ahl/src/utils/storage_utils.dart';\nimport 'package:ahl/src/widgets/widgets.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:session_storage/session_storage.dart';\n\nimport '../project_space/view.dart';\n\nclass WhoWeAreSpace extends StatelessWidget {\n  const WhoWeAreSpace({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      alignment: Alignment.center,\n      // padding: EdgeInsets.symmetric(vertical: Paddings.huge),\n      child: Column(\n        children: [\n          // Padding(\n          // padding: const EdgeInsets.symmetric(vertical: Margins.large),\n          // child:\n          SectionTitle(\n            caretColor: Theme.of(context).primaryColor,\n            isUpperCase: false,\n            title: AppLocalizations.of(context)!.whoWeAre,\n            titleStyle: resolveHeadlineTextThemeForBreakPoints(\n              MediaQuery.of(context).size.width,\n              context,\n            ),\n            // ),\n          ),\n          const WhoWeAreTile(),\n        ],\n      ),\n    );\n  }\n}\n\nclass WhoWeAreTile extends StatefulWidget {\n  const WhoWeAreTile({super.key});\n\n  static const String imagePath = 'statics/who_we_are/les_soeurs_ndd.webp';\n  static const String titlePath = 'statics/setup';\n  static const String titleIndex = 'who_we_are_title';\n\n  @override\n  State<WhoWeAreTile> createState() => WhoWeAreTileState();\n}\n\nclass WhoWeAreTileState extends State<WhoWeAreTile>\n    with AutomaticKeepAliveClientMixin {\n  static const String whoWeAreImageKey = 'who_we_are_image_key';\n\n  static const String whoWeAreTitleKey = 'who_we_are_title_key';\n\n  static Uint8List? data;\n\n  static SessionStorage cache = SessionStorage();\n\n  String? _title;\n  static Future<Uint8List?> getImage() async {\n    data = await storage.child(WhoWeAreTile.imagePath).getData();\n    if (data != null) {\n      cache[whoWeAreImageKey] = encodeUint8ListToString(data!);\n    }\n    return data;\n  }\n\n  Future<String?> getTitle() async {\n    try {\n      DocumentSnapshot<Map<String, dynamic>> result =\n          await firestore.doc(WhoWeAreTile.titlePath).get();\n\n      _title = result.get(WhoWeAreTile.titleIndex) as String;\n      if (_title != null) {\n        cache[whoWeAreTitleKey] = _title!;\n      }\n    } catch (e) {\n      log('Error getting ${WhoWeAreTile.titlePath}');\n      _title = '';\n      return _title;\n    }\n    return _title;\n  }\n\n  @override\n  bool get wantKeepAlive {\n    if (cache[whoWeAreImageKey] != null && cache[whoWeAreTitleKey] != null) {\n      data = decodeUint8ListFromString(cache[whoWeAreImageKey]!);\n      _title = cache[whoWeAreTitleKey];\n\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    super.build(context);\n\n    BoxConstraints constraints = BoxConstraints(\n      maxWidth: ContentSize.maxWidth(\n        MediaQuery.of(context).size.width,\n      ),\n      maxHeight: resolveForBreakPoint(\n        MediaQuery.of(context).size.width,\n        other: 500,\n        small: 300,\n        medium: 300,\n      ),\n    );\n\n    if (wantKeepAlive) {\n      return AhlCard(\n        callback: () => context.goNamed(WhoWeArePage.routeName),\n        constraints: constraints,\n        image: Container(\n          // margin: const EdgeInsets.all(Margins.small),\n          decoration: BoxDecoration(\n            image: DecorationImage(\n              fit: BoxFit.cover,\n              image: MemoryImage(\n                data!,\n              ),\n            ),\n            borderRadius: BorderRadius.circular(\n              BorderSizes.small,\n            ),\n          ),\n        ),\n        title: FutureBuilder(\n          future: getTitle(),\n          builder: (context, snapshot) => Text(\n            snapshot.data ?? \"...\",\n            overflow: TextOverflow.ellipsis,\n            maxLines: 2,\n            style: Theme.of(context).textTheme.titleMedium,\n          ),\n        ),\n      );\n    } else {\n      return Container(\n        constraints: constraints,\n        child: AhlCard(\n          callback: () => context.goNamed(WhoWeArePage.routeName),\n          constraints: BoxConstraints(\n            maxWidth: ContentSize.maxWidth(\n              MediaQuery.of(context).size.width,\n            ),\n          ),\n          image: FutureBuilder(\n            future: getImage(),\n            builder: (context, snapshot) {\n              if (snapshot.hasData) {\n                return Container(\n                  // margin: const EdgeInsets.all(Margins.small),\n                  decoration: BoxDecoration(\n                    image: DecorationImage(\n                      fit: BoxFit.cover,\n                      image: MemoryImage(\n                        snapshot.data!,\n                      ),\n                    ),\n                    borderRadius: BorderRadius.circular(\n                      BorderSizes.small,\n                    ),\n                  ),\n                );\n              } else if (snapshot.connectionState == ConnectionState.waiting) {\n                return Container(\n                  constraints: constraints,\n                  alignment: Alignment.center,\n                  margin: const EdgeInsets.all(Margins.small),\n                  decoration: BoxDecoration(\n                    color: Theme.of(context).colorScheme.secondaryContainer,\n                    borderRadius: BorderRadius.circular(\n                      BorderSizes.small,\n                    ),\n                  ),\n                  child: const CircularProgressIndicator(),\n                );\n              } else {\n                log('${snapshot.error}');\n                return Container(\n                  constraints: constraints,\n                  color: Theme.of(context).colorScheme.errorContainer,\n                  child: Text(\n                    \"Error loading image: ${snapshot.error}\",\n                    style: Theme.of(context).textTheme.bodySmall!.copyWith(\n                          color: Theme.of(context).colorScheme.onErrorContainer,\n                        ),\n                  ),\n                );\n              }\n            },\n          ),\n          title: FutureBuilder(\n            future: getTitle(),\n            builder: (context, snapshot) => Text(\n              snapshot.data ?? \"...\",\n              overflow: TextOverflow.ellipsis,\n              maxLines: 2,\n              style: Theme.of(context).textTheme.titleMedium,\n            ),\n          ),\n        ),\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/actions.dart",
    "content": "part of 'widgets.dart';\n\nenum Actions {\n  aboutUs,\n  home,\n  news,\n  ourProjects,\n  prayers,\n  makeDonation,\n  contact,\n}\n\n/// A short hand to get website tabs.\n///\n/// The website tabs like home, prayers, and over tabs are called action. They\n/// are accessed via the [AppBar] or [Footer].\n///\n/// To get localized map string, use [actionLocalized] function that takes a\n/// [BuildContext] argument and return a map with the localized title and the\n/// corresponding route name as value.\nclass ActionsLists {\n  ActionsLists._();\n\n  /// Return a map of localized action denomination and their routeName as Value.\n  ///\n  /// Call this function inside a build method to get the corresponding route\n  /// an action.\n  ///\n  /// Outside a [build] method, consider using the [actions].\n  static Map<String, String?> actionLocalized(BuildContext context) {\n    Map<String, String?> actions = <String, String?>{\n      AppLocalizations.of(context)!.aboutUs: null,\n      AppLocalizations.of(context)!.homeText: HomePage.routeName,\n      AppLocalizations.of(context)!.news: null,\n      AppLocalizations.of(context)!.ourProjects: null,\n      AppLocalizations.of(context)!.prayers: null,\n      AppLocalizations.of(context)!.makeDonation: null,\n      AppLocalizations.of(context)!.contact: null,\n    };\n\n    return actions;\n  }\n\n  /// A simple map of string that has as key action names and as value route\n  /// names.\n  static Map<String, String?> actions = {\n    \"about_us\": null,\n    \"home\": HomePage.routeName,\n    \"news\": null,\n    \"our_projects\": null,\n    \"prayers\": null,\n  };\n\n  /// A List of actions as widget.\n  ///\n  /// This list was optimized for the app drawer. For specific implementation\n  /// like in footer, consider building actionsWidgets from [ActionsLists.actions]\n  /// or [ActionsLists.actionLocalized] to make mapping between actions and\n  /// Widgets.\n  static final List<Widget> actionsWidgets = <Widget>[\n    Builder(\n      builder: (context) => Padding(\n        padding: const EdgeInsets.symmetric(vertical: Paddings.small),\n        child: TextButton(\n          onPressed: () {\n            context.goNamed(WhoWeArePage.routeName);\n          },\n          child: Container(\n            alignment: Alignment.centerLeft,\n            padding: const EdgeInsets.symmetric(vertical: Paddings.medium),\n            child: Text(\n              AppLocalizations.of(context)!.whoWeAre,\n              style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                    color: theme.AhlTheme.blueNight,\n                  ),\n            ),\n          ),\n        ),\n      ),\n    ),\n    Builder(\n      builder: (context) => Padding(\n        padding: const EdgeInsets.symmetric(vertical: Paddings.small),\n        child: TextButton(\n          onPressed: () {\n            context.goNamed(PrayersPage.routeName);\n          },\n          child: Container(\n            alignment: Alignment.centerLeft,\n            padding: const EdgeInsets.symmetric(vertical: Paddings.medium),\n            child: Text(\n              AppLocalizations.of(context)!.prayers,\n              style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                    color: theme.AhlTheme.blueNight,\n                  ),\n            ),\n          ),\n        ),\n      ),\n    ),\n    Builder(\n      builder: (context) => Padding(\n        padding: const EdgeInsets.symmetric(vertical: Paddings.small),\n        child: TextButton(\n          onPressed: () {\n            context.goNamed(ProjectsPage.routeName);\n          },\n          child: Container(\n            alignment: Alignment.centerLeft,\n            padding: const EdgeInsets.symmetric(vertical: Paddings.medium),\n            child: Text(\n              AppLocalizations.of(context)!.ourProjects,\n              style: Theme.of(context).textTheme.labelLarge!.copyWith(\n                    color: theme.AhlTheme.blueNight,\n                  ),\n            ),\n          ),\n        ),\n      ),\n    ),\n    // Builder(\n    //   builder: (context) => Padding(\n    //     padding: const EdgeInsets.symmetric(vertical: Paddings.small),\n    //     child: TextButton(\n    //       onPressed: () {\n    //         context.goNamed(ArticleContentPage.routeName);\n    //       },\n    //       child: Container(\n    //         alignment: Alignment.centerLeft,\n    //         padding: const EdgeInsets.symmetric(vertical: Paddings.medium),\n    //         child: Text(\n    //           AppLocalizations.of(context)!.articles,\n    //           style: Theme.of(context).textTheme.bodyLarge!.copyWith(\n    //                 fontFamily: 'Aileron',\n    //                 fontWeight: FontWeight.w900,\n    //               ),\n    //         ),\n    //       ),\n    //     ),\n    //   ),\n    // ),\n    Builder(\n      builder: (context) => Container(\n        margin: const EdgeInsets.only(top: 64),\n        child: ElevatedButton(\n          onPressed: () {\n            context.goNamed(DonationPage.routeName);\n          },\n          style: ElevatedButton.styleFrom(\n            backgroundColor: Theme.of(context).primaryColor,\n            foregroundColor: Theme.of(context).colorScheme.onPrimary,\n          ),\n          child: Container(\n            padding: ButtonGeometry.elevatedButtonPaddings,\n            child: Text(AppLocalizations.of(context)!.makeDonation),\n          ),\n        ),\n      ),\n    ),\n  ];\n}\n"
  },
  {
    "path": "lib/src/widgets/app_bar.dart",
    "content": "part of 'widgets.dart';\n\n/// class for the appBar\nclass AhlAppBar extends StatelessWidget implements PreferredSizeWidget {\n  const AhlAppBar({\n    super.key,\n    Size? preferredSize,\n    this.title = const AhlLogo(\n        // separation: SizedBox.shrink(),\n        ),\n    this.backgroundColor,\n    this.actions,\n    this.ending,\n    this.crossAxisAlignment,\n    this.padding,\n    this.bottomBar,\n  }) : _preferredSize = preferredSize ??\n            const Size.fromHeight(\n              Sizes.appBarSize,\n            );\n\n  /// The preferred size of this widget\n  final Size _preferredSize;\n  final Widget title;\n  final List<Widget>? actions;\n  final Widget? ending;\n  final Color? backgroundColor;\n  final CrossAxisAlignment? crossAxisAlignment;\n  final EdgeInsetsGeometry? padding;\n  final Widget? bottomBar;\n\n  Widget buildContentWidgets(\n    BuildContext context, {\n    Widget? leadingTitle,\n    List<Widget>? actions,\n    Widget? ending,\n    Widget? bottomBar,\n  }) {\n    // make logo a button to home\n    Widget title = InkWell(\n      onTap: () => context.goNamed(\n        HomePage.routeName,\n      ),\n      child: this.title,\n    );\n\n    /// background color of the app bar\n    var color = backgroundColor ?? theme.AhlTheme.yellowLight;\n\n    /// constraints\n    BoxConstraints computedConstraint = BoxConstraints.loose(\n      _preferredSize,\n    );\n\n    /// Paddings\n    EdgeInsetsGeometry computedPadding = padding ??\n        const EdgeInsets.all(\n          Paddings.appBarPadding,\n        );\n\n    TextBaseline? computedTextBaseLine = (crossAxisAlignment != null)\n        ? (crossAxisAlignment == CrossAxisAlignment.baseline)\n            ? TextBaseline.ideographic\n            : null\n        : TextBaseline.alphabetic;\n\n    Widget leadingTitle0 = leadingTitle ??\n        Flexible(\n          flex: 5,\n          child: Row(\n            mainAxisSize: MainAxisSize.min,\n            children: [\n              if (Navigator.of(context).canPop())\n                IconButton(\n                        onPressed: () {\n                          Navigator.of(context).pop();\n                        },\n                        icon: const Icon(Icons.arrow_back_rounded))\n                    .animate()\n                    .moveX(begin: -50, end: 0),\n              Flexible(\n                child: title,\n              ),\n            ],\n          ),\n        );\n\n    return Container(\n      constraints: computedConstraint,\n      color: color,\n      padding: computedPadding,\n      alignment: Alignment.center,\n      child: Column(\n        mainAxisAlignment: MainAxisAlignment.center,\n        crossAxisAlignment: CrossAxisAlignment.center,\n        children: [\n          Row(\n            textBaseline: computedTextBaseLine,\n            crossAxisAlignment: crossAxisAlignment ?? CrossAxisAlignment.center,\n            mainAxisAlignment: MainAxisAlignment.spaceBetween,\n            mainAxisSize: MainAxisSize.max,\n            children: [\n              leadingTitle0,\n              ...?actions,\n              ending ?? const AhlMenuButton(),\n            ],\n          ),\n          bottomBar ?? const SizedBox.shrink(),\n        ],\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // make logo a button to home\n\n    return LayoutBuilder(\n      builder: (context, constraints) {\n        if (constraints.maxWidth <= ScreenSizes.large) {\n          // use the mobile appBar\n          return buildContentWidgets(\n            context,\n            actions: actions,\n            ending: ending ?? const AhlMenuButton(),\n            bottomBar: bottomBar ?? const SizedBox.shrink(),\n          );\n        } else {\n          // Use the default web appBar\n          return buildContentWidgets(\n            context,\n            actions: actions ?? buildActions(context),\n            ending: const SizedBox.shrink(),\n            bottomBar: bottomBar ?? const SizedBox.shrink(),\n          );\n          // return Container(\n          //   constraints: computedConstraint,\n          //   color: color,\n          //   padding: computedPadding,\n          //   alignment: Alignment.center,\n          //   child: Column(\n          //     crossAxisAlignment: CrossAxisAlignment.center,\n          //     children: [\n          //       Row(\n          //         textBaseline: computedTextBaseLine,\n          //         crossAxisAlignment:\n          //             crossAxisAlignment ?? CrossAxisAlignment.baseline,\n          //         mainAxisAlignment: MainAxisAlignment.spaceBetween,\n          //         children: [\n          //           leadingTitle,\n          //           ...actions,\n          //         ],\n          //       ),\n          //       bottomBar ?? const SizedBox.shrink(),\n          //     ],\n          //   ),\n          // );\n        }\n      },\n    );\n  }\n\n  static List<Widget> buildActions(BuildContext context) {\n    List<Widget> actionsList = [];\n\n    String? currentRouteName = ModalRoute.of(context)?.settings.name;\n\n    TextStyle? resolveStyle(String routeName) {\n      return (routeName == currentRouteName)\n          ? Theme.of(context).textTheme.labelLarge!.copyWith(\n                fontWeight: FontWeight.bold,\n              )\n          : null;\n    }\n\n    TextStyle? resolveStyleIf(bool Function() test) {\n      return (test())\n          ? Theme.of(context).textTheme.labelLarge!.copyWith(\n                fontWeight: FontWeight.bold,\n              )\n          : null;\n    }\n\n    Map actions = {\n      AppLocalizations.of(context)!.homeText: HomePage.routeName,\n      AppLocalizations.of(context)!.priesSpace: PrayersPage.routeName,\n      AppLocalizations.of(context)!.projectsSpace: ProjectsPage.routeName,\n      AppLocalizations.of(context)!.whoWeAre: WhoWeArePage.routeName,\n      AppLocalizations.of(context)!.makeDonation: DonationPage.routeName,\n    };\n\n    Widget donationButton = Flexible(\n      flex: 2,\n      child: Container(\n        alignment: Alignment.centerRight,\n        child: OutlinedButton(\n          style: ButtonStyle(\n            foregroundColor: WidgetStateColor.resolveWith(\n              (states) => Theme.of(context).colorScheme.onSurface,\n            ),\n          ),\n          onPressed: () {\n            context.goNamed(DonationPage.routeName);\n          },\n          // child: FittedBox(\n          //   fit: BoxFit.contain,\n          child: Text(\n            actions.keys.lastOrNull,\n          ),\n          // ),\n        ),\n      ),\n    );\n    Widget homeButton = // Flexible(\n        //   //   flex: 1,\n        //   child:\n        Container(\n      child: TextButton(\n        style: ButtonStyle(\n          foregroundColor: WidgetStateColor.resolveWith(\n            (states) => Theme.of(context).colorScheme.onSurface,\n          ),\n        ),\n        onPressed: () {\n          context.goNamed(HomePage.routeName);\n        },\n        child: Text(\n          actions.keys.elementAtOrNull(0),\n          style: resolveStyleIf(\n            () {\n              return (currentRouteName == actions.values.elementAt(0) ||\n                  currentRouteName == \"/\");\n            },\n          ),\n        ),\n      ),\n      // ),\n\n      // ),\n    );\n\n    Widget projectsButton = TextButton(\n      style: ButtonStyle(\n        foregroundColor: WidgetStateColor.resolveWith(\n          (states) => Theme.of(context).colorScheme.onSurface,\n        ),\n      ),\n      onPressed: () {\n        context.goNamed(ProjectsPage.routeName);\n      },\n      child: Text(\n        actions.keys.elementAtOrNull(2),\n        style: resolveStyle(actions.values.elementAt(2)),\n      ),\n\n      // PopupMenuButton(\n      /// This part of the code is defining a `PopupMenuButton` widget. The `child` property is setting\n      /// the text that will be displayed on the button. In this case, it is setting the text based on\n      /// the key at index 2 of the `actions` map.\n      // child: Text(actions.keys.elementAtOrNull(2)),\n\n      // itemBuilder: (context) => [\n      //   PopupMenuItem(\n      //     onTap: () {\n      //       context.goNamed(\n      //         ProjectsPage.routeName,\n      //       );\n      //     },\n      //     child: const Text('Projet En cours'),\n      //   ),\n      //   PopupMenuItem(\n      //     onTap: () {\n      //       context.goNamed(\n      //         ProjectsPage.routeName,\n      //       );\n      //     },\n      //     child: const Text('Initiative des soeurs'),\n      //   ),\n      //   PopupMenuItem(\n      //     onTap: () {\n      //       context.goNamed(\n      //         ProjectsPage.routeName,\n      //       );\n      //     },\n      //     child: const Text('Soutenir un projet'),\n      //   ),\n      // ],\n      // // style: ButtonStyle(\n      //   foregroundColor: WidgetStateColor.resolveWith(\n      //     (states) => Theme.of(context).colorScheme.onSurface,\n      //   ),\n      // ),\n      // onChanged: (value) => 1,\n      // onPressed: () {},\n      // child: Text(\n      //   actions.keys.elementAtOrNull(2),\n      //   style: resolveStyle(actions.values.elementAtOrNull(2)),\n      // ),\n\n      // ),\n    );\n    Widget aboutUsButton = // Flexible(\n        //   //   flex: 1,\n        //   child:\n        Container(\n      child: TextButton(\n        style: ButtonStyle(\n          foregroundColor: WidgetStateColor.resolveWith(\n            (states) => Theme.of(context).colorScheme.onSurface,\n          ),\n        ),\n        onPressed: () {\n          context.goNamed(\n            WhoWeArePage.routeName,\n          );\n        },\n        child: Text(\n          actions.keys.elementAtOrNull(3),\n          style: resolveStyle(actions.values.elementAtOrNull(3)),\n        ),\n      ),\n\n      // ),\n    );\n    Widget priersSpaceButton = // Flexible(\n        //   //   flex: 1,\n        //   child:\n        Container(\n      child: TextButton(\n        style: ButtonStyle(\n          foregroundColor: WidgetStateColor.resolveWith(\n            (states) => Theme.of(context).colorScheme.onSurface,\n          ),\n        ),\n        onPressed: () {\n          context.goNamed(PrayersPage.routeName);\n        },\n        child: Text(\n          actions.keys.elementAtOrNull(1),\n          style: resolveStyle(actions.values.elementAtOrNull(1)),\n        ),\n      ),\n\n      // ),\n    );\n\n    actionsList.addAll(\n      [\n        homeButton,\n        priersSpaceButton,\n        projectsButton,\n        aboutUsButton,\n        donationButton,\n      ],\n    );\n\n    return actionsList;\n  }\n\n  @override\n  Size get preferredSize => _preferredSize;\n}\n\nclass AhlMenuButton extends StatelessWidget {\n  const AhlMenuButton({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    ScaffoldState scaffoldState = Scaffold.of(context);\n    bool scaffoldHasEndDrawer = scaffoldState.hasEndDrawer;\n    if (scaffoldHasEndDrawer) {\n      return Hero(\n        tag: 'menu_button_tag',\n        child: Container(\n          alignment: Alignment.center,\n          width: 32,\n          height: 32,\n          // alignment: Alignment.center,\n          child: IconButton(\n            onPressed: () => scaffoldState.openEndDrawer(),\n            icon: Container(\n              alignment: Alignment.center,\n              child: const FittedBox(\n                fit: BoxFit.contain,\n                child: Icon(\n                  size: 24,\n                  MyFlutterIcons.menu,\n                  applyTextScaling: true,\n                ),\n              ),\n            ),\n          ),\n        ),\n      );\n    } else {\n      return const SizedBox.shrink();\n    }\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/audio_player.dart",
    "content": "part of 'widgets.dart';\n\nclass FirebaseAudioPlayer extends StatefulWidget {\n  const FirebaseAudioPlayer({\n    super.key,\n    required this.article,\n    this.collection = 'articles',\n  });\n  final Article article;\n  final String? collection;\n\n  @override\n  State<FirebaseAudioPlayer> createState() => _FirebaseAudioPlayerState();\n}\n\nclass _FirebaseAudioPlayerState extends State<FirebaseAudioPlayer> {\n  late Map<String, dynamic>? audioMap;\n\n  late Future<String> url;\n\n  @override\n  void initState() {\n    super.initState();\n    audioMap = widget.article.relations?[0]['audio'];\n  }\n\n  Future<String> getAudioUrl() async {\n    String? audioFileName;\n\n    audioFileName = audioMap?['file'];\n    if (audioFileName == null) {\n      throw NullRejectionException(false);\n    } else {\n      String path = '${widget.collection}/${widget.article.id}/$audioFileName';\n      return storage.child(path).getDownloadURL();\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    url = getAudioUrl();\n    return Container(\n      padding: const EdgeInsets.all(Paddings.medium,)\n          .add(const EdgeInsets.only(top: 12.5,),),\n      // color: Theme.of(context).colorScheme.secondaryContainer,\n      child: FutureBuilder(\n        future: url,\n        builder: (context, snapshot) {\n          if (snapshot.hasData) {\n            return AudioPlayerView(\n              color: AhlTheme.darkNight,//Theme.of(context).colorScheme.secondary,\n              buttonColor: Theme.of(context).colorScheme.secondary,\n              inactiveColor: Theme.of(context).colorScheme.secondaryContainer,\n              secondaryActiveColor:\n                  Theme.of(context).colorScheme.secondaryContainer,\n              iconSize: 48,\n              title: Text(audioMap?['title']),\n              timeStyle: Theme.of(context).textTheme.labelSmall,\n              url: snapshot.requireData,\n            );\n          } else if (snapshot.hasError) {\n            log(\"[$runtimeType : ${DateTime.now()}] ${snapshot.error}\");\n            return Container();\n          }\n\n          return Container(\n            height: 100,\n            color: Theme.of(context).colorScheme.surfaceContainer,\n          )\n              .animate(\n                onInit: (controller) => controller.repeat(\n                  period: Durations.medium2,\n                ),\n              )\n              .shimmer(\n                curve: Curves.easeInOut,\n              );\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/drawer.dart",
    "content": "part of 'widgets.dart';\n\nclass AhlDrawer extends StatelessWidget {\n  const AhlDrawer({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return LayoutBuilder(\n      builder: (context, constraints) => Drawer(\n        clipBehavior: Clip.antiAlias,\n        width: constraints.maxWidth,\n        child: Scaffold(\n          backgroundColor: theme.AhlTheme.yellowLight,\n          appBar: AhlAppBar(\n            backgroundColor: theme.AhlTheme.yellowLight,\n            padding: const EdgeInsets.only(left: Paddings.drawerAppBarPadding),\n            crossAxisAlignment: CrossAxisAlignment.center,\n            title: AhlLogo(\n              crossAxisAlignment: CrossAxisAlignment.center,\n              leading: const Icon(\n                Icons.home_filled,\n                color: Colors.black54,\n                size: IconSizes.medium,\n              ),\n              separation: Container(width: 9),\n              title: Text(\n                AppLocalizations.of(context)!.longAppTitle,\n              ),\n            ),\n            ending: Hero(\n              tag: 'menu_button_tag1',\n              child: IconButton(\n                onPressed: () => Scaffold.of(context).closeEndDrawer(),\n                icon: const Icon(Icons.close),\n              ),\n            ),\n          ),\n\n          // body of the drawer\n          body: Stack(\n            children: [\n              SingleChildScrollView(\n                child: Container(\n                  // constraints: const BoxConstraints(\n                  //   maxWidth: Sizes.menuButtonWidth,\n                  //   maxHeight: Sizes.menuButtonListHeight,\n                  // ),\n                  margin: const EdgeInsets.only(left: Paddings.medium),\n                  child: Column(\n                      crossAxisAlignment: CrossAxisAlignment.start,\n                      children: [\n                        ...ActionsLists.actionsWidgets,\n                      ],\n                    ),\n                  ),\n                ),\n              \n              Positioned(\n                right: 20,\n                bottom: 50,\n                child: Container(\n                  padding: const EdgeInsets.all(8.0),\n                  color: theme.AhlTheme.yellowLight,\n                  child: Row(\n                    children: [\n                      TextButton(\n                        onPressed: () {\n                          LocaleUtils.changeLocale(\n                            context,\n                            const Locale('fr'),\n                          );\n                        },\n                        child: const Text('Français'),\n                      ),\n                      TextButton(\n                        onPressed: () {\n                          LocaleUtils.changeLocale(\n                            context,\n                            const Locale('en'),\n                          );\n                        },\n                        child: const Text('English'),\n                      ),\n                    ],\n                  ),\n                ),\n              ),\n              const DrawerFooter(),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass DrawerFooter extends StatelessWidget {\n  const DrawerFooter({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      alignment: Alignment.bottomCenter,\n      child: Container(\n        constraints: const BoxConstraints.expand(height: 50),\n        alignment: Alignment.center,\n        decoration: const BoxDecoration(color: theme.AhlTheme.greenOlive),\n        child: Text(\n          'N.D.D MADAGASCAR 2023',\n          style: Theme.of(context).textTheme.bodyLarge!.copyWith(\n                color: Theme.of(context).colorScheme.onPrimary,\n                fontFamily: 'Aileron',\n                fontWeight: FontWeight.w100,\n              ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/footer.dart",
    "content": "part of 'widgets.dart';\n\nclass AhlFooter extends StatelessWidget {\n  const AhlFooter({super.key, this.actionColor = const Color(0xFFA0ABC0)});\n\n  final Color? actionColor;\n\n  @override\n  Widget build(BuildContext context) {\n    // var footerButtons = ActionsLists.actionLocalized(context).entries.map(\n    //       (e) => Align(\n    //         alignment: Alignment.centerLeft,\n    //         child: TextButton(\n    //           onPressed: () {\n    //             if (e.value != null) {\n    //               Navigator.pushNamed(context, e.value!);\n    //             }\n    //           },\n    //           child: Text(\n    //             e.key,\n    //             style: TextStyle(\n    //               fontFamily: 'Aileron',\n    //               color: actionColor,\n    //             ),\n    //           ),\n    //         ),\n    //       ),\n    //     );\n\n    return Container(\n      alignment: Alignment.center,\n      color: theme.AhlTheme.darkNight,\n      padding: const EdgeInsets.symmetric(\n        horizontal: Paddings.medium,\n        vertical: Paddings.big,\n      ),\n      child: Container(\n        constraints: BoxConstraints(\n          maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n        ),\n        child: Column(\n          mainAxisAlignment: MainAxisAlignment.start,\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: [\n            // Ahl logo in the footer.\n            //\n            // The size of this logo is fix\n            Container(\n              alignment: Alignment.centerLeft,\n              constraints: const BoxConstraints(\n                maxHeight: 75,\n              ),\n              margin: const EdgeInsets.symmetric(\n                vertical: Paddings.big,\n                horizontal: Paddings.small + 5,\n              ),\n              child: Image.asset(AhlAssets.logoFormTypoHorizontalColoredDark),\n            ),\n\n            // Footer actions buttons.\n            //\n            // These buttons are the actions on the app bar and other\n            // important or not buttons across the app.\n            //\n            //  To make them work, we use a default text theme\n\n            // Table(\n            //   children: [\n            //     TableRow(\n            //       children: [\n            //         footerButtons.toList()[Actions.ourProjects.index],\n            //         footerButtons.toList()[Actions.makeDonation.index],\n            //       ],\n            //     ),\n            //     TableRow(\n            //       children: [\n            //         footerButtons.toList()[Actions.aboutUs.index],\n            //         footerButtons.toList()[Actions.news.index],\n            //       ],\n            //     ),\n            //     TableRow(\n            //       children: [\n            //         footerButtons.toList()[Actions.prayers.index],\n            //         footerButtons.toList()[Actions.contact.index],\n            //       ],\n            //     ),\n            //   ],\n            // ),\n\n            // Home\n            FooterPageButton(\n              callback: () {\n                Navigator.of(context).pushNamed(HomePage.routeName);\n              },\n              icon: const Icon(Icons.home_filled),\n              text: AppLocalizations.of(context)!.homeText,\n            ),\n            const Gap(45),\n\n            Wrap(\n              direction: Axis.horizontal,\n              runSpacing: Paddings.huge,\n              spacing: Paddings.huge,\n              alignment: WrapAlignment.start,\n              runAlignment: WrapAlignment.start,\n              crossAxisAlignment: WrapCrossAlignment.start,\n              children: [\n                Column(\n                  mainAxisSize: MainAxisSize.min,\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    FooterProminentButton(\n                      callback: () => context.goNamed(PrayersPage.routeName),\n                      text: AppLocalizations.of(context)!.prayerSpace,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.goNamed(PrayersPage.routeName),\n                      text: AppLocalizations.of(context)!.todaysRosary,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.goNamed(PrayersPage.routeName),\n                      text: AppLocalizations.of(context)!.office,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.goNamed(PrayersPage.routeName),\n                      text: AppLocalizations.of(context)!.todaySaint,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () {\n                        context.goNamed(PrayersPage.routeName);\n                      },\n                      text: AppLocalizations.of(context)!.priesIntention,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () {\n                        context.go('/novena/saint_dominic_day_1');\n                      },\n                      text: AppLocalizations.of(context)!.novena,\n                    ),\n                  ],\n                ),\n                Column(\n                  mainAxisSize: MainAxisSize.min,\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    FooterProminentButton(\n                      callback: () => context.go(ProjectsPage.routeName),\n                      text: AppLocalizations.of(context)!.projectsSpace,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.go('/projects/cantine'),\n                      text: 'Cantine',\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.go('/projects/dispensaire'),\n                      text: 'Dispensaire',\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.go('/projects/grande_salle'),\n                      text: 'Grande Salle',\n                    ),\n                  ],\n                ),\n                Column(\n                  mainAxisSize: MainAxisSize.min,\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    FooterProminentButton(\n                      callback: () => context.go(WhoWeArePage.routeName),\n                      text: AppLocalizations.of(context)!.domSisters,\n                    ),\n                    FooterLowLevelButton(\n                      callback: () => context.go(WhoWeArePage.routeName),\n                      text: AppLocalizations.of(context)!.whoWeAre,\n                    ),\n                    // FooterLowLevelButton(\n                    //   callback: () =>\n                    //       ScaffoldMessenger.of(context).showSnackBar(\n                    //     SnackBar(\n                    //       content: Text(\n                    //         AppLocalizations.of(context)!.devInProgress,\n                    //       ),\n                    //     ),\n                    //   ),\n                    //   text: AppLocalizations.of(context)!.realized,\n                    // ),\n                    // FooterLowLevelButton(\n                    //   callback: () => context.go(ProjectsPage.routeName),\n                    //   text: AppLocalizations.of(context)!.initiative,\n                    // ),\n                  ],\n                )\n              ],\n            ),\n\n            const Gap(45),\n\n            /// Sisters denomination\n            // Flex(\n            //   textDirection: TextDirection.ltr,\n            //   mainAxisAlignment: MainAxisAlignment.spaceBetween,\n            //   direction: resolveForBreakPoint(\n            //     MediaQuery.of(context).size.width,\n            //     other: Axis.horizontal,\n            //     small: Axis.vertical,\n            //     medium: Axis.vertical,\n            //   ),\n\n            Wrap(\n              verticalDirection: VerticalDirection.down,\n\n              // mainAxisAlignment: MainAxisAlignment.spaceBetween,\n              direction: Axis.horizontal,\n              runAlignment: WrapAlignment.spaceBetween,\n              alignment: WrapAlignment.spaceBetween,\n              crossAxisAlignment: WrapCrossAlignment.center,\n              // runSpacing: 200,\n              spacing: 50,\n              children: [\n                ConstrainedBox(\n                  constraints: const BoxConstraints(\n                    maxHeight: 100,\n                  ),\n                  child: Column(\n                    textDirection: TextDirection.ltr,\n                    mainAxisSize: MainAxisSize.min,\n                    mainAxisAlignment: MainAxisAlignment.start,\n                    crossAxisAlignment: CrossAxisAlignment.start,\n                    children: [\n                      Padding(\n                        padding: const EdgeInsets.symmetric(\n                                // vertical: Paddings.big,\n                                horizontal: Paddings.small + 5)\n                            .copyWith(bottom: 0),\n                        child: Text(\n                          '© ${DateTime.now().year}',\n                          style:\n                              Theme.of(context).textTheme.labelSmall!.copyWith(\n                                    color: theme.AhlTheme.yellowLight,\n                                  ),\n                        ),\n                      ),\n                      Padding(\n                        padding: const EdgeInsets.symmetric(\n                          horizontal: Paddings.small + 5,\n                          vertical: Paddings.small,\n                        ),\n                        child: Text(\n                          AppLocalizations.of(context)!.appTitle,\n                          style: Theme.of(context)\n                              .textTheme\n                              .labelSmall!\n                              .copyWith(color: theme.AhlTheme.yellowLight),\n                        ),\n                      ),\n                    ],\n                  ),\n                ),\n                Container(\n                  constraints: const BoxConstraints(maxWidth: 180),\n                  child: Row(\n                    mainAxisAlignment: MainAxisAlignment.spaceBetween,\n                    children: [\n                      FooterIconButton(\n                        callback: () {\n                          launchUrl(\n                            Uri.parse(\"https://web.facebook.com/LaureSabes\"),\n                          );\n                        },\n                        icon: MyFlutterIcons.facebook_circled,\n                      ),\n                      FooterIconButton(\n                        callback: () {\n                          launchUrl(\n                            Uri.parse(\n                                \"https://www.youtube.com/@DominicainesMissionnairesMada\"),\n                          );\n                        },\n                        icon: MyFlutterIcons.youtube,\n                      ),\n                      FooterIconButton(\n                        callback: () {\n                          //todo: implement whatsapp\n                        },\n                        icon: MyFlutterIcons.whatsapp,\n                      ),\n                    ],\n                  ),\n                ),\n              ],\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\n/// The page button in footer.\nclass FooterPageButton extends StatelessWidget {\n  const FooterPageButton({\n    super.key,\n    required this.callback,\n    required this.icon,\n    required this.text,\n  });\n\n  /// This buttons callback.\n  final VoidCallback callback;\n\n  /// This buttons leading Widget.\n  final Widget icon;\n\n  /// This button text\n  final String text;\n\n  @override\n  Widget build(BuildContext context) {\n    return FittedBox(\n      fit: BoxFit.fitWidth,\n      child: TextButton(\n        style: ButtonStyle(\n          foregroundColor: WidgetStateColor.resolveWith(\n            (states) {\n              if (states.contains(WidgetState.hovered)) {\n                return Colors.white;\n              } else {\n                return theme.AhlTheme.yellowLight.withAlpha(0x88);\n              }\n            },\n          ),\n        ),\n        onPressed: callback,\n        child: Row(\n          children: [\n            Padding(\n              padding: const EdgeInsets.only(right: Paddings.small),\n              child: icon,\n            ),\n            Text(\n              text,\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass FooterProminentButton extends StatelessWidget {\n  const FooterProminentButton({\n    super.key,\n    required this.callback,\n    required this.text,\n  });\n\n  final VoidCallback callback;\n\n  final String text;\n\n  @override\n  Widget build(BuildContext context) {\n    return TextButton(\n      style: ButtonStyle(\n        foregroundColor: WidgetStateColor.resolveWith(\n          (states) => theme.AhlTheme.yellowLight,\n        ),\n        textStyle: WidgetStateTextStyle.resolveWith(\n          (states) {\n            FontWeight ftw = FontWeight.w400;\n            if (states.contains(WidgetState.hovered)) {\n              ftw = FontWeight.w600;\n            }\n\n            return Theme.of(context).textTheme.labelLarge!.copyWith(\n                  fontWeight: ftw,\n                );\n          },\n        ),\n      ),\n      onPressed: callback,\n      child: Text(\n        text,\n      ),\n    );\n  }\n}\n\nclass FooterLowLevelButton extends StatelessWidget {\n  const FooterLowLevelButton({\n    super.key,\n    required this.callback,\n    required this.text,\n  });\n\n  final VoidCallback callback;\n\n  final String text;\n\n  @override\n  Widget build(BuildContext context) {\n    return TextButton(\n      style: ButtonStyle(\n        foregroundColor: WidgetStateColor.resolveWith(\n          (states) => theme.AhlTheme.yellowLight.withAlpha(0x88),\n        ),\n        textStyle: WidgetStateTextStyle.resolveWith((states) {\n          FontWeight ftw = FontWeight.w400;\n          if (states.contains(WidgetState.hovered)) {\n            ftw = FontWeight.w600;\n          }\n\n          return Theme.of(context).textTheme.labelMedium!.copyWith(\n                fontWeight: ftw,\n              );\n        }),\n      ),\n      onPressed: callback,\n      child: Text(\n        text,\n      ),\n    );\n  }\n}\n\nclass FooterIconButton extends StatelessWidget {\n  const FooterIconButton({\n    super.key,\n    required this.callback,\n    required this.icon,\n  });\n\n  final VoidCallback callback;\n\n  final IconData icon;\n\n  @override\n  Widget build(BuildContext context) {\n    return IconButton.filled(\n      style: ButtonStyle(\n        backgroundColor: WidgetStateColor.resolveWith(\n          (states) => theme.AhlTheme.yellowRelax,\n        ),\n      ),\n      onPressed: callback,\n      icon: Icon(\n        icon,\n        color: Colors.white,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/forms_prompt.dart",
    "content": "part of 'widgets.dart';\n\nfinal GlobalKey<FormState> _formKey =\n    GlobalKey<FormState>(debugLabel: \"prayer_request_key\");\n\nclass FormsLayoutBase extends StatelessWidget {\n  const FormsLayoutBase({\n    super.key,\n    Function? callback,\n    required this.child,\n  });\n\n  final Widget child;\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      constraints: BoxConstraints(\n        maxWidth: MediaQuery.sizeOf(context).width,\n        // maxHeight: min(\n        //   MediaQuery.of(context).size.height * 2 / 3,\n        //   1124,\n        // ),\n      ),\n      decoration: BoxDecoration(\n        image: DecorationImage(\n          fit: BoxFit.cover,\n          opacity: 0.1,\n          // scale: 10,\n          // repeat: ImageRepeat.repeat,\n          image: AssetImage(\n            AhlAssets.requestMotif,\n          ),\n        ),\n        color: theme.AhlTheme\n            .blueNight, //Theme.of(context).colorScheme.secondaryContainer,\n      ),\n      padding: EdgeInsets.symmetric(\n          vertical: Paddings.medium,\n          horizontal: // (MediaQuery.of(context).size.width > ScreenSizes.extraLarge)\n              //?\n              Paddings.big\n          // : Paddings.big,\n          ),\n      alignment: Alignment.center,\n      child: Container(\n        margin: const EdgeInsets.symmetric(vertical: Paddings.huge),\n        alignment: Alignment.center,\n        child: Container(\n          constraints: BoxConstraints(\n            maxWidth: ContentSize.maxWidth(MediaQuery.of(context).size.width),\n            // maxHeight: min(\n            //   MediaQuery.of(context).size.height * 2 / 3,\n            //   1124,\n            // ),\n          ),\n          child: child,\n        ),\n      ),\n\n      // switch (constraints.maxWidth) {\n      //   case > ScreenSizes.extraLarge:\n      //     return Align(\n      //       alignment: Alignment.center,\n      //       child: Container(\n      //         constraints: BoxConstraints.loose(\n      //           Size(\n      //             ContentSize.maxWidth(MediaQuery.of(context).size.width),\n      //             min(\n      //               MediaQuery.of(context).size.height - 200,\n      //               1124,\n      //             ),\n      //           ),\n      //         ),\n      //         decoration: BoxDecoration(\n      //           borderRadius: BorderRadius.circular(38),\n      //         ),\n      //         clipBehavior: Clip.antiAlias,\n      //         child: container,\n      //       ),\n      //     );\n      //   default:\n      //     return Container(\n      //       constraints: BoxConstraints.loose(\n      //         Size(\n      //           ContentSize.maxWidth(MediaQuery.of(context).size.width),\n      //           min(\n      //             MediaQuery.of(context).size.height - 200,\n      //             1124,\n      //           ),\n      //         ),\n      //       ),\n      //       child: container,\n      //     );\n      // }\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/loading_page.dart",
    "content": "import 'package:dotlottie_loader/dotlottie_loader.dart';\nimport 'package:flutter/material.dart';\nimport 'package:lottie/lottie.dart';\n\nclass LoadingView extends StatefulWidget {\n  const LoadingView({super.key, this.work});\n\n  final Future? work;\n\n  @override\n  State<LoadingView> createState() => _LoadingViewState();\n}\n\nclass _LoadingViewState extends State<LoadingView>\n    with SingleTickerProviderStateMixin {\n  late AnimationController lottieController;\n\n  @override\n  void initState() {\n    super.initState();\n    lottieController = AnimationController(\n      vsync: this,\n      duration: const Duration(seconds: 3),\n      // animationBehavior: AnimationBehavior.preserve,\n      // reverseDuration: const Duration(seconds: 3),\n    )..addStatusListener((status) => animation(status));\n  }\n\n  @override\n  void dispose() {\n    lottieController.dispose();\n\n    super.dispose();\n  }\n\n  void animation(AnimationStatus status) {\n    widget.work!.whenComplete(() {\n      lottieController.forward();\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    //todo: change asset to ahl loading\n    return DotLottieLoader.fromAsset(\n      'assets/animations/loading.json',\n      frameBuilder: (context, composition) {\n        if (composition == null) {\n          return const Align(\n            child: CircularProgressIndicator(),\n          );\n        }\n        return Align(\n          child: Lottie.memory(\n            composition.animations.values.single,\n            onLoaded: (p0) => lottieController.forward(),\n            reverse: true,\n            repeat: true,\n            animate: true,\n            frameRate: FrameRate.max,\n            backgroundLoading: true,\n            controller: lottieController,\n          ),\n        );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/logo.dart",
    "content": "part of 'widgets.dart';\n\nclass AhlLogo extends StatelessWidget {\n  const AhlLogo({\n    super.key,\n    this.size = const Size(34, 34),\n    this.leading,\n    this.title,\n    this.separation,\n    this.foregroundColor,\n    this.crossAxisAlignment,\n  });\n\n  final Size size;\n  final Widget? leading;\n  final Widget? title;\n  final Widget? separation;\n  final CrossAxisAlignment? crossAxisAlignment;\n\n  final Color? foregroundColor;\n\n  @override\n  Widget build(BuildContext context) {\n    return DefaultTextStyle(\n      style: Theme.of(context).textTheme.titleLarge!.copyWith(\n            fontFamily: 'Butler',\n            fontSize: 22,\n            color: foregroundColor,\n          ),\n      child: ConstrainedBox(\n        constraints: const BoxConstraints(\n          maxWidth: 250,\n        ),\n        child: Row(\n          mainAxisSize: MainAxisSize.min,\n          textBaseline: TextBaseline.alphabetic,\n          crossAxisAlignment: crossAxisAlignment ?? CrossAxisAlignment.center,\n          children: [\n            leading ??\n                Flexible(\n                  fit: FlexFit.loose,\n                  flex: 1,\n                  child: Container(\n                    constraints: BoxConstraints.tight(size),\n                    child: Image.asset(\n                      AhlAssets.logoForm,\n                      fit: BoxFit.contain,\n                    ),\n                  ),\n                ),\n            separation ??\n                const SizedBox(\n                  width: 15,\n                ),\n            title ??\n                Flexible(\n                  flex: 5,\n                  fit: FlexFit.tight,\n                  child: FittedBox(\n                    fit: BoxFit.scaleDown,\n                    alignment: Alignment.bottomLeft,\n                    child: Text(\n                      \"Ajourd'hui l'avenir\",\n                      maxLines: 1,\n                      style:\n                          Theme.of(context).textTheme.headlineSmall!.copyWith(\n                                fontFamily: 'Butler',\n                              ),\n                    ),\n                  ),\n                ),\n            // ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\n// Old logo setup\n//\n// Row(\n        //   children: [\n        //     SizedBox.fromSize(\n        //       size: size,\n        //       child: Image.asset(\n        //         AhlAssets.logoForm,\n        //         fit: BoxFit.contain,\n        //       ),\n        //     ),\n        //     const SizedBox(\n        //       width: 30,\n        //     ),\n        //     Text(\n        //       \"Ajourd'hui l'avenir\",\n        //       style: Theme.of(context).textTheme.bodyLarge,\n        //     ),\n        //   ],\n        // );"
  },
  {
    "path": "lib/src/widgets/my_flutter_app_icons.dart",
    "content": "/// Flutter icons MyFlutterApp\n/// Copyright (C) 2024 by original authors @ fluttericon.com, fontello.com\n/// This font was generated by FlutterIcon.com, which is derived from Fontello.\n///\n/// To use this font, place it in your fonts/ directory and include the\n/// following in your pubspec.yaml\n///\n/// flutter:\n///   fonts:\n///    - family:  MyFlutterApp\n///      fonts:\n///       - asset: fonts/MyFlutterApp.ttf\n///\n///\n/// * Typicons, (c) Stephen Hutchings 2012\n///         Author:    Stephen Hutchings\n///         License:   SIL (http://scripts.sil.org/OFL)\n///         Homepage:  http://typicons.com/\n/// * Font Awesome 5, Copyright (C) 2016 by Dave Gandy\n///         Author:    Dave Gandy\n///         License:   SIL (https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt)\n///         Homepage:  http://fortawesome.github.com/Font-Awesome/\n///\nlibrary;\nimport 'package:flutter/widgets.dart';\n\nclass MyFlutterIcons {\n  MyFlutterIcons._();\n\n  static const _kFontFam = 'MyFlutterIcons';\n  static const String? _kFontPkg = null;\n\n  static const IconData facebook_circled =\n      IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg);\n  static const IconData menu =\n      IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);\n  static const IconData youtube =\n      IconData(0xf167, fontFamily: _kFontFam, fontPackage: _kFontPkg);\n  static const IconData whatsapp =\n      IconData(0xf232, fontFamily: _kFontFam, fontPackage: _kFontPkg);\n}\n"
  },
  {
    "path": "lib/src/widgets/prayers_request.dart",
    "content": "part of 'widgets.dart';\n"
  },
  {
    "path": "lib/src/widgets/promotion_bar.dart",
    "content": "part of 'widgets.dart';\n\nclass PromotionBar extends StatefulWidget {\n  const PromotionBar({\n    super.key,\n    required this.child,\n    this.isShown = true,\n    this.backgroundColor,\n    this.leading,\n  });\n\n  final Widget? leading;\n  final Widget child;\n  final Color? backgroundColor;\n  final bool isShown;\n\n  @override\n  State<PromotionBar> createState() => _PromotionBarState();\n}\n\nclass _PromotionBarState extends State<PromotionBar> {\n  _PromotionBarState();\n\n  late bool isShown;\n\n  @override\n  void initState() {\n    super.initState();\n    isShown = widget.isShown;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return isShown\n        ? Container(\n            color: widget.backgroundColor,\n            child: Row(\n              mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n              crossAxisAlignment: CrossAxisAlignment.center,\n              children: [\n                widget.leading ?? const SizedBox.shrink(),\n                Expanded(child: widget.child),\n                IconButton(\n                  onPressed: close,\n                  icon: const Icon(\n                    Icons.close,\n                  ),\n                ),\n              ],\n            ),\n          )\n        : const SizedBox.shrink();\n  }\n\n  void close() => setState(() {\n        isShown = false;\n      });\n\n  void open() {\n    if (isShown == true) {\n      return;\n    } else {\n      setState(() => isShown = true);\n    }\n  }\n}\n\n/// The construction message that appear on\n/// the top of the home page.\nWidget inConstructionPromotionalBar = Builder(\n  builder: (context) {\n    return PromotionBar(\n      backgroundColor: Theme.of(context).colorScheme.tertiaryContainer,\n      leading: Padding(\n        padding: const EdgeInsets.all(Paddings.small),\n        child: Icon(\n          Icons.build_rounded,\n          color: Theme.of(context).colorScheme.onTertiaryContainer,\n        ),\n      ),\n      child: Text(\n        AppLocalizations.of(context)!.inConstructionPromotionalMessage,\n        overflow: TextOverflow.ellipsis,\n        maxLines: 3,textAlign: TextAlign.center,\n      ),\n    );\n  },\n);\n"
  },
  {
    "path": "lib/src/widgets/prompt_card.dart",
    "content": "part of 'widgets.dart';\n\nclass PromptCard extends StatefulWidget {\n  const PromptCard({\n    super.key,\n    this.constraints,\n    this.backgroundImage,\n    required this.title,\n    this.subtitle,\n    this.bottomHeight,\n    this.backgroundColor,\n    this.image,\n    this.callback,\n  }) : assert(\n            backgroundImage == null && image != null || backgroundImage != null,\n            \"\"\"One of backgroundImage or image should be provided.\"\"\");\n\n  final BoxConstraints? constraints;\n  final ImageProvider? backgroundImage;\n\n  /// A widget that is displayed on top of every thing.\n  ///\n  /// If image is provided, then it will replace [backgroundImage].\n  final Widget? image;\n  final Widget title;\n  final Widget? subtitle;\n  final double? bottomHeight;\n  final Color? backgroundColor;\n\n  final VoidCallback? callback;\n\n  @override\n  State<PromptCard> createState() => _PromptCardState();\n}\n\nclass _PromptCardState extends State<PromptCard>\n    with SingleTickerProviderStateMixin {\n  final duration = AhlDurations.subtle;\n\n  /// animation controller\n  late AnimationController _controller;\n\n  double _elevation = 5;\n\n  @override\n  void initState() {\n    _controller = AnimationController(\n      vsync: this,\n    );\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    super.dispose();\n  }\n\n  void _onHoverCallBack(bool isHovered) {\n    animateZoomInOut(isHovered);\n    elevate(isHovered);\n  }\n\n  /// setup zoom animation\n  void animateZoomInOut(bool isHovered) {\n    if (isHovered) {\n      _controller.forward();\n    } else {\n      // _controller.isCompleted\n      _controller.reverse();\n    }\n  }\n\n  void elevate(bool isHovered) {\n    setState(() {\n      if (isHovered) {\n        _elevation = 25;\n      } else {\n        // _controller.isCompleted\n        _elevation = 5;\n      }\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // todo: make it dynamic image with storage\n    // final Reference imageRef =\n    //     storage.child('/static/sj.jpg');\n    // final imageUrl = imageRef.getDownloadURL();\n    // var image = imageRef.getData();\n\n    return Card(\n      clipBehavior: Clip.antiAlias,\n      elevation: _elevation,\n      child: InkWell(\n        onHover: _onHoverCallBack,\n        onTap: widget.callback ?? () {},\n        child: Container(\n          constraints:\n              widget.constraints ?? BoxConstraints.loose(const Size(278, 270)),\n          child: Stack(\n            children: [\n              // FutureBuilder(\n              //   future: Future.delayed(const Duration(milliseconds: 1)),\n              //   builder: (context, snapshot) {\n              //     if (snapshot.hasData) {\n              //       return\n              Animate(\n                effects: [\n                  ScaleEffect(\n                    duration: duration,\n                    begin: const Offset(1, 1),\n                    end: const Offset(1.1, 1.1),\n                    curve: Curves.bounceInOut,\n                  ),\n                ],\n                controller: _controller,\n                child: widget.image ??\n                    Container(\n                      decoration: BoxDecoration(\n                        image: DecorationImage(\n                          image: widget.backgroundImage!,\n                          fit: BoxFit.cover,\n                        ),\n                      ),\n                    ),\n              ),\n\n              //       ;\n              //     } else if (snapshot.hasError) {\n              //       return Container(\n              //         decoration: BoxDecoration(\n              //           image: DecorationImage(\n              //             image: AssetImage(\n              //                 AhlAssets.logoFormTypoHorizontalColoredDark),\n              //             fit: BoxFit.cover,\n              //           ),\n              //         ),\n              //       );\n              //     } else {\n              //       return const Center(child: CircularProgressIndicator());\n              //     }\n              //   },\n              // )\n\n              Align(\n                alignment: Alignment.bottomCenter,\n                child: Container(\n                  padding: const EdgeInsets.all(Paddings.medium),\n                  constraints:\n                      BoxConstraints.expand(height: widget.bottomHeight ?? 90),\n                  color: widget.backgroundColor ??\n                      Theme.of(context).colorScheme.surface,\n                  child: Column(\n                    mainAxisSize: MainAxisSize.min,\n                    crossAxisAlignment: CrossAxisAlignment.start,\n                    children: [\n                      DefaultTextStyle(\n                        overflow: TextOverflow.ellipsis,\n                        style: Theme.of(context).textTheme.headlineSmall!,\n                        child: widget.title,\n                      ),\n                      DefaultTextStyle(\n                        overflow: TextOverflow.ellipsis,\n                        style: Theme.of(context).textTheme.labelLarge!,\n                        child: widget.subtitle ?? const SizedBox.shrink(),\n                      ),\n                    ],\n                  ),\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/section_title.dart",
    "content": "part of \"widgets.dart\";\n\nclass SectionTitle extends StatelessWidget {\n  const SectionTitle({\n    super.key,\n    required this.title,\n    this.subtitle,\n    this.titleColor,\n    this.isUpperCase = true,\n    this.titleStyle,\n    this.caretColor,\n  });\n\n  final String title;\n  final TextStyle? titleStyle;\n  final String? subtitle;\n  final Color? titleColor;\n  final Color? caretColor;\n  final bool isUpperCase;\n\n  @override\n  Widget build(BuildContext context) {\n    return Align(\n      // padding: const EdgeInsets.symmetric(vertical: Paddings.huge),\n      child: Column(\n        children: [\n          Container(\n            padding: const EdgeInsets.only(\n              bottom: Paddings.actionSeparator,\n            ),\n            child: Text(\n              (isUpperCase) ? title.toUpperCase() : title,\n              style: titleStyle ??\n                  resolveHeadlineTextThemeForBreakPoints(\n                    MediaQuery.of(context).size.width,\n                    context,\n                  )!\n                      .copyWith(\n                    color: titleColor ?? Colors.white,\n                  ),\n            ),\n          ),\n          subtitle != null\n              ? Container(\n                  padding: const EdgeInsets.symmetric(\n                    vertical: Paddings.listSeparator,\n                  ),\n                  child: Text(\n                    subtitle!,\n                    style: resolveBodyTextThemeForBreakPoints(\n                      MediaQuery.of(context).size.width,\n                      context,\n                    )!\n                        .copyWith(color: titleColor ?? Colors.white),\n                  ),\n                )\n              : const SizedBox.shrink(),\n          Container(\n            padding: const EdgeInsets.symmetric(\n              vertical: Paddings.listSeparator,\n            ),\n            width: 60,\n            height: 18,\n            color: caretColor ?? Theme.of(context).colorScheme.secondary,\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/space_view.dart",
    "content": "part of 'widgets.dart';\n\nclass SpaceView extends StatelessWidget {\n  const SpaceView({\n    super.key,\n    this.headerImage,\n    required this.children,\n    this.useGradient = true,\n    this.opacity,\n  });\n\n  final ImageProvider? headerImage;\n  final List<Widget> children;\n  final bool useGradient;\n  final double? opacity;\n\n  @override\n  Widget build(BuildContext context) {\n    final List<Widget> children = [\n      // gradient\n      Container(\n        alignment: Alignment.center,\n        decoration: BoxDecoration(\n          gradient: useGradient\n              ? LinearGradient(\n                  colors: [\n                    Colors.transparent,\n                    AhlTheme.darkNight.withAlpha(0xFF),\n                    AhlTheme.blueNight,\n                  ],\n                  begin: Alignment.topCenter,\n                  end: Alignment.bottomCenter,\n                  stops: const [\n                    0, // this is the ratio of the header image\n                    650 / 1681 * 2 / 3,\n                    1,\n                  ],\n                )\n              : null,\n        ),\n\n        // contents\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          crossAxisAlignment: CrossAxisAlignment.center,\n          children: this.children,\n        ),\n      ),\n    ];\n\n    return // bk image\n        Container(\n      // constraints: const BoxConstraints.expand(height: 1000),\n      decoration: headerImage != null\n          ? BoxDecoration(\n              // color: const Color(0xFF2e2e2e),\n              // backgroundBlendMode: BlendMode.multiply,\n              image: DecorationImage(\n                opacity: opacity ?? 1,\n                fit: BoxFit.cover,\n                alignment: Alignment.topCenter,\n                image: headerImage ??\n                    AssetImage(\n                      AhlAssets.prayersSpaceCover,\n                    ),\n              ),\n            )\n          : null,\n      child: Stack(\n        // enableDrag: true,\n        children: List<Widget>.generate(\n          children.length,\n          (index) => children[index],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/widgets/widgets.dart",
    "content": "import 'dart:developer';\nimport 'dart:js_interop';\n\nimport 'package:ahl/src/pages/prayers/prayers_page.dart';\nimport 'package:audio_player/audio_player.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_animate/flutter_animate.dart';\nimport 'package:gap/gap.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:url_launcher/url_launcher.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport '../../ahl_barrel.dart';\nimport '../localization/locale_utils.dart';\nimport '../pages/homepage/donation/donation_page.dart';\nimport '../pages/homepage/homepage.dart';\nimport '../pages/projects/projects_page.dart';\nimport '../pages/who_we_are/who_we_are.dart';\nimport '../theme/theme.dart' as theme;\nimport '../theme/theme.dart';\nimport '../utils/breakpoint_resolver.dart';\nimport 'my_flutter_app_icons.dart';\nimport '../firebase_constants.dart';\n\npart 'app_bar.dart';\npart 'logo.dart';\npart 'drawer.dart';\npart 'actions.dart';\npart 'promotion_bar.dart';\npart 'footer.dart';\npart 'prayers_request.dart';\npart 'section_title.dart';\npart 'prompt_card.dart';\npart 'space_view.dart';\npart 'forms_prompt.dart';\npart 'audio_player.dart';\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: ahl\ndescription: A website for the community of dominican sisters at Madagascar.\n\n# Prevent accidental publishing to pub.dev.\npublish_to: \"none\"\n\nversion: 1.0.2+pre-2-seo\n\nenvironment:\n  sdk: \">=3.0.0 <4.0.0\"\n\ndependencies:\n#  indicator_button:\n#    git: https://github.com/Josephincrafter/indicator_button.git\n  firebase_article:\n    # path: ../firebase_article\n    git: https://github.com/Josephincrafter/firebase_article.git\n  cloud_firestore: ^5.4.2\n  # cloud_functions: ^4.6.0\n  # firebase_analytics: ^10.8.0\n  # firebase_auth: ^4.16.0\n  firebase_core: ^3.5.0\n  firebase_storage: ^12.3.1\n  flutter:\n    sdk: flutter\n  flutter_bloc: ^8.1.3\n  flutter_localizations:\n    sdk: flutter\n  flutter_web_plugins:\n    sdk: flutter\n  flutter_markdown: ^0.7.3+1\n  #google_fonts: ^6.1.0\n  intl: any\n  json_annotation: ^4.8.1\n  transparent_image: ^2.0.1\n  web: any\n  equatable: ^2.0.5\n  formz: ^0.7.0\n  markdown_widget: ^2.3.2+3\n  provider: ^6.1.1\n  flame: ^1.18.0\n  parallax_effect: ^0.0.3\n  animations: ^2.0.8\n  flutter_animate: ^4.5.0\n  http: ^1.1.0\n  url_launcher: ^6.2.4\n  shared_preferences: ^2.2.3\n  session_storage: ^0.0.1\n  gap: ^3.0.1\n  lottie: ^3.1.2\n  #mouse_parallax: ^1.1.0\n  #google_fonts: ^6.2.0\n  share_plus: ^10.0.2\n  dotlottie_loader: ^0.0.4\n  responsive_builder: ^0.7.1\n  flutter_svg: ^2.0.10+1\n  go_router: ^14.2.1\n  just_audio: ^0.9.39\n  audio_service: ^0.18.15\n  audio_player: \n    git: https://github.com/JosephinCrafter/audio_player.git\n  seo_renderer: ^0.6.0\n  meta_seo: ^3.0.9\n  logger: ^2.4.0\n  flutter_seo: ^1.1.1\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n  flutter_lints: any\n  mockito: any\n  json_serializable: any\n  build_runner: any\n  fake_cloud_firestore: ^3.0.3\n  firebase_storage_mocks: ^0.7.0\n  bloc_test: ^9.1.5\n\nflutter:\n  uses-material-design: true\n\n  # Enable generation of localized Strings from arb files.\n  generate: true\n\n  assets:\n    # Add assets from the images directory to the application.\n    - assets/images/\n    - assets/content.md\n    - assets/animations/\n  fonts:\n    - family: MyFlutterIcons\n      fonts: \n        - asset: assets/fonts/flutter_icons/MyFlutterIcons.ttf\n    \n    - family: Butler\n      fonts:\n        - asset: assets/fonts/butler/Butler_Regular.otf\n        - asset: assets/fonts/butler/Butler_Ultra_Light.otf\n          weight: 100\n        - asset: assets/fonts/butler/Butler_Ultra_Light.otf\n          weight: 200\n        - asset: assets/fonts/butler/butler_medium.otf\n          weight: 500\n        - asset: assets/fonts/butler/Butler_Bold.otf\n          weight: 600\n        - asset: assets/fonts/butler/Butler_Black.otf\n          weight: 700\n        - asset: assets/fonts/butler/butler_extra_bold.otf\n          weight: 800\n    \n    - family: Poppins\n      fonts:\n        - asset: assets/fonts/Poppins/Poppins-Thin.ttf\n          weight: 100\n        - asset: assets/fonts/Poppins/Poppins-ExtraLight.ttf\n          weight: 200\n        - asset: assets/fonts/Poppins/Poppins-Light.ttf\n          weight: 300\n        - asset: assets/fonts/Poppins/Poppins-Regular.ttf\n          weight: 400\n        - asset: assets/fonts/Poppins/Poppins-Medium.ttf\n          weight: 500\n        - asset: assets/fonts/Poppins/Poppins-SemiBold.ttf\n          weight: 600\n        - asset: assets/fonts/Poppins/Poppins-Bold.ttf\n          weight: 700\n        - asset: assets/fonts/Poppins/Poppins-ExtraBold.ttf\n          weight: 800\n        - asset: assets/fonts/Poppins/Poppins-Black.ttf\n          weight: 900\n\n        - asset: assets/fonts/Poppins/Poppins-ThinItalic.ttf\n          weight: 100\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf\n          weight: 200\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-LightItalic.ttf\n          weight: 300\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-Italic.ttf\n          weight: 400\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-MediumItalic.ttf\n          weight: 500\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf\n          weight: 600\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-BoldItalic.ttf\n          weight: 700\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf\n          weight: 800\n          style: italic\n        - asset: assets/fonts/Poppins/Poppins-BlackItalic.ttf\n          weight: 900\n          style: italic\n\n"
  },
  {
    "path": "secrets.md",
    "content": ""
  },
  {
    "path": "storage.rules",
    "content": "rules_version = '2';\n\n// Craft rules based on data in your Firestore database\n// allow write: if firestore.get(\n//    /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;\nservice firebase.storage {\n  match /b/{bucket}/o {\n\n    // This rule allows anyone with your Storage bucket reference to view, edit,\n    // and delete all data in your Storage bucket. It is useful for getting\n    // started, but it is configured to expire after 30 days because it\n    // leaves your app open to attackers. At that time, all client\n    // requests to your Storage bucket will be denied.\n    //\n    // Make sure to write security rules for your app before that time, or else\n    // all client requests to your Storage bucket will be denied until you Update\n    // your rules\n    match /statics/{allPaths=**} {\n      allow read;\n    }\n    match /articles/{allPaths=**} {\n      allow read;\n    }\n    match /projects/{allPaths=**} {\n      allow read;\n    }\n    match /prayers/{allPaths=**} {\n      allow read;\n    }\n    match /novena/{allPaths=**}{\n      allow read;\n    }\n  }\n}"
  },
  {
    "path": "test/articles/article_view_test.dart",
    "content": "import \"package:cloud_firestore/cloud_firestore.dart\";\nimport \"package:fake_cloud_firestore/fake_cloud_firestore.dart\";\nimport \"package:firebase_article/firebase_article.dart\" as fa;\nimport \"package:firebase_storage/firebase_storage.dart\";\nimport \"package:firebase_storage_mocks/firebase_storage_mocks.dart\";\n\n\nFirebaseFirestore fakeFirestore = FakeFirebaseFirestore();\nFirebaseStorage fakeStorage = MockFirebaseStorage();\n\n// void main() {\n//   /// initialize storage mocks\n//   populate();\n//   testWidgets(\n//     'Display properly the highlighted article',\n//     (tester) async {\n//       Widget app = MaterialApp(\n//         home: Scaffold(\n//           appBar: AppBar(\n//             title: const Text(\"Article View test\"),\n//           ),\n//           body: ArticleContentPage(\n//             isHighLight: true,\n//             firestore: fakeFirestore,\n//             storage: fakeStorage,\n//           ),\n//         ),\n//       );\n\n//       await tester.pumpWidget(app);\n//       expect(\n//           find.text(\"This is the highLight article content.\"), findsOneWidget);\n//     },\n//   );\n// }\n\nvoid populate() {\n  String articleTitle = \"highLight\";\n  fakeFirestore\n      .doc(\"articles/setup\")\n      .set({fa.RepoSetUp.highLight: articleTitle});\n\n  fakeFirestore.doc(\"articles/$articleTitle\").set({\n    fa.idKey: articleTitle,\n    fa.titleKey: 'The $articleTitle Article',\n    fa.releaseDateKey: \"02/03/2024\",\n    fa.contentKey: \"articles/$articleTitle/content.md\",\n    fa.relationsKey: [],\n  });\n\n  fakeStorage.ref(\"articles/$articleTitle/content.md\").putString(\n        \"This is the $articleTitle article content.\",\n      );\n}\n"
  },
  {
    "path": "test/articles/articles_bloc_test.dart",
    "content": "import 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/article_view/state/state.dart';\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nimport 'package:bloc_test/bloc_test.dart';\n\nvoid main() {\n  ArticlesRepository mockRepo =\n      ArticlesRepository(firestoreInstance: firestore);\n  String highlightId = 'highlight';\n  group(\n    'Article bloc test',\n    () {\n      Article article = const Article(\n        id: 'qui_est_laure_sabes',\n        title: 'Qui est Laure Sabes?',\n        releaseDate: '2024-02-04',\n        contentPath: 'content.md',\n        relations: [\n          {\n            'hero_header_image': 'image.png',\n          },\n        ],\n      );\n      setUp(() {\n        // when(mockRepo.getHighlighted()).thenAnswer((_) {\n        //   return Future.value(\n        //     article,\n        //   );\n        // });\n        // when(mockRepo.getArticleByName(articleTitle: highlightId))\n        //     .thenAnswer((_) {\n        //   return Future.value(\n        //     article,\n        //   );\n        // });\n      });\n      blocTest<ArticleBloc, ArticleState>(\n        'getting highlighted article',\n        build: () => ArticleBloc(repo: mockRepo),\n        act: (ArticleBloc bloc) => bloc..add(const GetHighlightArticleEvent()),\n        expect: () => [\n          const ArticleState(\n            status: ArticleStatus.initial,\n            articles: null,\n          ),\n          ArticleState(\n            status: ArticleStatus.succeed,\n            articles: {article.id: article},\n          ),\n        ],\n      );\n\n      blocTest<ArticleBloc, ArticleState>(\n        'getting an id given article',\n        build: () => ArticleBloc(repo: mockRepo),\n        act: (bloc) => bloc.add(\n          GetArticleByIdEvent(id: highlightId),\n        ),\n        expect: () => [\n          const ArticleState(\n            status: ArticleStatus.initial,\n            articles: null,\n          ),\n          ArticleState(\n            status: ArticleStatus.succeed,\n            articles: {article.id: article},\n          ),\n        ],\n      );\n    },\n  );\n}\n"
  },
  {
    "path": "test/articles/articles_repository_test.dart",
    "content": "// Test on ArticleRepository class\n// - Responsibility:\n//   - provide article objects to the whole app\n//     -  getArticleOfTheMonth()\n//           \"\"get the highlight article of the month.\n//\n//              First, it read setup document in articles collection.\n//              Then, gather the highlighted article from setup and display it.\n//              \"\"\n//     -  getArticleByName()\n//     -  foldArticles(number)\n//     -  AllArticles()\n//     -  setUp()\n//\n// Because, this class interact directly to the backend api. It's function\n// should return Future objects.\n\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:fake_cloud_firestore/fake_cloud_firestore.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:mockito/mockito.dart';\nimport 'package:firebase_article/firebase_article.dart';\n\n/// A matcher of a null article.\nconst Article noArticle = Article(\n  id: 'no_article',\n);\n\nclass MockArticlesRepository extends Mock implements ArticlesRepository {}\n\nvoid main() {\n  group('Test on getArticleOfTheMonth', () {\n    FirebaseFirestore fakeFirestore = FakeFirebaseFirestore();\n    ArticlesRepository repo =\n        ArticlesRepository(firestoreInstance: fakeFirestore);\n\n    test('Get highlighted article without error', () async {\n      // add an article to firestore\n      populate(fakeFirestore);\n\n      // create a setup\n      setupRepo(fakeFirestore, highLight: 'some_article');\n      // get articleOfTheMonth\n      Article? highLight = await repo.getArticleOfTheMonth();\n\n      expect(\n        highLight,\n        isNotNull,\n      );\n      expect(highLight!.title, 'Some Article');\n      fakeFirestore = FakeFirebaseFirestore();\n    }); // Remove setup from fakeFirestore\n\n    test('Throws a UnableToGetSetup, no setup', () async {\n      // use another fakeFirestore instead of the above\n      fakeFirestore = FakeFirebaseFirestore();\n\n      // populate without setup\n      populate(fakeFirestore);\n      repo = ArticlesRepository(firestoreInstance: fakeFirestore);\n      await expectLater(\n          repo.getArticleOfTheMonth(), throwsA(isA<UnableToGetSetup>()));\n    });\n  });\n}\n\nvoid populate(\n  FirebaseFirestore fakeFirestore, {\n  String? id,\n  String? title,\n  String? content,\n}) {\n  var someArticle = id ?? 'some_article';\n  // populate the data\n  var someArticleMap = {\n    idKey: someArticle,\n    titleKey: 'Some Article',\n    contentKey: 'Some Content',\n  };\n  fakeFirestore\n      .collection(articlesCollection)\n      .doc(someArticle)\n      .set(someArticleMap);\n}\n\nvoid setupRepo(FirebaseFirestore fakeFirestore,\n    {String highLight = 'some_article'}) {\n  var setupDoc = 'setup';\n  var setup = {\n    RepoSetUp.highLight: highLight,\n  };\n  fakeFirestore.collection(articlesCollection).doc(setupDoc).set(setup);\n}\n"
  },
  {
    "path": "test/articles/bare_test.dart",
    "content": "import 'package:flutter_test/flutter_test.dart';\nimport 'package:flutter/material.dart';\n\nvoid main() {\n\n  test(\"bare test\", () {\n    var a = 0;\n    var b = a;\n    expect(a == b, true);\n  });\n\n  testWidgets(\"Try a test on a widget\", (widgetTester) async {\n    String title = \"App title\";\n    Widget myApp = MaterialApp(\n      home: Scaffold(\n        appBar: AppBar(title: Text(title)),\n        body: const Center(\n          child: Text(\"Test App\"),\n        ),\n      ),\n    );\n\n    await widgetTester.pumpWidget(myApp);\n  });\n}\n"
  },
  {
    "path": "test/articles/collection_utils_test.dart",
    "content": "import 'package:ahl/src/utils/firebase_utils.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  group(\n    \"GetCollection \",\n    () {\n      test(\n        'on single element',\n        () {\n          String? collection = getCollection('/collection/document');\n\n          expect(collection, 'collection');\n        },\n      );\n      test(\n        'on multiple element',\n        () {\n          String? collection =\n              getCollection('/collection/document/anotherCollection/document');\n\n          expect(collection, 'collection/document/anotherCollection');\n        },\n      );\n      test(\n        'no collection',\n        () {\n          String? collection =\n              getCollection('document');\n\n          expect(collection, null);\n        },\n      );\n    },\n  );\n}\n"
  },
  {
    "path": "test/breakpoint_resolver_test.dart",
    "content": "import 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:test/test.dart';\n\nvoid main() {\n  test(\n    'Breakpoint resolver test',\n    () {\n      final testValues = [\n        'small',\n        'medium',\n        'large',\n        'extraLarge',\n        'huge',\n        'extraHuge'\n      ];\n\n      final breakPoints = <double>[\n        450,\n        500,\n        820,\n        1100,\n        1500,\n        1920,\n      ];\n\n      for (int i = 0; i < breakPoints.length; i++) {\n        double constraints =\n            breakPoints[i]; //BoxConstraints(maxWidth: breakPoints[i]);\n        String result = resolveForBreakPoint<String>(\n          constraints,\n          other: testValues.last,\n          small: testValues[0],\n          medium: testValues[1],\n          large: testValues[2],\n          extraLarge: testValues[3],\n          huge: testValues[4],\n          extraHuge: testValues.last,\n        );\n        expect(result == testValues[i], true);\n      }\n    },\n  );\n}\n"
  },
  {
    "path": "test/breakpoint_utils/separator_size_test.dart",
    "content": "import \"dart:developer\";\n\nimport \"package:ahl/src/utils/breakpoint_resolver.dart\";\nimport \"package:flutter/material.dart\";\nimport \"package:flutter_test/flutter_test.dart\";\n\nvoid main() {\n  testWidgets(\n    'resolveSeparatorSize function is screen size adaptive.',\n    (WidgetTester tester) async {\n      Widget myApp = Builder(\n        builder: (context) {\n          log(\"${resolveSeparatorSize(context)}\");\n\n          return MediaQuery(\n            data: const MediaQueryData(size: Size(320, 650)),\n            child: Builder(builder: (context) {\n              log(\"Constraints:${MediaQuery.of(context).size}, Separator Size:${resolveSeparatorSize(context)}\");\n              return MaterialApp(\n                home: Align(\n                  child: Text(\"${resolveSeparatorSize(context)}\"),\n                ),\n              );\n            }),\n          );\n        },\n      );\n\n      await tester.pumpWidget(myApp);\n\n      expect(find.text('45.0'), findsOne);\n    },\n  );\n}\n"
  },
  {
    "path": "test/data_storage/firestore_test.dart",
    "content": "// Test the data storage mechanism and triggering from firestore.\nimport 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:fake_cloud_firestore/fake_cloud_firestore.dart';\nimport 'package:mockito/mockito.dart';\n\nimport '../articles/articles_repository_test.dart';\n\nconst emulatorHost = 'localhost';\nconst firestorePort = 46561;\nconst storagePort = 9199;\nvoid main() async {\n  TestWidgetsFlutterBinding.ensureInitialized();\n\n  // await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);\n\n  FirebaseFirestore fakeFirestore = FakeFirebaseFirestore();\n\n  // firestore = FirebaseFirestore.instance;\n  fakeFirestore = FakeFirebaseFirestore();\n  // firestore.useFirestoreEmulator(emulatorHost, firestorePort);\n\n  // storage = FirebaseStorage.instance;\n  // fakestorage = MockFirebaseStorage();\n  // storage.useStorageEmulator(emulatorHost, storagePort);\n\n  // setup fixtures\n  String testCollectionName = 'test';\n  // test document\n  String docTest = 'DocTest';\n  // test data\n  Map<String, dynamic> testData = {'title': 'A test on firebase firestore'};\n\n  /// a doc fixture\n  Map<String, dynamic> doc = {\n    'id': 'leves_toi_et_marches',\n    'title': 'Leves toi et marches',\n    'content': 'articles/leves_toi_et_marches/content.md',\n    'releaseDate': '19/01/2024',\n    'relations': [\n      {\n        'type': 'articles',\n        'path': 'articles/carem/mercredi_des_cendres',\n      },\n    ],\n  };\n  group('Emulator operational verification', () {\n    test('Write data to firestore', () async {\n      await fakeFirestore\n          .collection(testCollectionName)\n          .doc(docTest)\n          .set(testData, SetOptions(merge: true));\n\n      await fakeFirestore.doc('$testCollectionName/$docTest').get();\n    });\n  });\n\n  group(\n    'Test on ArticleHelper class.',\n    () {\n      setUp(() {\n        setupRepo(fakeFirestore);\n        populate(\n          fakeFirestore,\n          id: 'some_article_name',\n          title: 'Some Article Title',\n          content: 'gs://',\n        );\n      });\n      ArticlesRepository articleHelper =\n          ArticlesRepository(firestoreInstance: fakeFirestore);\n      test(\n        'test on class method. This test should fail.',\n        () {\n          Future<Article?> articleOfTheMonth =\n              articleHelper.getHighlighted();\n          Future<Article?> namedArticle =\n              articleHelper.getArticleById(articleId: 'some_article_name');\n\n          expect(articleOfTheMonth, isNotNull);\n          expect(namedArticle, isNotNull);\n        },\n      );\n      test('Get raw data from cloud firestore', () {\n        ArticlesRepository articleHelper =\n            ArticlesRepository(firestoreInstance: fakeFirestore);\n        Future<Article?> namedArticle =\n            articleHelper.getArticleById(articleId: 'leves_toi_et_marche');\n\n        expect(namedArticle, isNotNull);\n      });\n    },\n  );\n\n  group(\n    'test on Article class.',\n    () {\n      test(\n        'Instantiate an article without argument',\n        () {\n          // Article article = const Article(id: 'some_article');\n\n          // var title = article.title;\n          // var releaseDate = article.releaseDate;\n          // var content = article.contentPath;\n          // var relations = article.relations;\n\n          // Article article1 = const Article(\n          //   id: 'title',\n          //   title: 'Title',\n          //   releaseDate: '19/01/2024',\n          //   contentPath: 'articles/some_content.md',\n          //   relations: [\n          //     {\n          //       'type': 'image',\n          //       'path': 'article/some_article/image.png',\n          //     }\n          //   ],\n          // );\n\n          Article article2 = Article.fromDoc(doc);\n          expect(article2.title == doc[titleKey], true);\n          expect(article2.contentPath == doc[contentKey], true);\n          expect(article2.relations == doc[relationsKey], true);\n          expect(article2.releaseDate, doc[releaseDateKey]);\n\n          expect(article2.toDoc(), equals(doc));\n        },\n      );\n    },\n  );\n}\n\nclass MockArticleHelper with Mock implements ArticlesRepository {}\n"
  },
  {
    "path": "test/newsletter/newsletterbloc_test.dart",
    "content": "import 'package:bloc_test/bloc_test.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:mockito/mockito.dart';\nimport 'package:mockito/annotations.dart';\n\nimport 'package:ahl/src/newsletter/newsletter.dart';\n\n// let's create  the repo\n@GenerateNiceMocks([MockSpec<NewsletterSubscriptionRepository>()])\nimport 'newsletterbloc_test.mocks.dart';\n\n/// To start a bloc test, I think we're gonna need to implement a widget and\n/// read from there.\nvoid main() {\n  const String exampleEmail = 'example@email.com';\n  NewsletterSubscriptionRepository mockRepo =\n      MockNewsletterSubscriptionRepository();\n  group(\n    'test on NewsletterBloc',\n    () {\n      setUpAll(() {\n        when(mockRepo.status).thenAnswer((_) {\n          return Stream.fromIterable([NewsletterSubscriptionStatus.initial]);\n        });\n      });\n      blocTest<NewsletterSubscriptionBloc, NewsletterSubscriptionState>(\n        'emits initial status when freshly created',\n        build: () => NewsletterSubscriptionBloc(repo: mockRepo),\n        act: (bloc) => bloc\n          ..add(InitializeRequestEvent())\n          ..add(InitializeRequestEvent()),\n        expect: () => [\n          NewsletterSubscriptionState.initial(),\n        ],\n      );\n\n      blocTest<NewsletterSubscriptionBloc, NewsletterSubscriptionState>(\n        'emits loading when added an event email',\n        build: () => NewsletterSubscriptionBloc(repo: mockRepo),\n        act: (bloc)async  {\n          bloc.add(\n            SubscriptionRequestEvent(\n              email: exampleEmail,\n            ),\n          );\n          await Future.delayed( const Duration(milliseconds: 300));\n        },\n        expect: () => [\n          const NewsletterSubscriptionState(\n              email: exampleEmail,\n              status: NewsletterSubscriptionStatus.loading,\n              error: null),\n          const NewsletterSubscriptionState(\n            email: exampleEmail,\n            status: NewsletterSubscriptionStatus.success,\n            error: null,\n          ),\n        ],\n      );\n    },\n  );\n}\n\nclass MockNewsletterPromptBloc extends Mock implements Bloc {}\n"
  },
  {
    "path": "test/newsletter/newsletterbloc_test.mocks.dart",
    "content": "// Mocks generated by Mockito 5.4.4 from annotations\n// in ahl/test/newsletter/newsletterbloc_test.dart.\n// Do not manually edit this file.\n\n// ignore_for_file: no_leading_underscores_for_library_prefixes\nimport 'dart:async' as _i3;\n\nimport 'package:ahl/src/newsletter/newsletter.dart' as _i2;\nimport 'package:mockito/mockito.dart' as _i1;\n\n// ignore_for_file: type=lint\n// ignore_for_file: avoid_redundant_argument_values\n// ignore_for_file: avoid_setters_without_getters\n// ignore_for_file: comment_references\n// ignore_for_file: deprecated_member_use\n// ignore_for_file: deprecated_member_use_from_same_package\n// ignore_for_file: implementation_imports\n// ignore_for_file: invalid_use_of_visible_for_testing_member\n// ignore_for_file: prefer_const_constructors\n// ignore_for_file: unnecessary_parenthesis\n// ignore_for_file: camel_case_types\n// ignore_for_file: subtype_of_sealed_class\n\n/// A class which mocks [NewsletterSubscriptionRepository].\n///\n/// See the documentation for Mockito's code generation for more information.\nclass MockNewsletterSubscriptionRepository extends _i1.Mock\n    implements _i2.NewsletterSubscriptionRepository {\n  @override\n  _i3.Stream<_i2.NewsletterSubscriptionStatus> get status =>\n      (super.noSuchMethod(\n        Invocation.getter(#status),\n        returnValue: _i3.Stream<_i2.NewsletterSubscriptionStatus>.empty(),\n        returnValueForMissingStub:\n            _i3.Stream<_i2.NewsletterSubscriptionStatus>.empty(),\n      ) as _i3.Stream<_i2.NewsletterSubscriptionStatus>);\n\n  @override\n  Map<String, dynamic> data(String? email) => (super.noSuchMethod(\n        Invocation.method(\n          #data,\n          [email],\n        ),\n        returnValue: <String, dynamic>{},\n        returnValueForMissingStub: <String, dynamic>{},\n      ) as Map<String, dynamic>);\n\n  @override\n  void initialize() => super.noSuchMethod(\n        Invocation.method(\n          #initialize,\n          [],\n        ),\n        returnValueForMissingStub: null,\n      );\n\n  @override\n  _i3.Future<void> subscribe({required String? email}) => (super.noSuchMethod(\n        Invocation.method(\n          #subscribe,\n          [],\n          {#email: email},\n        ),\n        returnValue: _i3.Future<void>.value(),\n        returnValueForMissingStub: _i3.Future<void>.value(),\n      ) as _i3.Future<void>);\n}\n"
  },
  {
    "path": "test/prayer_request/bloc_test.dart",
    "content": "import 'package:ahl/src/prayers_intention/prayer_request.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:bloc_test/bloc_test.dart';\n\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:fake_cloud_firestore/fake_cloud_firestore.dart';\n\n/// PrayerRequestState:\n///\n/// This class is the bloc state.\n///\n/// - It need a [PrayerRequest] object as [PrayerRequestState.request]\n///   that can be null on [PrayerRequestState.initial]\n/// - A [PrayerRequestStatus] object as [PrayerRequestState.currentStatus] that\n///   can't be null.\n\n/// PrayerRequestBloc:\n///\n/// The bloc class for PrayerRequest management.\n///\n/// It handles these events:\n/// - [PrayerRequestInitializeEvent] for initialization, and emit a [PrayerRequestState.initial]\n/// - [PrayerRequestFilledDateEvent] when date is gotten from the ui,\n///   emit a [PrayerRequestState.fillDate]\n/// - [PrayerRequestFilledFormEvent] when prayer form is gotten from the ui,\n///   emit a [PrayerRequestState.fillForm]\n/// These event updates the current [PrayerRequest] object and always change\n/// [PrayerRequestState.currentStatus] to the appropriate one.\n///\n/// [on<PrayerRequestInitializeEvent>] is called on the initialization of the bloc.\n/// It emits a [PrayerRequestState.initial] at this time.\n\n/// PrayerRequestStatus:\n///\n/// This status class can have 4 values:\n/// - [PrayerRequestStatus.initial]\n/// - [PrayerRequestStatus.filledDate]\n/// - [PrayerRequestStatus.filledForm]\n/// - [PrayerRequestStatus.complete]\n\n/// PrayerRequestEvent:\n///\n/// Events are responsible of sending new information to change current state.\n/// For this purpose, we need 4 event like status:\n/// - [PrayerRequestInitializeEvent]\n/// - [PrayerRequestFilledDateEvent]\n/// - [PrayerRequestFilledFormEvent]\n/// - [PrayerRequestCompletedEvent]\nvoid main() {\n  FirebaseFirestore firestore = FakeFirebaseFirestore();\n  PrayerRequestRepo repo = PrayerRequestRepo(db: firestore);\n  blocTest('a bloc that emit an initial state of PrayerIntentionBloc',\n      build: () => PrayerRequestBloc(repo),\n      // act: (bloc) => bloc.add(PrayerRequestInitializeEvent()),\n      expect: () => [\n            /// The initial state is clean and have not any value in\n            /// PrayerRequest.\n            ///\n            /// It will set the [prayerRequest] object in state to null.\n            isA<PrayerRequestInitialState>(),\n          ]);\n  group(\n    'test on bloc filled interaction',\n    () {\n      var email = 'razafindrakotojosephin@gmail.com';\n      var prayer = 'some prayer';\n      var name = 'Josephin';\n      var date = DateTime.now();\n      var prayerType = PrayerType.mass;\n\n      blocTest(\n        'a bloc that emit a filled state of PrayerIntentionBloc',\n        build: () => PrayerRequestBloc(repo),\n        act: (bloc) => bloc.add(\n          PrayerRequestFilledFormEvent(\n            email: email,\n            prayer: prayer,\n            name: name,\n          ),\n        ),\n        expect: () => [\n          isA<PrayerRequestInitialState>(),\n          isA<PrayerRequestFilledFormState>(),\n        ],\n      );\n      blocTest(\n        'a bloc that emit a request with all form',\n        build: () => PrayerRequestBloc(repo),\n        act: (bloc) => bloc.add(\n          PrayerRequestFilledDateEvent(\n            date: date,\n            prayerType: prayerType,\n          ),\n        ),\n        expect: () => [\n          isA<PrayerRequestInitialState>(),\n          isA<PrayerRequestFilledDateState>(),\n        ],\n      );\n\n      blocTest(\n        'a bloc that emit a full request',\n        build: () => PrayerRequestBloc(repo),\n        act: (bloc) => bloc.add(\n          PrayerRequestCompletedEvent(\n            email: email,\n            prayer: prayer,\n            name: name,\n            date: date,\n            prayerType: prayerType,\n          ),\n        ),\n        expect: () => [\n          isA<PrayerRequestInitialState>(),\n          isA<PrayerRequestCompleteState>(),\n        ],\n      );\n    },\n  );\n}\n"
  },
  {
    "path": "test/prayer_request/repo_test.dart",
    "content": "import 'package:ahl/src/prayers_intention/prayer_request.dart';\nimport 'package:fake_cloud_firestore/fake_cloud_firestore.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  test('testing repository', () {\n    PrayerRequest request = PrayerRequest(\n      email: 'email',\n      dateTime: DateTime.now(),\n      prayer: 'prayer',\n      prayerType: PrayerType.rosary,\n    );\n    PrayerRequestRepo repo = PrayerRequestRepo(\n      db: FakeFirebaseFirestore(),\n    );\n\n    repo.write(request);\n  });\n}\n"
  },
  {
    "path": "test/project_bloc/project_bloc_test.dart",
    "content": "import 'package:ahl/src/article_view/state/state.dart';\nimport 'package:ahl/src/project_space/bloc.dart';\nimport 'package:ahl/src/project_space/model.dart';\nimport 'package:bloc_test/bloc_test.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nimport '../articles/article_view_test.dart';\n\nvoid main() {\n  group('ProjectBloc test', () {\n    blocTest(\"initialize bloc\", build: () => ProjectBloc(firebaseFirestore: fakeFirestore),\n    expect: () => [\n      isA<ArticleState<Project>>()\n    ] );\n  });\n}\n"
  },
  {
    "path": "test/project_page_view/build_relations_test.dart",
    "content": ""
  },
  {
    "path": "test/unit_test.dart",
    "content": "// This is an example unit test.\n//\n// A unit test tests a single function, method, or class. To learn more about\n// writing unit tests, visit\n// https://flutter.dev/docs/cookbook/testing/unit/introduction\n\nimport 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  group('Plus Operator', () {\n    test('should add two numbers together', () {\n      expect(1 + 1, 2);\n    });\n  });\n\n  group(\n    'actions test',\n    () {\n      /// The [ActionsLists] contain a static member [ActionsLists.actions] that is\n      /// [Map<String,String>]. The key represents the name of the actions. And the\n      /// corresponding value is the route name of the action.\n      ///\n      /// This [Map] is used to set up the [AppBar] actions and [Footer] actions.\n      ///\n      /// This test try to get the member. This is the only one responsibility of the class.\n      test(\n        'get action and rootNames from the static action list',\n        () {\n          var actions = ActionsLists.actions;\n\n          expect(actions.isNotEmpty, true);\n        },\n      );\n    },\n  );\n}\n"
  },
  {
    "path": "test/widget_test.dart",
    "content": "// This is an example Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester\n// utility in the flutter_test package. For example, you can send tap and scroll\n// gestures. You can also use WidgetTester to find child widgets in the widget\n// tree, read text, and verify that the values of widget properties are correct.\n//\n// Visit https://flutter.dev/docs/cookbook/testing/widget/introduction for\n// more information about Widget testing.\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  group('MyWidget', () {\n    testWidgets('should display a string of text', (WidgetTester tester) async {\n      // Define a Widget\n      const myWidget = MaterialApp(\n        home: Scaffold(\n          body: Text('Hello'),\n        ),\n      );\n\n      // Build myWidget and trigger a frame.\n      await tester.pumpWidget(myWidget);\n\n      // Verify myWidget shows some text\n      expect(find.byType(Text), findsOneWidget);\n    });\n  });\n}\n"
  },
  {
    "path": "untranslated_message.txt",
    "content": "{\n  \"en\": [\n    \"slogan\",\n    \"heroHeaderSubtitle\",\n    \"articles\",\n    \"read\",\n    \"thanksForRegistering\",\n    \"invalidEmail\",\n    \"cantBeEmpty\",\n    \"unknownError\",\n    \"priesIntention\",\n    \"proverb\",\n    \"priersInvitation\",\n    \"nameAndFirstName\",\n    \"priers\",\n    \"sendPray\",\n    \"optional\",\n    \"yourPrayer\",\n    \"prayerRequestInvitation\",\n    \"whenWePray\",\n    \"wePrayOn\",\n    \"prayingDate\",\n    \"priersOf\",\n    \"mass\",\n    \"rosary\",\n    \"vesper\",\n    \"choiceMass\",\n    \"choiceRosary\",\n    \"choiceVesper\",\n    \"projectsSpace\",\n    \"projectsSpaceSubtitle\",\n    \"projectsSpaceIntroduction\",\n    \"ourPartners\",\n    \"inProgress\",\n    \"waitingBudget\",\n    \"done\",\n    \"supportProject\",\n    \"realized\",\n    \"initiative\",\n    \"projectSpaceTitle\",\n    \"projectLongTitle\",\n    \"projectSpaceDescription\",\n    \"january\",\n    \"february\",\n    \"march\",\n    \"april\",\n    \"may\",\n    \"june\",\n    \"july\",\n    \"august\",\n    \"september\",\n    \"october\",\n    \"november\",\n    \"december\",\n    \"whoWeAre\",\n    \"domSisters\",\n    \"allArticles\",\n    \"share\",\n    \"todaysRosary\",\n    \"rosarySlogan\",\n    \"getNotified\",\n    \"allProjects\",\n    \"devInProgress\",\n    \"prayerSpace\",\n    \"todaySaint\",\n    \"office\",\n    \"novena\",\n    \"availableSoon\",\n    \"listenPodcast\"\n  ]\n}\n"
  },
  {
    "path": "web/flutter_bootstrap.js",
    "content": "/// This script avoid cache conflict when the old version is present in cache\n/// but a new version is already deployed.\n\n/// The mechanism is simple:\n///  - it compares the cached version of the website and the online one by making a real request\n\nconsole.log(\"Entering version check\");\n\nconst MANIFEST = \"flutter-app-manifest\";\nconst TEMP = \"flutter-temp-cache\";\nconst CACHE_NAME = \"flutter-app-cache\";\n\nconst CORE = [\n  \"main.dart.js\",\n  \"index.html\",\n  \"flutter_bootstrap.js\",\n  \"assets/AssetManifest.bin.json\",\n  \"assets/FontManifest.json\",\n];\n\nasync function getVersion({isOnline=false}) {\n  console.log(\"Getting online version...\");\n  /// Get online version\n  var version = [];\n  try {\n      var response = await fetch(new Request(\"version.json\",{\n          cache: isOnline ? \"no-store\" : \"only-if-cached\",\n          mode:\"same-origin\",\n      }));\n\n      if (response.ok) {\n        var data =  await response.json();\n              console.log('Successfully got version.json', isOnline ? \" online.\" : \" from cache.\", \"\\n version:\", data);\n              // Handle data\n              version[0] = data.version;\n              version[1] = data.build_number;\n              console.log(isOnline ? \"Online\" : \"Cache\", \" version is\", version);\n          \n      } else {\n          // handle case where there's no cached response\n          console.log(\"No version.json file got from \", isOnline ? \"online\" : \"cache\", \" resource\", response);\n      }\n  } catch (error) {\n      // Handling error\n      console.log(\"Error getting \", isOnline ? \" online\" : \" local\", \" version.json:\", error);\n      return;\n  }\n  console.log(\"[getVersion] Version is:\", version);\n  return version;\n}\n\nasync function checkCache() {\n  var onlineVersion = await getVersion({\n      isOnline: true\n  });\n  var cachedVersion = await getVersion({\n      isOnline: false\n  });\n\n  console.log(\"Online version is :\", onlineVersion);\n  console.log(\"Cached version is :\", cachedVersion);\n\n  if (onlineVersion && cachedVersion) {\n      if (onlineVersion != cachedVersion) {\n          /// In case the two version is different\n          /// empty cache\n          console.log(\"Clearing cache\");\n          await caches.delete(MANIFEST);\n          await caches.delete(CACHE_NAME);\n          await caches.delete(TEMP);\n      } else {\n          console.log(\"The app is up to date.\");\n      }\n  }\n}\n\n(async () => {\n  await checkCache();\n})();\n\n{{flutter_js}}\n{{flutter_build_config}}\n\nconst searchParams = new URLSearchParams(window.location.search);\nconst renderer = searchParams.get('renderer');\nconst userConfig = renderer ? {'renderer': renderer} : {};\n\n_flutter.loader.load({config: userConfig,\n    serviceWorkerSettings: {\n      serviceWorkerVersion: {{flutter_service_worker_version}},\n    },\n});"
  },
  {
    "path": "web/google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg.txt",
    "content": "google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg"
  },
  {
    "path": "web/google91970a171ec523e2.html",
    "content": "google-site-verification: google91970a171ec523e2.html"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"fr\">\n  <head>\n    <script>\n      (function (w, d, s, l, i) {\n        w[l] = w[l] || [];\n        w[l].push({\n          \"gtm.start\": new Date().getTime(),\n          event: \"gtm.js\",\n        });\n        var f = d.getElementsByTagName(s)[0],\n          j = d.createElement(s),\n          dl = l != \"dataLayer\" ? \"&l=\" + l : \"\";\n        j.async = true;\n        j.src = \"https://www.googletagmanager.com/gtm.js?id=\" + i + dl;\n        f.parentNode.insertBefore(j, f);\n      })(window, document, \"script\", \"dataLayer\", \"G-RJLCGV14LF\");\n    </script>\n    <!-- End Google Tag Manager GTM-PRC72JP9 -->\n    <!-- Load the loading spin before flutter load.-->\n    <link rel=\"stylesheet\" href=\"/loader.css\" />\n    <link rel=\"javascript\" href=\"/lottie.js\" />\n    <link rel=\"stylesheet\" href=\"/style.css\" />\n\n    <!--\n    If you are serving your web app in a path other than the root, change the\n    href value below to reflect the base path you are serving from.\n\n    The path provided below has to start and end with a slash \"/\" in order for\n    it to work correctly.\n\n    For more details:\n    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base\n\n    This is a placeholder for base href that will be replaced by the value of\n    the `--base-href` argument provided to `flutter build`.\n  -->\n    <base href=\"$FLUTTER_BASE_HREF\" />\n\n    <meta charset=\"UTF-8\" />\n    <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\" />\n    <meta\n      name=\"description\"\n      content=\"Solidarité et Prière pour Madagascar avec les Soeurs Dominicaines Missionnaires de Notre Dame de la Délivrande. Découvrez nos missions auprès des enfants, rejoignez nos prières quotidiennes et partagez la vie de notre communauté.\"\n    />\n    <meta\n      name=\"keywords\"\n      content=\"Solidarité Madagascar,Sœurs Dominicaines, sœurs Missionnaires de Notre Dame de la Delivrande, Saharoaloha, Cantine Saharoaloha,  Prière Madagascar, Enfants Madagascar, Missions Madagascar, Communauté Madagascar, Aide humanitaire, Développement,  Education,  Santé,  Parrainage,  Orphelinat, Foi chrétienne, Prières quotidiennes, Vie spirituelle\"\n    />\n    <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\" />\n    <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png\" />\n    <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/favicon-16x16.png\" />\n    <link rel=\"manifest\" href=\"/site.webmanifest\" />\n\n    <!-- iOS meta tags & icons -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\" />\n    <meta name=\"apple-mobile-web-app-title\" content=\"Aujourd'hui l'avenir\" />\n    <link rel=\"apple-touch-icon\" href=\"icons/Icon-192.png\" />\n\n    <!-- Favicon -->\n    <link rel=\"icon\" type=\"image/png\" href=\"favicon.png\" />\n\n    <title>\n      Aujourd'hui l'avenir | Soeurs de Notre Dame de la Délivrande Madagascar\n    </title>\n  </head>\n\n  <body>\n    <script>\n\t\t\timport(\"./scripts/botd-1.1.0.js\")\n\t\t\t\t.then((botd) => botd.load())\n\t\t\t\t.then((botd) => botd.detect())\n\t\t\t\t.then(function (result) {\n\t\t\t\t\tif (result.bot) {\n\t\t\t\t\t\twindow.flutterWebRenderer = \"html\";\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t</script>\n    <!-- Google Tag Manager (noscript) -->\n    <noscript\n      ><iframe\n        src=\"https://www.googletagmanager.com/ns.html?id=GTM-PRC72JP9\"\n        height=\"0\"\n        width=\"0\"\n        style=\"display: none; visibility: hidden\"\n      ></iframe\n    ></noscript>\n\n    <script src=\"js/lottie.js\" type=\"text/javascript\"></script>\n    <!-- End Google Tag Manager (noscript) -->\n    <!-- Display text before the loader -->\n    <div id=\"loader\">\n      <img id=\"loader-title\" src=\"logo_form_typo_black.png\" alt=\"Ahl Logo\" />\n      <!-- <div class=\"lds-dual-ring\">\n         Insert the loading shape \n        <div class=\"lds-heart\">\n          <div></div>\n        </div>\n      </div>-->\n      <div id=\"animationContainer\" class=\"loader-div\">\n        <script>\n          const animationContainer =\n            document.getElementById(\"animationContainer\");\n          lottie\n            .loadAnimation({\n              container: animationContainer, // the dom element that will contain the animation\n              renderer: \"svg\",\n              loop: true,\n              autoplay: true,\n              path: \"loading_rosary.json\", // the path to the animation json\n            })\n            .play();\n        </script>\n      </div>\n    </div>\n\n    <script src=\"flutter_bootstrap.js\" async></script>\n\n    <!-- old flutter loader-->\n    <!-- <script src=\"main.dart.js\" type=\"application/javascript\"\n    onendload=\"document.getElementById('loader').remove();\"></script>\n  <script>\n    window.addEventListener(\"load\", function (ev) {\n      const serviceWorkerVersion = \"{{flutter_service_worker_version}}\";\n      // Download main.dart.js\n      _flutter.loader.load({\n        serviceWorker: {\n          serviceWorkerVersion: serviceWorkerVersion,\n        },\n        onEntrypointLoaded: function (engineInitializer) {\n          engineInitializer.initializeEngine().then(function (appRunner) {\n            appRunner.runApp();\n          });\n        },\n      });\n    });\n  </script> --> \n  \n  </body>\n</html>\n"
  },
  {
    "path": "web/js/lottie.js",
    "content": "\"undefined\" != typeof navigator &&\n  (function (t, e) {\n    \"object\" == typeof exports && \"undefined\" != typeof module\n      ? (module.exports = e())\n      : \"function\" == typeof define && define.amd\n      ? define(e)\n      : ((t =\n          \"undefined\" != typeof globalThis ? globalThis : t || self).lottie =\n          e());\n  })(this, function () {\n    \"use strict\";\n    var svgNS = \"http://www.w3.org/2000/svg\",\n      locationHref = \"\",\n      _useWebWorker = !1,\n      initialDefaultFrame = -999999,\n      setWebWorker = function (t) {\n        _useWebWorker = !!t;\n      },\n      getWebWorker = function () {\n        return _useWebWorker;\n      },\n      setLocationHref = function (t) {\n        locationHref = t;\n      },\n      getLocationHref = function () {\n        return locationHref;\n      };\n    function createTag(t) {\n      return document.createElement(t);\n    }\n    function extendPrototype(t, e) {\n      var i,\n        r,\n        s = t.length;\n      for (i = 0; i < s; i += 1)\n        for (var a in (r = t[i].prototype))\n          Object.prototype.hasOwnProperty.call(r, a) && (e.prototype[a] = r[a]);\n    }\n    function getDescriptor(t, e) {\n      return Object.getOwnPropertyDescriptor(t, e);\n    }\n    function createProxyFunction(t) {\n      function e() {}\n      return (e.prototype = t), e;\n    }\n    var audioControllerFactory = (function () {\n        function t(t) {\n          (this.audios = []),\n            (this.audioFactory = t),\n            (this._volume = 1),\n            (this._isMuted = !1);\n        }\n        return (\n          (t.prototype = {\n            addAudio: function (t) {\n              this.audios.push(t);\n            },\n            pause: function () {\n              var t,\n                e = this.audios.length;\n              for (t = 0; t < e; t += 1) this.audios[t].pause();\n            },\n            resume: function () {\n              var t,\n                e = this.audios.length;\n              for (t = 0; t < e; t += 1) this.audios[t].resume();\n            },\n            setRate: function (t) {\n              var e,\n                i = this.audios.length;\n              for (e = 0; e < i; e += 1) this.audios[e].setRate(t);\n            },\n            createAudio: function (t) {\n              return this.audioFactory\n                ? this.audioFactory(t)\n                : window.Howl\n                ? new window.Howl({ src: [t] })\n                : {\n                    isPlaying: !1,\n                    play: function () {\n                      this.isPlaying = !0;\n                    },\n                    seek: function () {\n                      this.isPlaying = !1;\n                    },\n                    playing: function () {},\n                    rate: function () {},\n                    setVolume: function () {},\n                  };\n            },\n            setAudioFactory: function (t) {\n              this.audioFactory = t;\n            },\n            setVolume: function (t) {\n              (this._volume = t), this._updateVolume();\n            },\n            mute: function () {\n              (this._isMuted = !0), this._updateVolume();\n            },\n            unmute: function () {\n              (this._isMuted = !1), this._updateVolume();\n            },\n            getVolume: function () {\n              return this._volume;\n            },\n            _updateVolume: function () {\n              var t,\n                e = this.audios.length;\n              for (t = 0; t < e; t += 1)\n                this.audios[t].volume(this._volume * (this._isMuted ? 0 : 1));\n            },\n          }),\n          function () {\n            return new t();\n          }\n        );\n      })(),\n      createTypedArray = (function () {\n        function t(t, e) {\n          var i,\n            r = 0,\n            s = [];\n          switch (t) {\n            case \"int16\":\n            case \"uint8c\":\n              i = 1;\n              break;\n            default:\n              i = 1.1;\n          }\n          for (r = 0; r < e; r += 1) s.push(i);\n          return s;\n        }\n        return \"function\" == typeof Uint8ClampedArray &&\n          \"function\" == typeof Float32Array\n          ? function (e, i) {\n              return \"float32\" === e\n                ? new Float32Array(i)\n                : \"int16\" === e\n                ? new Int16Array(i)\n                : \"uint8c\" === e\n                ? new Uint8ClampedArray(i)\n                : t(e, i);\n            }\n          : t;\n      })();\n    function createSizedArray(t) {\n      return Array.apply(null, { length: t });\n    }\n    function _typeof$6(t) {\n      return (\n        (_typeof$6 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$6(t)\n      );\n    }\n    var subframeEnabled = !0,\n      expressionsPlugin = null,\n      expressionsInterfaces = null,\n      idPrefix$1 = \"\",\n      isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent),\n      _shouldRoundValues = !1,\n      bmPow = Math.pow,\n      bmSqrt = Math.sqrt,\n      bmFloor = Math.floor,\n      bmMax = Math.max,\n      bmMin = Math.min,\n      BMMath = {};\n    function ProjectInterface$1() {\n      return {};\n    }\n    !(function () {\n      var t,\n        e = [\n          \"abs\",\n          \"acos\",\n          \"acosh\",\n          \"asin\",\n          \"asinh\",\n          \"atan\",\n          \"atanh\",\n          \"atan2\",\n          \"ceil\",\n          \"cbrt\",\n          \"expm1\",\n          \"clz32\",\n          \"cos\",\n          \"cosh\",\n          \"exp\",\n          \"floor\",\n          \"fround\",\n          \"hypot\",\n          \"imul\",\n          \"log\",\n          \"log1p\",\n          \"log2\",\n          \"log10\",\n          \"max\",\n          \"min\",\n          \"pow\",\n          \"random\",\n          \"round\",\n          \"sign\",\n          \"sin\",\n          \"sinh\",\n          \"sqrt\",\n          \"tan\",\n          \"tanh\",\n          \"trunc\",\n          \"E\",\n          \"LN10\",\n          \"LN2\",\n          \"LOG10E\",\n          \"LOG2E\",\n          \"PI\",\n          \"SQRT1_2\",\n          \"SQRT2\",\n        ],\n        i = e.length;\n      for (t = 0; t < i; t += 1) BMMath[e[t]] = Math[e[t]];\n    })(),\n      (BMMath.random = Math.random),\n      (BMMath.abs = function (t) {\n        if (\"object\" === _typeof$6(t) && t.length) {\n          var e,\n            i = createSizedArray(t.length),\n            r = t.length;\n          for (e = 0; e < r; e += 1) i[e] = Math.abs(t[e]);\n          return i;\n        }\n        return Math.abs(t);\n      });\n    var defaultCurveSegments = 150,\n      degToRads = Math.PI / 180,\n      roundCorner = 0.5519;\n    function roundValues(t) {\n      _shouldRoundValues = !!t;\n    }\n    function bmRnd(t) {\n      return _shouldRoundValues ? Math.round(t) : t;\n    }\n    function styleDiv(t) {\n      (t.style.position = \"absolute\"),\n        (t.style.top = 0),\n        (t.style.left = 0),\n        (t.style.display = \"block\"),\n        (t.style.transformOrigin = \"0 0\"),\n        (t.style.webkitTransformOrigin = \"0 0\"),\n        (t.style.backfaceVisibility = \"visible\"),\n        (t.style.webkitBackfaceVisibility = \"visible\"),\n        (t.style.transformStyle = \"preserve-3d\"),\n        (t.style.webkitTransformStyle = \"preserve-3d\"),\n        (t.style.mozTransformStyle = \"preserve-3d\");\n    }\n    function BMEnterFrameEvent(t, e, i, r) {\n      (this.type = t),\n        (this.currentTime = e),\n        (this.totalTime = i),\n        (this.direction = r < 0 ? -1 : 1);\n    }\n    function BMCompleteEvent(t, e) {\n      (this.type = t), (this.direction = e < 0 ? -1 : 1);\n    }\n    function BMCompleteLoopEvent(t, e, i, r) {\n      (this.type = t),\n        (this.currentLoop = i),\n        (this.totalLoops = e),\n        (this.direction = r < 0 ? -1 : 1);\n    }\n    function BMSegmentStartEvent(t, e, i) {\n      (this.type = t), (this.firstFrame = e), (this.totalFrames = i);\n    }\n    function BMDestroyEvent(t, e) {\n      (this.type = t), (this.target = e);\n    }\n    function BMRenderFrameErrorEvent(t, e) {\n      (this.type = \"renderFrameError\"),\n        (this.nativeError = t),\n        (this.currentTime = e);\n    }\n    function BMConfigErrorEvent(t) {\n      (this.type = \"configError\"), (this.nativeError = t);\n    }\n    function BMAnimationConfigErrorEvent(t, e) {\n      (this.type = t), (this.nativeError = e);\n    }\n    var createElementID =\n        ((_count = 0),\n        function () {\n          return idPrefix$1 + \"__lottie_element_\" + (_count += 1);\n        }),\n      _count;\n    function HSVtoRGB(t, e, i) {\n      var r, s, a, n, o, h, l, p;\n      switch (\n        ((h = i * (1 - e)),\n        (l = i * (1 - (o = 6 * t - (n = Math.floor(6 * t))) * e)),\n        (p = i * (1 - (1 - o) * e)),\n        n % 6)\n      ) {\n        case 0:\n          (r = i), (s = p), (a = h);\n          break;\n        case 1:\n          (r = l), (s = i), (a = h);\n          break;\n        case 2:\n          (r = h), (s = i), (a = p);\n          break;\n        case 3:\n          (r = h), (s = l), (a = i);\n          break;\n        case 4:\n          (r = p), (s = h), (a = i);\n          break;\n        case 5:\n          (r = i), (s = h), (a = l);\n      }\n      return [r, s, a];\n    }\n    function RGBtoHSV(t, e, i) {\n      var r,\n        s = Math.max(t, e, i),\n        a = Math.min(t, e, i),\n        n = s - a,\n        o = 0 === s ? 0 : n / s,\n        h = s / 255;\n      switch (s) {\n        case a:\n          r = 0;\n          break;\n        case t:\n          (r = e - i + n * (e < i ? 6 : 0)), (r /= 6 * n);\n          break;\n        case e:\n          (r = i - t + 2 * n), (r /= 6 * n);\n          break;\n        case i:\n          (r = t - e + 4 * n), (r /= 6 * n);\n      }\n      return [r, o, h];\n    }\n    function addSaturationToRGB(t, e) {\n      var i = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]);\n      return (\n        (i[1] += e),\n        i[1] > 1 ? (i[1] = 1) : i[1] <= 0 && (i[1] = 0),\n        HSVtoRGB(i[0], i[1], i[2])\n      );\n    }\n    function addBrightnessToRGB(t, e) {\n      var i = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]);\n      return (\n        (i[2] += e),\n        i[2] > 1 ? (i[2] = 1) : i[2] < 0 && (i[2] = 0),\n        HSVtoRGB(i[0], i[1], i[2])\n      );\n    }\n    function addHueToRGB(t, e) {\n      var i = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]);\n      return (\n        (i[0] += e / 360),\n        i[0] > 1 ? (i[0] -= 1) : i[0] < 0 && (i[0] += 1),\n        HSVtoRGB(i[0], i[1], i[2])\n      );\n    }\n    var rgbToHex = (function () {\n        var t,\n          e,\n          i = [];\n        for (t = 0; t < 256; t += 1)\n          (e = t.toString(16)), (i[t] = 1 === e.length ? \"0\" + e : e);\n        return function (t, e, r) {\n          return (\n            t < 0 && (t = 0),\n            e < 0 && (e = 0),\n            r < 0 && (r = 0),\n            \"#\" + i[t] + i[e] + i[r]\n          );\n        };\n      })(),\n      setSubframeEnabled = function (t) {\n        subframeEnabled = !!t;\n      },\n      getSubframeEnabled = function () {\n        return subframeEnabled;\n      },\n      setExpressionsPlugin = function (t) {\n        expressionsPlugin = t;\n      },\n      getExpressionsPlugin = function () {\n        return expressionsPlugin;\n      },\n      setExpressionInterfaces = function (t) {\n        expressionsInterfaces = t;\n      },\n      getExpressionInterfaces = function () {\n        return expressionsInterfaces;\n      },\n      setDefaultCurveSegments = function (t) {\n        defaultCurveSegments = t;\n      },\n      getDefaultCurveSegments = function () {\n        return defaultCurveSegments;\n      },\n      setIdPrefix = function (t) {\n        idPrefix$1 = t;\n      },\n      getIdPrefix = function () {\n        return idPrefix$1;\n      };\n    function createNS(t) {\n      return document.createElementNS(svgNS, t);\n    }\n    function _typeof$5(t) {\n      return (\n        (_typeof$5 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$5(t)\n      );\n    }\n    var dataManager = (function () {\n        var t,\n          e,\n          i = 1,\n          r = [],\n          s = {\n            onmessage: function () {},\n            postMessage: function (e) {\n              t({ data: e });\n            },\n          },\n          a = {\n            postMessage: function (t) {\n              s.onmessage({ data: t });\n            },\n          };\n        function n() {\n          e ||\n            ((e = (function (e) {\n              if (window.Worker && window.Blob && getWebWorker()) {\n                var i = new Blob(\n                    [\"var _workerSelf = self; self.onmessage = \", e.toString()],\n                    { type: \"text/javascript\" }\n                  ),\n                  r = URL.createObjectURL(i);\n                return new Worker(r);\n              }\n              return (t = e), s;\n            })(function (t) {\n              if (\n                (a.dataManager ||\n                  (a.dataManager = (function () {\n                    function t(s, a) {\n                      var n,\n                        o,\n                        h,\n                        l,\n                        p,\n                        m,\n                        c = s.length;\n                      for (o = 0; o < c; o += 1)\n                        if (\"ks\" in (n = s[o]) && !n.completed) {\n                          if (((n.completed = !0), n.hasMask)) {\n                            var d = n.masksProperties;\n                            for (l = d.length, h = 0; h < l; h += 1)\n                              if (d[h].pt.k.i) r(d[h].pt.k);\n                              else\n                                for (m = d[h].pt.k.length, p = 0; p < m; p += 1)\n                                  d[h].pt.k[p].s && r(d[h].pt.k[p].s[0]),\n                                    d[h].pt.k[p].e && r(d[h].pt.k[p].e[0]);\n                          }\n                          0 === n.ty\n                            ? ((n.layers = e(n.refId, a)), t(n.layers, a))\n                            : 4 === n.ty\n                            ? i(n.shapes)\n                            : 5 === n.ty && f(n);\n                        }\n                    }\n                    function e(t, e) {\n                      var i = (function (t, e) {\n                        for (var i = 0, r = e.length; i < r; ) {\n                          if (e[i].id === t) return e[i];\n                          i += 1;\n                        }\n                        return null;\n                      })(t, e);\n                      return i\n                        ? i.layers.__used\n                          ? JSON.parse(JSON.stringify(i.layers))\n                          : ((i.layers.__used = !0), i.layers)\n                        : null;\n                    }\n                    function i(t) {\n                      var e, s, a;\n                      for (e = t.length - 1; e >= 0; e -= 1)\n                        if (\"sh\" === t[e].ty)\n                          if (t[e].ks.k.i) r(t[e].ks.k);\n                          else\n                            for (a = t[e].ks.k.length, s = 0; s < a; s += 1)\n                              t[e].ks.k[s].s && r(t[e].ks.k[s].s[0]),\n                                t[e].ks.k[s].e && r(t[e].ks.k[s].e[0]);\n                        else \"gr\" === t[e].ty && i(t[e].it);\n                    }\n                    function r(t) {\n                      var e,\n                        i = t.i.length;\n                      for (e = 0; e < i; e += 1)\n                        (t.i[e][0] += t.v[e][0]),\n                          (t.i[e][1] += t.v[e][1]),\n                          (t.o[e][0] += t.v[e][0]),\n                          (t.o[e][1] += t.v[e][1]);\n                    }\n                    function s(t, e) {\n                      var i = e ? e.split(\".\") : [100, 100, 100];\n                      return (\n                        t[0] > i[0] ||\n                        (!(i[0] > t[0]) &&\n                          (t[1] > i[1] ||\n                            (!(i[1] > t[1]) &&\n                              (t[2] > i[2] || (!(i[2] > t[2]) && null)))))\n                      );\n                    }\n                    var a,\n                      n = (function () {\n                        var t = [4, 4, 14];\n                        function e(t) {\n                          var e,\n                            i,\n                            r,\n                            s = t.length;\n                          for (e = 0; e < s; e += 1)\n                            5 === t[e].ty &&\n                              ((r = void 0),\n                              (r = (i = t[e]).t.d),\n                              (i.t.d = { k: [{ s: r, t: 0 }] }));\n                        }\n                        return function (i) {\n                          if (s(t, i.v) && (e(i.layers), i.assets)) {\n                            var r,\n                              a = i.assets.length;\n                            for (r = 0; r < a; r += 1)\n                              i.assets[r].layers && e(i.assets[r].layers);\n                          }\n                        };\n                      })(),\n                      o =\n                        ((a = [4, 7, 99]),\n                        function (t) {\n                          if (t.chars && !s(a, t.v)) {\n                            var e,\n                              r = t.chars.length;\n                            for (e = 0; e < r; e += 1) {\n                              var n = t.chars[e];\n                              n.data &&\n                                n.data.shapes &&\n                                (i(n.data.shapes),\n                                (n.data.ip = 0),\n                                (n.data.op = 99999),\n                                (n.data.st = 0),\n                                (n.data.sr = 1),\n                                (n.data.ks = {\n                                  p: { k: [0, 0], a: 0 },\n                                  s: { k: [100, 100], a: 0 },\n                                  a: { k: [0, 0], a: 0 },\n                                  r: { k: 0, a: 0 },\n                                  o: { k: 100, a: 0 },\n                                }),\n                                t.chars[e].t ||\n                                  (n.data.shapes.push({ ty: \"no\" }),\n                                  n.data.shapes[0].it.push({\n                                    p: { k: [0, 0], a: 0 },\n                                    s: { k: [100, 100], a: 0 },\n                                    a: { k: [0, 0], a: 0 },\n                                    r: { k: 0, a: 0 },\n                                    o: { k: 100, a: 0 },\n                                    sk: { k: 0, a: 0 },\n                                    sa: { k: 0, a: 0 },\n                                    ty: \"tr\",\n                                  })));\n                            }\n                          }\n                        }),\n                      h = (function () {\n                        var t = [5, 7, 15];\n                        function e(t) {\n                          var e,\n                            i,\n                            r = t.length;\n                          for (e = 0; e < r; e += 1)\n                            5 === t[e].ty &&\n                              ((i = void 0),\n                              \"number\" == typeof (i = t[e].t.p).a &&\n                                (i.a = { a: 0, k: i.a }),\n                              \"number\" == typeof i.p &&\n                                (i.p = { a: 0, k: i.p }),\n                              \"number\" == typeof i.r &&\n                                (i.r = { a: 0, k: i.r }));\n                        }\n                        return function (i) {\n                          if (s(t, i.v) && (e(i.layers), i.assets)) {\n                            var r,\n                              a = i.assets.length;\n                            for (r = 0; r < a; r += 1)\n                              i.assets[r].layers && e(i.assets[r].layers);\n                          }\n                        };\n                      })(),\n                      l = (function () {\n                        var t = [4, 1, 9];\n                        function e(t) {\n                          var i,\n                            r,\n                            s,\n                            a = t.length;\n                          for (i = 0; i < a; i += 1)\n                            if (\"gr\" === t[i].ty) e(t[i].it);\n                            else if (\"fl\" === t[i].ty || \"st\" === t[i].ty)\n                              if (t[i].c.k && t[i].c.k[0].i)\n                                for (s = t[i].c.k.length, r = 0; r < s; r += 1)\n                                  t[i].c.k[r].s &&\n                                    ((t[i].c.k[r].s[0] /= 255),\n                                    (t[i].c.k[r].s[1] /= 255),\n                                    (t[i].c.k[r].s[2] /= 255),\n                                    (t[i].c.k[r].s[3] /= 255)),\n                                    t[i].c.k[r].e &&\n                                      ((t[i].c.k[r].e[0] /= 255),\n                                      (t[i].c.k[r].e[1] /= 255),\n                                      (t[i].c.k[r].e[2] /= 255),\n                                      (t[i].c.k[r].e[3] /= 255));\n                              else\n                                (t[i].c.k[0] /= 255),\n                                  (t[i].c.k[1] /= 255),\n                                  (t[i].c.k[2] /= 255),\n                                  (t[i].c.k[3] /= 255);\n                        }\n                        function i(t) {\n                          var i,\n                            r = t.length;\n                          for (i = 0; i < r; i += 1)\n                            4 === t[i].ty && e(t[i].shapes);\n                        }\n                        return function (e) {\n                          if (s(t, e.v) && (i(e.layers), e.assets)) {\n                            var r,\n                              a = e.assets.length;\n                            for (r = 0; r < a; r += 1)\n                              e.assets[r].layers && i(e.assets[r].layers);\n                          }\n                        };\n                      })(),\n                      p = (function () {\n                        var t = [4, 4, 18];\n                        function e(t) {\n                          var i, r, s;\n                          for (i = t.length - 1; i >= 0; i -= 1)\n                            if (\"sh\" === t[i].ty)\n                              if (t[i].ks.k.i) t[i].ks.k.c = t[i].closed;\n                              else\n                                for (s = t[i].ks.k.length, r = 0; r < s; r += 1)\n                                  t[i].ks.k[r].s &&\n                                    (t[i].ks.k[r].s[0].c = t[i].closed),\n                                    t[i].ks.k[r].e &&\n                                      (t[i].ks.k[r].e[0].c = t[i].closed);\n                            else \"gr\" === t[i].ty && e(t[i].it);\n                        }\n                        function i(t) {\n                          var i,\n                            r,\n                            s,\n                            a,\n                            n,\n                            o,\n                            h = t.length;\n                          for (r = 0; r < h; r += 1) {\n                            if ((i = t[r]).hasMask) {\n                              var l = i.masksProperties;\n                              for (a = l.length, s = 0; s < a; s += 1)\n                                if (l[s].pt.k.i) l[s].pt.k.c = l[s].cl;\n                                else\n                                  for (\n                                    o = l[s].pt.k.length, n = 0;\n                                    n < o;\n                                    n += 1\n                                  )\n                                    l[s].pt.k[n].s &&\n                                      (l[s].pt.k[n].s[0].c = l[s].cl),\n                                      l[s].pt.k[n].e &&\n                                        (l[s].pt.k[n].e[0].c = l[s].cl);\n                            }\n                            4 === i.ty && e(i.shapes);\n                          }\n                        }\n                        return function (e) {\n                          if (s(t, e.v) && (i(e.layers), e.assets)) {\n                            var r,\n                              a = e.assets.length;\n                            for (r = 0; r < a; r += 1)\n                              e.assets[r].layers && i(e.assets[r].layers);\n                          }\n                        };\n                      })();\n                    function f(t) {\n                      0 === t.t.a.length && t.t.p;\n                    }\n                    var m = {\n                      completeData: function (i) {\n                        i.__complete ||\n                          (l(i),\n                          n(i),\n                          o(i),\n                          h(i),\n                          p(i),\n                          t(i.layers, i.assets),\n                          (function (i, r) {\n                            if (i) {\n                              var s = 0,\n                                a = i.length;\n                              for (s = 0; s < a; s += 1)\n                                1 === i[s].t &&\n                                  ((i[s].data.layers = e(i[s].data.refId, r)),\n                                  t(i[s].data.layers, r));\n                            }\n                          })(i.chars, i.assets),\n                          (i.__complete = !0));\n                      },\n                    };\n                    return (\n                      (m.checkColors = l),\n                      (m.checkChars = o),\n                      (m.checkPathProperties = h),\n                      (m.checkShapes = p),\n                      (m.completeLayers = t),\n                      m\n                    );\n                  })()),\n                a.assetLoader ||\n                  (a.assetLoader = (function () {\n                    function t(t) {\n                      var e = t.getResponseHeader(\"content-type\");\n                      return (e &&\n                        \"json\" === t.responseType &&\n                        -1 !== e.indexOf(\"json\")) ||\n                        (t.response && \"object\" === _typeof$5(t.response))\n                        ? t.response\n                        : t.response && \"string\" == typeof t.response\n                        ? JSON.parse(t.response)\n                        : t.responseText\n                        ? JSON.parse(t.responseText)\n                        : null;\n                    }\n                    return {\n                      load: function (e, i, r, s) {\n                        var a,\n                          n = new XMLHttpRequest();\n                        try {\n                          n.responseType = \"json\";\n                        } catch (t) {}\n                        n.onreadystatechange = function () {\n                          if (4 === n.readyState)\n                            if (200 === n.status) (a = t(n)), r(a);\n                            else\n                              try {\n                                (a = t(n)), r(a);\n                              } catch (t) {\n                                s && s(t);\n                              }\n                        };\n                        try {\n                          n.open([\"G\", \"E\", \"T\"].join(\"\"), e, !0);\n                        } catch (t) {\n                          n.open([\"G\", \"E\", \"T\"].join(\"\"), i + \"/\" + e, !0);\n                        }\n                        n.send();\n                      },\n                    };\n                  })()),\n                \"loadAnimation\" === t.data.type)\n              )\n                a.assetLoader.load(\n                  t.data.path,\n                  t.data.fullPath,\n                  function (e) {\n                    a.dataManager.completeData(e),\n                      a.postMessage({\n                        id: t.data.id,\n                        payload: e,\n                        status: \"success\",\n                      });\n                  },\n                  function () {\n                    a.postMessage({ id: t.data.id, status: \"error\" });\n                  }\n                );\n              else if (\"complete\" === t.data.type) {\n                var e = t.data.animation;\n                a.dataManager.completeData(e),\n                  a.postMessage({\n                    id: t.data.id,\n                    payload: e,\n                    status: \"success\",\n                  });\n              } else\n                \"loadData\" === t.data.type &&\n                  a.assetLoader.load(\n                    t.data.path,\n                    t.data.fullPath,\n                    function (e) {\n                      a.postMessage({\n                        id: t.data.id,\n                        payload: e,\n                        status: \"success\",\n                      });\n                    },\n                    function () {\n                      a.postMessage({ id: t.data.id, status: \"error\" });\n                    }\n                  );\n            })),\n            (e.onmessage = function (t) {\n              var e = t.data,\n                i = e.id,\n                s = r[i];\n              (r[i] = null),\n                \"success\" === e.status\n                  ? s.onComplete(e.payload)\n                  : s.onError && s.onError();\n            }));\n        }\n        function o(t, e) {\n          var s = \"processId_\" + (i += 1);\n          return (r[s] = { onComplete: t, onError: e }), s;\n        }\n        return {\n          loadAnimation: function (t, i, r) {\n            n();\n            var s = o(i, r);\n            e.postMessage({\n              type: \"loadAnimation\",\n              path: t,\n              fullPath: window.location.origin + window.location.pathname,\n              id: s,\n            });\n          },\n          loadData: function (t, i, r) {\n            n();\n            var s = o(i, r);\n            e.postMessage({\n              type: \"loadData\",\n              path: t,\n              fullPath: window.location.origin + window.location.pathname,\n              id: s,\n            });\n          },\n          completeAnimation: function (t, i, r) {\n            n();\n            var s = o(i, r);\n            e.postMessage({ type: \"complete\", animation: t, id: s });\n          },\n        };\n      })(),\n      ImagePreloader = (function () {\n        var t = (function () {\n          var t = createTag(\"canvas\");\n          (t.width = 1), (t.height = 1);\n          var e = t.getContext(\"2d\");\n          return (e.fillStyle = \"rgba(0,0,0,0)\"), e.fillRect(0, 0, 1, 1), t;\n        })();\n        function e() {\n          (this.loadedAssets += 1),\n            this.loadedAssets === this.totalImages &&\n              this.loadedFootagesCount === this.totalFootages &&\n              this.imagesLoadedCb &&\n              this.imagesLoadedCb(null);\n        }\n        function i() {\n          (this.loadedFootagesCount += 1),\n            this.loadedAssets === this.totalImages &&\n              this.loadedFootagesCount === this.totalFootages &&\n              this.imagesLoadedCb &&\n              this.imagesLoadedCb(null);\n        }\n        function r(t, e, i) {\n          var r = \"\";\n          if (t.e) r = t.p;\n          else if (e) {\n            var s = t.p;\n            -1 !== s.indexOf(\"images/\") && (s = s.split(\"/\")[1]), (r = e + s);\n          } else (r = i), (r += t.u ? t.u : \"\"), (r += t.p);\n          return r;\n        }\n        function s(t) {\n          var e = 0,\n            i = setInterval(\n              function () {\n                (t.getBBox().width || e > 500) &&\n                  (this._imageLoaded(), clearInterval(i)),\n                  (e += 1);\n              }.bind(this),\n              50\n            );\n        }\n        function a(t) {\n          var e = { assetData: t },\n            i = r(t, this.assetsPath, this.path);\n          return (\n            dataManager.loadData(\n              i,\n              function (t) {\n                (e.img = t), this._footageLoaded();\n              }.bind(this),\n              function () {\n                (e.img = {}), this._footageLoaded();\n              }.bind(this)\n            ),\n            e\n          );\n        }\n        function n() {\n          (this._imageLoaded = e.bind(this)),\n            (this._footageLoaded = i.bind(this)),\n            (this.testImageLoaded = s.bind(this)),\n            (this.createFootageData = a.bind(this)),\n            (this.assetsPath = \"\"),\n            (this.path = \"\"),\n            (this.totalImages = 0),\n            (this.totalFootages = 0),\n            (this.loadedAssets = 0),\n            (this.loadedFootagesCount = 0),\n            (this.imagesLoadedCb = null),\n            (this.images = []);\n        }\n        return (\n          (n.prototype = {\n            loadAssets: function (t, e) {\n              var i;\n              this.imagesLoadedCb = e;\n              var r = t.length;\n              for (i = 0; i < r; i += 1)\n                t[i].layers ||\n                  (t[i].t && \"seq\" !== t[i].t\n                    ? 3 === t[i].t &&\n                      ((this.totalFootages += 1),\n                      this.images.push(this.createFootageData(t[i])))\n                    : ((this.totalImages += 1),\n                      this.images.push(this._createImageData(t[i]))));\n            },\n            setAssetsPath: function (t) {\n              this.assetsPath = t || \"\";\n            },\n            setPath: function (t) {\n              this.path = t || \"\";\n            },\n            loadedImages: function () {\n              return this.totalImages === this.loadedAssets;\n            },\n            loadedFootages: function () {\n              return this.totalFootages === this.loadedFootagesCount;\n            },\n            destroy: function () {\n              (this.imagesLoadedCb = null), (this.images.length = 0);\n            },\n            getAsset: function (t) {\n              for (var e = 0, i = this.images.length; e < i; ) {\n                if (this.images[e].assetData === t) return this.images[e].img;\n                e += 1;\n              }\n              return null;\n            },\n            createImgData: function (e) {\n              var i = r(e, this.assetsPath, this.path),\n                s = createTag(\"img\");\n              (s.crossOrigin = \"anonymous\"),\n                s.addEventListener(\"load\", this._imageLoaded, !1),\n                s.addEventListener(\n                  \"error\",\n                  function () {\n                    (a.img = t), this._imageLoaded();\n                  }.bind(this),\n                  !1\n                ),\n                (s.src = i);\n              var a = { img: s, assetData: e };\n              return a;\n            },\n            createImageData: function (e) {\n              var i = r(e, this.assetsPath, this.path),\n                s = createNS(\"image\");\n              isSafari\n                ? this.testImageLoaded(s)\n                : s.addEventListener(\"load\", this._imageLoaded, !1),\n                s.addEventListener(\n                  \"error\",\n                  function () {\n                    (a.img = t), this._imageLoaded();\n                  }.bind(this),\n                  !1\n                ),\n                s.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", i),\n                this._elementHelper.append\n                  ? this._elementHelper.append(s)\n                  : this._elementHelper.appendChild(s);\n              var a = { img: s, assetData: e };\n              return a;\n            },\n            imageLoaded: e,\n            footageLoaded: i,\n            setCacheType: function (t, e) {\n              \"svg\" === t\n                ? ((this._elementHelper = e),\n                  (this._createImageData = this.createImageData.bind(this)))\n                : (this._createImageData = this.createImgData.bind(this));\n            },\n          }),\n          n\n        );\n      })();\n    function BaseEvent() {}\n    BaseEvent.prototype = {\n      triggerEvent: function (t, e) {\n        if (this._cbs[t])\n          for (var i = this._cbs[t], r = 0; r < i.length; r += 1) i[r](e);\n      },\n      addEventListener: function (t, e) {\n        return (\n          this._cbs[t] || (this._cbs[t] = []),\n          this._cbs[t].push(e),\n          function () {\n            this.removeEventListener(t, e);\n          }.bind(this)\n        );\n      },\n      removeEventListener: function (t, e) {\n        if (e) {\n          if (this._cbs[t]) {\n            for (var i = 0, r = this._cbs[t].length; i < r; )\n              this._cbs[t][i] === e &&\n                (this._cbs[t].splice(i, 1), (i -= 1), (r -= 1)),\n                (i += 1);\n            this._cbs[t].length || (this._cbs[t] = null);\n          }\n        } else this._cbs[t] = null;\n      },\n    };\n    var markerParser = (function () {\n        function t(t) {\n          for (\n            var e, i = t.split(\"\\r\\n\"), r = {}, s = 0, a = 0;\n            a < i.length;\n            a += 1\n          )\n            2 === (e = i[a].split(\":\")).length &&\n              ((r[e[0]] = e[1].trim()), (s += 1));\n          if (0 === s) throw new Error();\n          return r;\n        }\n        return function (e) {\n          for (var i = [], r = 0; r < e.length; r += 1) {\n            var s = e[r],\n              a = { time: s.tm, duration: s.dr };\n            try {\n              a.payload = JSON.parse(e[r].cm);\n            } catch (i) {\n              try {\n                a.payload = t(e[r].cm);\n              } catch (t) {\n                a.payload = { name: e[r].cm };\n              }\n            }\n            i.push(a);\n          }\n          return i;\n        };\n      })(),\n      ProjectInterface = (function () {\n        function t(t) {\n          this.compositions.push(t);\n        }\n        return function () {\n          function e(t) {\n            for (var e = 0, i = this.compositions.length; e < i; ) {\n              if (\n                this.compositions[e].data &&\n                this.compositions[e].data.nm === t\n              )\n                return (\n                  this.compositions[e].prepareFrame &&\n                    this.compositions[e].data.xt &&\n                    this.compositions[e].prepareFrame(this.currentFrame),\n                  this.compositions[e].compInterface\n                );\n              e += 1;\n            }\n            return null;\n          }\n          return (\n            (e.compositions = []),\n            (e.currentFrame = 0),\n            (e.registerComposition = t),\n            e\n          );\n        };\n      })(),\n      renderers = {},\n      registerRenderer = function (t, e) {\n        renderers[t] = e;\n      };\n    function getRenderer(t) {\n      return renderers[t];\n    }\n    function getRegisteredRenderer() {\n      if (renderers.canvas) return \"canvas\";\n      for (var t in renderers) if (renderers[t]) return t;\n      return \"\";\n    }\n    function _typeof$4(t) {\n      return (\n        (_typeof$4 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$4(t)\n      );\n    }\n    var AnimationItem = function () {\n      (this._cbs = []),\n        (this.name = \"\"),\n        (this.path = \"\"),\n        (this.isLoaded = !1),\n        (this.currentFrame = 0),\n        (this.currentRawFrame = 0),\n        (this.firstFrame = 0),\n        (this.totalFrames = 0),\n        (this.frameRate = 0),\n        (this.frameMult = 0),\n        (this.playSpeed = 1),\n        (this.playDirection = 1),\n        (this.playCount = 0),\n        (this.animationData = {}),\n        (this.assets = []),\n        (this.isPaused = !0),\n        (this.autoplay = !1),\n        (this.loop = !0),\n        (this.renderer = null),\n        (this.animationID = createElementID()),\n        (this.assetsPath = \"\"),\n        (this.timeCompleted = 0),\n        (this.segmentPos = 0),\n        (this.isSubframeEnabled = getSubframeEnabled()),\n        (this.segments = []),\n        (this._idle = !0),\n        (this._completedLoop = !1),\n        (this.projectInterface = ProjectInterface()),\n        (this.imagePreloader = new ImagePreloader()),\n        (this.audioController = audioControllerFactory()),\n        (this.markers = []),\n        (this.configAnimation = this.configAnimation.bind(this)),\n        (this.onSetupError = this.onSetupError.bind(this)),\n        (this.onSegmentComplete = this.onSegmentComplete.bind(this)),\n        (this.drawnFrameEvent = new BMEnterFrameEvent(\"drawnFrame\", 0, 0, 0)),\n        (this.expressionsPlugin = getExpressionsPlugin());\n    };\n    extendPrototype([BaseEvent], AnimationItem),\n      (AnimationItem.prototype.setParams = function (t) {\n        (t.wrapper || t.container) && (this.wrapper = t.wrapper || t.container);\n        var e = \"svg\";\n        t.animType ? (e = t.animType) : t.renderer && (e = t.renderer);\n        var i = getRenderer(e);\n        (this.renderer = new i(this, t.rendererSettings)),\n          this.imagePreloader.setCacheType(e, this.renderer.globalData.defs),\n          this.renderer.setProjectInterface(this.projectInterface),\n          (this.animType = e),\n          \"\" === t.loop || null === t.loop || void 0 === t.loop || !0 === t.loop\n            ? (this.loop = !0)\n            : !1 === t.loop\n            ? (this.loop = !1)\n            : (this.loop = parseInt(t.loop, 10)),\n          (this.autoplay = !(\"autoplay\" in t) || t.autoplay),\n          (this.name = t.name ? t.name : \"\"),\n          (this.autoloadSegments =\n            !Object.prototype.hasOwnProperty.call(t, \"autoloadSegments\") ||\n            t.autoloadSegments),\n          (this.assetsPath = t.assetsPath),\n          (this.initialSegment = t.initialSegment),\n          t.audioFactory &&\n            this.audioController.setAudioFactory(t.audioFactory),\n          t.animationData\n            ? this.setupAnimation(t.animationData)\n            : t.path &&\n              (-1 !== t.path.lastIndexOf(\"\\\\\")\n                ? (this.path = t.path.substr(0, t.path.lastIndexOf(\"\\\\\") + 1))\n                : (this.path = t.path.substr(0, t.path.lastIndexOf(\"/\") + 1)),\n              (this.fileName = t.path.substr(t.path.lastIndexOf(\"/\") + 1)),\n              (this.fileName = this.fileName.substr(\n                0,\n                this.fileName.lastIndexOf(\".json\")\n              )),\n              dataManager.loadAnimation(\n                t.path,\n                this.configAnimation,\n                this.onSetupError\n              ));\n      }),\n      (AnimationItem.prototype.onSetupError = function () {\n        this.trigger(\"data_failed\");\n      }),\n      (AnimationItem.prototype.setupAnimation = function (t) {\n        dataManager.completeAnimation(t, this.configAnimation);\n      }),\n      (AnimationItem.prototype.setData = function (t, e) {\n        e && \"object\" !== _typeof$4(e) && (e = JSON.parse(e));\n        var i = { wrapper: t, animationData: e },\n          r = t.attributes;\n        (i.path = r.getNamedItem(\"data-animation-path\")\n          ? r.getNamedItem(\"data-animation-path\").value\n          : r.getNamedItem(\"data-bm-path\")\n          ? r.getNamedItem(\"data-bm-path\").value\n          : r.getNamedItem(\"bm-path\")\n          ? r.getNamedItem(\"bm-path\").value\n          : \"\"),\n          (i.animType = r.getNamedItem(\"data-anim-type\")\n            ? r.getNamedItem(\"data-anim-type\").value\n            : r.getNamedItem(\"data-bm-type\")\n            ? r.getNamedItem(\"data-bm-type\").value\n            : r.getNamedItem(\"bm-type\")\n            ? r.getNamedItem(\"bm-type\").value\n            : r.getNamedItem(\"data-bm-renderer\")\n            ? r.getNamedItem(\"data-bm-renderer\").value\n            : r.getNamedItem(\"bm-renderer\")\n            ? r.getNamedItem(\"bm-renderer\").value\n            : getRegisteredRenderer() || \"canvas\");\n        var s = r.getNamedItem(\"data-anim-loop\")\n          ? r.getNamedItem(\"data-anim-loop\").value\n          : r.getNamedItem(\"data-bm-loop\")\n          ? r.getNamedItem(\"data-bm-loop\").value\n          : r.getNamedItem(\"bm-loop\")\n          ? r.getNamedItem(\"bm-loop\").value\n          : \"\";\n        \"false\" === s\n          ? (i.loop = !1)\n          : \"true\" === s\n          ? (i.loop = !0)\n          : \"\" !== s && (i.loop = parseInt(s, 10));\n        var a = r.getNamedItem(\"data-anim-autoplay\")\n          ? r.getNamedItem(\"data-anim-autoplay\").value\n          : r.getNamedItem(\"data-bm-autoplay\")\n          ? r.getNamedItem(\"data-bm-autoplay\").value\n          : !r.getNamedItem(\"bm-autoplay\") ||\n            r.getNamedItem(\"bm-autoplay\").value;\n        (i.autoplay = \"false\" !== a),\n          (i.name = r.getNamedItem(\"data-name\")\n            ? r.getNamedItem(\"data-name\").value\n            : r.getNamedItem(\"data-bm-name\")\n            ? r.getNamedItem(\"data-bm-name\").value\n            : r.getNamedItem(\"bm-name\")\n            ? r.getNamedItem(\"bm-name\").value\n            : \"\"),\n          \"false\" ===\n            (r.getNamedItem(\"data-anim-prerender\")\n              ? r.getNamedItem(\"data-anim-prerender\").value\n              : r.getNamedItem(\"data-bm-prerender\")\n              ? r.getNamedItem(\"data-bm-prerender\").value\n              : r.getNamedItem(\"bm-prerender\")\n              ? r.getNamedItem(\"bm-prerender\").value\n              : \"\") && (i.prerender = !1),\n          i.path ? this.setParams(i) : this.trigger(\"destroy\");\n      }),\n      (AnimationItem.prototype.includeLayers = function (t) {\n        t.op > this.animationData.op &&\n          ((this.animationData.op = t.op),\n          (this.totalFrames = Math.floor(t.op - this.animationData.ip)));\n        var e,\n          i,\n          r = this.animationData.layers,\n          s = r.length,\n          a = t.layers,\n          n = a.length;\n        for (i = 0; i < n; i += 1)\n          for (e = 0; e < s; ) {\n            if (r[e].id === a[i].id) {\n              r[e] = a[i];\n              break;\n            }\n            e += 1;\n          }\n        if (\n          ((t.chars || t.fonts) &&\n            (this.renderer.globalData.fontManager.addChars(t.chars),\n            this.renderer.globalData.fontManager.addFonts(\n              t.fonts,\n              this.renderer.globalData.defs\n            )),\n          t.assets)\n        )\n          for (s = t.assets.length, e = 0; e < s; e += 1)\n            this.animationData.assets.push(t.assets[e]);\n        (this.animationData.__complete = !1),\n          dataManager.completeAnimation(\n            this.animationData,\n            this.onSegmentComplete\n          );\n      }),\n      (AnimationItem.prototype.onSegmentComplete = function (t) {\n        this.animationData = t;\n        var e = getExpressionsPlugin();\n        e && e.initExpressions(this), this.loadNextSegment();\n      }),\n      (AnimationItem.prototype.loadNextSegment = function () {\n        var t = this.animationData.segments;\n        if (!t || 0 === t.length || !this.autoloadSegments)\n          return (\n            this.trigger(\"data_ready\"),\n            void (this.timeCompleted = this.totalFrames)\n          );\n        var e = t.shift();\n        this.timeCompleted = e.time * this.frameRate;\n        var i = this.path + this.fileName + \"_\" + this.segmentPos + \".json\";\n        (this.segmentPos += 1),\n          dataManager.loadData(\n            i,\n            this.includeLayers.bind(this),\n            function () {\n              this.trigger(\"data_failed\");\n            }.bind(this)\n          );\n      }),\n      (AnimationItem.prototype.loadSegments = function () {\n        this.animationData.segments || (this.timeCompleted = this.totalFrames),\n          this.loadNextSegment();\n      }),\n      (AnimationItem.prototype.imagesLoaded = function () {\n        this.trigger(\"loaded_images\"), this.checkLoaded();\n      }),\n      (AnimationItem.prototype.preloadImages = function () {\n        this.imagePreloader.setAssetsPath(this.assetsPath),\n          this.imagePreloader.setPath(this.path),\n          this.imagePreloader.loadAssets(\n            this.animationData.assets,\n            this.imagesLoaded.bind(this)\n          );\n      }),\n      (AnimationItem.prototype.configAnimation = function (t) {\n        if (this.renderer)\n          try {\n            (this.animationData = t),\n              this.initialSegment\n                ? ((this.totalFrames = Math.floor(\n                    this.initialSegment[1] - this.initialSegment[0]\n                  )),\n                  (this.firstFrame = Math.round(this.initialSegment[0])))\n                : ((this.totalFrames = Math.floor(\n                    this.animationData.op - this.animationData.ip\n                  )),\n                  (this.firstFrame = Math.round(this.animationData.ip))),\n              this.renderer.configAnimation(t),\n              t.assets || (t.assets = []),\n              (this.assets = this.animationData.assets),\n              (this.frameRate = this.animationData.fr),\n              (this.frameMult = this.animationData.fr / 1e3),\n              this.renderer.searchExtraCompositions(t.assets),\n              (this.markers = markerParser(t.markers || [])),\n              this.trigger(\"config_ready\"),\n              this.preloadImages(),\n              this.loadSegments(),\n              this.updaFrameModifier(),\n              this.waitForFontsLoaded(),\n              this.isPaused && this.audioController.pause();\n          } catch (t) {\n            this.triggerConfigError(t);\n          }\n      }),\n      (AnimationItem.prototype.waitForFontsLoaded = function () {\n        this.renderer &&\n          (this.renderer.globalData.fontManager.isLoaded\n            ? this.checkLoaded()\n            : setTimeout(this.waitForFontsLoaded.bind(this), 20));\n      }),\n      (AnimationItem.prototype.checkLoaded = function () {\n        if (\n          !this.isLoaded &&\n          this.renderer.globalData.fontManager.isLoaded &&\n          (this.imagePreloader.loadedImages() ||\n            \"canvas\" !== this.renderer.rendererType) &&\n          this.imagePreloader.loadedFootages()\n        ) {\n          this.isLoaded = !0;\n          var t = getExpressionsPlugin();\n          t && t.initExpressions(this),\n            this.renderer.initItems(),\n            setTimeout(\n              function () {\n                this.trigger(\"DOMLoaded\");\n              }.bind(this),\n              0\n            ),\n            this.gotoFrame(),\n            this.autoplay && this.play();\n        }\n      }),\n      (AnimationItem.prototype.resize = function (t, e) {\n        var i = \"number\" == typeof t ? t : void 0,\n          r = \"number\" == typeof e ? e : void 0;\n        this.renderer.updateContainerSize(i, r);\n      }),\n      (AnimationItem.prototype.setSubframe = function (t) {\n        this.isSubframeEnabled = !!t;\n      }),\n      (AnimationItem.prototype.gotoFrame = function () {\n        (this.currentFrame = this.isSubframeEnabled\n          ? this.currentRawFrame\n          : ~~this.currentRawFrame),\n          this.timeCompleted !== this.totalFrames &&\n            this.currentFrame > this.timeCompleted &&\n            (this.currentFrame = this.timeCompleted),\n          this.trigger(\"enterFrame\"),\n          this.renderFrame(),\n          this.trigger(\"drawnFrame\");\n      }),\n      (AnimationItem.prototype.renderFrame = function () {\n        if (!1 !== this.isLoaded && this.renderer)\n          try {\n            this.expressionsPlugin && this.expressionsPlugin.resetFrame(),\n              this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n          } catch (t) {\n            this.triggerRenderFrameError(t);\n          }\n      }),\n      (AnimationItem.prototype.play = function (t) {\n        (t && this.name !== t) ||\n          (!0 === this.isPaused &&\n            ((this.isPaused = !1),\n            this.trigger(\"_play\"),\n            this.audioController.resume(),\n            this._idle && ((this._idle = !1), this.trigger(\"_active\"))));\n      }),\n      (AnimationItem.prototype.pause = function (t) {\n        (t && this.name !== t) ||\n          (!1 === this.isPaused &&\n            ((this.isPaused = !0),\n            this.trigger(\"_pause\"),\n            (this._idle = !0),\n            this.trigger(\"_idle\"),\n            this.audioController.pause()));\n      }),\n      (AnimationItem.prototype.togglePause = function (t) {\n        (t && this.name !== t) ||\n          (!0 === this.isPaused ? this.play() : this.pause());\n      }),\n      (AnimationItem.prototype.stop = function (t) {\n        (t && this.name !== t) ||\n          (this.pause(),\n          (this.playCount = 0),\n          (this._completedLoop = !1),\n          this.setCurrentRawFrameValue(0));\n      }),\n      (AnimationItem.prototype.getMarkerData = function (t) {\n        for (var e, i = 0; i < this.markers.length; i += 1)\n          if ((e = this.markers[i]).payload && e.payload.name === t) return e;\n        return null;\n      }),\n      (AnimationItem.prototype.goToAndStop = function (t, e, i) {\n        if (!i || this.name === i) {\n          var r = Number(t);\n          if (isNaN(r)) {\n            var s = this.getMarkerData(t);\n            s && this.goToAndStop(s.time, !0);\n          } else\n            e\n              ? this.setCurrentRawFrameValue(t)\n              : this.setCurrentRawFrameValue(t * this.frameModifier);\n          this.pause();\n        }\n      }),\n      (AnimationItem.prototype.goToAndPlay = function (t, e, i) {\n        if (!i || this.name === i) {\n          var r = Number(t);\n          if (isNaN(r)) {\n            var s = this.getMarkerData(t);\n            s &&\n              (s.duration\n                ? this.playSegments([s.time, s.time + s.duration], !0)\n                : this.goToAndStop(s.time, !0));\n          } else this.goToAndStop(r, e, i);\n          this.play();\n        }\n      }),\n      (AnimationItem.prototype.advanceTime = function (t) {\n        if (!0 !== this.isPaused && !1 !== this.isLoaded) {\n          var e = this.currentRawFrame + t * this.frameModifier,\n            i = !1;\n          e >= this.totalFrames - 1 && this.frameModifier > 0\n            ? this.loop && this.playCount !== this.loop\n              ? e >= this.totalFrames\n                ? ((this.playCount += 1),\n                  this.checkSegments(e % this.totalFrames) ||\n                    (this.setCurrentRawFrameValue(e % this.totalFrames),\n                    (this._completedLoop = !0),\n                    this.trigger(\"loopComplete\")))\n                : this.setCurrentRawFrameValue(e)\n              : this.checkSegments(\n                  e > this.totalFrames ? e % this.totalFrames : 0\n                ) || ((i = !0), (e = this.totalFrames - 1))\n            : e < 0\n            ? this.checkSegments(e % this.totalFrames) ||\n              (!this.loop || (this.playCount-- <= 0 && !0 !== this.loop)\n                ? ((i = !0), (e = 0))\n                : (this.setCurrentRawFrameValue(\n                    this.totalFrames + (e % this.totalFrames)\n                  ),\n                  this._completedLoop\n                    ? this.trigger(\"loopComplete\")\n                    : (this._completedLoop = !0)))\n            : this.setCurrentRawFrameValue(e),\n            i &&\n              (this.setCurrentRawFrameValue(e),\n              this.pause(),\n              this.trigger(\"complete\"));\n        }\n      }),\n      (AnimationItem.prototype.adjustSegment = function (t, e) {\n        (this.playCount = 0),\n          t[1] < t[0]\n            ? (this.frameModifier > 0 &&\n                (this.playSpeed < 0\n                  ? this.setSpeed(-this.playSpeed)\n                  : this.setDirection(-1)),\n              (this.totalFrames = t[0] - t[1]),\n              (this.timeCompleted = this.totalFrames),\n              (this.firstFrame = t[1]),\n              this.setCurrentRawFrameValue(this.totalFrames - 0.001 - e))\n            : t[1] > t[0] &&\n              (this.frameModifier < 0 &&\n                (this.playSpeed < 0\n                  ? this.setSpeed(-this.playSpeed)\n                  : this.setDirection(1)),\n              (this.totalFrames = t[1] - t[0]),\n              (this.timeCompleted = this.totalFrames),\n              (this.firstFrame = t[0]),\n              this.setCurrentRawFrameValue(0.001 + e)),\n          this.trigger(\"segmentStart\");\n      }),\n      (AnimationItem.prototype.setSegment = function (t, e) {\n        var i = -1;\n        this.isPaused &&\n          (this.currentRawFrame + this.firstFrame < t\n            ? (i = t)\n            : this.currentRawFrame + this.firstFrame > e && (i = e - t)),\n          (this.firstFrame = t),\n          (this.totalFrames = e - t),\n          (this.timeCompleted = this.totalFrames),\n          -1 !== i && this.goToAndStop(i, !0);\n      }),\n      (AnimationItem.prototype.playSegments = function (t, e) {\n        if ((e && (this.segments.length = 0), \"object\" === _typeof$4(t[0]))) {\n          var i,\n            r = t.length;\n          for (i = 0; i < r; i += 1) this.segments.push(t[i]);\n        } else this.segments.push(t);\n        this.segments.length &&\n          e &&\n          this.adjustSegment(this.segments.shift(), 0),\n          this.isPaused && this.play();\n      }),\n      (AnimationItem.prototype.resetSegments = function (t) {\n        (this.segments.length = 0),\n          this.segments.push([this.animationData.ip, this.animationData.op]),\n          t && this.checkSegments(0);\n      }),\n      (AnimationItem.prototype.checkSegments = function (t) {\n        return (\n          !!this.segments.length &&\n          (this.adjustSegment(this.segments.shift(), t), !0)\n        );\n      }),\n      (AnimationItem.prototype.destroy = function (t) {\n        (t && this.name !== t) ||\n          !this.renderer ||\n          (this.renderer.destroy(),\n          this.imagePreloader.destroy(),\n          this.trigger(\"destroy\"),\n          (this._cbs = null),\n          (this.onEnterFrame = null),\n          (this.onLoopComplete = null),\n          (this.onComplete = null),\n          (this.onSegmentStart = null),\n          (this.onDestroy = null),\n          (this.renderer = null),\n          (this.expressionsPlugin = null),\n          (this.imagePreloader = null),\n          (this.projectInterface = null));\n      }),\n      (AnimationItem.prototype.setCurrentRawFrameValue = function (t) {\n        (this.currentRawFrame = t), this.gotoFrame();\n      }),\n      (AnimationItem.prototype.setSpeed = function (t) {\n        (this.playSpeed = t), this.updaFrameModifier();\n      }),\n      (AnimationItem.prototype.setDirection = function (t) {\n        (this.playDirection = t < 0 ? -1 : 1), this.updaFrameModifier();\n      }),\n      (AnimationItem.prototype.setLoop = function (t) {\n        this.loop = t;\n      }),\n      (AnimationItem.prototype.setVolume = function (t, e) {\n        (e && this.name !== e) || this.audioController.setVolume(t);\n      }),\n      (AnimationItem.prototype.getVolume = function () {\n        return this.audioController.getVolume();\n      }),\n      (AnimationItem.prototype.mute = function (t) {\n        (t && this.name !== t) || this.audioController.mute();\n      }),\n      (AnimationItem.prototype.unmute = function (t) {\n        (t && this.name !== t) || this.audioController.unmute();\n      }),\n      (AnimationItem.prototype.updaFrameModifier = function () {\n        (this.frameModifier =\n          this.frameMult * this.playSpeed * this.playDirection),\n          this.audioController.setRate(this.playSpeed * this.playDirection);\n      }),\n      (AnimationItem.prototype.getPath = function () {\n        return this.path;\n      }),\n      (AnimationItem.prototype.getAssetsPath = function (t) {\n        var e = \"\";\n        if (t.e) e = t.p;\n        else if (this.assetsPath) {\n          var i = t.p;\n          -1 !== i.indexOf(\"images/\") && (i = i.split(\"/\")[1]),\n            (e = this.assetsPath + i);\n        } else (e = this.path), (e += t.u ? t.u : \"\"), (e += t.p);\n        return e;\n      }),\n      (AnimationItem.prototype.getAssetData = function (t) {\n        for (var e = 0, i = this.assets.length; e < i; ) {\n          if (t === this.assets[e].id) return this.assets[e];\n          e += 1;\n        }\n        return null;\n      }),\n      (AnimationItem.prototype.hide = function () {\n        this.renderer.hide();\n      }),\n      (AnimationItem.prototype.show = function () {\n        this.renderer.show();\n      }),\n      (AnimationItem.prototype.getDuration = function (t) {\n        return t ? this.totalFrames : this.totalFrames / this.frameRate;\n      }),\n      (AnimationItem.prototype.updateDocumentData = function (t, e, i) {\n        try {\n          this.renderer.getElementByPath(t).updateDocumentData(e, i);\n        } catch (t) {}\n      }),\n      (AnimationItem.prototype.trigger = function (t) {\n        if (this._cbs && this._cbs[t])\n          switch (t) {\n            case \"enterFrame\":\n              this.triggerEvent(\n                t,\n                new BMEnterFrameEvent(\n                  t,\n                  this.currentFrame,\n                  this.totalFrames,\n                  this.frameModifier\n                )\n              );\n              break;\n            case \"drawnFrame\":\n              (this.drawnFrameEvent.currentTime = this.currentFrame),\n                (this.drawnFrameEvent.totalTime = this.totalFrames),\n                (this.drawnFrameEvent.direction = this.frameModifier),\n                this.triggerEvent(t, this.drawnFrameEvent);\n              break;\n            case \"loopComplete\":\n              this.triggerEvent(\n                t,\n                new BMCompleteLoopEvent(\n                  t,\n                  this.loop,\n                  this.playCount,\n                  this.frameMult\n                )\n              );\n              break;\n            case \"complete\":\n              this.triggerEvent(t, new BMCompleteEvent(t, this.frameMult));\n              break;\n            case \"segmentStart\":\n              this.triggerEvent(\n                t,\n                new BMSegmentStartEvent(t, this.firstFrame, this.totalFrames)\n              );\n              break;\n            case \"destroy\":\n              this.triggerEvent(t, new BMDestroyEvent(t, this));\n              break;\n            default:\n              this.triggerEvent(t);\n          }\n        \"enterFrame\" === t &&\n          this.onEnterFrame &&\n          this.onEnterFrame.call(\n            this,\n            new BMEnterFrameEvent(\n              t,\n              this.currentFrame,\n              this.totalFrames,\n              this.frameMult\n            )\n          ),\n          \"loopComplete\" === t &&\n            this.onLoopComplete &&\n            this.onLoopComplete.call(\n              this,\n              new BMCompleteLoopEvent(\n                t,\n                this.loop,\n                this.playCount,\n                this.frameMult\n              )\n            ),\n          \"complete\" === t &&\n            this.onComplete &&\n            this.onComplete.call(this, new BMCompleteEvent(t, this.frameMult)),\n          \"segmentStart\" === t &&\n            this.onSegmentStart &&\n            this.onSegmentStart.call(\n              this,\n              new BMSegmentStartEvent(t, this.firstFrame, this.totalFrames)\n            ),\n          \"destroy\" === t &&\n            this.onDestroy &&\n            this.onDestroy.call(this, new BMDestroyEvent(t, this));\n      }),\n      (AnimationItem.prototype.triggerRenderFrameError = function (t) {\n        var e = new BMRenderFrameErrorEvent(t, this.currentFrame);\n        this.triggerEvent(\"error\", e),\n          this.onError && this.onError.call(this, e);\n      }),\n      (AnimationItem.prototype.triggerConfigError = function (t) {\n        var e = new BMConfigErrorEvent(t, this.currentFrame);\n        this.triggerEvent(\"error\", e),\n          this.onError && this.onError.call(this, e);\n      });\n    var animationManager = (function () {\n        var t = {},\n          e = [],\n          i = 0,\n          r = 0,\n          s = 0,\n          a = !0,\n          n = !1;\n        function o(t) {\n          for (var i = 0, s = t.target; i < r; )\n            e[i].animation === s &&\n              (e.splice(i, 1), (i -= 1), (r -= 1), s.isPaused || p()),\n              (i += 1);\n        }\n        function h(t, i) {\n          if (!t) return null;\n          for (var s = 0; s < r; ) {\n            if (e[s].elem === t && null !== e[s].elem) return e[s].animation;\n            s += 1;\n          }\n          var a = new AnimationItem();\n          return f(a, t), a.setData(t, i), a;\n        }\n        function l() {\n          (s += 1), d();\n        }\n        function p() {\n          s -= 1;\n        }\n        function f(t, i) {\n          t.addEventListener(\"destroy\", o),\n            t.addEventListener(\"_active\", l),\n            t.addEventListener(\"_idle\", p),\n            e.push({ elem: i, animation: t }),\n            (r += 1);\n        }\n        function m(t) {\n          var o,\n            h = t - i;\n          for (o = 0; o < r; o += 1) e[o].animation.advanceTime(h);\n          (i = t), s && !n ? window.requestAnimationFrame(m) : (a = !0);\n        }\n        function c(t) {\n          (i = t), window.requestAnimationFrame(m);\n        }\n        function d() {\n          !n && s && a && (window.requestAnimationFrame(c), (a = !1));\n        }\n        return (\n          (t.registerAnimation = h),\n          (t.loadAnimation = function (t) {\n            var e = new AnimationItem();\n            return f(e, null), e.setParams(t), e;\n          }),\n          (t.setSpeed = function (t, i) {\n            var s;\n            for (s = 0; s < r; s += 1) e[s].animation.setSpeed(t, i);\n          }),\n          (t.setDirection = function (t, i) {\n            var s;\n            for (s = 0; s < r; s += 1) e[s].animation.setDirection(t, i);\n          }),\n          (t.play = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.play(t);\n          }),\n          (t.pause = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.pause(t);\n          }),\n          (t.stop = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.stop(t);\n          }),\n          (t.togglePause = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.togglePause(t);\n          }),\n          (t.searchAnimations = function (t, e, i) {\n            var r,\n              s = [].concat(\n                [].slice.call(document.getElementsByClassName(\"lottie\")),\n                [].slice.call(document.getElementsByClassName(\"bodymovin\"))\n              ),\n              a = s.length;\n            for (r = 0; r < a; r += 1)\n              i && s[r].setAttribute(\"data-bm-type\", i), h(s[r], t);\n            if (e && 0 === a) {\n              i || (i = \"svg\");\n              var n = document.getElementsByTagName(\"body\")[0];\n              n.innerText = \"\";\n              var o = createTag(\"div\");\n              (o.style.width = \"100%\"),\n                (o.style.height = \"100%\"),\n                o.setAttribute(\"data-bm-type\", i),\n                n.appendChild(o),\n                h(o, t);\n            }\n          }),\n          (t.resize = function () {\n            var t;\n            for (t = 0; t < r; t += 1) e[t].animation.resize();\n          }),\n          (t.goToAndStop = function (t, i, s) {\n            var a;\n            for (a = 0; a < r; a += 1) e[a].animation.goToAndStop(t, i, s);\n          }),\n          (t.destroy = function (t) {\n            var i;\n            for (i = r - 1; i >= 0; i -= 1) e[i].animation.destroy(t);\n          }),\n          (t.freeze = function () {\n            n = !0;\n          }),\n          (t.unfreeze = function () {\n            (n = !1), d();\n          }),\n          (t.setVolume = function (t, i) {\n            var s;\n            for (s = 0; s < r; s += 1) e[s].animation.setVolume(t, i);\n          }),\n          (t.mute = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.mute(t);\n          }),\n          (t.unmute = function (t) {\n            var i;\n            for (i = 0; i < r; i += 1) e[i].animation.unmute(t);\n          }),\n          (t.getRegisteredAnimations = function () {\n            var t,\n              i = e.length,\n              r = [];\n            for (t = 0; t < i; t += 1) r.push(e[t].animation);\n            return r;\n          }),\n          t\n        );\n      })(),\n      BezierFactory = (function () {\n        var t = {\n            getBezierEasing: function (t, i, r, s, a) {\n              var n =\n                a ||\n                (\"bez_\" + t + \"_\" + i + \"_\" + r + \"_\" + s).replace(/\\./g, \"p\");\n              if (e[n]) return e[n];\n              var o = new l([t, i, r, s]);\n              return (e[n] = o), o;\n            },\n          },\n          e = {};\n        var i = 0.1,\n          r = \"function\" == typeof Float32Array;\n        function s(t, e) {\n          return 1 - 3 * e + 3 * t;\n        }\n        function a(t, e) {\n          return 3 * e - 6 * t;\n        }\n        function n(t) {\n          return 3 * t;\n        }\n        function o(t, e, i) {\n          return ((s(e, i) * t + a(e, i)) * t + n(e)) * t;\n        }\n        function h(t, e, i) {\n          return 3 * s(e, i) * t * t + 2 * a(e, i) * t + n(e);\n        }\n        function l(t) {\n          (this._p = t),\n            (this._mSampleValues = r ? new Float32Array(11) : new Array(11)),\n            (this._precomputed = !1),\n            (this.get = this.get.bind(this));\n        }\n        return (\n          (l.prototype = {\n            get: function (t) {\n              var e = this._p[0],\n                i = this._p[1],\n                r = this._p[2],\n                s = this._p[3];\n              return (\n                this._precomputed || this._precompute(),\n                e === i && r === s\n                  ? t\n                  : 0 === t\n                  ? 0\n                  : 1 === t\n                  ? 1\n                  : o(this._getTForX(t), i, s)\n              );\n            },\n            _precompute: function () {\n              var t = this._p[0],\n                e = this._p[1],\n                i = this._p[2],\n                r = this._p[3];\n              (this._precomputed = !0),\n                (t === e && i === r) || this._calcSampleValues();\n            },\n            _calcSampleValues: function () {\n              for (var t = this._p[0], e = this._p[2], r = 0; r < 11; ++r)\n                this._mSampleValues[r] = o(r * i, t, e);\n            },\n            _getTForX: function (t) {\n              for (\n                var e = this._p[0],\n                  r = this._p[2],\n                  s = this._mSampleValues,\n                  a = 0,\n                  n = 1;\n                10 !== n && s[n] <= t;\n                ++n\n              )\n                a += i;\n              var l = a + ((t - s[--n]) / (s[n + 1] - s[n])) * i,\n                p = h(l, e, r);\n              return p >= 0.001\n                ? (function (t, e, i, r) {\n                    for (var s = 0; s < 4; ++s) {\n                      var a = h(e, i, r);\n                      if (0 === a) return e;\n                      e -= (o(e, i, r) - t) / a;\n                    }\n                    return e;\n                  })(t, l, e, r)\n                : 0 === p\n                ? l\n                : (function (t, e, i, r, s) {\n                    var a,\n                      n,\n                      h = 0;\n                    do {\n                      (a = o((n = e + (i - e) / 2), r, s) - t) > 0\n                        ? (i = n)\n                        : (e = n);\n                    } while (Math.abs(a) > 1e-7 && ++h < 10);\n                    return n;\n                  })(t, a, a + i, e, r);\n            },\n          }),\n          t\n        );\n      })(),\n      pooling = {\n        double: function (t) {\n          return t.concat(createSizedArray(t.length));\n        },\n      },\n      poolFactory = function (t, e, i) {\n        var r = 0,\n          s = t,\n          a = createSizedArray(s);\n        return {\n          newElement: function () {\n            return r ? a[(r -= 1)] : e();\n          },\n          release: function (t) {\n            r === s && ((a = pooling.double(a)), (s *= 2)),\n              i && i(t),\n              (a[r] = t),\n              (r += 1);\n          },\n        };\n      },\n      bezierLengthPool = poolFactory(8, function () {\n        return {\n          addedLength: 0,\n          percents: createTypedArray(\"float32\", getDefaultCurveSegments()),\n          lengths: createTypedArray(\"float32\", getDefaultCurveSegments()),\n        };\n      }),\n      segmentsLengthPool = poolFactory(\n        8,\n        function () {\n          return { lengths: [], totalLength: 0 };\n        },\n        function (t) {\n          var e,\n            i = t.lengths.length;\n          for (e = 0; e < i; e += 1) bezierLengthPool.release(t.lengths[e]);\n          t.lengths.length = 0;\n        }\n      );\n    function bezFunction() {\n      var t = Math;\n      function e(t, e, i, r, s, a) {\n        var n = t * r + e * s + i * a - s * r - a * t - i * e;\n        return n > -0.001 && n < 0.001;\n      }\n      var i = function (t, e, i, r) {\n        var s,\n          a,\n          n,\n          o,\n          h,\n          l,\n          p = getDefaultCurveSegments(),\n          f = 0,\n          m = [],\n          c = [],\n          d = bezierLengthPool.newElement();\n        for (n = i.length, s = 0; s < p; s += 1) {\n          for (h = s / (p - 1), l = 0, a = 0; a < n; a += 1)\n            (o =\n              bmPow(1 - h, 3) * t[a] +\n              3 * bmPow(1 - h, 2) * h * i[a] +\n              3 * (1 - h) * bmPow(h, 2) * r[a] +\n              bmPow(h, 3) * e[a]),\n              (m[a] = o),\n              null !== c[a] && (l += bmPow(m[a] - c[a], 2)),\n              (c[a] = m[a]);\n          l && (f += l = bmSqrt(l)), (d.percents[s] = h), (d.lengths[s] = f);\n        }\n        return (d.addedLength = f), d;\n      };\n      function r(t) {\n        (this.segmentLength = 0), (this.points = new Array(t));\n      }\n      function s(t, e) {\n        (this.partialLength = t), (this.point = e);\n      }\n      var a,\n        n =\n          ((a = {}),\n          function (t, i, n, o) {\n            var h = (\n              t[0] +\n              \"_\" +\n              t[1] +\n              \"_\" +\n              i[0] +\n              \"_\" +\n              i[1] +\n              \"_\" +\n              n[0] +\n              \"_\" +\n              n[1] +\n              \"_\" +\n              o[0] +\n              \"_\" +\n              o[1]\n            ).replace(/\\./g, \"p\");\n            if (!a[h]) {\n              var l,\n                p,\n                f,\n                m,\n                c,\n                d,\n                u,\n                y = getDefaultCurveSegments(),\n                g = 0,\n                v = null;\n              2 === t.length &&\n                (t[0] !== i[0] || t[1] !== i[1]) &&\n                e(t[0], t[1], i[0], i[1], t[0] + n[0], t[1] + n[1]) &&\n                e(t[0], t[1], i[0], i[1], i[0] + o[0], i[1] + o[1]) &&\n                (y = 2);\n              var b = new r(y);\n              for (f = n.length, l = 0; l < y; l += 1) {\n                for (\n                  u = createSizedArray(f), c = l / (y - 1), d = 0, p = 0;\n                  p < f;\n                  p += 1\n                )\n                  (m =\n                    bmPow(1 - c, 3) * t[p] +\n                    3 * bmPow(1 - c, 2) * c * (t[p] + n[p]) +\n                    3 * (1 - c) * bmPow(c, 2) * (i[p] + o[p]) +\n                    bmPow(c, 3) * i[p]),\n                    (u[p] = m),\n                    null !== v && (d += bmPow(u[p] - v[p], 2));\n                (g += d = bmSqrt(d)), (b.points[l] = new s(d, u)), (v = u);\n              }\n              (b.segmentLength = g), (a[h] = b);\n            }\n            return a[h];\n          });\n      function o(t, e) {\n        var i = e.percents,\n          r = e.lengths,\n          s = i.length,\n          a = bmFloor((s - 1) * t),\n          n = t * e.addedLength,\n          o = 0;\n        if (a === s - 1 || 0 === a || n === r[a]) return i[a];\n        for (var h = r[a] > n ? -1 : 1, l = !0; l; )\n          if (\n            (r[a] <= n && r[a + 1] > n\n              ? ((o = (n - r[a]) / (r[a + 1] - r[a])), (l = !1))\n              : (a += h),\n            a < 0 || a >= s - 1)\n          ) {\n            if (a === s - 1) return i[a];\n            l = !1;\n          }\n        return i[a] + (i[a + 1] - i[a]) * o;\n      }\n      var h = createTypedArray(\"float32\", 8);\n      return {\n        getSegmentsLength: function (t) {\n          var e,\n            r = segmentsLengthPool.newElement(),\n            s = t.c,\n            a = t.v,\n            n = t.o,\n            o = t.i,\n            h = t._length,\n            l = r.lengths,\n            p = 0;\n          for (e = 0; e < h - 1; e += 1)\n            (l[e] = i(a[e], a[e + 1], n[e], o[e + 1])), (p += l[e].addedLength);\n          return (\n            s &&\n              h &&\n              ((l[e] = i(a[e], a[0], n[e], o[0])), (p += l[e].addedLength)),\n            (r.totalLength = p),\n            r\n          );\n        },\n        getNewSegment: function (e, i, r, s, a, n, l) {\n          a < 0 ? (a = 0) : a > 1 && (a = 1);\n          var p,\n            f = o(a, l),\n            m = o((n = n > 1 ? 1 : n), l),\n            c = e.length,\n            d = 1 - f,\n            u = 1 - m,\n            y = d * d * d,\n            g = f * d * d * 3,\n            v = f * f * d * 3,\n            b = f * f * f,\n            x = d * d * u,\n            P = f * d * u + d * f * u + d * d * m,\n            E = f * f * u + d * f * m + f * d * m,\n            S = f * f * m,\n            C = d * u * u,\n            _ = f * u * u + d * m * u + d * u * m,\n            A = f * m * u + d * m * m + f * u * m,\n            T = f * m * m,\n            M = u * u * u,\n            k = m * u * u + u * m * u + u * u * m,\n            D = m * m * u + u * m * m + m * u * m,\n            F = m * m * m;\n          for (p = 0; p < c; p += 1)\n            (h[4 * p] =\n              t.round(1e3 * (y * e[p] + g * r[p] + v * s[p] + b * i[p])) / 1e3),\n              (h[4 * p + 1] =\n                t.round(1e3 * (x * e[p] + P * r[p] + E * s[p] + S * i[p])) /\n                1e3),\n              (h[4 * p + 2] =\n                t.round(1e3 * (C * e[p] + _ * r[p] + A * s[p] + T * i[p])) /\n                1e3),\n              (h[4 * p + 3] =\n                t.round(1e3 * (M * e[p] + k * r[p] + D * s[p] + F * i[p])) /\n                1e3);\n          return h;\n        },\n        getPointInSegment: function (e, i, r, s, a, n) {\n          var h = o(a, n),\n            l = 1 - h;\n          return [\n            t.round(\n              1e3 *\n                (l * l * l * e[0] +\n                  (h * l * l + l * h * l + l * l * h) * r[0] +\n                  (h * h * l + l * h * h + h * l * h) * s[0] +\n                  h * h * h * i[0])\n            ) / 1e3,\n            t.round(\n              1e3 *\n                (l * l * l * e[1] +\n                  (h * l * l + l * h * l + l * l * h) * r[1] +\n                  (h * h * l + l * h * h + h * l * h) * s[1] +\n                  h * h * h * i[1])\n            ) / 1e3,\n          ];\n        },\n        buildBezierData: n,\n        pointOnLine2D: e,\n        pointOnLine3D: function (i, r, s, a, n, o, h, l, p) {\n          if (0 === s && 0 === o && 0 === p) return e(i, r, a, n, h, l);\n          var f,\n            m = t.sqrt(t.pow(a - i, 2) + t.pow(n - r, 2) + t.pow(o - s, 2)),\n            c = t.sqrt(t.pow(h - i, 2) + t.pow(l - r, 2) + t.pow(p - s, 2)),\n            d = t.sqrt(t.pow(h - a, 2) + t.pow(l - n, 2) + t.pow(p - o, 2));\n          return (\n            (f =\n              m > c\n                ? m > d\n                  ? m - c - d\n                  : d - c - m\n                : d > c\n                ? d - c - m\n                : c - m - d) > -1e-4 && f < 1e-4\n          );\n        },\n      };\n    }\n    var bez = bezFunction(),\n      initFrame = initialDefaultFrame,\n      mathAbs = Math.abs;\n    function interpolateValue(t, e) {\n      var i,\n        r = this.offsetTime;\n      \"multidimensional\" === this.propType &&\n        (i = createTypedArray(\"float32\", this.pv.length));\n      for (\n        var s,\n          a,\n          n,\n          o,\n          h,\n          l,\n          p,\n          f,\n          m,\n          c = e.lastIndex,\n          d = c,\n          u = this.keyframes.length - 1,\n          y = !0;\n        y;\n\n      ) {\n        if (\n          ((s = this.keyframes[d]),\n          (a = this.keyframes[d + 1]),\n          d === u - 1 && t >= a.t - r)\n        ) {\n          s.h && (s = a), (c = 0);\n          break;\n        }\n        if (a.t - r > t) {\n          c = d;\n          break;\n        }\n        d < u - 1 ? (d += 1) : ((c = 0), (y = !1));\n      }\n      n = this.keyframesMetadata[d] || {};\n      var g,\n        v = a.t - r,\n        b = s.t - r;\n      if (s.to) {\n        n.bezierData ||\n          (n.bezierData = bez.buildBezierData(s.s, a.s || s.e, s.to, s.ti));\n        var x = n.bezierData;\n        if (t >= v || t < b) {\n          var P = t >= v ? x.points.length - 1 : 0;\n          for (h = x.points[P].point.length, o = 0; o < h; o += 1)\n            i[o] = x.points[P].point[o];\n        } else {\n          n.__fnct\n            ? (m = n.__fnct)\n            : ((m = BezierFactory.getBezierEasing(\n                s.o.x,\n                s.o.y,\n                s.i.x,\n                s.i.y,\n                s.n\n              ).get),\n              (n.__fnct = m)),\n            (l = m((t - b) / (v - b)));\n          var E,\n            S = x.segmentLength * l,\n            C =\n              e.lastFrame < t && e._lastKeyframeIndex === d\n                ? e._lastAddedLength\n                : 0;\n          for (\n            f =\n              e.lastFrame < t && e._lastKeyframeIndex === d ? e._lastPoint : 0,\n              y = !0,\n              p = x.points.length;\n            y;\n\n          ) {\n            if (\n              ((C += x.points[f].partialLength),\n              0 === S || 0 === l || f === x.points.length - 1)\n            ) {\n              for (h = x.points[f].point.length, o = 0; o < h; o += 1)\n                i[o] = x.points[f].point[o];\n              break;\n            }\n            if (S >= C && S < C + x.points[f + 1].partialLength) {\n              for (\n                E = (S - C) / x.points[f + 1].partialLength,\n                  h = x.points[f].point.length,\n                  o = 0;\n                o < h;\n                o += 1\n              )\n                i[o] =\n                  x.points[f].point[o] +\n                  (x.points[f + 1].point[o] - x.points[f].point[o]) * E;\n              break;\n            }\n            f < p - 1 ? (f += 1) : (y = !1);\n          }\n          (e._lastPoint = f),\n            (e._lastAddedLength = C - x.points[f].partialLength),\n            (e._lastKeyframeIndex = d);\n        }\n      } else {\n        var _, A, T, M, k;\n        if (((u = s.s.length), (g = a.s || s.e), this.sh && 1 !== s.h))\n          if (t >= v) (i[0] = g[0]), (i[1] = g[1]), (i[2] = g[2]);\n          else if (t <= b) (i[0] = s.s[0]), (i[1] = s.s[1]), (i[2] = s.s[2]);\n          else {\n            quaternionToEuler(\n              i,\n              slerp(\n                createQuaternion(s.s),\n                createQuaternion(g),\n                (t - b) / (v - b)\n              )\n            );\n          }\n        else\n          for (d = 0; d < u; d += 1)\n            1 !== s.h &&\n              (t >= v\n                ? (l = 1)\n                : t < b\n                ? (l = 0)\n                : (s.o.x.constructor === Array\n                    ? (n.__fnct || (n.__fnct = []),\n                      n.__fnct[d]\n                        ? (m = n.__fnct[d])\n                        : ((_ = void 0 === s.o.x[d] ? s.o.x[0] : s.o.x[d]),\n                          (A = void 0 === s.o.y[d] ? s.o.y[0] : s.o.y[d]),\n                          (T = void 0 === s.i.x[d] ? s.i.x[0] : s.i.x[d]),\n                          (M = void 0 === s.i.y[d] ? s.i.y[0] : s.i.y[d]),\n                          (m = BezierFactory.getBezierEasing(_, A, T, M).get),\n                          (n.__fnct[d] = m)))\n                    : n.__fnct\n                    ? (m = n.__fnct)\n                    : ((_ = s.o.x),\n                      (A = s.o.y),\n                      (T = s.i.x),\n                      (M = s.i.y),\n                      (m = BezierFactory.getBezierEasing(_, A, T, M).get),\n                      (s.keyframeMetadata = m)),\n                  (l = m((t - b) / (v - b))))),\n              (g = a.s || s.e),\n              (k = 1 === s.h ? s.s[d] : s.s[d] + (g[d] - s.s[d]) * l),\n              \"multidimensional\" === this.propType ? (i[d] = k) : (i = k);\n      }\n      return (e.lastIndex = c), i;\n    }\n    function slerp(t, e, i) {\n      var r,\n        s,\n        a,\n        n,\n        o,\n        h = [],\n        l = t[0],\n        p = t[1],\n        f = t[2],\n        m = t[3],\n        c = e[0],\n        d = e[1],\n        u = e[2],\n        y = e[3];\n      return (\n        (s = l * c + p * d + f * u + m * y) < 0 &&\n          ((s = -s), (c = -c), (d = -d), (u = -u), (y = -y)),\n        1 - s > 1e-6\n          ? ((r = Math.acos(s)),\n            (a = Math.sin(r)),\n            (n = Math.sin((1 - i) * r) / a),\n            (o = Math.sin(i * r) / a))\n          : ((n = 1 - i), (o = i)),\n        (h[0] = n * l + o * c),\n        (h[1] = n * p + o * d),\n        (h[2] = n * f + o * u),\n        (h[3] = n * m + o * y),\n        h\n      );\n    }\n    function quaternionToEuler(t, e) {\n      var i = e[0],\n        r = e[1],\n        s = e[2],\n        a = e[3],\n        n = Math.atan2(2 * r * a - 2 * i * s, 1 - 2 * r * r - 2 * s * s),\n        o = Math.asin(2 * i * r + 2 * s * a),\n        h = Math.atan2(2 * i * a - 2 * r * s, 1 - 2 * i * i - 2 * s * s);\n      (t[0] = n / degToRads), (t[1] = o / degToRads), (t[2] = h / degToRads);\n    }\n    function createQuaternion(t) {\n      var e = t[0] * degToRads,\n        i = t[1] * degToRads,\n        r = t[2] * degToRads,\n        s = Math.cos(e / 2),\n        a = Math.cos(i / 2),\n        n = Math.cos(r / 2),\n        o = Math.sin(e / 2),\n        h = Math.sin(i / 2),\n        l = Math.sin(r / 2);\n      return [\n        o * h * n + s * a * l,\n        o * a * n + s * h * l,\n        s * h * n - o * a * l,\n        s * a * n - o * h * l,\n      ];\n    }\n    function getValueAtCurrentTime() {\n      var t = this.comp.renderedFrame - this.offsetTime,\n        e = this.keyframes[0].t - this.offsetTime,\n        i = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      if (\n        !(\n          t === this._caching.lastFrame ||\n          (this._caching.lastFrame !== initFrame &&\n            ((this._caching.lastFrame >= i && t >= i) ||\n              (this._caching.lastFrame < e && t < e)))\n        )\n      ) {\n        this._caching.lastFrame >= t &&\n          ((this._caching._lastKeyframeIndex = -1),\n          (this._caching.lastIndex = 0));\n        var r = this.interpolateValue(t, this._caching);\n        this.pv = r;\n      }\n      return (this._caching.lastFrame = t), this.pv;\n    }\n    function setVValue(t) {\n      var e;\n      if (\"unidimensional\" === this.propType)\n        (e = t * this.mult),\n          mathAbs(this.v - e) > 1e-5 && ((this.v = e), (this._mdf = !0));\n      else\n        for (var i = 0, r = this.v.length; i < r; )\n          (e = t[i] * this.mult),\n            mathAbs(this.v[i] - e) > 1e-5 &&\n              ((this.v[i] = e), (this._mdf = !0)),\n            (i += 1);\n    }\n    function processEffectsSequence() {\n      if (\n        this.elem.globalData.frameId !== this.frameId &&\n        this.effectsSequence.length\n      )\n        if (this.lock) this.setVValue(this.pv);\n        else {\n          var t;\n          (this.lock = !0), (this._mdf = this._isFirstFrame);\n          var e = this.effectsSequence.length,\n            i = this.kf ? this.pv : this.data.k;\n          for (t = 0; t < e; t += 1) i = this.effectsSequence[t](i);\n          this.setVValue(i),\n            (this._isFirstFrame = !1),\n            (this.lock = !1),\n            (this.frameId = this.elem.globalData.frameId);\n        }\n    }\n    function addEffect(t) {\n      this.effectsSequence.push(t), this.container.addDynamicProperty(this);\n    }\n    function ValueProperty(t, e, i, r) {\n      (this.propType = \"unidimensional\"),\n        (this.mult = i || 1),\n        (this.data = e),\n        (this.v = i ? e.k * i : e.k),\n        (this.pv = e.k),\n        (this._mdf = !1),\n        (this.elem = t),\n        (this.container = r),\n        (this.comp = t.comp),\n        (this.k = !1),\n        (this.kf = !1),\n        (this.vel = 0),\n        (this.effectsSequence = []),\n        (this._isFirstFrame = !0),\n        (this.getValue = processEffectsSequence),\n        (this.setVValue = setVValue),\n        (this.addEffect = addEffect);\n    }\n    function MultiDimensionalProperty(t, e, i, r) {\n      var s;\n      (this.propType = \"multidimensional\"),\n        (this.mult = i || 1),\n        (this.data = e),\n        (this._mdf = !1),\n        (this.elem = t),\n        (this.container = r),\n        (this.comp = t.comp),\n        (this.k = !1),\n        (this.kf = !1),\n        (this.frameId = -1);\n      var a = e.k.length;\n      for (\n        this.v = createTypedArray(\"float32\", a),\n          this.pv = createTypedArray(\"float32\", a),\n          this.vel = createTypedArray(\"float32\", a),\n          s = 0;\n        s < a;\n        s += 1\n      )\n        (this.v[s] = e.k[s] * this.mult), (this.pv[s] = e.k[s]);\n      (this._isFirstFrame = !0),\n        (this.effectsSequence = []),\n        (this.getValue = processEffectsSequence),\n        (this.setVValue = setVValue),\n        (this.addEffect = addEffect);\n    }\n    function KeyframedValueProperty(t, e, i, r) {\n      (this.propType = \"unidimensional\"),\n        (this.keyframes = e.k),\n        (this.keyframesMetadata = []),\n        (this.offsetTime = t.data.st),\n        (this.frameId = -1),\n        (this._caching = {\n          lastFrame: initFrame,\n          lastIndex: 0,\n          value: 0,\n          _lastKeyframeIndex: -1,\n        }),\n        (this.k = !0),\n        (this.kf = !0),\n        (this.data = e),\n        (this.mult = i || 1),\n        (this.elem = t),\n        (this.container = r),\n        (this.comp = t.comp),\n        (this.v = initFrame),\n        (this.pv = initFrame),\n        (this._isFirstFrame = !0),\n        (this.getValue = processEffectsSequence),\n        (this.setVValue = setVValue),\n        (this.interpolateValue = interpolateValue),\n        (this.effectsSequence = [getValueAtCurrentTime.bind(this)]),\n        (this.addEffect = addEffect);\n    }\n    function KeyframedMultidimensionalProperty(t, e, i, r) {\n      var s;\n      this.propType = \"multidimensional\";\n      var a,\n        n,\n        o,\n        h,\n        l = e.k.length;\n      for (s = 0; s < l - 1; s += 1)\n        e.k[s].to &&\n          e.k[s].s &&\n          e.k[s + 1] &&\n          e.k[s + 1].s &&\n          ((a = e.k[s].s),\n          (n = e.k[s + 1].s),\n          (o = e.k[s].to),\n          (h = e.k[s].ti),\n          ((2 === a.length &&\n            (a[0] !== n[0] || a[1] !== n[1]) &&\n            bez.pointOnLine2D(\n              a[0],\n              a[1],\n              n[0],\n              n[1],\n              a[0] + o[0],\n              a[1] + o[1]\n            ) &&\n            bez.pointOnLine2D(\n              a[0],\n              a[1],\n              n[0],\n              n[1],\n              n[0] + h[0],\n              n[1] + h[1]\n            )) ||\n            (3 === a.length &&\n              (a[0] !== n[0] || a[1] !== n[1] || a[2] !== n[2]) &&\n              bez.pointOnLine3D(\n                a[0],\n                a[1],\n                a[2],\n                n[0],\n                n[1],\n                n[2],\n                a[0] + o[0],\n                a[1] + o[1],\n                a[2] + o[2]\n              ) &&\n              bez.pointOnLine3D(\n                a[0],\n                a[1],\n                a[2],\n                n[0],\n                n[1],\n                n[2],\n                n[0] + h[0],\n                n[1] + h[1],\n                n[2] + h[2]\n              ))) &&\n            ((e.k[s].to = null), (e.k[s].ti = null)),\n          a[0] === n[0] &&\n            a[1] === n[1] &&\n            0 === o[0] &&\n            0 === o[1] &&\n            0 === h[0] &&\n            0 === h[1] &&\n            (2 === a.length || (a[2] === n[2] && 0 === o[2] && 0 === h[2])) &&\n            ((e.k[s].to = null), (e.k[s].ti = null)));\n      (this.effectsSequence = [getValueAtCurrentTime.bind(this)]),\n        (this.data = e),\n        (this.keyframes = e.k),\n        (this.keyframesMetadata = []),\n        (this.offsetTime = t.data.st),\n        (this.k = !0),\n        (this.kf = !0),\n        (this._isFirstFrame = !0),\n        (this.mult = i || 1),\n        (this.elem = t),\n        (this.container = r),\n        (this.comp = t.comp),\n        (this.getValue = processEffectsSequence),\n        (this.setVValue = setVValue),\n        (this.interpolateValue = interpolateValue),\n        (this.frameId = -1);\n      var p = e.k[0].s.length;\n      for (\n        this.v = createTypedArray(\"float32\", p),\n          this.pv = createTypedArray(\"float32\", p),\n          s = 0;\n        s < p;\n        s += 1\n      )\n        (this.v[s] = initFrame), (this.pv[s] = initFrame);\n      (this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0,\n        value: createTypedArray(\"float32\", p),\n      }),\n        (this.addEffect = addEffect);\n    }\n    var PropertyFactory = {\n      getProp: function (t, e, i, r, s) {\n        var a;\n        if ((e.sid && (e = t.globalData.slotManager.getProp(e)), e.k.length))\n          if (\"number\" == typeof e.k[0])\n            a = new MultiDimensionalProperty(t, e, r, s);\n          else\n            switch (i) {\n              case 0:\n                a = new KeyframedValueProperty(t, e, r, s);\n                break;\n              case 1:\n                a = new KeyframedMultidimensionalProperty(t, e, r, s);\n            }\n        else a = new ValueProperty(t, e, r, s);\n        return a.effectsSequence.length && s.addDynamicProperty(a), a;\n      },\n    };\n    function DynamicPropertyContainer() {}\n    DynamicPropertyContainer.prototype = {\n      addDynamicProperty: function (t) {\n        -1 === this.dynamicProperties.indexOf(t) &&\n          (this.dynamicProperties.push(t),\n          this.container.addDynamicProperty(this),\n          (this._isAnimated = !0));\n      },\n      iterateDynamicProperties: function () {\n        var t;\n        this._mdf = !1;\n        var e = this.dynamicProperties.length;\n        for (t = 0; t < e; t += 1)\n          this.dynamicProperties[t].getValue(),\n            this.dynamicProperties[t]._mdf && (this._mdf = !0);\n      },\n      initDynamicPropertyContainer: function (t) {\n        (this.container = t),\n          (this.dynamicProperties = []),\n          (this._mdf = !1),\n          (this._isAnimated = !1);\n      },\n    };\n    var pointPool = poolFactory(8, function () {\n      return createTypedArray(\"float32\", 2);\n    });\n    function ShapePath() {\n      (this.c = !1),\n        (this._length = 0),\n        (this._maxLength = 8),\n        (this.v = createSizedArray(this._maxLength)),\n        (this.o = createSizedArray(this._maxLength)),\n        (this.i = createSizedArray(this._maxLength));\n    }\n    (ShapePath.prototype.setPathData = function (t, e) {\n      (this.c = t), this.setLength(e);\n      for (var i = 0; i < e; )\n        (this.v[i] = pointPool.newElement()),\n          (this.o[i] = pointPool.newElement()),\n          (this.i[i] = pointPool.newElement()),\n          (i += 1);\n    }),\n      (ShapePath.prototype.setLength = function (t) {\n        for (; this._maxLength < t; ) this.doubleArrayLength();\n        this._length = t;\n      }),\n      (ShapePath.prototype.doubleArrayLength = function () {\n        (this.v = this.v.concat(createSizedArray(this._maxLength))),\n          (this.i = this.i.concat(createSizedArray(this._maxLength))),\n          (this.o = this.o.concat(createSizedArray(this._maxLength))),\n          (this._maxLength *= 2);\n      }),\n      (ShapePath.prototype.setXYAt = function (t, e, i, r, s) {\n        var a;\n        switch (\n          ((this._length = Math.max(this._length, r + 1)),\n          this._length >= this._maxLength && this.doubleArrayLength(),\n          i)\n        ) {\n          case \"v\":\n            a = this.v;\n            break;\n          case \"i\":\n            a = this.i;\n            break;\n          case \"o\":\n            a = this.o;\n            break;\n          default:\n            a = [];\n        }\n        (!a[r] || (a[r] && !s)) && (a[r] = pointPool.newElement()),\n          (a[r][0] = t),\n          (a[r][1] = e);\n      }),\n      (ShapePath.prototype.setTripleAt = function (t, e, i, r, s, a, n, o) {\n        this.setXYAt(t, e, \"v\", n, o),\n          this.setXYAt(i, r, \"o\", n, o),\n          this.setXYAt(s, a, \"i\", n, o);\n      }),\n      (ShapePath.prototype.reverse = function () {\n        var t = new ShapePath();\n        t.setPathData(this.c, this._length);\n        var e = this.v,\n          i = this.o,\n          r = this.i,\n          s = 0;\n        this.c &&\n          (t.setTripleAt(\n            e[0][0],\n            e[0][1],\n            r[0][0],\n            r[0][1],\n            i[0][0],\n            i[0][1],\n            0,\n            !1\n          ),\n          (s = 1));\n        var a,\n          n = this._length - 1,\n          o = this._length;\n        for (a = s; a < o; a += 1)\n          t.setTripleAt(\n            e[n][0],\n            e[n][1],\n            r[n][0],\n            r[n][1],\n            i[n][0],\n            i[n][1],\n            a,\n            !1\n          ),\n            (n -= 1);\n        return t;\n      }),\n      (ShapePath.prototype.length = function () {\n        return this._length;\n      });\n    var shapePool =\n        ((factory = poolFactory(\n          4,\n          function () {\n            return new ShapePath();\n          },\n          function (t) {\n            var e,\n              i = t._length;\n            for (e = 0; e < i; e += 1)\n              pointPool.release(t.v[e]),\n                pointPool.release(t.i[e]),\n                pointPool.release(t.o[e]),\n                (t.v[e] = null),\n                (t.i[e] = null),\n                (t.o[e] = null);\n            (t._length = 0), (t.c = !1);\n          }\n        )),\n        (factory.clone = function (t) {\n          var e,\n            i = factory.newElement(),\n            r = void 0 === t._length ? t.v.length : t._length;\n          for (i.setLength(r), i.c = t.c, e = 0; e < r; e += 1)\n            i.setTripleAt(\n              t.v[e][0],\n              t.v[e][1],\n              t.o[e][0],\n              t.o[e][1],\n              t.i[e][0],\n              t.i[e][1],\n              e\n            );\n          return i;\n        }),\n        factory),\n      factory;\n    function ShapeCollection() {\n      (this._length = 0),\n        (this._maxLength = 4),\n        (this.shapes = createSizedArray(this._maxLength));\n    }\n    (ShapeCollection.prototype.addShape = function (t) {\n      this._length === this._maxLength &&\n        ((this.shapes = this.shapes.concat(createSizedArray(this._maxLength))),\n        (this._maxLength *= 2)),\n        (this.shapes[this._length] = t),\n        (this._length += 1);\n    }),\n      (ShapeCollection.prototype.releaseShapes = function () {\n        var t;\n        for (t = 0; t < this._length; t += 1) shapePool.release(this.shapes[t]);\n        this._length = 0;\n      });\n    var shapeCollectionPool =\n        ((ob = {\n          newShapeCollection: function () {\n            return _length ? pool[(_length -= 1)] : new ShapeCollection();\n          },\n          release: function (t) {\n            var e,\n              i = t._length;\n            for (e = 0; e < i; e += 1) shapePool.release(t.shapes[e]);\n            (t._length = 0),\n              _length === _maxLength &&\n                ((pool = pooling.double(pool)), (_maxLength *= 2)),\n              (pool[_length] = t),\n              (_length += 1);\n          },\n        }),\n        (_length = 0),\n        (_maxLength = 4),\n        (pool = createSizedArray(_maxLength)),\n        ob),\n      ob,\n      _length,\n      _maxLength,\n      pool,\n      ShapePropertyFactory = (function () {\n        var t = -999999;\n        function e(t, e, i) {\n          var r,\n            s,\n            a,\n            n,\n            o,\n            h,\n            l,\n            p,\n            f,\n            m = i.lastIndex,\n            c = this.keyframes;\n          if (t < c[0].t - this.offsetTime) (r = c[0].s[0]), (a = !0), (m = 0);\n          else if (t >= c[c.length - 1].t - this.offsetTime)\n            (r = c[c.length - 1].s\n              ? c[c.length - 1].s[0]\n              : c[c.length - 2].e[0]),\n              (a = !0);\n          else {\n            for (\n              var d, u, y, g = m, v = c.length - 1, b = !0;\n              b && ((d = c[g]), !((u = c[g + 1]).t - this.offsetTime > t));\n\n            )\n              g < v - 1 ? (g += 1) : (b = !1);\n            if (\n              ((y = this.keyframesMetadata[g] || {}), (m = g), !(a = 1 === d.h))\n            ) {\n              if (t >= u.t - this.offsetTime) p = 1;\n              else if (t < d.t - this.offsetTime) p = 0;\n              else {\n                var x;\n                y.__fnct\n                  ? (x = y.__fnct)\n                  : ((x = BezierFactory.getBezierEasing(\n                      d.o.x,\n                      d.o.y,\n                      d.i.x,\n                      d.i.y\n                    ).get),\n                    (y.__fnct = x)),\n                  (p = x(\n                    (t - (d.t - this.offsetTime)) /\n                      (u.t - this.offsetTime - (d.t - this.offsetTime))\n                  ));\n              }\n              s = u.s ? u.s[0] : d.e[0];\n            }\n            r = d.s[0];\n          }\n          for (\n            h = e._length, l = r.i[0].length, i.lastIndex = m, n = 0;\n            n < h;\n            n += 1\n          )\n            for (o = 0; o < l; o += 1)\n              (f = a ? r.i[n][o] : r.i[n][o] + (s.i[n][o] - r.i[n][o]) * p),\n                (e.i[n][o] = f),\n                (f = a ? r.o[n][o] : r.o[n][o] + (s.o[n][o] - r.o[n][o]) * p),\n                (e.o[n][o] = f),\n                (f = a ? r.v[n][o] : r.v[n][o] + (s.v[n][o] - r.v[n][o]) * p),\n                (e.v[n][o] = f);\n        }\n        function i() {\n          var e = this.comp.renderedFrame - this.offsetTime,\n            i = this.keyframes[0].t - this.offsetTime,\n            r = this.keyframes[this.keyframes.length - 1].t - this.offsetTime,\n            s = this._caching.lastFrame;\n          return (\n            (s !== t && ((s < i && e < i) || (s > r && e > r))) ||\n              ((this._caching.lastIndex = s < e ? this._caching.lastIndex : 0),\n              this.interpolateShape(e, this.pv, this._caching)),\n            (this._caching.lastFrame = e),\n            this.pv\n          );\n        }\n        function r() {\n          this.paths = this.localShapeCollection;\n        }\n        function s(t) {\n          (function (t, e) {\n            if (t._length !== e._length || t.c !== e.c) return !1;\n            var i,\n              r = t._length;\n            for (i = 0; i < r; i += 1)\n              if (\n                t.v[i][0] !== e.v[i][0] ||\n                t.v[i][1] !== e.v[i][1] ||\n                t.o[i][0] !== e.o[i][0] ||\n                t.o[i][1] !== e.o[i][1] ||\n                t.i[i][0] !== e.i[i][0] ||\n                t.i[i][1] !== e.i[i][1]\n              )\n                return !1;\n            return !0;\n          })(this.v, t) ||\n            ((this.v = shapePool.clone(t)),\n            this.localShapeCollection.releaseShapes(),\n            this.localShapeCollection.addShape(this.v),\n            (this._mdf = !0),\n            (this.paths = this.localShapeCollection));\n        }\n        function a() {\n          if (this.elem.globalData.frameId !== this.frameId)\n            if (this.effectsSequence.length)\n              if (this.lock) this.setVValue(this.pv);\n              else {\n                var t, e;\n                (this.lock = !0),\n                  (this._mdf = !1),\n                  (t = this.kf\n                    ? this.pv\n                    : this.data.ks\n                    ? this.data.ks.k\n                    : this.data.pt.k);\n                var i = this.effectsSequence.length;\n                for (e = 0; e < i; e += 1) t = this.effectsSequence[e](t);\n                this.setVValue(t),\n                  (this.lock = !1),\n                  (this.frameId = this.elem.globalData.frameId);\n              }\n            else this._mdf = !1;\n        }\n        function n(t, e, i) {\n          (this.propType = \"shape\"),\n            (this.comp = t.comp),\n            (this.container = t),\n            (this.elem = t),\n            (this.data = e),\n            (this.k = !1),\n            (this.kf = !1),\n            (this._mdf = !1);\n          var s = 3 === i ? e.pt.k : e.ks.k;\n          (this.v = shapePool.clone(s)),\n            (this.pv = shapePool.clone(this.v)),\n            (this.localShapeCollection =\n              shapeCollectionPool.newShapeCollection()),\n            (this.paths = this.localShapeCollection),\n            this.paths.addShape(this.v),\n            (this.reset = r),\n            (this.effectsSequence = []);\n        }\n        function o(t) {\n          this.effectsSequence.push(t), this.container.addDynamicProperty(this);\n        }\n        function h(e, s, a) {\n          (this.propType = \"shape\"),\n            (this.comp = e.comp),\n            (this.elem = e),\n            (this.container = e),\n            (this.offsetTime = e.data.st),\n            (this.keyframes = 3 === a ? s.pt.k : s.ks.k),\n            (this.keyframesMetadata = []),\n            (this.k = !0),\n            (this.kf = !0);\n          var n = this.keyframes[0].s[0].i.length;\n          (this.v = shapePool.newElement()),\n            this.v.setPathData(this.keyframes[0].s[0].c, n),\n            (this.pv = shapePool.clone(this.v)),\n            (this.localShapeCollection =\n              shapeCollectionPool.newShapeCollection()),\n            (this.paths = this.localShapeCollection),\n            this.paths.addShape(this.v),\n            (this.lastFrame = t),\n            (this.reset = r),\n            (this._caching = { lastFrame: t, lastIndex: 0 }),\n            (this.effectsSequence = [i.bind(this)]);\n        }\n        (n.prototype.interpolateShape = e),\n          (n.prototype.getValue = a),\n          (n.prototype.setVValue = s),\n          (n.prototype.addEffect = o),\n          (h.prototype.getValue = a),\n          (h.prototype.interpolateShape = e),\n          (h.prototype.setVValue = s),\n          (h.prototype.addEffect = o);\n        var l = (function () {\n            var t = roundCorner;\n            function e(t, e) {\n              (this.v = shapePool.newElement()),\n                this.v.setPathData(!0, 4),\n                (this.localShapeCollection =\n                  shapeCollectionPool.newShapeCollection()),\n                (this.paths = this.localShapeCollection),\n                this.localShapeCollection.addShape(this.v),\n                (this.d = e.d),\n                (this.elem = t),\n                (this.comp = t.comp),\n                (this.frameId = -1),\n                this.initDynamicPropertyContainer(t),\n                (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)),\n                (this.s = PropertyFactory.getProp(t, e.s, 1, 0, this)),\n                this.dynamicProperties.length\n                  ? (this.k = !0)\n                  : ((this.k = !1), this.convertEllToPath());\n            }\n            return (\n              (e.prototype = {\n                reset: r,\n                getValue: function () {\n                  this.elem.globalData.frameId !== this.frameId &&\n                    ((this.frameId = this.elem.globalData.frameId),\n                    this.iterateDynamicProperties(),\n                    this._mdf && this.convertEllToPath());\n                },\n                convertEllToPath: function () {\n                  var e = this.p.v[0],\n                    i = this.p.v[1],\n                    r = this.s.v[0] / 2,\n                    s = this.s.v[1] / 2,\n                    a = 3 !== this.d,\n                    n = this.v;\n                  (n.v[0][0] = e),\n                    (n.v[0][1] = i - s),\n                    (n.v[1][0] = a ? e + r : e - r),\n                    (n.v[1][1] = i),\n                    (n.v[2][0] = e),\n                    (n.v[2][1] = i + s),\n                    (n.v[3][0] = a ? e - r : e + r),\n                    (n.v[3][1] = i),\n                    (n.i[0][0] = a ? e - r * t : e + r * t),\n                    (n.i[0][1] = i - s),\n                    (n.i[1][0] = a ? e + r : e - r),\n                    (n.i[1][1] = i - s * t),\n                    (n.i[2][0] = a ? e + r * t : e - r * t),\n                    (n.i[2][1] = i + s),\n                    (n.i[3][0] = a ? e - r : e + r),\n                    (n.i[3][1] = i + s * t),\n                    (n.o[0][0] = a ? e + r * t : e - r * t),\n                    (n.o[0][1] = i - s),\n                    (n.o[1][0] = a ? e + r : e - r),\n                    (n.o[1][1] = i + s * t),\n                    (n.o[2][0] = a ? e - r * t : e + r * t),\n                    (n.o[2][1] = i + s),\n                    (n.o[3][0] = a ? e - r : e + r),\n                    (n.o[3][1] = i - s * t);\n                },\n              }),\n              extendPrototype([DynamicPropertyContainer], e),\n              e\n            );\n          })(),\n          p = (function () {\n            function t(t, e) {\n              (this.v = shapePool.newElement()),\n                this.v.setPathData(!0, 0),\n                (this.elem = t),\n                (this.comp = t.comp),\n                (this.data = e),\n                (this.frameId = -1),\n                (this.d = e.d),\n                this.initDynamicPropertyContainer(t),\n                1 === e.sy\n                  ? ((this.ir = PropertyFactory.getProp(t, e.ir, 0, 0, this)),\n                    (this.is = PropertyFactory.getProp(t, e.is, 0, 0.01, this)),\n                    (this.convertToPath = this.convertStarToPath))\n                  : (this.convertToPath = this.convertPolygonToPath),\n                (this.pt = PropertyFactory.getProp(t, e.pt, 0, 0, this)),\n                (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)),\n                (this.r = PropertyFactory.getProp(t, e.r, 0, degToRads, this)),\n                (this.or = PropertyFactory.getProp(t, e.or, 0, 0, this)),\n                (this.os = PropertyFactory.getProp(t, e.os, 0, 0.01, this)),\n                (this.localShapeCollection =\n                  shapeCollectionPool.newShapeCollection()),\n                this.localShapeCollection.addShape(this.v),\n                (this.paths = this.localShapeCollection),\n                this.dynamicProperties.length\n                  ? (this.k = !0)\n                  : ((this.k = !1), this.convertToPath());\n            }\n            return (\n              (t.prototype = {\n                reset: r,\n                getValue: function () {\n                  this.elem.globalData.frameId !== this.frameId &&\n                    ((this.frameId = this.elem.globalData.frameId),\n                    this.iterateDynamicProperties(),\n                    this._mdf && this.convertToPath());\n                },\n                convertStarToPath: function () {\n                  var t,\n                    e,\n                    i,\n                    r,\n                    s = 2 * Math.floor(this.pt.v),\n                    a = (2 * Math.PI) / s,\n                    n = !0,\n                    o = this.or.v,\n                    h = this.ir.v,\n                    l = this.os.v,\n                    p = this.is.v,\n                    f = (2 * Math.PI * o) / (2 * s),\n                    m = (2 * Math.PI * h) / (2 * s),\n                    c = -Math.PI / 2;\n                  c += this.r.v;\n                  var d = 3 === this.data.d ? -1 : 1;\n                  for (this.v._length = 0, t = 0; t < s; t += 1) {\n                    (i = n ? l : p), (r = n ? f : m);\n                    var u = (e = n ? o : h) * Math.cos(c),\n                      y = e * Math.sin(c),\n                      g = 0 === u && 0 === y ? 0 : y / Math.sqrt(u * u + y * y),\n                      v =\n                        0 === u && 0 === y ? 0 : -u / Math.sqrt(u * u + y * y);\n                    (u += +this.p.v[0]),\n                      (y += +this.p.v[1]),\n                      this.v.setTripleAt(\n                        u,\n                        y,\n                        u - g * r * i * d,\n                        y - v * r * i * d,\n                        u + g * r * i * d,\n                        y + v * r * i * d,\n                        t,\n                        !0\n                      ),\n                      (n = !n),\n                      (c += a * d);\n                  }\n                },\n                convertPolygonToPath: function () {\n                  var t,\n                    e = Math.floor(this.pt.v),\n                    i = (2 * Math.PI) / e,\n                    r = this.or.v,\n                    s = this.os.v,\n                    a = (2 * Math.PI * r) / (4 * e),\n                    n = 0.5 * -Math.PI,\n                    o = 3 === this.data.d ? -1 : 1;\n                  for (\n                    n += this.r.v, this.v._length = 0, t = 0;\n                    t < e;\n                    t += 1\n                  ) {\n                    var h = r * Math.cos(n),\n                      l = r * Math.sin(n),\n                      p = 0 === h && 0 === l ? 0 : l / Math.sqrt(h * h + l * l),\n                      f =\n                        0 === h && 0 === l ? 0 : -h / Math.sqrt(h * h + l * l);\n                    (h += +this.p.v[0]),\n                      (l += +this.p.v[1]),\n                      this.v.setTripleAt(\n                        h,\n                        l,\n                        h - p * a * s * o,\n                        l - f * a * s * o,\n                        h + p * a * s * o,\n                        l + f * a * s * o,\n                        t,\n                        !0\n                      ),\n                      (n += i * o);\n                  }\n                  (this.paths.length = 0), (this.paths[0] = this.v);\n                },\n              }),\n              extendPrototype([DynamicPropertyContainer], t),\n              t\n            );\n          })(),\n          f = (function () {\n            function t(t, e) {\n              (this.v = shapePool.newElement()),\n                (this.v.c = !0),\n                (this.localShapeCollection =\n                  shapeCollectionPool.newShapeCollection()),\n                this.localShapeCollection.addShape(this.v),\n                (this.paths = this.localShapeCollection),\n                (this.elem = t),\n                (this.comp = t.comp),\n                (this.frameId = -1),\n                (this.d = e.d),\n                this.initDynamicPropertyContainer(t),\n                (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)),\n                (this.s = PropertyFactory.getProp(t, e.s, 1, 0, this)),\n                (this.r = PropertyFactory.getProp(t, e.r, 0, 0, this)),\n                this.dynamicProperties.length\n                  ? (this.k = !0)\n                  : ((this.k = !1), this.convertRectToPath());\n            }\n            return (\n              (t.prototype = {\n                convertRectToPath: function () {\n                  var t = this.p.v[0],\n                    e = this.p.v[1],\n                    i = this.s.v[0] / 2,\n                    r = this.s.v[1] / 2,\n                    s = bmMin(i, r, this.r.v),\n                    a = s * (1 - roundCorner);\n                  (this.v._length = 0),\n                    2 === this.d || 1 === this.d\n                      ? (this.v.setTripleAt(\n                          t + i,\n                          e - r + s,\n                          t + i,\n                          e - r + s,\n                          t + i,\n                          e - r + a,\n                          0,\n                          !0\n                        ),\n                        this.v.setTripleAt(\n                          t + i,\n                          e + r - s,\n                          t + i,\n                          e + r - a,\n                          t + i,\n                          e + r - s,\n                          1,\n                          !0\n                        ),\n                        0 !== s\n                          ? (this.v.setTripleAt(\n                              t + i - s,\n                              e + r,\n                              t + i - s,\n                              e + r,\n                              t + i - a,\n                              e + r,\n                              2,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i + s,\n                              e + r,\n                              t - i + a,\n                              e + r,\n                              t - i + s,\n                              e + r,\n                              3,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e + r - s,\n                              t - i,\n                              e + r - s,\n                              t - i,\n                              e + r - a,\n                              4,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e - r + s,\n                              t - i,\n                              e - r + a,\n                              t - i,\n                              e - r + s,\n                              5,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i + s,\n                              e - r,\n                              t - i + s,\n                              e - r,\n                              t - i + a,\n                              e - r,\n                              6,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t + i - s,\n                              e - r,\n                              t + i - a,\n                              e - r,\n                              t + i - s,\n                              e - r,\n                              7,\n                              !0\n                            ))\n                          : (this.v.setTripleAt(\n                              t - i,\n                              e + r,\n                              t - i + a,\n                              e + r,\n                              t - i,\n                              e + r,\n                              2\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e - r,\n                              t - i,\n                              e - r + a,\n                              t - i,\n                              e - r,\n                              3\n                            )))\n                      : (this.v.setTripleAt(\n                          t + i,\n                          e - r + s,\n                          t + i,\n                          e - r + a,\n                          t + i,\n                          e - r + s,\n                          0,\n                          !0\n                        ),\n                        0 !== s\n                          ? (this.v.setTripleAt(\n                              t + i - s,\n                              e - r,\n                              t + i - s,\n                              e - r,\n                              t + i - a,\n                              e - r,\n                              1,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i + s,\n                              e - r,\n                              t - i + a,\n                              e - r,\n                              t - i + s,\n                              e - r,\n                              2,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e - r + s,\n                              t - i,\n                              e - r + s,\n                              t - i,\n                              e - r + a,\n                              3,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e + r - s,\n                              t - i,\n                              e + r - a,\n                              t - i,\n                              e + r - s,\n                              4,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i + s,\n                              e + r,\n                              t - i + s,\n                              e + r,\n                              t - i + a,\n                              e + r,\n                              5,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t + i - s,\n                              e + r,\n                              t + i - a,\n                              e + r,\n                              t + i - s,\n                              e + r,\n                              6,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t + i,\n                              e + r - s,\n                              t + i,\n                              e + r - s,\n                              t + i,\n                              e + r - a,\n                              7,\n                              !0\n                            ))\n                          : (this.v.setTripleAt(\n                              t - i,\n                              e - r,\n                              t - i + a,\n                              e - r,\n                              t - i,\n                              e - r,\n                              1,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t - i,\n                              e + r,\n                              t - i,\n                              e + r - a,\n                              t - i,\n                              e + r,\n                              2,\n                              !0\n                            ),\n                            this.v.setTripleAt(\n                              t + i,\n                              e + r,\n                              t + i - a,\n                              e + r,\n                              t + i,\n                              e + r,\n                              3,\n                              !0\n                            )));\n                },\n                getValue: function () {\n                  this.elem.globalData.frameId !== this.frameId &&\n                    ((this.frameId = this.elem.globalData.frameId),\n                    this.iterateDynamicProperties(),\n                    this._mdf && this.convertRectToPath());\n                },\n                reset: r,\n              }),\n              extendPrototype([DynamicPropertyContainer], t),\n              t\n            );\n          })();\n        var m = {\n          getShapeProp: function (t, e, i) {\n            var r;\n            return (\n              3 === i || 4 === i\n                ? (r = (3 === i ? e.pt : e.ks).k.length\n                    ? new h(t, e, i)\n                    : new n(t, e, i))\n                : 5 === i\n                ? (r = new f(t, e))\n                : 6 === i\n                ? (r = new l(t, e))\n                : 7 === i && (r = new p(t, e)),\n              r.k && t.addDynamicProperty(r),\n              r\n            );\n          },\n          getConstructorFunction: function () {\n            return n;\n          },\n          getKeyframedConstructorFunction: function () {\n            return h;\n          },\n        };\n        return m;\n      })(),\n      Matrix = (function () {\n        var t = Math.cos,\n          e = Math.sin,\n          i = Math.tan,\n          r = Math.round;\n        function s() {\n          return (\n            (this.props[0] = 1),\n            (this.props[1] = 0),\n            (this.props[2] = 0),\n            (this.props[3] = 0),\n            (this.props[4] = 0),\n            (this.props[5] = 1),\n            (this.props[6] = 0),\n            (this.props[7] = 0),\n            (this.props[8] = 0),\n            (this.props[9] = 0),\n            (this.props[10] = 1),\n            (this.props[11] = 0),\n            (this.props[12] = 0),\n            (this.props[13] = 0),\n            (this.props[14] = 0),\n            (this.props[15] = 1),\n            this\n          );\n        }\n        function a(i) {\n          if (0 === i) return this;\n          var r = t(i),\n            s = e(i);\n          return this._t(r, -s, 0, 0, s, r, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n        }\n        function n(i) {\n          if (0 === i) return this;\n          var r = t(i),\n            s = e(i);\n          return this._t(1, 0, 0, 0, 0, r, -s, 0, 0, s, r, 0, 0, 0, 0, 1);\n        }\n        function o(i) {\n          if (0 === i) return this;\n          var r = t(i),\n            s = e(i);\n          return this._t(r, 0, s, 0, 0, 1, 0, 0, -s, 0, r, 0, 0, 0, 0, 1);\n        }\n        function h(i) {\n          if (0 === i) return this;\n          var r = t(i),\n            s = e(i);\n          return this._t(r, -s, 0, 0, s, r, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n        }\n        function l(t, e) {\n          return this._t(1, e, t, 1, 0, 0);\n        }\n        function p(t, e) {\n          return this.shear(i(t), i(e));\n        }\n        function f(r, s) {\n          var a = t(s),\n            n = e(s);\n          return this._t(a, n, 0, 0, -n, a, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n            ._t(1, 0, 0, 0, i(r), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n            ._t(a, -n, 0, 0, n, a, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n        }\n        function m(t, e, i) {\n          return (\n            i || 0 === i || (i = 1),\n            1 === t && 1 === e && 1 === i\n              ? this\n              : this._t(t, 0, 0, 0, 0, e, 0, 0, 0, 0, i, 0, 0, 0, 0, 1)\n          );\n        }\n        function c(t, e, i, r, s, a, n, o, h, l, p, f, m, c, d, u) {\n          return (\n            (this.props[0] = t),\n            (this.props[1] = e),\n            (this.props[2] = i),\n            (this.props[3] = r),\n            (this.props[4] = s),\n            (this.props[5] = a),\n            (this.props[6] = n),\n            (this.props[7] = o),\n            (this.props[8] = h),\n            (this.props[9] = l),\n            (this.props[10] = p),\n            (this.props[11] = f),\n            (this.props[12] = m),\n            (this.props[13] = c),\n            (this.props[14] = d),\n            (this.props[15] = u),\n            this\n          );\n        }\n        function d(t, e, i) {\n          return (\n            (i = i || 0),\n            0 !== t || 0 !== e || 0 !== i\n              ? this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, t, e, i, 1)\n              : this\n          );\n        }\n        function u(t, e, i, r, s, a, n, o, h, l, p, f, m, c, d, u) {\n          var y = this.props;\n          if (\n            1 === t &&\n            0 === e &&\n            0 === i &&\n            0 === r &&\n            0 === s &&\n            1 === a &&\n            0 === n &&\n            0 === o &&\n            0 === h &&\n            0 === l &&\n            1 === p &&\n            0 === f\n          )\n            return (\n              (y[12] = y[12] * t + y[15] * m),\n              (y[13] = y[13] * a + y[15] * c),\n              (y[14] = y[14] * p + y[15] * d),\n              (y[15] *= u),\n              (this._identityCalculated = !1),\n              this\n            );\n          var g = y[0],\n            v = y[1],\n            b = y[2],\n            x = y[3],\n            P = y[4],\n            E = y[5],\n            S = y[6],\n            C = y[7],\n            _ = y[8],\n            A = y[9],\n            T = y[10],\n            M = y[11],\n            k = y[12],\n            D = y[13],\n            F = y[14],\n            w = y[15];\n          return (\n            (y[0] = g * t + v * s + b * h + x * m),\n            (y[1] = g * e + v * a + b * l + x * c),\n            (y[2] = g * i + v * n + b * p + x * d),\n            (y[3] = g * r + v * o + b * f + x * u),\n            (y[4] = P * t + E * s + S * h + C * m),\n            (y[5] = P * e + E * a + S * l + C * c),\n            (y[6] = P * i + E * n + S * p + C * d),\n            (y[7] = P * r + E * o + S * f + C * u),\n            (y[8] = _ * t + A * s + T * h + M * m),\n            (y[9] = _ * e + A * a + T * l + M * c),\n            (y[10] = _ * i + A * n + T * p + M * d),\n            (y[11] = _ * r + A * o + T * f + M * u),\n            (y[12] = k * t + D * s + F * h + w * m),\n            (y[13] = k * e + D * a + F * l + w * c),\n            (y[14] = k * i + D * n + F * p + w * d),\n            (y[15] = k * r + D * o + F * f + w * u),\n            (this._identityCalculated = !1),\n            this\n          );\n        }\n        function y(t) {\n          var e = t.props;\n          return this.transform(\n            e[0],\n            e[1],\n            e[2],\n            e[3],\n            e[4],\n            e[5],\n            e[6],\n            e[7],\n            e[8],\n            e[9],\n            e[10],\n            e[11],\n            e[12],\n            e[13],\n            e[14],\n            e[15]\n          );\n        }\n        function g() {\n          return (\n            this._identityCalculated ||\n              ((this._identity = !(\n                1 !== this.props[0] ||\n                0 !== this.props[1] ||\n                0 !== this.props[2] ||\n                0 !== this.props[3] ||\n                0 !== this.props[4] ||\n                1 !== this.props[5] ||\n                0 !== this.props[6] ||\n                0 !== this.props[7] ||\n                0 !== this.props[8] ||\n                0 !== this.props[9] ||\n                1 !== this.props[10] ||\n                0 !== this.props[11] ||\n                0 !== this.props[12] ||\n                0 !== this.props[13] ||\n                0 !== this.props[14] ||\n                1 !== this.props[15]\n              )),\n              (this._identityCalculated = !0)),\n            this._identity\n          );\n        }\n        function v(t) {\n          for (var e = 0; e < 16; ) {\n            if (t.props[e] !== this.props[e]) return !1;\n            e += 1;\n          }\n          return !0;\n        }\n        function b(t) {\n          var e;\n          for (e = 0; e < 16; e += 1) t.props[e] = this.props[e];\n          return t;\n        }\n        function x(t) {\n          var e;\n          for (e = 0; e < 16; e += 1) this.props[e] = t[e];\n        }\n        function P(t, e, i) {\n          return {\n            x:\n              t * this.props[0] +\n              e * this.props[4] +\n              i * this.props[8] +\n              this.props[12],\n            y:\n              t * this.props[1] +\n              e * this.props[5] +\n              i * this.props[9] +\n              this.props[13],\n            z:\n              t * this.props[2] +\n              e * this.props[6] +\n              i * this.props[10] +\n              this.props[14],\n          };\n        }\n        function E(t, e, i) {\n          return (\n            t * this.props[0] +\n            e * this.props[4] +\n            i * this.props[8] +\n            this.props[12]\n          );\n        }\n        function S(t, e, i) {\n          return (\n            t * this.props[1] +\n            e * this.props[5] +\n            i * this.props[9] +\n            this.props[13]\n          );\n        }\n        function C(t, e, i) {\n          return (\n            t * this.props[2] +\n            e * this.props[6] +\n            i * this.props[10] +\n            this.props[14]\n          );\n        }\n        function _() {\n          var t = this.props[0] * this.props[5] - this.props[1] * this.props[4],\n            e = this.props[5] / t,\n            i = -this.props[1] / t,\n            r = -this.props[4] / t,\n            s = this.props[0] / t,\n            a =\n              (this.props[4] * this.props[13] -\n                this.props[5] * this.props[12]) /\n              t,\n            n =\n              -(\n                this.props[0] * this.props[13] -\n                this.props[1] * this.props[12]\n              ) / t,\n            o = new Matrix();\n          return (\n            (o.props[0] = e),\n            (o.props[1] = i),\n            (o.props[4] = r),\n            (o.props[5] = s),\n            (o.props[12] = a),\n            (o.props[13] = n),\n            o\n          );\n        }\n        function A(t) {\n          return this.getInverseMatrix().applyToPointArray(\n            t[0],\n            t[1],\n            t[2] || 0\n          );\n        }\n        function T(t) {\n          var e,\n            i = t.length,\n            r = [];\n          for (e = 0; e < i; e += 1) r[e] = A(t[e]);\n          return r;\n        }\n        function M(t, e, i) {\n          var r = createTypedArray(\"float32\", 6);\n          if (this.isIdentity())\n            (r[0] = t[0]),\n              (r[1] = t[1]),\n              (r[2] = e[0]),\n              (r[3] = e[1]),\n              (r[4] = i[0]),\n              (r[5] = i[1]);\n          else {\n            var s = this.props[0],\n              a = this.props[1],\n              n = this.props[4],\n              o = this.props[5],\n              h = this.props[12],\n              l = this.props[13];\n            (r[0] = t[0] * s + t[1] * n + h),\n              (r[1] = t[0] * a + t[1] * o + l),\n              (r[2] = e[0] * s + e[1] * n + h),\n              (r[3] = e[0] * a + e[1] * o + l),\n              (r[4] = i[0] * s + i[1] * n + h),\n              (r[5] = i[0] * a + i[1] * o + l);\n          }\n          return r;\n        }\n        function k(t, e, i) {\n          return this.isIdentity()\n            ? [t, e, i]\n            : [\n                t * this.props[0] +\n                  e * this.props[4] +\n                  i * this.props[8] +\n                  this.props[12],\n                t * this.props[1] +\n                  e * this.props[5] +\n                  i * this.props[9] +\n                  this.props[13],\n                t * this.props[2] +\n                  e * this.props[6] +\n                  i * this.props[10] +\n                  this.props[14],\n              ];\n        }\n        function D(t, e) {\n          if (this.isIdentity()) return t + \",\" + e;\n          var i = this.props;\n          return (\n            Math.round(100 * (t * i[0] + e * i[4] + i[12])) / 100 +\n            \",\" +\n            Math.round(100 * (t * i[1] + e * i[5] + i[13])) / 100\n          );\n        }\n        function F() {\n          for (var t = 0, e = this.props, i = \"matrix3d(\"; t < 16; )\n            (i += r(1e4 * e[t]) / 1e4), (i += 15 === t ? \")\" : \",\"), (t += 1);\n          return i;\n        }\n        function w(t) {\n          return (t < 1e-6 && t > 0) || (t > -1e-6 && t < 0)\n            ? r(1e4 * t) / 1e4\n            : t;\n        }\n        function I() {\n          var t = this.props;\n          return (\n            \"matrix(\" +\n            w(t[0]) +\n            \",\" +\n            w(t[1]) +\n            \",\" +\n            w(t[4]) +\n            \",\" +\n            w(t[5]) +\n            \",\" +\n            w(t[12]) +\n            \",\" +\n            w(t[13]) +\n            \")\"\n          );\n        }\n        return function () {\n          (this.reset = s),\n            (this.rotate = a),\n            (this.rotateX = n),\n            (this.rotateY = o),\n            (this.rotateZ = h),\n            (this.skew = p),\n            (this.skewFromAxis = f),\n            (this.shear = l),\n            (this.scale = m),\n            (this.setTransform = c),\n            (this.translate = d),\n            (this.transform = u),\n            (this.multiply = y),\n            (this.applyToPoint = P),\n            (this.applyToX = E),\n            (this.applyToY = S),\n            (this.applyToZ = C),\n            (this.applyToPointArray = k),\n            (this.applyToTriplePoints = M),\n            (this.applyToPointStringified = D),\n            (this.toCSS = F),\n            (this.to2dCSS = I),\n            (this.clone = b),\n            (this.cloneFromProps = x),\n            (this.equals = v),\n            (this.inversePoints = T),\n            (this.inversePoint = A),\n            (this.getInverseMatrix = _),\n            (this._t = this.transform),\n            (this.isIdentity = g),\n            (this._identity = !0),\n            (this._identityCalculated = !1),\n            (this.props = createTypedArray(\"float32\", 16)),\n            this.reset();\n        };\n      })();\n    function _typeof$3(t) {\n      return (\n        (_typeof$3 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$3(t)\n      );\n    }\n    var lottie = {},\n      standalone = \"__[STANDALONE]__\",\n      animationData = \"__[ANIMATIONDATA]__\",\n      renderer = \"\";\n    function setLocation(t) {\n      setLocationHref(t);\n    }\n    function searchAnimations() {\n      !0 === standalone\n        ? animationManager.searchAnimations(animationData, standalone, renderer)\n        : animationManager.searchAnimations();\n    }\n    function setSubframeRendering(t) {\n      setSubframeEnabled(t);\n    }\n    function setPrefix(t) {\n      setIdPrefix(t);\n    }\n    function loadAnimation(t) {\n      return (\n        !0 === standalone && (t.animationData = JSON.parse(animationData)),\n        animationManager.loadAnimation(t)\n      );\n    }\n    function setQuality(t) {\n      if (\"string\" == typeof t)\n        switch (t) {\n          case \"high\":\n            setDefaultCurveSegments(200);\n            break;\n          default:\n          case \"medium\":\n            setDefaultCurveSegments(50);\n            break;\n          case \"low\":\n            setDefaultCurveSegments(10);\n        }\n      else !isNaN(t) && t > 1 && setDefaultCurveSegments(t);\n      getDefaultCurveSegments() >= 50 ? roundValues(!1) : roundValues(!0);\n    }\n    function inBrowser() {\n      return \"undefined\" != typeof navigator;\n    }\n    function installPlugin(t, e) {\n      \"expressions\" === t && setExpressionsPlugin(e);\n    }\n    function getFactory(t) {\n      switch (t) {\n        case \"propertyFactory\":\n          return PropertyFactory;\n        case \"shapePropertyFactory\":\n          return ShapePropertyFactory;\n        case \"matrix\":\n          return Matrix;\n        default:\n          return null;\n      }\n    }\n    function checkReady() {\n      \"complete\" === document.readyState &&\n        (clearInterval(readyStateCheckInterval), searchAnimations());\n    }\n    function getQueryVariable(t) {\n      for (var e = queryString.split(\"&\"), i = 0; i < e.length; i += 1) {\n        var r = e[i].split(\"=\");\n        if (decodeURIComponent(r[0]) == t) return decodeURIComponent(r[1]);\n      }\n      return null;\n    }\n    (lottie.play = animationManager.play),\n      (lottie.pause = animationManager.pause),\n      (lottie.setLocationHref = setLocation),\n      (lottie.togglePause = animationManager.togglePause),\n      (lottie.setSpeed = animationManager.setSpeed),\n      (lottie.setDirection = animationManager.setDirection),\n      (lottie.stop = animationManager.stop),\n      (lottie.searchAnimations = searchAnimations),\n      (lottie.registerAnimation = animationManager.registerAnimation),\n      (lottie.loadAnimation = loadAnimation),\n      (lottie.setSubframeRendering = setSubframeRendering),\n      (lottie.resize = animationManager.resize),\n      (lottie.goToAndStop = animationManager.goToAndStop),\n      (lottie.destroy = animationManager.destroy),\n      (lottie.setQuality = setQuality),\n      (lottie.inBrowser = inBrowser),\n      (lottie.installPlugin = installPlugin),\n      (lottie.freeze = animationManager.freeze),\n      (lottie.unfreeze = animationManager.unfreeze),\n      (lottie.setVolume = animationManager.setVolume),\n      (lottie.mute = animationManager.mute),\n      (lottie.unmute = animationManager.unmute),\n      (lottie.getRegisteredAnimations =\n        animationManager.getRegisteredAnimations),\n      (lottie.useWebWorker = setWebWorker),\n      (lottie.setIDPrefix = setPrefix),\n      (lottie.__getFactory = getFactory),\n      (lottie.version = \"5.12.1\");\n    var queryString = \"\";\n    if (standalone) {\n      var scripts = document.getElementsByTagName(\"script\"),\n        index = scripts.length - 1,\n        myScript = scripts[index] || { src: \"\" };\n      (queryString = myScript.src\n        ? myScript.src.replace(/^[^\\?]+\\??/, \"\")\n        : \"\"),\n        (renderer = getQueryVariable(\"renderer\"));\n    }\n    var readyStateCheckInterval = setInterval(checkReady, 100);\n    try {\n      (\"object\" ===\n        (\"undefined\" == typeof exports ? \"undefined\" : _typeof$3(exports)) &&\n        \"undefined\" != typeof module) ||\n        (\"function\" == typeof define && define.amd) ||\n        (window.bodymovin = lottie);\n    } catch (t) {}\n    var ShapeModifiers = (function () {\n      var t = {},\n        e = {};\n      return (\n        (t.registerModifier = function (t, i) {\n          e[t] || (e[t] = i);\n        }),\n        (t.getModifier = function (t, i, r) {\n          return new e[t](i, r);\n        }),\n        t\n      );\n    })();\n    function ShapeModifier() {}\n    function TrimModifier() {}\n    function PuckerAndBloatModifier() {}\n    (ShapeModifier.prototype.initModifierProperties = function () {}),\n      (ShapeModifier.prototype.addShapeToModifier = function () {}),\n      (ShapeModifier.prototype.addShape = function (t) {\n        if (!this.closed) {\n          t.sh.container.addDynamicProperty(t.sh);\n          var e = {\n            shape: t.sh,\n            data: t,\n            localShapeCollection: shapeCollectionPool.newShapeCollection(),\n          };\n          this.shapes.push(e),\n            this.addShapeToModifier(e),\n            this._isAnimated && t.setAsAnimated();\n        }\n      }),\n      (ShapeModifier.prototype.init = function (t, e) {\n        (this.shapes = []),\n          (this.elem = t),\n          this.initDynamicPropertyContainer(t),\n          this.initModifierProperties(t, e),\n          (this.frameId = initialDefaultFrame),\n          (this.closed = !1),\n          (this.k = !1),\n          this.dynamicProperties.length ? (this.k = !0) : this.getValue(!0);\n      }),\n      (ShapeModifier.prototype.processKeys = function () {\n        this.elem.globalData.frameId !== this.frameId &&\n          ((this.frameId = this.elem.globalData.frameId),\n          this.iterateDynamicProperties());\n      }),\n      extendPrototype([DynamicPropertyContainer], ShapeModifier),\n      extendPrototype([ShapeModifier], TrimModifier),\n      (TrimModifier.prototype.initModifierProperties = function (t, e) {\n        (this.s = PropertyFactory.getProp(t, e.s, 0, 0.01, this)),\n          (this.e = PropertyFactory.getProp(t, e.e, 0, 0.01, this)),\n          (this.o = PropertyFactory.getProp(t, e.o, 0, 0, this)),\n          (this.sValue = 0),\n          (this.eValue = 0),\n          (this.getValue = this.processKeys),\n          (this.m = e.m),\n          (this._isAnimated =\n            !!this.s.effectsSequence.length ||\n            !!this.e.effectsSequence.length ||\n            !!this.o.effectsSequence.length);\n      }),\n      (TrimModifier.prototype.addShapeToModifier = function (t) {\n        t.pathsData = [];\n      }),\n      (TrimModifier.prototype.calculateShapeEdges = function (t, e, i, r, s) {\n        var a = [];\n        e <= 1\n          ? a.push({ s: t, e: e })\n          : t >= 1\n          ? a.push({ s: t - 1, e: e - 1 })\n          : (a.push({ s: t, e: 1 }), a.push({ s: 0, e: e - 1 }));\n        var n,\n          o,\n          h = [],\n          l = a.length;\n        for (n = 0; n < l; n += 1) {\n          var p, f;\n          if (!((o = a[n]).e * s < r || o.s * s > r + i))\n            (p = o.s * s <= r ? 0 : (o.s * s - r) / i),\n              (f = o.e * s >= r + i ? 1 : (o.e * s - r) / i),\n              h.push([p, f]);\n        }\n        return h.length || h.push([0, 0]), h;\n      }),\n      (TrimModifier.prototype.releasePathsData = function (t) {\n        var e,\n          i = t.length;\n        for (e = 0; e < i; e += 1) segmentsLengthPool.release(t[e]);\n        return (t.length = 0), t;\n      }),\n      (TrimModifier.prototype.processShapes = function (t) {\n        var e, i, r, s;\n        if (this._mdf || t) {\n          var a = (this.o.v % 360) / 360;\n          if (\n            (a < 0 && (a += 1),\n            (e = this.s.v > 1 ? 1 + a : this.s.v < 0 ? 0 + a : this.s.v + a) >\n              (i = this.e.v > 1 ? 1 + a : this.e.v < 0 ? 0 + a : this.e.v + a))\n          ) {\n            var n = e;\n            (e = i), (i = n);\n          }\n          (e = 1e-4 * Math.round(1e4 * e)),\n            (i = 1e-4 * Math.round(1e4 * i)),\n            (this.sValue = e),\n            (this.eValue = i);\n        } else (e = this.sValue), (i = this.eValue);\n        var o,\n          h,\n          l,\n          p,\n          f,\n          m = this.shapes.length,\n          c = 0;\n        if (i === e)\n          for (s = 0; s < m; s += 1)\n            this.shapes[s].localShapeCollection.releaseShapes(),\n              (this.shapes[s].shape._mdf = !0),\n              (this.shapes[s].shape.paths =\n                this.shapes[s].localShapeCollection),\n              this._mdf && (this.shapes[s].pathsData.length = 0);\n        else if ((1 === i && 0 === e) || (0 === i && 1 === e)) {\n          if (this._mdf)\n            for (s = 0; s < m; s += 1)\n              (this.shapes[s].pathsData.length = 0),\n                (this.shapes[s].shape._mdf = !0);\n        } else {\n          var d,\n            u,\n            y = [];\n          for (s = 0; s < m; s += 1)\n            if (\n              (d = this.shapes[s]).shape._mdf ||\n              this._mdf ||\n              t ||\n              2 === this.m\n            ) {\n              if (\n                ((h = (r = d.shape.paths)._length),\n                (f = 0),\n                !d.shape._mdf && d.pathsData.length)\n              )\n                f = d.totalShapeLength;\n              else {\n                for (\n                  l = this.releasePathsData(d.pathsData), o = 0;\n                  o < h;\n                  o += 1\n                )\n                  (p = bez.getSegmentsLength(r.shapes[o])),\n                    l.push(p),\n                    (f += p.totalLength);\n                (d.totalShapeLength = f), (d.pathsData = l);\n              }\n              (c += f), (d.shape._mdf = !0);\n            } else d.shape.paths = d.localShapeCollection;\n          var g,\n            v = e,\n            b = i,\n            x = 0;\n          for (s = m - 1; s >= 0; s -= 1)\n            if ((d = this.shapes[s]).shape._mdf) {\n              for (\n                (u = d.localShapeCollection).releaseShapes(),\n                  2 === this.m && m > 1\n                    ? ((g = this.calculateShapeEdges(\n                        e,\n                        i,\n                        d.totalShapeLength,\n                        x,\n                        c\n                      )),\n                      (x += d.totalShapeLength))\n                    : (g = [[v, b]]),\n                  h = g.length,\n                  o = 0;\n                o < h;\n                o += 1\n              ) {\n                (v = g[o][0]),\n                  (b = g[o][1]),\n                  (y.length = 0),\n                  b <= 1\n                    ? y.push({\n                        s: d.totalShapeLength * v,\n                        e: d.totalShapeLength * b,\n                      })\n                    : v >= 1\n                    ? y.push({\n                        s: d.totalShapeLength * (v - 1),\n                        e: d.totalShapeLength * (b - 1),\n                      })\n                    : (y.push({\n                        s: d.totalShapeLength * v,\n                        e: d.totalShapeLength,\n                      }),\n                      y.push({ s: 0, e: d.totalShapeLength * (b - 1) }));\n                var P = this.addShapes(d, y[0]);\n                if (y[0].s !== y[0].e) {\n                  if (y.length > 1)\n                    if (d.shape.paths.shapes[d.shape.paths._length - 1].c) {\n                      var E = P.pop();\n                      this.addPaths(P, u), (P = this.addShapes(d, y[1], E));\n                    } else this.addPaths(P, u), (P = this.addShapes(d, y[1]));\n                  this.addPaths(P, u);\n                }\n              }\n              d.shape.paths = u;\n            }\n        }\n      }),\n      (TrimModifier.prototype.addPaths = function (t, e) {\n        var i,\n          r = t.length;\n        for (i = 0; i < r; i += 1) e.addShape(t[i]);\n      }),\n      (TrimModifier.prototype.addSegment = function (t, e, i, r, s, a, n) {\n        s.setXYAt(e[0], e[1], \"o\", a),\n          s.setXYAt(i[0], i[1], \"i\", a + 1),\n          n && s.setXYAt(t[0], t[1], \"v\", a),\n          s.setXYAt(r[0], r[1], \"v\", a + 1);\n      }),\n      (TrimModifier.prototype.addSegmentFromArray = function (t, e, i, r) {\n        e.setXYAt(t[1], t[5], \"o\", i),\n          e.setXYAt(t[2], t[6], \"i\", i + 1),\n          r && e.setXYAt(t[0], t[4], \"v\", i),\n          e.setXYAt(t[3], t[7], \"v\", i + 1);\n      }),\n      (TrimModifier.prototype.addShapes = function (t, e, i) {\n        var r,\n          s,\n          a,\n          n,\n          o,\n          h,\n          l,\n          p,\n          f = t.pathsData,\n          m = t.shape.paths.shapes,\n          c = t.shape.paths._length,\n          d = 0,\n          u = [],\n          y = !0;\n        for (\n          i\n            ? ((o = i._length), (p = i._length))\n            : ((i = shapePool.newElement()), (o = 0), (p = 0)),\n            u.push(i),\n            r = 0;\n          r < c;\n          r += 1\n        ) {\n          for (\n            h = f[r].lengths,\n              i.c = m[r].c,\n              a = m[r].c ? h.length : h.length + 1,\n              s = 1;\n            s < a;\n            s += 1\n          )\n            if (d + (n = h[s - 1]).addedLength < e.s)\n              (d += n.addedLength), (i.c = !1);\n            else {\n              if (d > e.e) {\n                i.c = !1;\n                break;\n              }\n              e.s <= d && e.e >= d + n.addedLength\n                ? (this.addSegment(\n                    m[r].v[s - 1],\n                    m[r].o[s - 1],\n                    m[r].i[s],\n                    m[r].v[s],\n                    i,\n                    o,\n                    y\n                  ),\n                  (y = !1))\n                : ((l = bez.getNewSegment(\n                    m[r].v[s - 1],\n                    m[r].v[s],\n                    m[r].o[s - 1],\n                    m[r].i[s],\n                    (e.s - d) / n.addedLength,\n                    (e.e - d) / n.addedLength,\n                    h[s - 1]\n                  )),\n                  this.addSegmentFromArray(l, i, o, y),\n                  (y = !1),\n                  (i.c = !1)),\n                (d += n.addedLength),\n                (o += 1);\n            }\n          if (m[r].c && h.length) {\n            if (((n = h[s - 1]), d <= e.e)) {\n              var g = h[s - 1].addedLength;\n              e.s <= d && e.e >= d + g\n                ? (this.addSegment(\n                    m[r].v[s - 1],\n                    m[r].o[s - 1],\n                    m[r].i[0],\n                    m[r].v[0],\n                    i,\n                    o,\n                    y\n                  ),\n                  (y = !1))\n                : ((l = bez.getNewSegment(\n                    m[r].v[s - 1],\n                    m[r].v[0],\n                    m[r].o[s - 1],\n                    m[r].i[0],\n                    (e.s - d) / g,\n                    (e.e - d) / g,\n                    h[s - 1]\n                  )),\n                  this.addSegmentFromArray(l, i, o, y),\n                  (y = !1),\n                  (i.c = !1));\n            } else i.c = !1;\n            (d += n.addedLength), (o += 1);\n          }\n          if (\n            (i._length &&\n              (i.setXYAt(i.v[p][0], i.v[p][1], \"i\", p),\n              i.setXYAt(\n                i.v[i._length - 1][0],\n                i.v[i._length - 1][1],\n                \"o\",\n                i._length - 1\n              )),\n            d > e.e)\n          )\n            break;\n          r < c - 1 &&\n            ((i = shapePool.newElement()), (y = !0), u.push(i), (o = 0));\n        }\n        return u;\n      }),\n      extendPrototype([ShapeModifier], PuckerAndBloatModifier),\n      (PuckerAndBloatModifier.prototype.initModifierProperties = function (\n        t,\n        e\n      ) {\n        (this.getValue = this.processKeys),\n          (this.amount = PropertyFactory.getProp(t, e.a, 0, null, this)),\n          (this._isAnimated = !!this.amount.effectsSequence.length);\n      }),\n      (PuckerAndBloatModifier.prototype.processPath = function (t, e) {\n        var i = e / 100,\n          r = [0, 0],\n          s = t._length,\n          a = 0;\n        for (a = 0; a < s; a += 1) (r[0] += t.v[a][0]), (r[1] += t.v[a][1]);\n        (r[0] /= s), (r[1] /= s);\n        var n,\n          o,\n          h,\n          l,\n          p,\n          f,\n          m = shapePool.newElement();\n        for (m.c = t.c, a = 0; a < s; a += 1)\n          (n = t.v[a][0] + (r[0] - t.v[a][0]) * i),\n            (o = t.v[a][1] + (r[1] - t.v[a][1]) * i),\n            (h = t.o[a][0] + (r[0] - t.o[a][0]) * -i),\n            (l = t.o[a][1] + (r[1] - t.o[a][1]) * -i),\n            (p = t.i[a][0] + (r[0] - t.i[a][0]) * -i),\n            (f = t.i[a][1] + (r[1] - t.i[a][1]) * -i),\n            m.setTripleAt(n, o, h, l, p, f, a);\n        return m;\n      }),\n      (PuckerAndBloatModifier.prototype.processShapes = function (t) {\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o = this.shapes.length,\n          h = this.amount.v;\n        if (0 !== h)\n          for (i = 0; i < o; i += 1) {\n            if (\n              ((n = (a = this.shapes[i]).localShapeCollection),\n              a.shape._mdf || this._mdf || t)\n            )\n              for (\n                n.releaseShapes(),\n                  a.shape._mdf = !0,\n                  e = a.shape.paths.shapes,\n                  s = a.shape.paths._length,\n                  r = 0;\n                r < s;\n                r += 1\n              )\n                n.addShape(this.processPath(e[r], h));\n            a.shape.paths = a.localShapeCollection;\n          }\n        this.dynamicProperties.length || (this._mdf = !1);\n      });\n    var TransformPropertyFactory = (function () {\n      var t = [0, 0];\n      function e(t, e, i) {\n        if (\n          ((this.elem = t),\n          (this.frameId = -1),\n          (this.propType = \"transform\"),\n          (this.data = e),\n          (this.v = new Matrix()),\n          (this.pre = new Matrix()),\n          (this.appliedTransformations = 0),\n          this.initDynamicPropertyContainer(i || t),\n          e.p && e.p.s\n            ? ((this.px = PropertyFactory.getProp(t, e.p.x, 0, 0, this)),\n              (this.py = PropertyFactory.getProp(t, e.p.y, 0, 0, this)),\n              e.p.z &&\n                (this.pz = PropertyFactory.getProp(t, e.p.z, 0, 0, this)))\n            : (this.p = PropertyFactory.getProp(\n                t,\n                e.p || { k: [0, 0, 0] },\n                1,\n                0,\n                this\n              )),\n          e.rx)\n        ) {\n          if (\n            ((this.rx = PropertyFactory.getProp(t, e.rx, 0, degToRads, this)),\n            (this.ry = PropertyFactory.getProp(t, e.ry, 0, degToRads, this)),\n            (this.rz = PropertyFactory.getProp(t, e.rz, 0, degToRads, this)),\n            e.or.k[0].ti)\n          ) {\n            var r,\n              s = e.or.k.length;\n            for (r = 0; r < s; r += 1)\n              (e.or.k[r].to = null), (e.or.k[r].ti = null);\n          }\n          (this.or = PropertyFactory.getProp(t, e.or, 1, degToRads, this)),\n            (this.or.sh = !0);\n        } else\n          this.r = PropertyFactory.getProp(\n            t,\n            e.r || { k: 0 },\n            0,\n            degToRads,\n            this\n          );\n        e.sk &&\n          ((this.sk = PropertyFactory.getProp(t, e.sk, 0, degToRads, this)),\n          (this.sa = PropertyFactory.getProp(t, e.sa, 0, degToRads, this))),\n          (this.a = PropertyFactory.getProp(\n            t,\n            e.a || { k: [0, 0, 0] },\n            1,\n            0,\n            this\n          )),\n          (this.s = PropertyFactory.getProp(\n            t,\n            e.s || { k: [100, 100, 100] },\n            1,\n            0.01,\n            this\n          )),\n          e.o\n            ? (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, t))\n            : (this.o = { _mdf: !1, v: 1 }),\n          (this._isDirty = !0),\n          this.dynamicProperties.length || this.getValue(!0);\n      }\n      return (\n        (e.prototype = {\n          applyToMatrix: function (t) {\n            var e = this._mdf;\n            this.iterateDynamicProperties(),\n              (this._mdf = this._mdf || e),\n              this.a && t.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]),\n              this.s && t.scale(this.s.v[0], this.s.v[1], this.s.v[2]),\n              this.sk && t.skewFromAxis(-this.sk.v, this.sa.v),\n              this.r\n                ? t.rotate(-this.r.v)\n                : t\n                    .rotateZ(-this.rz.v)\n                    .rotateY(this.ry.v)\n                    .rotateX(this.rx.v)\n                    .rotateZ(-this.or.v[2])\n                    .rotateY(this.or.v[1])\n                    .rotateX(this.or.v[0]),\n              this.data.p.s\n                ? this.data.p.z\n                  ? t.translate(this.px.v, this.py.v, -this.pz.v)\n                  : t.translate(this.px.v, this.py.v, 0)\n                : t.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n          },\n          getValue: function (e) {\n            if (this.elem.globalData.frameId !== this.frameId) {\n              if (\n                (this._isDirty &&\n                  (this.precalculateMatrix(), (this._isDirty = !1)),\n                this.iterateDynamicProperties(),\n                this._mdf || e)\n              ) {\n                var i;\n                if (\n                  (this.v.cloneFromProps(this.pre.props),\n                  this.appliedTransformations < 1 &&\n                    this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]),\n                  this.appliedTransformations < 2 &&\n                    this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]),\n                  this.sk &&\n                    this.appliedTransformations < 3 &&\n                    this.v.skewFromAxis(-this.sk.v, this.sa.v),\n                  this.r && this.appliedTransformations < 4\n                    ? this.v.rotate(-this.r.v)\n                    : !this.r &&\n                      this.appliedTransformations < 4 &&\n                      this.v\n                        .rotateZ(-this.rz.v)\n                        .rotateY(this.ry.v)\n                        .rotateX(this.rx.v)\n                        .rotateZ(-this.or.v[2])\n                        .rotateY(this.or.v[1])\n                        .rotateX(this.or.v[0]),\n                  this.autoOriented)\n                ) {\n                  var r, s;\n                  if (\n                    ((i = this.elem.globalData.frameRate),\n                    this.p && this.p.keyframes && this.p.getValueAtTime)\n                  )\n                    this.p._caching.lastFrame + this.p.offsetTime <=\n                    this.p.keyframes[0].t\n                      ? ((r = this.p.getValueAtTime(\n                          (this.p.keyframes[0].t + 0.01) / i,\n                          0\n                        )),\n                        (s = this.p.getValueAtTime(\n                          this.p.keyframes[0].t / i,\n                          0\n                        )))\n                      : this.p._caching.lastFrame + this.p.offsetTime >=\n                        this.p.keyframes[this.p.keyframes.length - 1].t\n                      ? ((r = this.p.getValueAtTime(\n                          this.p.keyframes[this.p.keyframes.length - 1].t / i,\n                          0\n                        )),\n                        (s = this.p.getValueAtTime(\n                          (this.p.keyframes[this.p.keyframes.length - 1].t -\n                            0.05) /\n                            i,\n                          0\n                        )))\n                      : ((r = this.p.pv),\n                        (s = this.p.getValueAtTime(\n                          (this.p._caching.lastFrame +\n                            this.p.offsetTime -\n                            0.01) /\n                            i,\n                          this.p.offsetTime\n                        )));\n                  else if (\n                    this.px &&\n                    this.px.keyframes &&\n                    this.py.keyframes &&\n                    this.px.getValueAtTime &&\n                    this.py.getValueAtTime\n                  ) {\n                    (r = []), (s = []);\n                    var a = this.px,\n                      n = this.py;\n                    a._caching.lastFrame + a.offsetTime <= a.keyframes[0].t\n                      ? ((r[0] = a.getValueAtTime(\n                          (a.keyframes[0].t + 0.01) / i,\n                          0\n                        )),\n                        (r[1] = n.getValueAtTime(\n                          (n.keyframes[0].t + 0.01) / i,\n                          0\n                        )),\n                        (s[0] = a.getValueAtTime(a.keyframes[0].t / i, 0)),\n                        (s[1] = n.getValueAtTime(n.keyframes[0].t / i, 0)))\n                      : a._caching.lastFrame + a.offsetTime >=\n                        a.keyframes[a.keyframes.length - 1].t\n                      ? ((r[0] = a.getValueAtTime(\n                          a.keyframes[a.keyframes.length - 1].t / i,\n                          0\n                        )),\n                        (r[1] = n.getValueAtTime(\n                          n.keyframes[n.keyframes.length - 1].t / i,\n                          0\n                        )),\n                        (s[0] = a.getValueAtTime(\n                          (a.keyframes[a.keyframes.length - 1].t - 0.01) / i,\n                          0\n                        )),\n                        (s[1] = n.getValueAtTime(\n                          (n.keyframes[n.keyframes.length - 1].t - 0.01) / i,\n                          0\n                        )))\n                      : ((r = [a.pv, n.pv]),\n                        (s[0] = a.getValueAtTime(\n                          (a._caching.lastFrame + a.offsetTime - 0.01) / i,\n                          a.offsetTime\n                        )),\n                        (s[1] = n.getValueAtTime(\n                          (n._caching.lastFrame + n.offsetTime - 0.01) / i,\n                          n.offsetTime\n                        )));\n                  } else r = s = t;\n                  this.v.rotate(-Math.atan2(r[1] - s[1], r[0] - s[0]));\n                }\n                this.data.p && this.data.p.s\n                  ? this.data.p.z\n                    ? this.v.translate(this.px.v, this.py.v, -this.pz.v)\n                    : this.v.translate(this.px.v, this.py.v, 0)\n                  : this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n              }\n              this.frameId = this.elem.globalData.frameId;\n            }\n          },\n          precalculateMatrix: function () {\n            if (\n              ((this.appliedTransformations = 0),\n              this.pre.reset(),\n              !this.a.effectsSequence.length &&\n                (this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]),\n                (this.appliedTransformations = 1),\n                !this.s.effectsSequence.length))\n            ) {\n              if (\n                (this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]),\n                (this.appliedTransformations = 2),\n                this.sk)\n              ) {\n                if (\n                  this.sk.effectsSequence.length ||\n                  this.sa.effectsSequence.length\n                )\n                  return;\n                this.pre.skewFromAxis(-this.sk.v, this.sa.v),\n                  (this.appliedTransformations = 3);\n              }\n              this.r\n                ? this.r.effectsSequence.length ||\n                  (this.pre.rotate(-this.r.v),\n                  (this.appliedTransformations = 4))\n                : this.rz.effectsSequence.length ||\n                  this.ry.effectsSequence.length ||\n                  this.rx.effectsSequence.length ||\n                  this.or.effectsSequence.length ||\n                  (this.pre\n                    .rotateZ(-this.rz.v)\n                    .rotateY(this.ry.v)\n                    .rotateX(this.rx.v)\n                    .rotateZ(-this.or.v[2])\n                    .rotateY(this.or.v[1])\n                    .rotateX(this.or.v[0]),\n                  (this.appliedTransformations = 4));\n            }\n          },\n          autoOrient: function () {},\n        }),\n        extendPrototype([DynamicPropertyContainer], e),\n        (e.prototype.addDynamicProperty = function (t) {\n          this._addDynamicProperty(t),\n            this.elem.addDynamicProperty(t),\n            (this._isDirty = !0);\n        }),\n        (e.prototype._addDynamicProperty =\n          DynamicPropertyContainer.prototype.addDynamicProperty),\n        {\n          getTransformProperty: function (t, i, r) {\n            return new e(t, i, r);\n          },\n        }\n      );\n    })();\n    function RepeaterModifier() {}\n    function RoundCornersModifier() {}\n    function floatEqual(t, e) {\n      return 1e5 * Math.abs(t - e) <= Math.min(Math.abs(t), Math.abs(e));\n    }\n    function floatZero(t) {\n      return Math.abs(t) <= 1e-5;\n    }\n    function lerp(t, e, i) {\n      return t * (1 - i) + e * i;\n    }\n    function lerpPoint(t, e, i) {\n      return [lerp(t[0], e[0], i), lerp(t[1], e[1], i)];\n    }\n    function quadRoots(t, e, i) {\n      if (0 === t) return [];\n      var r = e * e - 4 * t * i;\n      if (r < 0) return [];\n      var s = -e / (2 * t);\n      if (0 === r) return [s];\n      var a = Math.sqrt(r) / (2 * t);\n      return [s - a, s + a];\n    }\n    function polynomialCoefficients(t, e, i, r) {\n      return [3 * e - t - 3 * i + r, 3 * t - 6 * e + 3 * i, -3 * t + 3 * e, t];\n    }\n    function singlePoint(t) {\n      return new PolynomialBezier(t, t, t, t, !1);\n    }\n    function PolynomialBezier(t, e, i, r, s) {\n      s && pointEqual(t, e) && (e = lerpPoint(t, r, 1 / 3)),\n        s && pointEqual(i, r) && (i = lerpPoint(t, r, 2 / 3));\n      var a = polynomialCoefficients(t[0], e[0], i[0], r[0]),\n        n = polynomialCoefficients(t[1], e[1], i[1], r[1]);\n      (this.a = [a[0], n[0]]),\n        (this.b = [a[1], n[1]]),\n        (this.c = [a[2], n[2]]),\n        (this.d = [a[3], n[3]]),\n        (this.points = [t, e, i, r]);\n    }\n    function extrema(t, e) {\n      var i = t.points[0][e],\n        r = t.points[t.points.length - 1][e];\n      if (i > r) {\n        var s = r;\n        (r = i), (i = s);\n      }\n      for (\n        var a = quadRoots(3 * t.a[e], 2 * t.b[e], t.c[e]), n = 0;\n        n < a.length;\n        n += 1\n      )\n        if (a[n] > 0 && a[n] < 1) {\n          var o = t.point(a[n])[e];\n          o < i ? (i = o) : o > r && (r = o);\n        }\n      return { min: i, max: r };\n    }\n    function intersectData(t, e, i) {\n      var r = t.boundingBox();\n      return {\n        cx: r.cx,\n        cy: r.cy,\n        width: r.width,\n        height: r.height,\n        bez: t,\n        t: (e + i) / 2,\n        t1: e,\n        t2: i,\n      };\n    }\n    function splitData(t) {\n      var e = t.bez.split(0.5);\n      return [intersectData(e[0], t.t1, t.t), intersectData(e[1], t.t, t.t2)];\n    }\n    function boxIntersect(t, e) {\n      return (\n        2 * Math.abs(t.cx - e.cx) < t.width + e.width &&\n        2 * Math.abs(t.cy - e.cy) < t.height + e.height\n      );\n    }\n    function intersectsImpl(t, e, i, r, s, a) {\n      if (boxIntersect(t, e))\n        if (\n          i >= a ||\n          (t.width <= r && t.height <= r && e.width <= r && e.height <= r)\n        )\n          s.push([t.t, e.t]);\n        else {\n          var n = splitData(t),\n            o = splitData(e);\n          intersectsImpl(n[0], o[0], i + 1, r, s, a),\n            intersectsImpl(n[0], o[1], i + 1, r, s, a),\n            intersectsImpl(n[1], o[0], i + 1, r, s, a),\n            intersectsImpl(n[1], o[1], i + 1, r, s, a);\n        }\n    }\n    function crossProduct(t, e) {\n      return [\n        t[1] * e[2] - t[2] * e[1],\n        t[2] * e[0] - t[0] * e[2],\n        t[0] * e[1] - t[1] * e[0],\n      ];\n    }\n    function lineIntersection(t, e, i, r) {\n      var s = [t[0], t[1], 1],\n        a = [e[0], e[1], 1],\n        n = [i[0], i[1], 1],\n        o = [r[0], r[1], 1],\n        h = crossProduct(crossProduct(s, a), crossProduct(n, o));\n      return floatZero(h[2]) ? null : [h[0] / h[2], h[1] / h[2]];\n    }\n    function polarOffset(t, e, i) {\n      return [t[0] + Math.cos(e) * i, t[1] - Math.sin(e) * i];\n    }\n    function pointDistance(t, e) {\n      return Math.hypot(t[0] - e[0], t[1] - e[1]);\n    }\n    function pointEqual(t, e) {\n      return floatEqual(t[0], e[0]) && floatEqual(t[1], e[1]);\n    }\n    function ZigZagModifier() {}\n    function setPoint(t, e, i, r, s, a, n) {\n      var o = i - Math.PI / 2,\n        h = i + Math.PI / 2,\n        l = e[0] + Math.cos(i) * r * s,\n        p = e[1] - Math.sin(i) * r * s;\n      t.setTripleAt(\n        l,\n        p,\n        l + Math.cos(o) * a,\n        p - Math.sin(o) * a,\n        l + Math.cos(h) * n,\n        p - Math.sin(h) * n,\n        t.length()\n      );\n    }\n    function getPerpendicularVector(t, e) {\n      var i = [e[0] - t[0], e[1] - t[1]],\n        r = 0.5 * -Math.PI;\n      return [\n        Math.cos(r) * i[0] - Math.sin(r) * i[1],\n        Math.sin(r) * i[0] + Math.cos(r) * i[1],\n      ];\n    }\n    function getProjectingAngle(t, e) {\n      var i = 0 === e ? t.length() - 1 : e - 1,\n        r = (e + 1) % t.length(),\n        s = getPerpendicularVector(t.v[i], t.v[r]);\n      return Math.atan2(0, 1) - Math.atan2(s[1], s[0]);\n    }\n    function zigZagCorner(t, e, i, r, s, a, n) {\n      var o = getProjectingAngle(e, i),\n        h = e.v[i % e._length],\n        l = e.v[0 === i ? e._length - 1 : i - 1],\n        p = e.v[(i + 1) % e._length],\n        f =\n          2 === a\n            ? Math.sqrt(Math.pow(h[0] - l[0], 2) + Math.pow(h[1] - l[1], 2))\n            : 0,\n        m =\n          2 === a\n            ? Math.sqrt(Math.pow(h[0] - p[0], 2) + Math.pow(h[1] - p[1], 2))\n            : 0;\n      setPoint(\n        t,\n        e.v[i % e._length],\n        o,\n        n,\n        r,\n        m / (2 * (s + 1)),\n        f / (2 * (s + 1)),\n        a\n      );\n    }\n    function zigZagSegment(t, e, i, r, s, a) {\n      for (var n = 0; n < r; n += 1) {\n        var o = (n + 1) / (r + 1),\n          h =\n            2 === s\n              ? Math.sqrt(\n                  Math.pow(e.points[3][0] - e.points[0][0], 2) +\n                    Math.pow(e.points[3][1] - e.points[0][1], 2)\n                )\n              : 0,\n          l = e.normalAngle(o);\n        setPoint(\n          t,\n          e.point(o),\n          l,\n          a,\n          i,\n          h / (2 * (r + 1)),\n          h / (2 * (r + 1)),\n          s\n        ),\n          (a = -a);\n      }\n      return a;\n    }\n    function linearOffset(t, e, i) {\n      var r = Math.atan2(e[0] - t[0], e[1] - t[1]);\n      return [polarOffset(t, r, i), polarOffset(e, r, i)];\n    }\n    function offsetSegment(t, e) {\n      var i, r, s, a, n, o, h;\n      (i = (h = linearOffset(t.points[0], t.points[1], e))[0]),\n        (r = h[1]),\n        (s = (h = linearOffset(t.points[1], t.points[2], e))[0]),\n        (a = h[1]),\n        (n = (h = linearOffset(t.points[2], t.points[3], e))[0]),\n        (o = h[1]);\n      var l = lineIntersection(i, r, s, a);\n      null === l && (l = r);\n      var p = lineIntersection(n, o, s, a);\n      return null === p && (p = n), new PolynomialBezier(i, l, p, o);\n    }\n    function joinLines(t, e, i, r, s) {\n      var a = e.points[3],\n        n = i.points[0];\n      if (3 === r) return a;\n      if (pointEqual(a, n)) return a;\n      if (2 === r) {\n        var o = -e.tangentAngle(1),\n          h = -i.tangentAngle(0) + Math.PI,\n          l = lineIntersection(\n            a,\n            polarOffset(a, o + Math.PI / 2, 100),\n            n,\n            polarOffset(n, o + Math.PI / 2, 100)\n          ),\n          p = l ? pointDistance(l, a) : pointDistance(a, n) / 2,\n          f = polarOffset(a, o, 2 * p * roundCorner);\n        return (\n          t.setXYAt(f[0], f[1], \"o\", t.length() - 1),\n          (f = polarOffset(n, h, 2 * p * roundCorner)),\n          t.setTripleAt(n[0], n[1], n[0], n[1], f[0], f[1], t.length()),\n          n\n        );\n      }\n      var m = lineIntersection(\n        pointEqual(a, e.points[2]) ? e.points[0] : e.points[2],\n        a,\n        n,\n        pointEqual(n, i.points[1]) ? i.points[3] : i.points[1]\n      );\n      return m && pointDistance(m, a) < s\n        ? (t.setTripleAt(m[0], m[1], m[0], m[1], m[0], m[1], t.length()), m)\n        : a;\n    }\n    function getIntersection(t, e) {\n      var i = t.intersections(e);\n      return (\n        i.length && floatEqual(i[0][0], 1) && i.shift(), i.length ? i[0] : null\n      );\n    }\n    function pruneSegmentIntersection(t, e) {\n      var i = t.slice(),\n        r = e.slice(),\n        s = getIntersection(t[t.length - 1], e[0]);\n      return (\n        s &&\n          ((i[t.length - 1] = t[t.length - 1].split(s[0])[0]),\n          (r[0] = e[0].split(s[1])[1])),\n        t.length > 1 &&\n        e.length > 1 &&\n        (s = getIntersection(t[0], e[e.length - 1]))\n          ? [[t[0].split(s[0])[0]], [e[e.length - 1].split(s[1])[1]]]\n          : [i, r]\n      );\n    }\n    function pruneIntersections(t) {\n      for (var e, i = 1; i < t.length; i += 1)\n        (e = pruneSegmentIntersection(t[i - 1], t[i])),\n          (t[i - 1] = e[0]),\n          (t[i] = e[1]);\n      return (\n        t.length > 1 &&\n          ((e = pruneSegmentIntersection(t[t.length - 1], t[0])),\n          (t[t.length - 1] = e[0]),\n          (t[0] = e[1])),\n        t\n      );\n    }\n    function offsetSegmentSplit(t, e) {\n      var i,\n        r,\n        s,\n        a,\n        n = t.inflectionPoints();\n      if (0 === n.length) return [offsetSegment(t, e)];\n      if (1 === n.length || floatEqual(n[1], 1))\n        return (\n          (i = (s = t.split(n[0]))[0]),\n          (r = s[1]),\n          [offsetSegment(i, e), offsetSegment(r, e)]\n        );\n      i = (s = t.split(n[0]))[0];\n      var o = (n[1] - n[0]) / (1 - n[0]);\n      return (\n        (a = (s = s[1].split(o))[0]),\n        (r = s[1]),\n        [offsetSegment(i, e), offsetSegment(a, e), offsetSegment(r, e)]\n      );\n    }\n    function OffsetPathModifier() {}\n    function getFontProperties(t) {\n      for (\n        var e = t.fStyle ? t.fStyle.split(\" \") : [],\n          i = \"normal\",\n          r = \"normal\",\n          s = e.length,\n          a = 0;\n        a < s;\n        a += 1\n      )\n        switch (e[a].toLowerCase()) {\n          case \"italic\":\n            r = \"italic\";\n            break;\n          case \"bold\":\n            i = \"700\";\n            break;\n          case \"black\":\n            i = \"900\";\n            break;\n          case \"medium\":\n            i = \"500\";\n            break;\n          case \"regular\":\n          case \"normal\":\n            i = \"400\";\n            break;\n          case \"light\":\n          case \"thin\":\n            i = \"200\";\n        }\n      return { style: r, weight: t.fWeight || i };\n    }\n    extendPrototype([ShapeModifier], RepeaterModifier),\n      (RepeaterModifier.prototype.initModifierProperties = function (t, e) {\n        (this.getValue = this.processKeys),\n          (this.c = PropertyFactory.getProp(t, e.c, 0, null, this)),\n          (this.o = PropertyFactory.getProp(t, e.o, 0, null, this)),\n          (this.tr = TransformPropertyFactory.getTransformProperty(\n            t,\n            e.tr,\n            this\n          )),\n          (this.so = PropertyFactory.getProp(t, e.tr.so, 0, 0.01, this)),\n          (this.eo = PropertyFactory.getProp(t, e.tr.eo, 0, 0.01, this)),\n          (this.data = e),\n          this.dynamicProperties.length || this.getValue(!0),\n          (this._isAnimated = !!this.dynamicProperties.length),\n          (this.pMatrix = new Matrix()),\n          (this.rMatrix = new Matrix()),\n          (this.sMatrix = new Matrix()),\n          (this.tMatrix = new Matrix()),\n          (this.matrix = new Matrix());\n      }),\n      (RepeaterModifier.prototype.applyTransforms = function (\n        t,\n        e,\n        i,\n        r,\n        s,\n        a\n      ) {\n        var n = a ? -1 : 1,\n          o = r.s.v[0] + (1 - r.s.v[0]) * (1 - s),\n          h = r.s.v[1] + (1 - r.s.v[1]) * (1 - s);\n        t.translate(r.p.v[0] * n * s, r.p.v[1] * n * s, r.p.v[2]),\n          e.translate(-r.a.v[0], -r.a.v[1], r.a.v[2]),\n          e.rotate(-r.r.v * n * s),\n          e.translate(r.a.v[0], r.a.v[1], r.a.v[2]),\n          i.translate(-r.a.v[0], -r.a.v[1], r.a.v[2]),\n          i.scale(a ? 1 / o : o, a ? 1 / h : h),\n          i.translate(r.a.v[0], r.a.v[1], r.a.v[2]);\n      }),\n      (RepeaterModifier.prototype.init = function (t, e, i, r) {\n        for (\n          this.elem = t,\n            this.arr = e,\n            this.pos = i,\n            this.elemsData = r,\n            this._currentCopies = 0,\n            this._elements = [],\n            this._groups = [],\n            this.frameId = -1,\n            this.initDynamicPropertyContainer(t),\n            this.initModifierProperties(t, e[i]);\n          i > 0;\n\n        )\n          (i -= 1), this._elements.unshift(e[i]);\n        this.dynamicProperties.length ? (this.k = !0) : this.getValue(!0);\n      }),\n      (RepeaterModifier.prototype.resetElements = function (t) {\n        var e,\n          i = t.length;\n        for (e = 0; e < i; e += 1)\n          (t[e]._processed = !1),\n            \"gr\" === t[e].ty && this.resetElements(t[e].it);\n      }),\n      (RepeaterModifier.prototype.cloneElements = function (t) {\n        var e = JSON.parse(JSON.stringify(t));\n        return this.resetElements(e), e;\n      }),\n      (RepeaterModifier.prototype.changeGroupRender = function (t, e) {\n        var i,\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          (t[i]._render = e),\n            \"gr\" === t[i].ty && this.changeGroupRender(t[i].it, e);\n      }),\n      (RepeaterModifier.prototype.processShapes = function (t) {\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n = !1;\n        if (this._mdf || t) {\n          var o,\n            h = Math.ceil(this.c.v);\n          if (this._groups.length < h) {\n            for (; this._groups.length < h; ) {\n              var l = { it: this.cloneElements(this._elements), ty: \"gr\" };\n              l.it.push({\n                a: { a: 0, ix: 1, k: [0, 0] },\n                nm: \"Transform\",\n                o: { a: 0, ix: 7, k: 100 },\n                p: { a: 0, ix: 2, k: [0, 0] },\n                r: {\n                  a: 1,\n                  ix: 6,\n                  k: [\n                    { s: 0, e: 0, t: 0 },\n                    { s: 0, e: 0, t: 1 },\n                  ],\n                },\n                s: { a: 0, ix: 3, k: [100, 100] },\n                sa: { a: 0, ix: 5, k: 0 },\n                sk: { a: 0, ix: 4, k: 0 },\n                ty: \"tr\",\n              }),\n                this.arr.splice(0, 0, l),\n                this._groups.splice(0, 0, l),\n                (this._currentCopies += 1);\n            }\n            this.elem.reloadShapes(), (n = !0);\n          }\n          for (a = 0, r = 0; r <= this._groups.length - 1; r += 1) {\n            if (\n              ((o = a < h),\n              (this._groups[r]._render = o),\n              this.changeGroupRender(this._groups[r].it, o),\n              !o)\n            ) {\n              var p = this.elemsData[r].it,\n                f = p[p.length - 1];\n              0 !== f.transform.op.v\n                ? ((f.transform.op._mdf = !0), (f.transform.op.v = 0))\n                : (f.transform.op._mdf = !1);\n            }\n            a += 1;\n          }\n          this._currentCopies = h;\n          var m = this.o.v,\n            c = m % 1,\n            d = m > 0 ? Math.floor(m) : Math.ceil(m),\n            u = this.pMatrix.props,\n            y = this.rMatrix.props,\n            g = this.sMatrix.props;\n          this.pMatrix.reset(),\n            this.rMatrix.reset(),\n            this.sMatrix.reset(),\n            this.tMatrix.reset(),\n            this.matrix.reset();\n          var v,\n            b,\n            x = 0;\n          if (m > 0) {\n            for (; x < d; )\n              this.applyTransforms(\n                this.pMatrix,\n                this.rMatrix,\n                this.sMatrix,\n                this.tr,\n                1,\n                !1\n              ),\n                (x += 1);\n            c &&\n              (this.applyTransforms(\n                this.pMatrix,\n                this.rMatrix,\n                this.sMatrix,\n                this.tr,\n                c,\n                !1\n              ),\n              (x += c));\n          } else if (m < 0) {\n            for (; x > d; )\n              this.applyTransforms(\n                this.pMatrix,\n                this.rMatrix,\n                this.sMatrix,\n                this.tr,\n                1,\n                !0\n              ),\n                (x -= 1);\n            c &&\n              (this.applyTransforms(\n                this.pMatrix,\n                this.rMatrix,\n                this.sMatrix,\n                this.tr,\n                -c,\n                !0\n              ),\n              (x -= c));\n          }\n          for (\n            r = 1 === this.data.m ? 0 : this._currentCopies - 1,\n              s = 1 === this.data.m ? 1 : -1,\n              a = this._currentCopies;\n            a;\n\n          ) {\n            if (\n              ((b = (i = (e = this.elemsData[r].it)[e.length - 1].transform\n                .mProps.v.props).length),\n              (e[e.length - 1].transform.mProps._mdf = !0),\n              (e[e.length - 1].transform.op._mdf = !0),\n              (e[e.length - 1].transform.op.v =\n                1 === this._currentCopies\n                  ? this.so.v\n                  : this.so.v +\n                    (this.eo.v - this.so.v) * (r / (this._currentCopies - 1))),\n              0 !== x)\n            ) {\n              for (\n                ((0 !== r && 1 === s) ||\n                  (r !== this._currentCopies - 1 && -1 === s)) &&\n                  this.applyTransforms(\n                    this.pMatrix,\n                    this.rMatrix,\n                    this.sMatrix,\n                    this.tr,\n                    1,\n                    !1\n                  ),\n                  this.matrix.transform(\n                    y[0],\n                    y[1],\n                    y[2],\n                    y[3],\n                    y[4],\n                    y[5],\n                    y[6],\n                    y[7],\n                    y[8],\n                    y[9],\n                    y[10],\n                    y[11],\n                    y[12],\n                    y[13],\n                    y[14],\n                    y[15]\n                  ),\n                  this.matrix.transform(\n                    g[0],\n                    g[1],\n                    g[2],\n                    g[3],\n                    g[4],\n                    g[5],\n                    g[6],\n                    g[7],\n                    g[8],\n                    g[9],\n                    g[10],\n                    g[11],\n                    g[12],\n                    g[13],\n                    g[14],\n                    g[15]\n                  ),\n                  this.matrix.transform(\n                    u[0],\n                    u[1],\n                    u[2],\n                    u[3],\n                    u[4],\n                    u[5],\n                    u[6],\n                    u[7],\n                    u[8],\n                    u[9],\n                    u[10],\n                    u[11],\n                    u[12],\n                    u[13],\n                    u[14],\n                    u[15]\n                  ),\n                  v = 0;\n                v < b;\n                v += 1\n              )\n                i[v] = this.matrix.props[v];\n              this.matrix.reset();\n            } else\n              for (this.matrix.reset(), v = 0; v < b; v += 1)\n                i[v] = this.matrix.props[v];\n            (x += 1), (a -= 1), (r += s);\n          }\n        } else\n          for (a = this._currentCopies, r = 0, s = 1; a; )\n            (i = (e = this.elemsData[r].it)[e.length - 1].transform.mProps.v\n              .props),\n              (e[e.length - 1].transform.mProps._mdf = !1),\n              (e[e.length - 1].transform.op._mdf = !1),\n              (a -= 1),\n              (r += s);\n        return n;\n      }),\n      (RepeaterModifier.prototype.addShape = function () {}),\n      extendPrototype([ShapeModifier], RoundCornersModifier),\n      (RoundCornersModifier.prototype.initModifierProperties = function (t, e) {\n        (this.getValue = this.processKeys),\n          (this.rd = PropertyFactory.getProp(t, e.r, 0, null, this)),\n          (this._isAnimated = !!this.rd.effectsSequence.length);\n      }),\n      (RoundCornersModifier.prototype.processPath = function (t, e) {\n        var i,\n          r = shapePool.newElement();\n        r.c = t.c;\n        var s,\n          a,\n          n,\n          o,\n          h,\n          l,\n          p,\n          f,\n          m,\n          c,\n          d,\n          u,\n          y = t._length,\n          g = 0;\n        for (i = 0; i < y; i += 1)\n          (s = t.v[i]),\n            (n = t.o[i]),\n            (a = t.i[i]),\n            s[0] === n[0] && s[1] === n[1] && s[0] === a[0] && s[1] === a[1]\n              ? (0 !== i && i !== y - 1) || t.c\n                ? ((o = 0 === i ? t.v[y - 1] : t.v[i - 1]),\n                  (l = (h = Math.sqrt(\n                    Math.pow(s[0] - o[0], 2) + Math.pow(s[1] - o[1], 2)\n                  ))\n                    ? Math.min(h / 2, e) / h\n                    : 0),\n                  (p = d = s[0] + (o[0] - s[0]) * l),\n                  (f = u = s[1] - (s[1] - o[1]) * l),\n                  (m = p - (p - s[0]) * roundCorner),\n                  (c = f - (f - s[1]) * roundCorner),\n                  r.setTripleAt(p, f, m, c, d, u, g),\n                  (g += 1),\n                  (o = i === y - 1 ? t.v[0] : t.v[i + 1]),\n                  (l = (h = Math.sqrt(\n                    Math.pow(s[0] - o[0], 2) + Math.pow(s[1] - o[1], 2)\n                  ))\n                    ? Math.min(h / 2, e) / h\n                    : 0),\n                  (p = m = s[0] + (o[0] - s[0]) * l),\n                  (f = c = s[1] + (o[1] - s[1]) * l),\n                  (d = p - (p - s[0]) * roundCorner),\n                  (u = f - (f - s[1]) * roundCorner),\n                  r.setTripleAt(p, f, m, c, d, u, g),\n                  (g += 1))\n                : (r.setTripleAt(s[0], s[1], n[0], n[1], a[0], a[1], g),\n                  (g += 1))\n              : (r.setTripleAt(\n                  t.v[i][0],\n                  t.v[i][1],\n                  t.o[i][0],\n                  t.o[i][1],\n                  t.i[i][0],\n                  t.i[i][1],\n                  g\n                ),\n                (g += 1));\n        return r;\n      }),\n      (RoundCornersModifier.prototype.processShapes = function (t) {\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o = this.shapes.length,\n          h = this.rd.v;\n        if (0 !== h)\n          for (i = 0; i < o; i += 1) {\n            if (\n              ((n = (a = this.shapes[i]).localShapeCollection),\n              a.shape._mdf || this._mdf || t)\n            )\n              for (\n                n.releaseShapes(),\n                  a.shape._mdf = !0,\n                  e = a.shape.paths.shapes,\n                  s = a.shape.paths._length,\n                  r = 0;\n                r < s;\n                r += 1\n              )\n                n.addShape(this.processPath(e[r], h));\n            a.shape.paths = a.localShapeCollection;\n          }\n        this.dynamicProperties.length || (this._mdf = !1);\n      }),\n      (PolynomialBezier.prototype.point = function (t) {\n        return [\n          ((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0],\n          ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1],\n        ];\n      }),\n      (PolynomialBezier.prototype.derivative = function (t) {\n        return [\n          (3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0],\n          (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1],\n        ];\n      }),\n      (PolynomialBezier.prototype.tangentAngle = function (t) {\n        var e = this.derivative(t);\n        return Math.atan2(e[1], e[0]);\n      }),\n      (PolynomialBezier.prototype.normalAngle = function (t) {\n        var e = this.derivative(t);\n        return Math.atan2(e[0], e[1]);\n      }),\n      (PolynomialBezier.prototype.inflectionPoints = function () {\n        var t = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n        if (floatZero(t)) return [];\n        var e = (-0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1])) / t,\n          i =\n            e * e -\n            ((1 / 3) * (this.b[1] * this.c[0] - this.b[0] * this.c[1])) / t;\n        if (i < 0) return [];\n        var r = Math.sqrt(i);\n        return floatZero(r)\n          ? r > 0 && r < 1\n            ? [e]\n            : []\n          : [e - r, e + r].filter(function (t) {\n              return t > 0 && t < 1;\n            });\n      }),\n      (PolynomialBezier.prototype.split = function (t) {\n        if (t <= 0) return [singlePoint(this.points[0]), this];\n        if (t >= 1)\n          return [this, singlePoint(this.points[this.points.length - 1])];\n        var e = lerpPoint(this.points[0], this.points[1], t),\n          i = lerpPoint(this.points[1], this.points[2], t),\n          r = lerpPoint(this.points[2], this.points[3], t),\n          s = lerpPoint(e, i, t),\n          a = lerpPoint(i, r, t),\n          n = lerpPoint(s, a, t);\n        return [\n          new PolynomialBezier(this.points[0], e, s, n, !0),\n          new PolynomialBezier(n, a, r, this.points[3], !0),\n        ];\n      }),\n      (PolynomialBezier.prototype.bounds = function () {\n        return { x: extrema(this, 0), y: extrema(this, 1) };\n      }),\n      (PolynomialBezier.prototype.boundingBox = function () {\n        var t = this.bounds();\n        return {\n          left: t.x.min,\n          right: t.x.max,\n          top: t.y.min,\n          bottom: t.y.max,\n          width: t.x.max - t.x.min,\n          height: t.y.max - t.y.min,\n          cx: (t.x.max + t.x.min) / 2,\n          cy: (t.y.max + t.y.min) / 2,\n        };\n      }),\n      (PolynomialBezier.prototype.intersections = function (t, e, i) {\n        void 0 === e && (e = 2), void 0 === i && (i = 7);\n        var r = [];\n        return (\n          intersectsImpl(\n            intersectData(this, 0, 1),\n            intersectData(t, 0, 1),\n            0,\n            e,\n            r,\n            i\n          ),\n          r\n        );\n      }),\n      (PolynomialBezier.shapeSegment = function (t, e) {\n        var i = (e + 1) % t.length();\n        return new PolynomialBezier(t.v[e], t.o[e], t.i[i], t.v[i], !0);\n      }),\n      (PolynomialBezier.shapeSegmentInverted = function (t, e) {\n        var i = (e + 1) % t.length();\n        return new PolynomialBezier(t.v[i], t.i[i], t.o[e], t.v[e], !0);\n      }),\n      extendPrototype([ShapeModifier], ZigZagModifier),\n      (ZigZagModifier.prototype.initModifierProperties = function (t, e) {\n        (this.getValue = this.processKeys),\n          (this.amplitude = PropertyFactory.getProp(t, e.s, 0, null, this)),\n          (this.frequency = PropertyFactory.getProp(t, e.r, 0, null, this)),\n          (this.pointsType = PropertyFactory.getProp(t, e.pt, 0, null, this)),\n          (this._isAnimated =\n            0 !== this.amplitude.effectsSequence.length ||\n            0 !== this.frequency.effectsSequence.length ||\n            0 !== this.pointsType.effectsSequence.length);\n      }),\n      (ZigZagModifier.prototype.processPath = function (t, e, i, r) {\n        var s = t._length,\n          a = shapePool.newElement();\n        if (((a.c = t.c), t.c || (s -= 1), 0 === s)) return a;\n        var n = -1,\n          o = PolynomialBezier.shapeSegment(t, 0);\n        zigZagCorner(a, t, 0, e, i, r, n);\n        for (var h = 0; h < s; h += 1)\n          (n = zigZagSegment(a, o, e, i, r, -n)),\n            (o =\n              h !== s - 1 || t.c\n                ? PolynomialBezier.shapeSegment(t, (h + 1) % s)\n                : null),\n            zigZagCorner(a, t, h + 1, e, i, r, n);\n        return a;\n      }),\n      (ZigZagModifier.prototype.processShapes = function (t) {\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o = this.shapes.length,\n          h = this.amplitude.v,\n          l = Math.max(0, Math.round(this.frequency.v)),\n          p = this.pointsType.v;\n        if (0 !== h)\n          for (i = 0; i < o; i += 1) {\n            if (\n              ((n = (a = this.shapes[i]).localShapeCollection),\n              a.shape._mdf || this._mdf || t)\n            )\n              for (\n                n.releaseShapes(),\n                  a.shape._mdf = !0,\n                  e = a.shape.paths.shapes,\n                  s = a.shape.paths._length,\n                  r = 0;\n                r < s;\n                r += 1\n              )\n                n.addShape(this.processPath(e[r], h, l, p));\n            a.shape.paths = a.localShapeCollection;\n          }\n        this.dynamicProperties.length || (this._mdf = !1);\n      }),\n      extendPrototype([ShapeModifier], OffsetPathModifier),\n      (OffsetPathModifier.prototype.initModifierProperties = function (t, e) {\n        (this.getValue = this.processKeys),\n          (this.amount = PropertyFactory.getProp(t, e.a, 0, null, this)),\n          (this.miterLimit = PropertyFactory.getProp(t, e.ml, 0, null, this)),\n          (this.lineJoin = e.lj),\n          (this._isAnimated = 0 !== this.amount.effectsSequence.length);\n      }),\n      (OffsetPathModifier.prototype.processPath = function (t, e, i, r) {\n        var s = shapePool.newElement();\n        s.c = t.c;\n        var a,\n          n,\n          o,\n          h = t.length();\n        t.c || (h -= 1);\n        var l = [];\n        for (a = 0; a < h; a += 1)\n          (o = PolynomialBezier.shapeSegment(t, a)),\n            l.push(offsetSegmentSplit(o, e));\n        if (!t.c)\n          for (a = h - 1; a >= 0; a -= 1)\n            (o = PolynomialBezier.shapeSegmentInverted(t, a)),\n              l.push(offsetSegmentSplit(o, e));\n        l = pruneIntersections(l);\n        var p = null,\n          f = null;\n        for (a = 0; a < l.length; a += 1) {\n          var m = l[a];\n          for (\n            f && (p = joinLines(s, f, m[0], i, r)), f = m[m.length - 1], n = 0;\n            n < m.length;\n            n += 1\n          )\n            (o = m[n]),\n              p && pointEqual(o.points[0], p)\n                ? s.setXYAt(o.points[1][0], o.points[1][1], \"o\", s.length() - 1)\n                : s.setTripleAt(\n                    o.points[0][0],\n                    o.points[0][1],\n                    o.points[1][0],\n                    o.points[1][1],\n                    o.points[0][0],\n                    o.points[0][1],\n                    s.length()\n                  ),\n              s.setTripleAt(\n                o.points[3][0],\n                o.points[3][1],\n                o.points[3][0],\n                o.points[3][1],\n                o.points[2][0],\n                o.points[2][1],\n                s.length()\n              ),\n              (p = o.points[3]);\n        }\n        return l.length && joinLines(s, f, l[0][0], i, r), s;\n      }),\n      (OffsetPathModifier.prototype.processShapes = function (t) {\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o = this.shapes.length,\n          h = this.amount.v,\n          l = this.miterLimit.v,\n          p = this.lineJoin;\n        if (0 !== h)\n          for (i = 0; i < o; i += 1) {\n            if (\n              ((n = (a = this.shapes[i]).localShapeCollection),\n              a.shape._mdf || this._mdf || t)\n            )\n              for (\n                n.releaseShapes(),\n                  a.shape._mdf = !0,\n                  e = a.shape.paths.shapes,\n                  s = a.shape.paths._length,\n                  r = 0;\n                r < s;\n                r += 1\n              )\n                n.addShape(this.processPath(e[r], h, p, l));\n            a.shape.paths = a.localShapeCollection;\n          }\n        this.dynamicProperties.length || (this._mdf = !1);\n      });\n    var FontManager = (function () {\n      var t = { w: 0, size: 0, shapes: [], data: { shapes: [] } },\n        e = [];\n      e = e.concat([\n        2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369,\n        2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381,\n        2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403,\n      ]);\n      var i = 127988,\n        r = [\"d83cdffb\", \"d83cdffc\", \"d83cdffd\", \"d83cdffe\", \"d83cdfff\"];\n      function s(t, e) {\n        var i = createTag(\"span\");\n        i.setAttribute(\"aria-hidden\", !0), (i.style.fontFamily = e);\n        var r = createTag(\"span\");\n        (r.innerText = \"giItT1WQy@!-/#\"),\n          (i.style.position = \"absolute\"),\n          (i.style.left = \"-10000px\"),\n          (i.style.top = \"-10000px\"),\n          (i.style.fontSize = \"300px\"),\n          (i.style.fontVariant = \"normal\"),\n          (i.style.fontStyle = \"normal\"),\n          (i.style.fontWeight = \"normal\"),\n          (i.style.letterSpacing = \"0\"),\n          i.appendChild(r),\n          document.body.appendChild(i);\n        var s = r.offsetWidth;\n        return (\n          (r.style.fontFamily =\n            (function (t) {\n              var e,\n                i = t.split(\",\"),\n                r = i.length,\n                s = [];\n              for (e = 0; e < r; e += 1)\n                \"sans-serif\" !== i[e] && \"monospace\" !== i[e] && s.push(i[e]);\n              return s.join(\",\");\n            })(t) +\n            \", \" +\n            e),\n          { node: r, w: s, parent: i }\n        );\n      }\n      function a(t, e) {\n        var i,\n          r = document.body && e ? \"svg\" : \"canvas\",\n          s = getFontProperties(t);\n        if (\"svg\" === r) {\n          var a = createNS(\"text\");\n          (a.style.fontSize = \"100px\"),\n            a.setAttribute(\"font-family\", t.fFamily),\n            a.setAttribute(\"font-style\", s.style),\n            a.setAttribute(\"font-weight\", s.weight),\n            (a.textContent = \"1\"),\n            t.fClass\n              ? ((a.style.fontFamily = \"inherit\"),\n                a.setAttribute(\"class\", t.fClass))\n              : (a.style.fontFamily = t.fFamily),\n            e.appendChild(a),\n            (i = a);\n        } else {\n          var n = new OffscreenCanvas(500, 500).getContext(\"2d\");\n          (n.font = s.style + \" \" + s.weight + \" 100px \" + t.fFamily), (i = n);\n        }\n        return {\n          measureText: function (t) {\n            return \"svg\" === r\n              ? ((i.textContent = t), i.getComputedTextLength())\n              : i.measureText(t).width;\n          },\n        };\n      }\n      function n(t) {\n        var e = 0,\n          i = t.charCodeAt(0);\n        if (i >= 55296 && i <= 56319) {\n          var r = t.charCodeAt(1);\n          r >= 56320 &&\n            r <= 57343 &&\n            (e = 1024 * (i - 55296) + r - 56320 + 65536);\n        }\n        return e;\n      }\n      function o(t) {\n        var e = n(t);\n        return e >= 127462 && e <= 127487;\n      }\n      var h = function () {\n        (this.fonts = []),\n          (this.chars = null),\n          (this.typekitLoaded = 0),\n          (this.isLoaded = !1),\n          (this._warned = !1),\n          (this.initTime = Date.now()),\n          (this.setIsLoadedBinded = this.setIsLoaded.bind(this)),\n          (this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this));\n      };\n      (h.isModifier = function (t, e) {\n        var i = t.toString(16) + e.toString(16);\n        return -1 !== r.indexOf(i);\n      }),\n        (h.isZeroWidthJoiner = function (t) {\n          return 8205 === t;\n        }),\n        (h.isFlagEmoji = function (t) {\n          return o(t.substr(0, 2)) && o(t.substr(2, 2));\n        }),\n        (h.isRegionalCode = o),\n        (h.isCombinedCharacter = function (t) {\n          return -1 !== e.indexOf(t);\n        }),\n        (h.isRegionalFlag = function (t, e) {\n          var r = n(t.substr(e, 2));\n          if (r !== i) return !1;\n          var s = 0;\n          for (e += 2; s < 5; ) {\n            if ((r = n(t.substr(e, 2))) < 917601 || r > 917626) return !1;\n            (s += 1), (e += 2);\n          }\n          return 917631 === n(t.substr(e, 2));\n        }),\n        (h.isVariationSelector = function (t) {\n          return 65039 === t;\n        }),\n        (h.BLACK_FLAG_CODE_POINT = i);\n      var l = {\n        addChars: function (t) {\n          if (t) {\n            var e;\n            this.chars || (this.chars = []);\n            var i,\n              r,\n              s = t.length,\n              a = this.chars.length;\n            for (e = 0; e < s; e += 1) {\n              for (i = 0, r = !1; i < a; )\n                this.chars[i].style === t[e].style &&\n                  this.chars[i].fFamily === t[e].fFamily &&\n                  this.chars[i].ch === t[e].ch &&\n                  (r = !0),\n                  (i += 1);\n              r || (this.chars.push(t[e]), (a += 1));\n            }\n          }\n        },\n        addFonts: function (t, e) {\n          if (t) {\n            if (this.chars)\n              return (this.isLoaded = !0), void (this.fonts = t.list);\n            if (!document.body)\n              return (\n                (this.isLoaded = !0),\n                t.list.forEach(function (t) {\n                  (t.helper = a(t)), (t.cache = {});\n                }),\n                void (this.fonts = t.list)\n              );\n            var i,\n              r = t.list,\n              n = r.length,\n              o = n;\n            for (i = 0; i < n; i += 1) {\n              var h,\n                l,\n                p = !0;\n              if (\n                ((r[i].loaded = !1),\n                (r[i].monoCase = s(r[i].fFamily, \"monospace\")),\n                (r[i].sansCase = s(r[i].fFamily, \"sans-serif\")),\n                r[i].fPath)\n              ) {\n                if (\"p\" === r[i].fOrigin || 3 === r[i].origin) {\n                  if (\n                    ((h = document.querySelectorAll(\n                      'style[f-forigin=\"p\"][f-family=\"' +\n                        r[i].fFamily +\n                        '\"], style[f-origin=\"3\"][f-family=\"' +\n                        r[i].fFamily +\n                        '\"]'\n                    )).length > 0 && (p = !1),\n                    p)\n                  ) {\n                    var f = createTag(\"style\");\n                    f.setAttribute(\"f-forigin\", r[i].fOrigin),\n                      f.setAttribute(\"f-origin\", r[i].origin),\n                      f.setAttribute(\"f-family\", r[i].fFamily),\n                      (f.type = \"text/css\"),\n                      (f.innerText =\n                        \"@font-face {font-family: \" +\n                        r[i].fFamily +\n                        \"; font-style: normal; src: url('\" +\n                        r[i].fPath +\n                        \"');}\"),\n                      e.appendChild(f);\n                  }\n                } else if (\"g\" === r[i].fOrigin || 1 === r[i].origin) {\n                  for (\n                    h = document.querySelectorAll(\n                      'link[f-forigin=\"g\"], link[f-origin=\"1\"]'\n                    ),\n                      l = 0;\n                    l < h.length;\n                    l += 1\n                  )\n                    -1 !== h[l].href.indexOf(r[i].fPath) && (p = !1);\n                  if (p) {\n                    var m = createTag(\"link\");\n                    m.setAttribute(\"f-forigin\", r[i].fOrigin),\n                      m.setAttribute(\"f-origin\", r[i].origin),\n                      (m.type = \"text/css\"),\n                      (m.rel = \"stylesheet\"),\n                      (m.href = r[i].fPath),\n                      document.body.appendChild(m);\n                  }\n                } else if (\"t\" === r[i].fOrigin || 2 === r[i].origin) {\n                  for (\n                    h = document.querySelectorAll(\n                      'script[f-forigin=\"t\"], script[f-origin=\"2\"]'\n                    ),\n                      l = 0;\n                    l < h.length;\n                    l += 1\n                  )\n                    r[i].fPath === h[l].src && (p = !1);\n                  if (p) {\n                    var c = createTag(\"link\");\n                    c.setAttribute(\"f-forigin\", r[i].fOrigin),\n                      c.setAttribute(\"f-origin\", r[i].origin),\n                      c.setAttribute(\"rel\", \"stylesheet\"),\n                      c.setAttribute(\"href\", r[i].fPath),\n                      e.appendChild(c);\n                  }\n                }\n              } else (r[i].loaded = !0), (o -= 1);\n              (r[i].helper = a(r[i], e)),\n                (r[i].cache = {}),\n                this.fonts.push(r[i]);\n            }\n            0 === o\n              ? (this.isLoaded = !0)\n              : setTimeout(this.checkLoadedFonts.bind(this), 100);\n          } else this.isLoaded = !0;\n        },\n        getCharData: function (e, i, r) {\n          for (var s = 0, a = this.chars.length; s < a; ) {\n            if (\n              this.chars[s].ch === e &&\n              this.chars[s].style === i &&\n              this.chars[s].fFamily === r\n            )\n              return this.chars[s];\n            s += 1;\n          }\n          return (\n            ((\"string\" == typeof e && 13 !== e.charCodeAt(0)) || !e) &&\n              console &&\n              console.warn &&\n              !this._warned &&\n              ((this._warned = !0),\n              console.warn(\n                \"Missing character from exported characters list: \",\n                e,\n                i,\n                r\n              )),\n            t\n          );\n        },\n        getFontByName: function (t) {\n          for (var e = 0, i = this.fonts.length; e < i; ) {\n            if (this.fonts[e].fName === t) return this.fonts[e];\n            e += 1;\n          }\n          return this.fonts[0];\n        },\n        measureText: function (t, e, i) {\n          var r = this.getFontByName(e),\n            s = t;\n          if (!r.cache[s]) {\n            var a = r.helper;\n            if (\" \" === t) {\n              var n = a.measureText(\"|\" + t + \"|\"),\n                o = a.measureText(\"||\");\n              r.cache[s] = (n - o) / 100;\n            } else r.cache[s] = a.measureText(t) / 100;\n          }\n          return r.cache[s] * i;\n        },\n        checkLoadedFonts: function () {\n          var t,\n            e,\n            i,\n            r = this.fonts.length,\n            s = r;\n          for (t = 0; t < r; t += 1)\n            this.fonts[t].loaded\n              ? (s -= 1)\n              : \"n\" === this.fonts[t].fOrigin || 0 === this.fonts[t].origin\n              ? (this.fonts[t].loaded = !0)\n              : ((e = this.fonts[t].monoCase.node),\n                (i = this.fonts[t].monoCase.w),\n                e.offsetWidth !== i\n                  ? ((s -= 1), (this.fonts[t].loaded = !0))\n                  : ((e = this.fonts[t].sansCase.node),\n                    (i = this.fonts[t].sansCase.w),\n                    e.offsetWidth !== i &&\n                      ((s -= 1), (this.fonts[t].loaded = !0))),\n                this.fonts[t].loaded &&\n                  (this.fonts[t].sansCase.parent.parentNode.removeChild(\n                    this.fonts[t].sansCase.parent\n                  ),\n                  this.fonts[t].monoCase.parent.parentNode.removeChild(\n                    this.fonts[t].monoCase.parent\n                  )));\n          0 !== s && Date.now() - this.initTime < 5e3\n            ? setTimeout(this.checkLoadedFontsBinded, 20)\n            : setTimeout(this.setIsLoadedBinded, 10);\n        },\n        setIsLoaded: function () {\n          this.isLoaded = !0;\n        },\n      };\n      return (h.prototype = l), h;\n    })();\n    function SlotManager(t) {\n      this.animationData = t;\n    }\n    function slotFactory(t) {\n      return new SlotManager(t);\n    }\n    function RenderableElement() {}\n    (SlotManager.prototype.getProp = function (t) {\n      return this.animationData.slots && this.animationData.slots[t.sid]\n        ? Object.assign(t, this.animationData.slots[t.sid].p)\n        : t;\n    }),\n      (RenderableElement.prototype = {\n        initRenderable: function () {\n          (this.isInRange = !1),\n            (this.hidden = !1),\n            (this.isTransparent = !1),\n            (this.renderableComponents = []);\n        },\n        addRenderableComponent: function (t) {\n          -1 === this.renderableComponents.indexOf(t) &&\n            this.renderableComponents.push(t);\n        },\n        removeRenderableComponent: function (t) {\n          -1 !== this.renderableComponents.indexOf(t) &&\n            this.renderableComponents.splice(\n              this.renderableComponents.indexOf(t),\n              1\n            );\n        },\n        prepareRenderableFrame: function (t) {\n          this.checkLayerLimits(t);\n        },\n        checkTransparency: function () {\n          this.finalTransform.mProp.o.v <= 0\n            ? !this.isTransparent &&\n              this.globalData.renderConfig.hideOnTransparent &&\n              ((this.isTransparent = !0), this.hide())\n            : this.isTransparent && ((this.isTransparent = !1), this.show());\n        },\n        checkLayerLimits: function (t) {\n          this.data.ip - this.data.st <= t && this.data.op - this.data.st > t\n            ? !0 !== this.isInRange &&\n              ((this.globalData._mdf = !0),\n              (this._mdf = !0),\n              (this.isInRange = !0),\n              this.show())\n            : !1 !== this.isInRange &&\n              ((this.globalData._mdf = !0), (this.isInRange = !1), this.hide());\n        },\n        renderRenderable: function () {\n          var t,\n            e = this.renderableComponents.length;\n          for (t = 0; t < e; t += 1)\n            this.renderableComponents[t].renderFrame(this._isFirstFrame);\n        },\n        sourceRectAtTime: function () {\n          return { top: 0, left: 0, width: 100, height: 100 };\n        },\n        getLayerSize: function () {\n          return 5 === this.data.ty\n            ? { w: this.data.textData.width, h: this.data.textData.height }\n            : { w: this.data.width, h: this.data.height };\n        },\n      });\n    var getBlendMode =\n        ((blendModeEnums = {\n          0: \"source-over\",\n          1: \"multiply\",\n          2: \"screen\",\n          3: \"overlay\",\n          4: \"darken\",\n          5: \"lighten\",\n          6: \"color-dodge\",\n          7: \"color-burn\",\n          8: \"hard-light\",\n          9: \"soft-light\",\n          10: \"difference\",\n          11: \"exclusion\",\n          12: \"hue\",\n          13: \"saturation\",\n          14: \"color\",\n          15: \"luminosity\",\n        }),\n        function (t) {\n          return blendModeEnums[t] || \"\";\n        }),\n      blendModeEnums;\n    function SliderEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 0, 0, i);\n    }\n    function AngleEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 0, 0, i);\n    }\n    function ColorEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 1, 0, i);\n    }\n    function PointEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 1, 0, i);\n    }\n    function LayerIndexEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 0, 0, i);\n    }\n    function MaskIndexEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 0, 0, i);\n    }\n    function CheckboxEffect(t, e, i) {\n      this.p = PropertyFactory.getProp(e, t.v, 0, 0, i);\n    }\n    function NoValueEffect() {\n      this.p = {};\n    }\n    function EffectsManager(t, e) {\n      var i,\n        r = t.ef || [];\n      this.effectElements = [];\n      var s,\n        a = r.length;\n      for (i = 0; i < a; i += 1)\n        (s = new GroupEffect(r[i], e)), this.effectElements.push(s);\n    }\n    function GroupEffect(t, e) {\n      this.init(t, e);\n    }\n    function BaseElement() {}\n    function FrameElement() {}\n    function FootageElement(t, e, i) {\n      this.initFrame(),\n        this.initRenderable(),\n        (this.assetData = e.getAssetData(t.refId)),\n        (this.footageData = e.imageLoader.getAsset(this.assetData)),\n        this.initBaseData(t, e, i);\n    }\n    function AudioElement(t, e, i) {\n      this.initFrame(),\n        this.initRenderable(),\n        (this.assetData = e.getAssetData(t.refId)),\n        this.initBaseData(t, e, i),\n        (this._isPlaying = !1),\n        (this._canPlay = !1);\n      var r = this.globalData.getAssetsPath(this.assetData);\n      (this.audio = this.globalData.audioController.createAudio(r)),\n        (this._currentTime = 0),\n        this.globalData.audioController.addAudio(this),\n        (this._volumeMultiplier = 1),\n        (this._volume = 1),\n        (this._previousVolume = null),\n        (this.tm = t.tm\n          ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this)\n          : { _placeholder: !0 }),\n        (this.lv = PropertyFactory.getProp(\n          this,\n          t.au && t.au.lv ? t.au.lv : { k: [100] },\n          1,\n          0.01,\n          this\n        ));\n    }\n    function BaseRenderer() {}\n    extendPrototype([DynamicPropertyContainer], GroupEffect),\n      (GroupEffect.prototype.getValue =\n        GroupEffect.prototype.iterateDynamicProperties),\n      (GroupEffect.prototype.init = function (t, e) {\n        var i;\n        (this.data = t),\n          (this.effectElements = []),\n          this.initDynamicPropertyContainer(e);\n        var r,\n          s = this.data.ef.length,\n          a = this.data.ef;\n        for (i = 0; i < s; i += 1) {\n          switch (((r = null), a[i].ty)) {\n            case 0:\n              r = new SliderEffect(a[i], e, this);\n              break;\n            case 1:\n              r = new AngleEffect(a[i], e, this);\n              break;\n            case 2:\n              r = new ColorEffect(a[i], e, this);\n              break;\n            case 3:\n              r = new PointEffect(a[i], e, this);\n              break;\n            case 4:\n            case 7:\n              r = new CheckboxEffect(a[i], e, this);\n              break;\n            case 10:\n              r = new LayerIndexEffect(a[i], e, this);\n              break;\n            case 11:\n              r = new MaskIndexEffect(a[i], e, this);\n              break;\n            case 5:\n              r = new EffectsManager(a[i], e, this);\n              break;\n            default:\n              r = new NoValueEffect(a[i], e, this);\n          }\n          r && this.effectElements.push(r);\n        }\n      }),\n      (BaseElement.prototype = {\n        checkMasks: function () {\n          if (!this.data.hasMask) return !1;\n          for (var t = 0, e = this.data.masksProperties.length; t < e; ) {\n            if (\n              \"n\" !== this.data.masksProperties[t].mode &&\n              !1 !== this.data.masksProperties[t].cl\n            )\n              return !0;\n            t += 1;\n          }\n          return !1;\n        },\n        initExpressions: function () {\n          var t = getExpressionInterfaces();\n          if (t) {\n            var e = t(\"layer\"),\n              i = t(\"effects\"),\n              r = t(\"shape\"),\n              s = t(\"text\"),\n              a = t(\"comp\");\n            (this.layerInterface = e(this)),\n              this.data.hasMask &&\n                this.maskManager &&\n                this.layerInterface.registerMaskInterface(this.maskManager);\n            var n = i.createEffectsInterface(this, this.layerInterface);\n            this.layerInterface.registerEffectsInterface(n),\n              0 === this.data.ty || this.data.xt\n                ? (this.compInterface = a(this))\n                : 4 === this.data.ty\n                ? ((this.layerInterface.shapeInterface = r(\n                    this.shapesData,\n                    this.itemsData,\n                    this.layerInterface\n                  )),\n                  (this.layerInterface.content =\n                    this.layerInterface.shapeInterface))\n                : 5 === this.data.ty &&\n                  ((this.layerInterface.textInterface = s(this)),\n                  (this.layerInterface.text =\n                    this.layerInterface.textInterface));\n          }\n        },\n        setBlendMode: function () {\n          var t = getBlendMode(this.data.bm);\n          (this.baseElement || this.layerElement).style[\"mix-blend-mode\"] = t;\n        },\n        initBaseData: function (t, e, i) {\n          (this.globalData = e),\n            (this.comp = i),\n            (this.data = t),\n            (this.layerId = createElementID()),\n            this.data.sr || (this.data.sr = 1),\n            (this.effectsManager = new EffectsManager(\n              this.data,\n              this,\n              this.dynamicProperties\n            ));\n        },\n        getType: function () {\n          return this.type;\n        },\n        sourceRectAtTime: function () {},\n      }),\n      (FrameElement.prototype = {\n        initFrame: function () {\n          (this._isFirstFrame = !1),\n            (this.dynamicProperties = []),\n            (this._mdf = !1);\n        },\n        prepareProperties: function (t, e) {\n          var i,\n            r = this.dynamicProperties.length;\n          for (i = 0; i < r; i += 1)\n            (e ||\n              (this._isParent &&\n                \"transform\" === this.dynamicProperties[i].propType)) &&\n              (this.dynamicProperties[i].getValue(),\n              this.dynamicProperties[i]._mdf &&\n                ((this.globalData._mdf = !0), (this._mdf = !0)));\n        },\n        addDynamicProperty: function (t) {\n          -1 === this.dynamicProperties.indexOf(t) &&\n            this.dynamicProperties.push(t);\n        },\n      }),\n      (FootageElement.prototype.prepareFrame = function () {}),\n      extendPrototype(\n        [RenderableElement, BaseElement, FrameElement],\n        FootageElement\n      ),\n      (FootageElement.prototype.getBaseElement = function () {\n        return null;\n      }),\n      (FootageElement.prototype.renderFrame = function () {}),\n      (FootageElement.prototype.destroy = function () {}),\n      (FootageElement.prototype.initExpressions = function () {\n        var t = getExpressionInterfaces();\n        if (t) {\n          var e = t(\"footage\");\n          this.layerInterface = e(this);\n        }\n      }),\n      (FootageElement.prototype.getFootageData = function () {\n        return this.footageData;\n      }),\n      (AudioElement.prototype.prepareFrame = function (t) {\n        if (\n          (this.prepareRenderableFrame(t, !0),\n          this.prepareProperties(t, !0),\n          this.tm._placeholder)\n        )\n          this._currentTime = t / this.data.sr;\n        else {\n          var e = this.tm.v;\n          this._currentTime = e;\n        }\n        this._volume = this.lv.v[0];\n        var i = this._volume * this._volumeMultiplier;\n        this._previousVolume !== i &&\n          ((this._previousVolume = i), this.audio.volume(i));\n      }),\n      extendPrototype(\n        [RenderableElement, BaseElement, FrameElement],\n        AudioElement\n      ),\n      (AudioElement.prototype.renderFrame = function () {\n        this.isInRange &&\n          this._canPlay &&\n          (this._isPlaying\n            ? (!this.audio.playing() ||\n                Math.abs(\n                  this._currentTime / this.globalData.frameRate -\n                    this.audio.seek()\n                ) > 0.1) &&\n              this.audio.seek(this._currentTime / this.globalData.frameRate)\n            : (this.audio.play(),\n              this.audio.seek(this._currentTime / this.globalData.frameRate),\n              (this._isPlaying = !0)));\n      }),\n      (AudioElement.prototype.show = function () {}),\n      (AudioElement.prototype.hide = function () {\n        this.audio.pause(), (this._isPlaying = !1);\n      }),\n      (AudioElement.prototype.pause = function () {\n        this.audio.pause(), (this._isPlaying = !1), (this._canPlay = !1);\n      }),\n      (AudioElement.prototype.resume = function () {\n        this._canPlay = !0;\n      }),\n      (AudioElement.prototype.setRate = function (t) {\n        this.audio.rate(t);\n      }),\n      (AudioElement.prototype.volume = function (t) {\n        (this._volumeMultiplier = t),\n          (this._previousVolume = t * this._volume),\n          this.audio.volume(this._previousVolume);\n      }),\n      (AudioElement.prototype.getBaseElement = function () {\n        return null;\n      }),\n      (AudioElement.prototype.destroy = function () {}),\n      (AudioElement.prototype.sourceRectAtTime = function () {}),\n      (AudioElement.prototype.initExpressions = function () {}),\n      (BaseRenderer.prototype.checkLayers = function (t) {\n        var e,\n          i,\n          r = this.layers.length;\n        for (this.completeLayers = !0, e = r - 1; e >= 0; e -= 1)\n          this.elements[e] ||\n            ((i = this.layers[e]).ip - i.st <= t - this.layers[e].st &&\n              i.op - i.st > t - this.layers[e].st &&\n              this.buildItem(e)),\n            (this.completeLayers = !!this.elements[e] && this.completeLayers);\n        this.checkPendingElements();\n      }),\n      (BaseRenderer.prototype.createItem = function (t) {\n        switch (t.ty) {\n          case 2:\n            return this.createImage(t);\n          case 0:\n            return this.createComp(t);\n          case 1:\n            return this.createSolid(t);\n          case 3:\n          default:\n            return this.createNull(t);\n          case 4:\n            return this.createShape(t);\n          case 5:\n            return this.createText(t);\n          case 6:\n            return this.createAudio(t);\n          case 13:\n            return this.createCamera(t);\n          case 15:\n            return this.createFootage(t);\n        }\n      }),\n      (BaseRenderer.prototype.createCamera = function () {\n        throw new Error(\"You're using a 3d camera. Try the html renderer.\");\n      }),\n      (BaseRenderer.prototype.createAudio = function (t) {\n        return new AudioElement(t, this.globalData, this);\n      }),\n      (BaseRenderer.prototype.createFootage = function (t) {\n        return new FootageElement(t, this.globalData, this);\n      }),\n      (BaseRenderer.prototype.buildAllItems = function () {\n        var t,\n          e = this.layers.length;\n        for (t = 0; t < e; t += 1) this.buildItem(t);\n        this.checkPendingElements();\n      }),\n      (BaseRenderer.prototype.includeLayers = function (t) {\n        var e;\n        this.completeLayers = !1;\n        var i,\n          r = t.length,\n          s = this.layers.length;\n        for (e = 0; e < r; e += 1)\n          for (i = 0; i < s; ) {\n            if (this.layers[i].id === t[e].id) {\n              this.layers[i] = t[e];\n              break;\n            }\n            i += 1;\n          }\n      }),\n      (BaseRenderer.prototype.setProjectInterface = function (t) {\n        this.globalData.projectInterface = t;\n      }),\n      (BaseRenderer.prototype.initItems = function () {\n        this.globalData.progressiveLoad || this.buildAllItems();\n      }),\n      (BaseRenderer.prototype.buildElementParenting = function (t, e, i) {\n        for (\n          var r = this.elements, s = this.layers, a = 0, n = s.length;\n          a < n;\n\n        )\n          s[a].ind == e &&\n            (r[a] && !0 !== r[a]\n              ? (i.push(r[a]),\n                r[a].setAsParent(),\n                void 0 !== s[a].parent\n                  ? this.buildElementParenting(t, s[a].parent, i)\n                  : t.setHierarchy(i))\n              : (this.buildItem(a), this.addPendingElement(t))),\n            (a += 1);\n      }),\n      (BaseRenderer.prototype.addPendingElement = function (t) {\n        this.pendingElements.push(t);\n      }),\n      (BaseRenderer.prototype.searchExtraCompositions = function (t) {\n        var e,\n          i = t.length;\n        for (e = 0; e < i; e += 1)\n          if (t[e].xt) {\n            var r = this.createComp(t[e]);\n            r.initExpressions(),\n              this.globalData.projectInterface.registerComposition(r);\n          }\n      }),\n      (BaseRenderer.prototype.getElementById = function (t) {\n        var e,\n          i = this.elements.length;\n        for (e = 0; e < i; e += 1)\n          if (this.elements[e].data.ind === t) return this.elements[e];\n        return null;\n      }),\n      (BaseRenderer.prototype.getElementByPath = function (t) {\n        var e,\n          i = t.shift();\n        if (\"number\" == typeof i) e = this.elements[i];\n        else {\n          var r,\n            s = this.elements.length;\n          for (r = 0; r < s; r += 1)\n            if (this.elements[r].data.nm === i) {\n              e = this.elements[r];\n              break;\n            }\n        }\n        return 0 === t.length ? e : e.getElementByPath(t);\n      }),\n      (BaseRenderer.prototype.setupGlobalData = function (t, e) {\n        (this.globalData.fontManager = new FontManager()),\n          (this.globalData.slotManager = slotFactory(t)),\n          this.globalData.fontManager.addChars(t.chars),\n          this.globalData.fontManager.addFonts(t.fonts, e),\n          (this.globalData.getAssetData = this.animationItem.getAssetData.bind(\n            this.animationItem\n          )),\n          (this.globalData.getAssetsPath =\n            this.animationItem.getAssetsPath.bind(this.animationItem)),\n          (this.globalData.imageLoader = this.animationItem.imagePreloader),\n          (this.globalData.audioController =\n            this.animationItem.audioController),\n          (this.globalData.frameId = 0),\n          (this.globalData.frameRate = t.fr),\n          (this.globalData.nm = t.nm),\n          (this.globalData.compSize = { w: t.w, h: t.h });\n      });\n    var effectTypes = { TRANSFORM_EFFECT: \"transformEFfect\" };\n    function TransformElement() {}\n    function MaskElement(t, e, i) {\n      (this.data = t),\n        (this.element = e),\n        (this.globalData = i),\n        (this.storedData = []),\n        (this.masksProperties = this.data.masksProperties || []),\n        (this.maskElement = null);\n      var r,\n        s,\n        a = this.globalData.defs,\n        n = this.masksProperties ? this.masksProperties.length : 0;\n      (this.viewData = createSizedArray(n)), (this.solidPath = \"\");\n      var o,\n        h,\n        l,\n        p,\n        f,\n        m,\n        c = this.masksProperties,\n        d = 0,\n        u = [],\n        y = createElementID(),\n        g = \"clipPath\",\n        v = \"clip-path\";\n      for (r = 0; r < n; r += 1)\n        if (\n          (((\"a\" !== c[r].mode && \"n\" !== c[r].mode) ||\n            c[r].inv ||\n            100 !== c[r].o.k ||\n            c[r].o.x) &&\n            ((g = \"mask\"), (v = \"mask\")),\n          (\"s\" !== c[r].mode && \"i\" !== c[r].mode) || 0 !== d\n            ? (l = null)\n            : ((l = createNS(\"rect\")).setAttribute(\"fill\", \"#ffffff\"),\n              l.setAttribute(\"width\", this.element.comp.data.w || 0),\n              l.setAttribute(\"height\", this.element.comp.data.h || 0),\n              u.push(l)),\n          (s = createNS(\"path\")),\n          \"n\" === c[r].mode)\n        )\n          (this.viewData[r] = {\n            op: PropertyFactory.getProp(\n              this.element,\n              c[r].o,\n              0,\n              0.01,\n              this.element\n            ),\n            prop: ShapePropertyFactory.getShapeProp(this.element, c[r], 3),\n            elem: s,\n            lastPath: \"\",\n          }),\n            a.appendChild(s);\n        else {\n          var b;\n          if (\n            ((d += 1),\n            s.setAttribute(\"fill\", \"s\" === c[r].mode ? \"#000000\" : \"#ffffff\"),\n            s.setAttribute(\"clip-rule\", \"nonzero\"),\n            0 !== c[r].x.k\n              ? ((g = \"mask\"),\n                (v = \"mask\"),\n                (m = PropertyFactory.getProp(\n                  this.element,\n                  c[r].x,\n                  0,\n                  null,\n                  this.element\n                )),\n                (b = createElementID()),\n                (p = createNS(\"filter\")).setAttribute(\"id\", b),\n                (f = createNS(\"feMorphology\")).setAttribute(\n                  \"operator\",\n                  \"erode\"\n                ),\n                f.setAttribute(\"in\", \"SourceGraphic\"),\n                f.setAttribute(\"radius\", \"0\"),\n                p.appendChild(f),\n                a.appendChild(p),\n                s.setAttribute(\n                  \"stroke\",\n                  \"s\" === c[r].mode ? \"#000000\" : \"#ffffff\"\n                ))\n              : ((f = null), (m = null)),\n            (this.storedData[r] = {\n              elem: s,\n              x: m,\n              expan: f,\n              lastPath: \"\",\n              lastOperator: \"\",\n              filterId: b,\n              lastRadius: 0,\n            }),\n            \"i\" === c[r].mode)\n          ) {\n            h = u.length;\n            var x = createNS(\"g\");\n            for (o = 0; o < h; o += 1) x.appendChild(u[o]);\n            var P = createNS(\"mask\");\n            P.setAttribute(\"mask-type\", \"alpha\"),\n              P.setAttribute(\"id\", y + \"_\" + d),\n              P.appendChild(s),\n              a.appendChild(P),\n              x.setAttribute(\n                \"mask\",\n                \"url(\" + getLocationHref() + \"#\" + y + \"_\" + d + \")\"\n              ),\n              (u.length = 0),\n              u.push(x);\n          } else u.push(s);\n          c[r].inv &&\n            !this.solidPath &&\n            (this.solidPath = this.createLayerSolidPath()),\n            (this.viewData[r] = {\n              elem: s,\n              lastPath: \"\",\n              op: PropertyFactory.getProp(\n                this.element,\n                c[r].o,\n                0,\n                0.01,\n                this.element\n              ),\n              prop: ShapePropertyFactory.getShapeProp(this.element, c[r], 3),\n              invRect: l,\n            }),\n            this.viewData[r].prop.k ||\n              this.drawPath(c[r], this.viewData[r].prop.v, this.viewData[r]);\n        }\n      for (this.maskElement = createNS(g), n = u.length, r = 0; r < n; r += 1)\n        this.maskElement.appendChild(u[r]);\n      d > 0 &&\n        (this.maskElement.setAttribute(\"id\", y),\n        this.element.maskedElement.setAttribute(\n          v,\n          \"url(\" + getLocationHref() + \"#\" + y + \")\"\n        ),\n        a.appendChild(this.maskElement)),\n        this.viewData.length && this.element.addRenderableComponent(this);\n    }\n    (TransformElement.prototype = {\n      initTransform: function () {\n        var t = new Matrix();\n        (this.finalTransform = {\n          mProp: this.data.ks\n            ? TransformPropertyFactory.getTransformProperty(\n                this,\n                this.data.ks,\n                this\n              )\n            : { o: 0 },\n          _matMdf: !1,\n          _localMatMdf: !1,\n          _opMdf: !1,\n          mat: t,\n          localMat: t,\n          localOpacity: 1,\n        }),\n          this.data.ao && (this.finalTransform.mProp.autoOriented = !0),\n          this.data.ty;\n      },\n      renderTransform: function () {\n        if (\n          ((this.finalTransform._opMdf =\n            this.finalTransform.mProp.o._mdf || this._isFirstFrame),\n          (this.finalTransform._matMdf =\n            this.finalTransform.mProp._mdf || this._isFirstFrame),\n          this.hierarchy)\n        ) {\n          var t,\n            e = this.finalTransform.mat,\n            i = 0,\n            r = this.hierarchy.length;\n          if (!this.finalTransform._matMdf)\n            for (; i < r; ) {\n              if (this.hierarchy[i].finalTransform.mProp._mdf) {\n                this.finalTransform._matMdf = !0;\n                break;\n              }\n              i += 1;\n            }\n          if (this.finalTransform._matMdf)\n            for (\n              t = this.finalTransform.mProp.v.props, e.cloneFromProps(t), i = 0;\n              i < r;\n              i += 1\n            )\n              e.multiply(this.hierarchy[i].finalTransform.mProp.v);\n        }\n        this.finalTransform._matMdf &&\n          (this.finalTransform._localMatMdf = this.finalTransform._matMdf),\n          this.finalTransform._opMdf &&\n            (this.finalTransform.localOpacity = this.finalTransform.mProp.o.v);\n      },\n      renderLocalTransform: function () {\n        if (this.localTransforms) {\n          var t = 0,\n            e = this.localTransforms.length;\n          if (\n            ((this.finalTransform._localMatMdf = this.finalTransform._matMdf),\n            !this.finalTransform._localMatMdf || !this.finalTransform._opMdf)\n          )\n            for (; t < e; )\n              this.localTransforms[t]._mdf &&\n                (this.finalTransform._localMatMdf = !0),\n                this.localTransforms[t]._opMdf &&\n                  !this.finalTransform._opMdf &&\n                  ((this.finalTransform.localOpacity =\n                    this.finalTransform.mProp.o.v),\n                  (this.finalTransform._opMdf = !0)),\n                (t += 1);\n          if (this.finalTransform._localMatMdf) {\n            var i = this.finalTransform.localMat;\n            for (\n              this.localTransforms[0].matrix.clone(i), t = 1;\n              t < e;\n              t += 1\n            ) {\n              var r = this.localTransforms[t].matrix;\n              i.multiply(r);\n            }\n            i.multiply(this.finalTransform.mat);\n          }\n          if (this.finalTransform._opMdf) {\n            var s = this.finalTransform.localOpacity;\n            for (t = 0; t < e; t += 1)\n              s *= 0.01 * this.localTransforms[t].opacity;\n            this.finalTransform.localOpacity = s;\n          }\n        }\n      },\n      searchEffectTransforms: function () {\n        if (this.renderableEffectsManager) {\n          var t = this.renderableEffectsManager.getEffects(\n            effectTypes.TRANSFORM_EFFECT\n          );\n          if (t.length) {\n            (this.localTransforms = []),\n              (this.finalTransform.localMat = new Matrix());\n            var e = 0,\n              i = t.length;\n            for (e = 0; e < i; e += 1) this.localTransforms.push(t[e]);\n          }\n        }\n      },\n      globalToLocal: function (t) {\n        var e = [];\n        e.push(this.finalTransform);\n        for (var i, r = !0, s = this.comp; r; )\n          s.finalTransform\n            ? (s.data.hasMask && e.splice(0, 0, s.finalTransform), (s = s.comp))\n            : (r = !1);\n        var a,\n          n = e.length;\n        for (i = 0; i < n; i += 1)\n          (a = e[i].mat.applyToPointArray(0, 0, 0)),\n            (t = [t[0] - a[0], t[1] - a[1], 0]);\n        return t;\n      },\n      mHelper: new Matrix(),\n    }),\n      (MaskElement.prototype.getMaskProperty = function (t) {\n        return this.viewData[t].prop;\n      }),\n      (MaskElement.prototype.renderFrame = function (t) {\n        var e,\n          i = this.element.finalTransform.mat,\n          r = this.masksProperties.length;\n        for (e = 0; e < r; e += 1)\n          if (\n            ((this.viewData[e].prop._mdf || t) &&\n              this.drawPath(\n                this.masksProperties[e],\n                this.viewData[e].prop.v,\n                this.viewData[e]\n              ),\n            (this.viewData[e].op._mdf || t) &&\n              this.viewData[e].elem.setAttribute(\n                \"fill-opacity\",\n                this.viewData[e].op.v\n              ),\n            \"n\" !== this.masksProperties[e].mode &&\n              (this.viewData[e].invRect &&\n                (this.element.finalTransform.mProp._mdf || t) &&\n                this.viewData[e].invRect.setAttribute(\n                  \"transform\",\n                  i.getInverseMatrix().to2dCSS()\n                ),\n              this.storedData[e].x && (this.storedData[e].x._mdf || t)))\n          ) {\n            var s = this.storedData[e].expan;\n            this.storedData[e].x.v < 0\n              ? (\"erode\" !== this.storedData[e].lastOperator &&\n                  ((this.storedData[e].lastOperator = \"erode\"),\n                  this.storedData[e].elem.setAttribute(\n                    \"filter\",\n                    \"url(\" +\n                      getLocationHref() +\n                      \"#\" +\n                      this.storedData[e].filterId +\n                      \")\"\n                  )),\n                s.setAttribute(\"radius\", -this.storedData[e].x.v))\n              : (\"dilate\" !== this.storedData[e].lastOperator &&\n                  ((this.storedData[e].lastOperator = \"dilate\"),\n                  this.storedData[e].elem.setAttribute(\"filter\", null)),\n                this.storedData[e].elem.setAttribute(\n                  \"stroke-width\",\n                  2 * this.storedData[e].x.v\n                ));\n          }\n      }),\n      (MaskElement.prototype.getMaskelement = function () {\n        return this.maskElement;\n      }),\n      (MaskElement.prototype.createLayerSolidPath = function () {\n        var t = \"M0,0 \";\n        return (\n          (t += \" h\" + this.globalData.compSize.w),\n          (t += \" v\" + this.globalData.compSize.h),\n          (t += \" h-\" + this.globalData.compSize.w),\n          (t += \" v-\" + this.globalData.compSize.h + \" \")\n        );\n      }),\n      (MaskElement.prototype.drawPath = function (t, e, i) {\n        var r,\n          s,\n          a = \" M\" + e.v[0][0] + \",\" + e.v[0][1];\n        for (s = e._length, r = 1; r < s; r += 1)\n          a +=\n            \" C\" +\n            e.o[r - 1][0] +\n            \",\" +\n            e.o[r - 1][1] +\n            \" \" +\n            e.i[r][0] +\n            \",\" +\n            e.i[r][1] +\n            \" \" +\n            e.v[r][0] +\n            \",\" +\n            e.v[r][1];\n        if (\n          (e.c &&\n            s > 1 &&\n            (a +=\n              \" C\" +\n              e.o[r - 1][0] +\n              \",\" +\n              e.o[r - 1][1] +\n              \" \" +\n              e.i[0][0] +\n              \",\" +\n              e.i[0][1] +\n              \" \" +\n              e.v[0][0] +\n              \",\" +\n              e.v[0][1]),\n          i.lastPath !== a)\n        ) {\n          var n = \"\";\n          i.elem &&\n            (e.c && (n = t.inv ? this.solidPath + a : a),\n            i.elem.setAttribute(\"d\", n)),\n            (i.lastPath = a);\n        }\n      }),\n      (MaskElement.prototype.destroy = function () {\n        (this.element = null),\n          (this.globalData = null),\n          (this.maskElement = null),\n          (this.data = null),\n          (this.masksProperties = null);\n      });\n    var filtersFactory = (function () {\n        var t = {};\n        return (\n          (t.createFilter = function (t, e) {\n            var i = createNS(\"filter\");\n            i.setAttribute(\"id\", t),\n              !0 !== e &&\n                (i.setAttribute(\"filterUnits\", \"objectBoundingBox\"),\n                i.setAttribute(\"x\", \"0%\"),\n                i.setAttribute(\"y\", \"0%\"),\n                i.setAttribute(\"width\", \"100%\"),\n                i.setAttribute(\"height\", \"100%\"));\n            return i;\n          }),\n          (t.createAlphaToLuminanceFilter = function () {\n            var t = createNS(\"feColorMatrix\");\n            return (\n              t.setAttribute(\"type\", \"matrix\"),\n              t.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n              t.setAttribute(\n                \"values\",\n                \"0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1\"\n              ),\n              t\n            );\n          }),\n          t\n        );\n      })(),\n      featureSupport = (function () {\n        var t = {\n          maskType: !0,\n          svgLumaHidden: !0,\n          offscreenCanvas: \"undefined\" != typeof OffscreenCanvas,\n        };\n        return (\n          (/MSIE 10/i.test(navigator.userAgent) ||\n            /MSIE 9/i.test(navigator.userAgent) ||\n            /rv:11.0/i.test(navigator.userAgent) ||\n            /Edge\\/\\d./i.test(navigator.userAgent)) &&\n            (t.maskType = !1),\n          /firefox/i.test(navigator.userAgent) && (t.svgLumaHidden = !1),\n          t\n        );\n      })(),\n      registeredEffects$1 = {},\n      idPrefix = \"filter_result_\";\n    function SVGEffects(t) {\n      var e,\n        i,\n        r = \"SourceGraphic\",\n        s = t.data.ef ? t.data.ef.length : 0,\n        a = createElementID(),\n        n = filtersFactory.createFilter(a, !0),\n        o = 0;\n      for (this.filters = [], e = 0; e < s; e += 1) {\n        i = null;\n        var h = t.data.ef[e].ty;\n        if (registeredEffects$1[h])\n          (i = new (0, registeredEffects$1[h].effect)(\n            n,\n            t.effectsManager.effectElements[e],\n            t,\n            idPrefix + o,\n            r\n          )),\n            (r = idPrefix + o),\n            registeredEffects$1[h].countsAsEffect && (o += 1);\n        i && this.filters.push(i);\n      }\n      o &&\n        (t.globalData.defs.appendChild(n),\n        t.layerElement.setAttribute(\n          \"filter\",\n          \"url(\" + getLocationHref() + \"#\" + a + \")\"\n        )),\n        this.filters.length && t.addRenderableComponent(this);\n    }\n    function registerEffect$1(t, e, i) {\n      registeredEffects$1[t] = { effect: e, countsAsEffect: i };\n    }\n    function SVGBaseElement() {}\n    function HierarchyElement() {}\n    function RenderableDOMElement() {}\n    function IImageElement(t, e, i) {\n      (this.assetData = e.getAssetData(t.refId)),\n        this.assetData &&\n          this.assetData.sid &&\n          (this.assetData = e.slotManager.getProp(this.assetData)),\n        this.initElement(t, e, i),\n        (this.sourceRect = {\n          top: 0,\n          left: 0,\n          width: this.assetData.w,\n          height: this.assetData.h,\n        });\n    }\n    function ProcessedElement(t, e) {\n      (this.elem = t), (this.pos = e);\n    }\n    function IShapeElement() {}\n    (SVGEffects.prototype.renderFrame = function (t) {\n      var e,\n        i = this.filters.length;\n      for (e = 0; e < i; e += 1) this.filters[e].renderFrame(t);\n    }),\n      (SVGEffects.prototype.getEffects = function (t) {\n        var e,\n          i = this.filters.length,\n          r = [];\n        for (e = 0; e < i; e += 1)\n          this.filters[e].type === t && r.push(this.filters[e]);\n        return r;\n      }),\n      (SVGBaseElement.prototype = {\n        initRendererElement: function () {\n          this.layerElement = createNS(\"g\");\n        },\n        createContainerElements: function () {\n          (this.matteElement = createNS(\"g\")),\n            (this.transformedElement = this.layerElement),\n            (this.maskedElement = this.layerElement),\n            (this._sizeChanged = !1);\n          var t = null;\n          if (this.data.td) {\n            this.matteMasks = {};\n            var e = createNS(\"g\");\n            e.setAttribute(\"id\", this.layerId),\n              e.appendChild(this.layerElement),\n              (t = e),\n              this.globalData.defs.appendChild(e);\n          } else\n            this.data.tt\n              ? (this.matteElement.appendChild(this.layerElement),\n                (t = this.matteElement),\n                (this.baseElement = this.matteElement))\n              : (this.baseElement = this.layerElement);\n          if (\n            (this.data.ln && this.layerElement.setAttribute(\"id\", this.data.ln),\n            this.data.cl &&\n              this.layerElement.setAttribute(\"class\", this.data.cl),\n            0 === this.data.ty && !this.data.hd)\n          ) {\n            var i = createNS(\"clipPath\"),\n              r = createNS(\"path\");\n            r.setAttribute(\n              \"d\",\n              \"M0,0 L\" +\n                this.data.w +\n                \",0 L\" +\n                this.data.w +\n                \",\" +\n                this.data.h +\n                \" L0,\" +\n                this.data.h +\n                \"z\"\n            );\n            var s = createElementID();\n            if (\n              (i.setAttribute(\"id\", s),\n              i.appendChild(r),\n              this.globalData.defs.appendChild(i),\n              this.checkMasks())\n            ) {\n              var a = createNS(\"g\");\n              a.setAttribute(\n                \"clip-path\",\n                \"url(\" + getLocationHref() + \"#\" + s + \")\"\n              ),\n                a.appendChild(this.layerElement),\n                (this.transformedElement = a),\n                t\n                  ? t.appendChild(this.transformedElement)\n                  : (this.baseElement = this.transformedElement);\n            } else\n              this.layerElement.setAttribute(\n                \"clip-path\",\n                \"url(\" + getLocationHref() + \"#\" + s + \")\"\n              );\n          }\n          0 !== this.data.bm && this.setBlendMode();\n        },\n        renderElement: function () {\n          this.finalTransform._localMatMdf &&\n            this.transformedElement.setAttribute(\n              \"transform\",\n              this.finalTransform.localMat.to2dCSS()\n            ),\n            this.finalTransform._opMdf &&\n              this.transformedElement.setAttribute(\n                \"opacity\",\n                this.finalTransform.localOpacity\n              );\n        },\n        destroyBaseElement: function () {\n          (this.layerElement = null),\n            (this.matteElement = null),\n            this.maskManager.destroy();\n        },\n        getBaseElement: function () {\n          return this.data.hd ? null : this.baseElement;\n        },\n        createRenderableComponents: function () {\n          (this.maskManager = new MaskElement(\n            this.data,\n            this,\n            this.globalData\n          )),\n            (this.renderableEffectsManager = new SVGEffects(this)),\n            this.searchEffectTransforms();\n        },\n        getMatte: function (t) {\n          if (\n            (this.matteMasks || (this.matteMasks = {}), !this.matteMasks[t])\n          ) {\n            var e,\n              i,\n              r,\n              s,\n              a = this.layerId + \"_\" + t;\n            if (1 === t || 3 === t) {\n              var n = createNS(\"mask\");\n              n.setAttribute(\"id\", a),\n                n.setAttribute(\"mask-type\", 3 === t ? \"luminance\" : \"alpha\"),\n                (r = createNS(\"use\")).setAttributeNS(\n                  \"http://www.w3.org/1999/xlink\",\n                  \"href\",\n                  \"#\" + this.layerId\n                ),\n                n.appendChild(r),\n                this.globalData.defs.appendChild(n),\n                featureSupport.maskType ||\n                  1 !== t ||\n                  (n.setAttribute(\"mask-type\", \"luminance\"),\n                  (e = createElementID()),\n                  (i = filtersFactory.createFilter(e)),\n                  this.globalData.defs.appendChild(i),\n                  i.appendChild(filtersFactory.createAlphaToLuminanceFilter()),\n                  (s = createNS(\"g\")).appendChild(r),\n                  n.appendChild(s),\n                  s.setAttribute(\n                    \"filter\",\n                    \"url(\" + getLocationHref() + \"#\" + e + \")\"\n                  ));\n            } else if (2 === t) {\n              var o = createNS(\"mask\");\n              o.setAttribute(\"id\", a), o.setAttribute(\"mask-type\", \"alpha\");\n              var h = createNS(\"g\");\n              o.appendChild(h),\n                (e = createElementID()),\n                (i = filtersFactory.createFilter(e));\n              var l = createNS(\"feComponentTransfer\");\n              l.setAttribute(\"in\", \"SourceGraphic\"), i.appendChild(l);\n              var p = createNS(\"feFuncA\");\n              p.setAttribute(\"type\", \"table\"),\n                p.setAttribute(\"tableValues\", \"1.0 0.0\"),\n                l.appendChild(p),\n                this.globalData.defs.appendChild(i);\n              var f = createNS(\"rect\");\n              f.setAttribute(\"width\", this.comp.data.w),\n                f.setAttribute(\"height\", this.comp.data.h),\n                f.setAttribute(\"x\", \"0\"),\n                f.setAttribute(\"y\", \"0\"),\n                f.setAttribute(\"fill\", \"#ffffff\"),\n                f.setAttribute(\"opacity\", \"0\"),\n                h.setAttribute(\n                  \"filter\",\n                  \"url(\" + getLocationHref() + \"#\" + e + \")\"\n                ),\n                h.appendChild(f),\n                (r = createNS(\"use\")).setAttributeNS(\n                  \"http://www.w3.org/1999/xlink\",\n                  \"href\",\n                  \"#\" + this.layerId\n                ),\n                h.appendChild(r),\n                featureSupport.maskType ||\n                  (o.setAttribute(\"mask-type\", \"luminance\"),\n                  i.appendChild(filtersFactory.createAlphaToLuminanceFilter()),\n                  (s = createNS(\"g\")),\n                  h.appendChild(f),\n                  s.appendChild(this.layerElement),\n                  h.appendChild(s)),\n                this.globalData.defs.appendChild(o);\n            }\n            this.matteMasks[t] = a;\n          }\n          return this.matteMasks[t];\n        },\n        setMatte: function (t) {\n          this.matteElement &&\n            this.matteElement.setAttribute(\n              \"mask\",\n              \"url(\" + getLocationHref() + \"#\" + t + \")\"\n            );\n        },\n      }),\n      (HierarchyElement.prototype = {\n        initHierarchy: function () {\n          (this.hierarchy = []), (this._isParent = !1), this.checkParenting();\n        },\n        setHierarchy: function (t) {\n          this.hierarchy = t;\n        },\n        setAsParent: function () {\n          this._isParent = !0;\n        },\n        checkParenting: function () {\n          void 0 !== this.data.parent &&\n            this.comp.buildElementParenting(this, this.data.parent, []);\n        },\n      }),\n      extendPrototype(\n        [\n          RenderableElement,\n          createProxyFunction({\n            initElement: function (t, e, i) {\n              this.initFrame(),\n                this.initBaseData(t, e, i),\n                this.initTransform(t, e, i),\n                this.initHierarchy(),\n                this.initRenderable(),\n                this.initRendererElement(),\n                this.createContainerElements(),\n                this.createRenderableComponents(),\n                this.createContent(),\n                this.hide();\n            },\n            hide: function () {\n              this.hidden ||\n                (this.isInRange && !this.isTransparent) ||\n                (((this.baseElement || this.layerElement).style.display =\n                  \"none\"),\n                (this.hidden = !0));\n            },\n            show: function () {\n              this.isInRange &&\n                !this.isTransparent &&\n                (this.data.hd ||\n                  ((this.baseElement || this.layerElement).style.display =\n                    \"block\"),\n                (this.hidden = !1),\n                (this._isFirstFrame = !0));\n            },\n            renderFrame: function () {\n              this.data.hd ||\n                this.hidden ||\n                (this.renderTransform(),\n                this.renderRenderable(),\n                this.renderLocalTransform(),\n                this.renderElement(),\n                this.renderInnerContent(),\n                this._isFirstFrame && (this._isFirstFrame = !1));\n            },\n            renderInnerContent: function () {},\n            prepareFrame: function (t) {\n              (this._mdf = !1),\n                this.prepareRenderableFrame(t),\n                this.prepareProperties(t, this.isInRange),\n                this.checkTransparency();\n            },\n            destroy: function () {\n              (this.innerElem = null), this.destroyBaseElement();\n            },\n          }),\n        ],\n        RenderableDOMElement\n      ),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          SVGBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableDOMElement,\n        ],\n        IImageElement\n      ),\n      (IImageElement.prototype.createContent = function () {\n        var t = this.globalData.getAssetsPath(this.assetData);\n        (this.innerElem = createNS(\"image\")),\n          this.innerElem.setAttribute(\"width\", this.assetData.w + \"px\"),\n          this.innerElem.setAttribute(\"height\", this.assetData.h + \"px\"),\n          this.innerElem.setAttribute(\n            \"preserveAspectRatio\",\n            this.assetData.pr ||\n              this.globalData.renderConfig.imagePreserveAspectRatio\n          ),\n          this.innerElem.setAttributeNS(\n            \"http://www.w3.org/1999/xlink\",\n            \"href\",\n            t\n          ),\n          this.layerElement.appendChild(this.innerElem);\n      }),\n      (IImageElement.prototype.sourceRectAtTime = function () {\n        return this.sourceRect;\n      }),\n      (IShapeElement.prototype = {\n        addShapeToModifiers: function (t) {\n          var e,\n            i = this.shapeModifiers.length;\n          for (e = 0; e < i; e += 1) this.shapeModifiers[e].addShape(t);\n        },\n        isShapeInAnimatedModifiers: function (t) {\n          for (var e = this.shapeModifiers.length; 0 < e; )\n            if (this.shapeModifiers[0].isAnimatedWithShape(t)) return !0;\n          return !1;\n        },\n        renderModifiers: function () {\n          if (this.shapeModifiers.length) {\n            var t,\n              e = this.shapes.length;\n            for (t = 0; t < e; t += 1) this.shapes[t].sh.reset();\n            for (\n              t = (e = this.shapeModifiers.length) - 1;\n              t >= 0 &&\n              !this.shapeModifiers[t].processShapes(this._isFirstFrame);\n              t -= 1\n            );\n          }\n        },\n        searchProcessedElement: function (t) {\n          for (var e = this.processedElements, i = 0, r = e.length; i < r; ) {\n            if (e[i].elem === t) return e[i].pos;\n            i += 1;\n          }\n          return 0;\n        },\n        addProcessedElement: function (t, e) {\n          for (var i = this.processedElements, r = i.length; r; )\n            if (i[(r -= 1)].elem === t) return void (i[r].pos = e);\n          i.push(new ProcessedElement(t, e));\n        },\n        prepareFrame: function (t) {\n          this.prepareRenderableFrame(t),\n            this.prepareProperties(t, this.isInRange);\n        },\n      });\n    var lineCapEnum = { 1: \"butt\", 2: \"round\", 3: \"square\" },\n      lineJoinEnum = { 1: \"miter\", 2: \"round\", 3: \"bevel\" };\n    function SVGShapeData(t, e, i) {\n      (this.caches = []),\n        (this.styles = []),\n        (this.transformers = t),\n        (this.lStr = \"\"),\n        (this.sh = i),\n        (this.lvl = e),\n        (this._isAnimated = !!i.k);\n      for (var r = 0, s = t.length; r < s; ) {\n        if (t[r].mProps.dynamicProperties.length) {\n          this._isAnimated = !0;\n          break;\n        }\n        r += 1;\n      }\n    }\n    function SVGStyleData(t, e) {\n      (this.data = t),\n        (this.type = t.ty),\n        (this.d = \"\"),\n        (this.lvl = e),\n        (this._mdf = !1),\n        (this.closed = !0 === t.hd),\n        (this.pElem = createNS(\"path\")),\n        (this.msElem = null);\n    }\n    function DashProperty(t, e, i, r) {\n      var s;\n      (this.elem = t),\n        (this.frameId = -1),\n        (this.dataProps = createSizedArray(e.length)),\n        (this.renderer = i),\n        (this.k = !1),\n        (this.dashStr = \"\"),\n        (this.dashArray = createTypedArray(\n          \"float32\",\n          e.length ? e.length - 1 : 0\n        )),\n        (this.dashoffset = createTypedArray(\"float32\", 1)),\n        this.initDynamicPropertyContainer(r);\n      var a,\n        n = e.length || 0;\n      for (s = 0; s < n; s += 1)\n        (a = PropertyFactory.getProp(t, e[s].v, 0, 0, this)),\n          (this.k = a.k || this.k),\n          (this.dataProps[s] = { n: e[s].n, p: a });\n      this.k || this.getValue(!0), (this._isAnimated = this.k);\n    }\n    function SVGStrokeStyleData(t, e, i) {\n      this.initDynamicPropertyContainer(t),\n        (this.getValue = this.iterateDynamicProperties),\n        (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)),\n        (this.w = PropertyFactory.getProp(t, e.w, 0, null, this)),\n        (this.d = new DashProperty(t, e.d || {}, \"svg\", this)),\n        (this.c = PropertyFactory.getProp(t, e.c, 1, 255, this)),\n        (this.style = i),\n        (this._isAnimated = !!this._isAnimated);\n    }\n    function SVGFillStyleData(t, e, i) {\n      this.initDynamicPropertyContainer(t),\n        (this.getValue = this.iterateDynamicProperties),\n        (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)),\n        (this.c = PropertyFactory.getProp(t, e.c, 1, 255, this)),\n        (this.style = i);\n    }\n    function SVGNoStyleData(t, e, i) {\n      this.initDynamicPropertyContainer(t),\n        (this.getValue = this.iterateDynamicProperties),\n        (this.style = i);\n    }\n    function GradientProperty(t, e, i) {\n      (this.data = e), (this.c = createTypedArray(\"uint8c\", 4 * e.p));\n      var r = e.k.k[0].s ? e.k.k[0].s.length - 4 * e.p : e.k.k.length - 4 * e.p;\n      (this.o = createTypedArray(\"float32\", r)),\n        (this._cmdf = !1),\n        (this._omdf = !1),\n        (this._collapsable = this.checkCollapsable()),\n        (this._hasOpacity = r),\n        this.initDynamicPropertyContainer(i),\n        (this.prop = PropertyFactory.getProp(t, e.k, 1, null, this)),\n        (this.k = this.prop.k),\n        this.getValue(!0);\n    }\n    function SVGGradientFillStyleData(t, e, i) {\n      this.initDynamicPropertyContainer(t),\n        (this.getValue = this.iterateDynamicProperties),\n        this.initGradientData(t, e, i);\n    }\n    function SVGGradientStrokeStyleData(t, e, i) {\n      this.initDynamicPropertyContainer(t),\n        (this.getValue = this.iterateDynamicProperties),\n        (this.w = PropertyFactory.getProp(t, e.w, 0, null, this)),\n        (this.d = new DashProperty(t, e.d || {}, \"svg\", this)),\n        this.initGradientData(t, e, i),\n        (this._isAnimated = !!this._isAnimated);\n    }\n    function ShapeGroupData() {\n      (this.it = []), (this.prevViewData = []), (this.gr = createNS(\"g\"));\n    }\n    function SVGTransformData(t, e, i) {\n      (this.transform = { mProps: t, op: e, container: i }),\n        (this.elements = []),\n        (this._isAnimated =\n          this.transform.mProps.dynamicProperties.length ||\n          this.transform.op.effectsSequence.length);\n    }\n    (SVGShapeData.prototype.setAsAnimated = function () {\n      this._isAnimated = !0;\n    }),\n      (SVGStyleData.prototype.reset = function () {\n        (this.d = \"\"), (this._mdf = !1);\n      }),\n      (DashProperty.prototype.getValue = function (t) {\n        if (\n          (this.elem.globalData.frameId !== this.frameId || t) &&\n          ((this.frameId = this.elem.globalData.frameId),\n          this.iterateDynamicProperties(),\n          (this._mdf = this._mdf || t),\n          this._mdf)\n        ) {\n          var e = 0,\n            i = this.dataProps.length;\n          for (\n            \"svg\" === this.renderer && (this.dashStr = \"\"), e = 0;\n            e < i;\n            e += 1\n          )\n            \"o\" !== this.dataProps[e].n\n              ? \"svg\" === this.renderer\n                ? (this.dashStr += \" \" + this.dataProps[e].p.v)\n                : (this.dashArray[e] = this.dataProps[e].p.v)\n              : (this.dashoffset[0] = this.dataProps[e].p.v);\n        }\n      }),\n      extendPrototype([DynamicPropertyContainer], DashProperty),\n      extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData),\n      extendPrototype([DynamicPropertyContainer], SVGFillStyleData),\n      extendPrototype([DynamicPropertyContainer], SVGNoStyleData),\n      (GradientProperty.prototype.comparePoints = function (t, e) {\n        for (var i = 0, r = this.o.length / 2; i < r; ) {\n          if (Math.abs(t[4 * i] - t[4 * e + 2 * i]) > 0.01) return !1;\n          i += 1;\n        }\n        return !0;\n      }),\n      (GradientProperty.prototype.checkCollapsable = function () {\n        if (this.o.length / 2 != this.c.length / 4) return !1;\n        if (this.data.k.k[0].s)\n          for (var t = 0, e = this.data.k.k.length; t < e; ) {\n            if (!this.comparePoints(this.data.k.k[t].s, this.data.p)) return !1;\n            t += 1;\n          }\n        else if (!this.comparePoints(this.data.k.k, this.data.p)) return !1;\n        return !0;\n      }),\n      (GradientProperty.prototype.getValue = function (t) {\n        if (\n          (this.prop.getValue(),\n          (this._mdf = !1),\n          (this._cmdf = !1),\n          (this._omdf = !1),\n          this.prop._mdf || t)\n        ) {\n          var e,\n            i,\n            r,\n            s = 4 * this.data.p;\n          for (e = 0; e < s; e += 1)\n            (i = e % 4 == 0 ? 100 : 255),\n              (r = Math.round(this.prop.v[e] * i)),\n              this.c[e] !== r && ((this.c[e] = r), (this._cmdf = !t));\n          if (this.o.length)\n            for (s = this.prop.v.length, e = 4 * this.data.p; e < s; e += 1)\n              (i = e % 2 == 0 ? 100 : 1),\n                (r =\n                  e % 2 == 0\n                    ? Math.round(100 * this.prop.v[e])\n                    : this.prop.v[e]),\n                this.o[e - 4 * this.data.p] !== r &&\n                  ((this.o[e - 4 * this.data.p] = r), (this._omdf = !t));\n          this._mdf = !t;\n        }\n      }),\n      extendPrototype([DynamicPropertyContainer], GradientProperty),\n      (SVGGradientFillStyleData.prototype.initGradientData = function (\n        t,\n        e,\n        i\n      ) {\n        (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)),\n          (this.s = PropertyFactory.getProp(t, e.s, 1, null, this)),\n          (this.e = PropertyFactory.getProp(t, e.e, 1, null, this)),\n          (this.h = PropertyFactory.getProp(t, e.h || { k: 0 }, 0, 0.01, this)),\n          (this.a = PropertyFactory.getProp(\n            t,\n            e.a || { k: 0 },\n            0,\n            degToRads,\n            this\n          )),\n          (this.g = new GradientProperty(t, e.g, this)),\n          (this.style = i),\n          (this.stops = []),\n          this.setGradientData(i.pElem, e),\n          this.setGradientOpacity(e, i),\n          (this._isAnimated = !!this._isAnimated);\n      }),\n      (SVGGradientFillStyleData.prototype.setGradientData = function (t, e) {\n        var i = createElementID(),\n          r = createNS(1 === e.t ? \"linearGradient\" : \"radialGradient\");\n        r.setAttribute(\"id\", i),\n          r.setAttribute(\"spreadMethod\", \"pad\"),\n          r.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n        var s,\n          a,\n          n,\n          o = [];\n        for (n = 4 * e.g.p, a = 0; a < n; a += 4)\n          (s = createNS(\"stop\")), r.appendChild(s), o.push(s);\n        t.setAttribute(\n          \"gf\" === e.ty ? \"fill\" : \"stroke\",\n          \"url(\" + getLocationHref() + \"#\" + i + \")\"\n        ),\n          (this.gf = r),\n          (this.cst = o);\n      }),\n      (SVGGradientFillStyleData.prototype.setGradientOpacity = function (t, e) {\n        if (this.g._hasOpacity && !this.g._collapsable) {\n          var i,\n            r,\n            s,\n            a = createNS(\"mask\"),\n            n = createNS(\"path\");\n          a.appendChild(n);\n          var o = createElementID(),\n            h = createElementID();\n          a.setAttribute(\"id\", h);\n          var l = createNS(1 === t.t ? \"linearGradient\" : \"radialGradient\");\n          l.setAttribute(\"id\", o),\n            l.setAttribute(\"spreadMethod\", \"pad\"),\n            l.setAttribute(\"gradientUnits\", \"userSpaceOnUse\"),\n            (s = t.g.k.k[0].s ? t.g.k.k[0].s.length : t.g.k.k.length);\n          var p = this.stops;\n          for (r = 4 * t.g.p; r < s; r += 2)\n            (i = createNS(\"stop\")).setAttribute(\n              \"stop-color\",\n              \"rgb(255,255,255)\"\n            ),\n              l.appendChild(i),\n              p.push(i);\n          n.setAttribute(\n            \"gf\" === t.ty ? \"fill\" : \"stroke\",\n            \"url(\" + getLocationHref() + \"#\" + o + \")\"\n          ),\n            \"gs\" === t.ty &&\n              (n.setAttribute(\"stroke-linecap\", lineCapEnum[t.lc || 2]),\n              n.setAttribute(\"stroke-linejoin\", lineJoinEnum[t.lj || 2]),\n              1 === t.lj && n.setAttribute(\"stroke-miterlimit\", t.ml)),\n            (this.of = l),\n            (this.ms = a),\n            (this.ost = p),\n            (this.maskId = h),\n            (e.msElem = n);\n        }\n      }),\n      extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData),\n      extendPrototype(\n        [SVGGradientFillStyleData, DynamicPropertyContainer],\n        SVGGradientStrokeStyleData\n      );\n    var buildShapeString = function (t, e, i, r) {\n        if (0 === e) return \"\";\n        var s,\n          a = t.o,\n          n = t.i,\n          o = t.v,\n          h = \" M\" + r.applyToPointStringified(o[0][0], o[0][1]);\n        for (s = 1; s < e; s += 1)\n          h +=\n            \" C\" +\n            r.applyToPointStringified(a[s - 1][0], a[s - 1][1]) +\n            \" \" +\n            r.applyToPointStringified(n[s][0], n[s][1]) +\n            \" \" +\n            r.applyToPointStringified(o[s][0], o[s][1]);\n        return (\n          i &&\n            e &&\n            ((h +=\n              \" C\" +\n              r.applyToPointStringified(a[s - 1][0], a[s - 1][1]) +\n              \" \" +\n              r.applyToPointStringified(n[0][0], n[0][1]) +\n              \" \" +\n              r.applyToPointStringified(o[0][0], o[0][1])),\n            (h += \"z\")),\n          h\n        );\n      },\n      SVGElementsRenderer = (function () {\n        var t = new Matrix(),\n          e = new Matrix();\n        function i(t, e, i) {\n          (i || e.transform.op._mdf) &&\n            e.transform.container.setAttribute(\"opacity\", e.transform.op.v),\n            (i || e.transform.mProps._mdf) &&\n              e.transform.container.setAttribute(\n                \"transform\",\n                e.transform.mProps.v.to2dCSS()\n              );\n        }\n        function r() {}\n        function s(i, r, s) {\n          var a,\n            n,\n            o,\n            h,\n            l,\n            p,\n            f,\n            m,\n            c,\n            d,\n            u = r.styles.length,\n            y = r.lvl;\n          for (p = 0; p < u; p += 1) {\n            if (((h = r.sh._mdf || s), r.styles[p].lvl < y)) {\n              for (\n                m = e.reset(),\n                  c = y - r.styles[p].lvl,\n                  d = r.transformers.length - 1;\n                !h && c > 0;\n\n              )\n                (h = r.transformers[d].mProps._mdf || h), (c -= 1), (d -= 1);\n              if (h)\n                for (\n                  c = y - r.styles[p].lvl, d = r.transformers.length - 1;\n                  c > 0;\n\n                )\n                  m.multiply(r.transformers[d].mProps.v), (c -= 1), (d -= 1);\n            } else m = t;\n            if (((n = (f = r.sh.paths)._length), h)) {\n              for (o = \"\", a = 0; a < n; a += 1)\n                (l = f.shapes[a]) &&\n                  l._length &&\n                  (o += buildShapeString(l, l._length, l.c, m));\n              r.caches[p] = o;\n            } else o = r.caches[p];\n            (r.styles[p].d += !0 === i.hd ? \"\" : o),\n              (r.styles[p]._mdf = h || r.styles[p]._mdf);\n          }\n        }\n        function a(t, e, i) {\n          var r = e.style;\n          (e.c._mdf || i) &&\n            r.pElem.setAttribute(\n              \"fill\",\n              \"rgb(\" +\n                bmFloor(e.c.v[0]) +\n                \",\" +\n                bmFloor(e.c.v[1]) +\n                \",\" +\n                bmFloor(e.c.v[2]) +\n                \")\"\n            ),\n            (e.o._mdf || i) && r.pElem.setAttribute(\"fill-opacity\", e.o.v);\n        }\n        function n(t, e, i) {\n          o(t, e, i), h(t, e, i);\n        }\n        function o(t, e, i) {\n          var r,\n            s,\n            a,\n            n,\n            o,\n            h = e.gf,\n            l = e.g._hasOpacity,\n            p = e.s.v,\n            f = e.e.v;\n          if (e.o._mdf || i) {\n            var m = \"gf\" === t.ty ? \"fill-opacity\" : \"stroke-opacity\";\n            e.style.pElem.setAttribute(m, e.o.v);\n          }\n          if (e.s._mdf || i) {\n            var c = 1 === t.t ? \"x1\" : \"cx\",\n              d = \"x1\" === c ? \"y1\" : \"cy\";\n            h.setAttribute(c, p[0]),\n              h.setAttribute(d, p[1]),\n              l &&\n                !e.g._collapsable &&\n                (e.of.setAttribute(c, p[0]), e.of.setAttribute(d, p[1]));\n          }\n          if (e.g._cmdf || i) {\n            r = e.cst;\n            var u = e.g.c;\n            for (a = r.length, s = 0; s < a; s += 1)\n              (n = r[s]).setAttribute(\"offset\", u[4 * s] + \"%\"),\n                n.setAttribute(\n                  \"stop-color\",\n                  \"rgb(\" +\n                    u[4 * s + 1] +\n                    \",\" +\n                    u[4 * s + 2] +\n                    \",\" +\n                    u[4 * s + 3] +\n                    \")\"\n                );\n          }\n          if (l && (e.g._omdf || i)) {\n            var y = e.g.o;\n            for (\n              a = (r = e.g._collapsable ? e.cst : e.ost).length, s = 0;\n              s < a;\n              s += 1\n            )\n              (n = r[s]),\n                e.g._collapsable || n.setAttribute(\"offset\", y[2 * s] + \"%\"),\n                n.setAttribute(\"stop-opacity\", y[2 * s + 1]);\n          }\n          if (1 === t.t)\n            (e.e._mdf || i) &&\n              (h.setAttribute(\"x2\", f[0]),\n              h.setAttribute(\"y2\", f[1]),\n              l &&\n                !e.g._collapsable &&\n                (e.of.setAttribute(\"x2\", f[0]), e.of.setAttribute(\"y2\", f[1])));\n          else if (\n            ((e.s._mdf || e.e._mdf || i) &&\n              ((o = Math.sqrt(\n                Math.pow(p[0] - f[0], 2) + Math.pow(p[1] - f[1], 2)\n              )),\n              h.setAttribute(\"r\", o),\n              l && !e.g._collapsable && e.of.setAttribute(\"r\", o)),\n            e.e._mdf || e.h._mdf || e.a._mdf || i)\n          ) {\n            o ||\n              (o = Math.sqrt(\n                Math.pow(p[0] - f[0], 2) + Math.pow(p[1] - f[1], 2)\n              ));\n            var g = Math.atan2(f[1] - p[1], f[0] - p[0]),\n              v = e.h.v;\n            v >= 1 ? (v = 0.99) : v <= -1 && (v = -0.99);\n            var b = o * v,\n              x = Math.cos(g + e.a.v) * b + p[0],\n              P = Math.sin(g + e.a.v) * b + p[1];\n            h.setAttribute(\"fx\", x),\n              h.setAttribute(\"fy\", P),\n              l &&\n                !e.g._collapsable &&\n                (e.of.setAttribute(\"fx\", x), e.of.setAttribute(\"fy\", P));\n          }\n        }\n        function h(t, e, i) {\n          var r = e.style,\n            s = e.d;\n          s &&\n            (s._mdf || i) &&\n            s.dashStr &&\n            (r.pElem.setAttribute(\"stroke-dasharray\", s.dashStr),\n            r.pElem.setAttribute(\"stroke-dashoffset\", s.dashoffset[0])),\n            e.c &&\n              (e.c._mdf || i) &&\n              r.pElem.setAttribute(\n                \"stroke\",\n                \"rgb(\" +\n                  bmFloor(e.c.v[0]) +\n                  \",\" +\n                  bmFloor(e.c.v[1]) +\n                  \",\" +\n                  bmFloor(e.c.v[2]) +\n                  \")\"\n              ),\n            (e.o._mdf || i) && r.pElem.setAttribute(\"stroke-opacity\", e.o.v),\n            (e.w._mdf || i) &&\n              (r.pElem.setAttribute(\"stroke-width\", e.w.v),\n              r.msElem && r.msElem.setAttribute(\"stroke-width\", e.w.v));\n        }\n        return {\n          createRenderFunction: function (t) {\n            switch (t.ty) {\n              case \"fl\":\n                return a;\n              case \"gf\":\n                return o;\n              case \"gs\":\n                return n;\n              case \"st\":\n                return h;\n              case \"sh\":\n              case \"el\":\n              case \"rc\":\n              case \"sr\":\n                return s;\n              case \"tr\":\n                return i;\n              case \"no\":\n                return r;\n              default:\n                return null;\n            }\n          },\n        };\n      })();\n    function SVGShapeElement(t, e, i) {\n      (this.shapes = []),\n        (this.shapesData = t.shapes),\n        (this.stylesList = []),\n        (this.shapeModifiers = []),\n        (this.itemsData = []),\n        (this.processedElements = []),\n        (this.animatedContents = []),\n        this.initElement(t, e, i),\n        (this.prevViewData = []);\n    }\n    function LetterProps(t, e, i, r, s, a) {\n      (this.o = t),\n        (this.sw = e),\n        (this.sc = i),\n        (this.fc = r),\n        (this.m = s),\n        (this.p = a),\n        (this._mdf = { o: !0, sw: !!e, sc: !!i, fc: !!r, m: !0, p: !0 });\n    }\n    function TextProperty(t, e) {\n      (this._frameId = initialDefaultFrame),\n        (this.pv = \"\"),\n        (this.v = \"\"),\n        (this.kf = !1),\n        (this._isFirstFrame = !0),\n        (this._mdf = !1),\n        e.d && e.d.sid && (e.d = t.globalData.slotManager.getProp(e.d)),\n        (this.data = e),\n        (this.elem = t),\n        (this.comp = this.elem.comp),\n        (this.keysIndex = 0),\n        (this.canResize = !1),\n        (this.minimumFontSize = 1),\n        (this.effectsSequence = []),\n        (this.currentData = {\n          ascent: 0,\n          boxWidth: this.defaultBoxWidth,\n          f: \"\",\n          fStyle: \"\",\n          fWeight: \"\",\n          fc: \"\",\n          j: \"\",\n          justifyOffset: \"\",\n          l: [],\n          lh: 0,\n          lineWidths: [],\n          ls: \"\",\n          of: \"\",\n          s: \"\",\n          sc: \"\",\n          sw: 0,\n          t: 0,\n          tr: 0,\n          sz: 0,\n          ps: null,\n          fillColorAnim: !1,\n          strokeColorAnim: !1,\n          strokeWidthAnim: !1,\n          yOffset: 0,\n          finalSize: 0,\n          finalText: [],\n          finalLineHeight: 0,\n          __complete: !1,\n        }),\n        this.copyData(this.currentData, this.data.d.k[0].s),\n        this.searchProperty() || this.completeTextData(this.currentData);\n    }\n    extendPrototype(\n      [\n        BaseElement,\n        TransformElement,\n        SVGBaseElement,\n        IShapeElement,\n        HierarchyElement,\n        FrameElement,\n        RenderableDOMElement,\n      ],\n      SVGShapeElement\n    ),\n      (SVGShapeElement.prototype.initSecondaryElement = function () {}),\n      (SVGShapeElement.prototype.identityMatrix = new Matrix()),\n      (SVGShapeElement.prototype.buildExpressionInterface = function () {}),\n      (SVGShapeElement.prototype.createContent = function () {\n        this.searchShapes(\n          this.shapesData,\n          this.itemsData,\n          this.prevViewData,\n          this.layerElement,\n          0,\n          [],\n          !0\n        ),\n          this.filterUniqueShapes();\n      }),\n      (SVGShapeElement.prototype.filterUniqueShapes = function () {\n        var t,\n          e,\n          i,\n          r,\n          s = this.shapes.length,\n          a = this.stylesList.length,\n          n = [],\n          o = !1;\n        for (i = 0; i < a; i += 1) {\n          for (\n            r = this.stylesList[i], o = !1, n.length = 0, t = 0;\n            t < s;\n            t += 1\n          )\n            -1 !== (e = this.shapes[t]).styles.indexOf(r) &&\n              (n.push(e), (o = e._isAnimated || o));\n          n.length > 1 && o && this.setShapesAsAnimated(n);\n        }\n      }),\n      (SVGShapeElement.prototype.setShapesAsAnimated = function (t) {\n        var e,\n          i = t.length;\n        for (e = 0; e < i; e += 1) t[e].setAsAnimated();\n      }),\n      (SVGShapeElement.prototype.createStyleElement = function (t, e) {\n        var i,\n          r = new SVGStyleData(t, e),\n          s = r.pElem;\n        if (\"st\" === t.ty) i = new SVGStrokeStyleData(this, t, r);\n        else if (\"fl\" === t.ty) i = new SVGFillStyleData(this, t, r);\n        else if (\"gf\" === t.ty || \"gs\" === t.ty) {\n          (i = new (\n            \"gf\" === t.ty\n              ? SVGGradientFillStyleData\n              : SVGGradientStrokeStyleData\n          )(this, t, r)),\n            this.globalData.defs.appendChild(i.gf),\n            i.maskId &&\n              (this.globalData.defs.appendChild(i.ms),\n              this.globalData.defs.appendChild(i.of),\n              s.setAttribute(\n                \"mask\",\n                \"url(\" + getLocationHref() + \"#\" + i.maskId + \")\"\n              ));\n        } else \"no\" === t.ty && (i = new SVGNoStyleData(this, t, r));\n        return (\n          (\"st\" !== t.ty && \"gs\" !== t.ty) ||\n            (s.setAttribute(\"stroke-linecap\", lineCapEnum[t.lc || 2]),\n            s.setAttribute(\"stroke-linejoin\", lineJoinEnum[t.lj || 2]),\n            s.setAttribute(\"fill-opacity\", \"0\"),\n            1 === t.lj && s.setAttribute(\"stroke-miterlimit\", t.ml)),\n          2 === t.r && s.setAttribute(\"fill-rule\", \"evenodd\"),\n          t.ln && s.setAttribute(\"id\", t.ln),\n          t.cl && s.setAttribute(\"class\", t.cl),\n          t.bm && (s.style[\"mix-blend-mode\"] = getBlendMode(t.bm)),\n          this.stylesList.push(r),\n          this.addToAnimatedContents(t, i),\n          i\n        );\n      }),\n      (SVGShapeElement.prototype.createGroupElement = function (t) {\n        var e = new ShapeGroupData();\n        return (\n          t.ln && e.gr.setAttribute(\"id\", t.ln),\n          t.cl && e.gr.setAttribute(\"class\", t.cl),\n          t.bm && (e.gr.style[\"mix-blend-mode\"] = getBlendMode(t.bm)),\n          e\n        );\n      }),\n      (SVGShapeElement.prototype.createTransformElement = function (t, e) {\n        var i = TransformPropertyFactory.getTransformProperty(this, t, this),\n          r = new SVGTransformData(i, i.o, e);\n        return this.addToAnimatedContents(t, r), r;\n      }),\n      (SVGShapeElement.prototype.createShapeElement = function (t, e, i) {\n        var r = 4;\n        \"rc\" === t.ty\n          ? (r = 5)\n          : \"el\" === t.ty\n          ? (r = 6)\n          : \"sr\" === t.ty && (r = 7);\n        var s = new SVGShapeData(\n          e,\n          i,\n          ShapePropertyFactory.getShapeProp(this, t, r, this)\n        );\n        return (\n          this.shapes.push(s),\n          this.addShapeToModifiers(s),\n          this.addToAnimatedContents(t, s),\n          s\n        );\n      }),\n      (SVGShapeElement.prototype.addToAnimatedContents = function (t, e) {\n        for (var i = 0, r = this.animatedContents.length; i < r; ) {\n          if (this.animatedContents[i].element === e) return;\n          i += 1;\n        }\n        this.animatedContents.push({\n          fn: SVGElementsRenderer.createRenderFunction(t),\n          element: e,\n          data: t,\n        });\n      }),\n      (SVGShapeElement.prototype.setElementStyles = function (t) {\n        var e,\n          i = t.styles,\n          r = this.stylesList.length;\n        for (e = 0; e < r; e += 1)\n          this.stylesList[e].closed || i.push(this.stylesList[e]);\n      }),\n      (SVGShapeElement.prototype.reloadShapes = function () {\n        var t;\n        this._isFirstFrame = !0;\n        var e = this.itemsData.length;\n        for (t = 0; t < e; t += 1) this.prevViewData[t] = this.itemsData[t];\n        for (\n          this.searchShapes(\n            this.shapesData,\n            this.itemsData,\n            this.prevViewData,\n            this.layerElement,\n            0,\n            [],\n            !0\n          ),\n            this.filterUniqueShapes(),\n            e = this.dynamicProperties.length,\n            t = 0;\n          t < e;\n          t += 1\n        )\n          this.dynamicProperties[t].getValue();\n        this.renderModifiers();\n      }),\n      (SVGShapeElement.prototype.searchShapes = function (t, e, i, r, s, a, n) {\n        var o,\n          h,\n          l,\n          p,\n          f,\n          m,\n          c = [].concat(a),\n          d = t.length - 1,\n          u = [],\n          y = [];\n        for (o = d; o >= 0; o -= 1) {\n          if (\n            ((m = this.searchProcessedElement(t[o]))\n              ? (e[o] = i[m - 1])\n              : (t[o]._render = n),\n            \"fl\" === t[o].ty ||\n              \"st\" === t[o].ty ||\n              \"gf\" === t[o].ty ||\n              \"gs\" === t[o].ty ||\n              \"no\" === t[o].ty)\n          )\n            m\n              ? (e[o].style.closed = !1)\n              : (e[o] = this.createStyleElement(t[o], s)),\n              t[o]._render &&\n                e[o].style.pElem.parentNode !== r &&\n                r.appendChild(e[o].style.pElem),\n              u.push(e[o].style);\n          else if (\"gr\" === t[o].ty) {\n            if (m)\n              for (l = e[o].it.length, h = 0; h < l; h += 1)\n                e[o].prevViewData[h] = e[o].it[h];\n            else e[o] = this.createGroupElement(t[o]);\n            this.searchShapes(\n              t[o].it,\n              e[o].it,\n              e[o].prevViewData,\n              e[o].gr,\n              s + 1,\n              c,\n              n\n            ),\n              t[o]._render &&\n                e[o].gr.parentNode !== r &&\n                r.appendChild(e[o].gr);\n          } else\n            \"tr\" === t[o].ty\n              ? (m || (e[o] = this.createTransformElement(t[o], r)),\n                (p = e[o].transform),\n                c.push(p))\n              : \"sh\" === t[o].ty ||\n                \"rc\" === t[o].ty ||\n                \"el\" === t[o].ty ||\n                \"sr\" === t[o].ty\n              ? (m || (e[o] = this.createShapeElement(t[o], c, s)),\n                this.setElementStyles(e[o]))\n              : \"tm\" === t[o].ty ||\n                \"rd\" === t[o].ty ||\n                \"ms\" === t[o].ty ||\n                \"pb\" === t[o].ty ||\n                \"zz\" === t[o].ty ||\n                \"op\" === t[o].ty\n              ? (m\n                  ? ((f = e[o]).closed = !1)\n                  : ((f = ShapeModifiers.getModifier(t[o].ty)).init(this, t[o]),\n                    (e[o] = f),\n                    this.shapeModifiers.push(f)),\n                y.push(f))\n              : \"rp\" === t[o].ty &&\n                (m\n                  ? ((f = e[o]).closed = !0)\n                  : ((f = ShapeModifiers.getModifier(t[o].ty)),\n                    (e[o] = f),\n                    f.init(this, t, o, e),\n                    this.shapeModifiers.push(f),\n                    (n = !1)),\n                y.push(f));\n          this.addProcessedElement(t[o], o + 1);\n        }\n        for (d = u.length, o = 0; o < d; o += 1) u[o].closed = !0;\n        for (d = y.length, o = 0; o < d; o += 1) y[o].closed = !0;\n      }),\n      (SVGShapeElement.prototype.renderInnerContent = function () {\n        var t;\n        this.renderModifiers();\n        var e = this.stylesList.length;\n        for (t = 0; t < e; t += 1) this.stylesList[t].reset();\n        for (this.renderShape(), t = 0; t < e; t += 1)\n          (this.stylesList[t]._mdf || this._isFirstFrame) &&\n            (this.stylesList[t].msElem &&\n              (this.stylesList[t].msElem.setAttribute(\n                \"d\",\n                this.stylesList[t].d\n              ),\n              (this.stylesList[t].d = \"M0 0\" + this.stylesList[t].d)),\n            this.stylesList[t].pElem.setAttribute(\n              \"d\",\n              this.stylesList[t].d || \"M0 0\"\n            ));\n      }),\n      (SVGShapeElement.prototype.renderShape = function () {\n        var t,\n          e,\n          i = this.animatedContents.length;\n        for (t = 0; t < i; t += 1)\n          (e = this.animatedContents[t]),\n            (this._isFirstFrame || e.element._isAnimated) &&\n              !0 !== e.data &&\n              e.fn(e.data, e.element, this._isFirstFrame);\n      }),\n      (SVGShapeElement.prototype.destroy = function () {\n        this.destroyBaseElement(),\n          (this.shapesData = null),\n          (this.itemsData = null);\n      }),\n      (LetterProps.prototype.update = function (t, e, i, r, s, a) {\n        (this._mdf.o = !1),\n          (this._mdf.sw = !1),\n          (this._mdf.sc = !1),\n          (this._mdf.fc = !1),\n          (this._mdf.m = !1),\n          (this._mdf.p = !1);\n        var n = !1;\n        return (\n          this.o !== t && ((this.o = t), (this._mdf.o = !0), (n = !0)),\n          this.sw !== e && ((this.sw = e), (this._mdf.sw = !0), (n = !0)),\n          this.sc !== i && ((this.sc = i), (this._mdf.sc = !0), (n = !0)),\n          this.fc !== r && ((this.fc = r), (this._mdf.fc = !0), (n = !0)),\n          this.m !== s && ((this.m = s), (this._mdf.m = !0), (n = !0)),\n          !a.length ||\n            (this.p[0] === a[0] &&\n              this.p[1] === a[1] &&\n              this.p[4] === a[4] &&\n              this.p[5] === a[5] &&\n              this.p[12] === a[12] &&\n              this.p[13] === a[13]) ||\n            ((this.p = a), (this._mdf.p = !0), (n = !0)),\n          n\n        );\n      }),\n      (TextProperty.prototype.defaultBoxWidth = [0, 0]),\n      (TextProperty.prototype.copyData = function (t, e) {\n        for (var i in e)\n          Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]);\n        return t;\n      }),\n      (TextProperty.prototype.setCurrentData = function (t) {\n        t.__complete || this.completeTextData(t),\n          (this.currentData = t),\n          (this.currentData.boxWidth =\n            this.currentData.boxWidth || this.defaultBoxWidth),\n          (this._mdf = !0);\n      }),\n      (TextProperty.prototype.searchProperty = function () {\n        return this.searchKeyframes();\n      }),\n      (TextProperty.prototype.searchKeyframes = function () {\n        return (\n          (this.kf = this.data.d.k.length > 1),\n          this.kf && this.addEffect(this.getKeyframeValue.bind(this)),\n          this.kf\n        );\n      }),\n      (TextProperty.prototype.addEffect = function (t) {\n        this.effectsSequence.push(t), this.elem.addDynamicProperty(this);\n      }),\n      (TextProperty.prototype.getValue = function (t) {\n        if (\n          (this.elem.globalData.frameId !== this.frameId &&\n            this.effectsSequence.length) ||\n          t\n        ) {\n          this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n          var e = this.currentData,\n            i = this.keysIndex;\n          if (this.lock) this.setCurrentData(this.currentData);\n          else {\n            var r;\n            (this.lock = !0), (this._mdf = !1);\n            var s = this.effectsSequence.length,\n              a = t || this.data.d.k[this.keysIndex].s;\n            for (r = 0; r < s; r += 1)\n              a =\n                i !== this.keysIndex\n                  ? this.effectsSequence[r](a, a.t)\n                  : this.effectsSequence[r](this.currentData, a.t);\n            e !== a && this.setCurrentData(a),\n              (this.v = this.currentData),\n              (this.pv = this.v),\n              (this.lock = !1),\n              (this.frameId = this.elem.globalData.frameId);\n          }\n        }\n      }),\n      (TextProperty.prototype.getKeyframeValue = function () {\n        for (\n          var t = this.data.d.k,\n            e = this.elem.comp.renderedFrame,\n            i = 0,\n            r = t.length;\n          i <= r - 1 && !(i === r - 1 || t[i + 1].t > e);\n\n        )\n          i += 1;\n        return (\n          this.keysIndex !== i && (this.keysIndex = i),\n          this.data.d.k[this.keysIndex].s\n        );\n      }),\n      (TextProperty.prototype.buildFinalText = function (t) {\n        for (\n          var e, i, r = [], s = 0, a = t.length, n = !1, o = !1, h = \"\";\n          s < a;\n\n        )\n          (n = o),\n            (o = !1),\n            (e = t.charCodeAt(s)),\n            (h = t.charAt(s)),\n            FontManager.isCombinedCharacter(e)\n              ? (n = !0)\n              : e >= 55296 && e <= 56319\n              ? FontManager.isRegionalFlag(t, s)\n                ? (h = t.substr(s, 14))\n                : (i = t.charCodeAt(s + 1)) >= 56320 &&\n                  i <= 57343 &&\n                  (FontManager.isModifier(e, i)\n                    ? ((h = t.substr(s, 2)), (n = !0))\n                    : (h = FontManager.isFlagEmoji(t.substr(s, 4))\n                        ? t.substr(s, 4)\n                        : t.substr(s, 2)))\n              : e > 56319\n              ? ((i = t.charCodeAt(s + 1)),\n                FontManager.isVariationSelector(e) && (n = !0))\n              : FontManager.isZeroWidthJoiner(e) && ((n = !0), (o = !0)),\n            n ? ((r[r.length - 1] += h), (n = !1)) : r.push(h),\n            (s += h.length);\n        return r;\n      }),\n      (TextProperty.prototype.completeTextData = function (t) {\n        t.__complete = !0;\n        var e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o,\n          h = this.elem.globalData.fontManager,\n          l = this.data,\n          p = [],\n          f = 0,\n          m = l.m.g,\n          c = 0,\n          d = 0,\n          u = 0,\n          y = [],\n          g = 0,\n          v = 0,\n          b = h.getFontByName(t.f),\n          x = 0,\n          P = getFontProperties(b);\n        (t.fWeight = P.weight),\n          (t.fStyle = P.style),\n          (t.finalSize = t.s),\n          (t.finalText = this.buildFinalText(t.t)),\n          (i = t.finalText.length),\n          (t.finalLineHeight = t.lh);\n        var E,\n          S = (t.tr / 1e3) * t.finalSize;\n        if (t.sz)\n          for (var C, _, A = !0, T = t.sz[0], M = t.sz[1]; A; ) {\n            (C = 0),\n              (g = 0),\n              (i = (_ = this.buildFinalText(t.t)).length),\n              (S = (t.tr / 1e3) * t.finalSize);\n            var k = -1;\n            for (e = 0; e < i; e += 1)\n              (E = _[e].charCodeAt(0)),\n                (r = !1),\n                \" \" === _[e]\n                  ? (k = e)\n                  : (13 !== E && 3 !== E) ||\n                    ((g = 0),\n                    (r = !0),\n                    (C += t.finalLineHeight || 1.2 * t.finalSize)),\n                h.chars\n                  ? ((o = h.getCharData(_[e], b.fStyle, b.fFamily)),\n                    (x = r ? 0 : (o.w * t.finalSize) / 100))\n                  : (x = h.measureText(_[e], t.f, t.finalSize)),\n                g + x > T && \" \" !== _[e]\n                  ? (-1 === k ? (i += 1) : (e = k),\n                    (C += t.finalLineHeight || 1.2 * t.finalSize),\n                    _.splice(e, k === e ? 1 : 0, \"\\r\"),\n                    (k = -1),\n                    (g = 0))\n                  : ((g += x), (g += S));\n            (C += (b.ascent * t.finalSize) / 100),\n              this.canResize && t.finalSize > this.minimumFontSize && M < C\n                ? ((t.finalSize -= 1),\n                  (t.finalLineHeight = (t.finalSize * t.lh) / t.s))\n                : ((t.finalText = _), (i = t.finalText.length), (A = !1));\n          }\n        (g = -S), (x = 0);\n        var D,\n          F = 0;\n        for (e = 0; e < i; e += 1)\n          if (\n            ((r = !1),\n            13 === (E = (D = t.finalText[e]).charCodeAt(0)) || 3 === E\n              ? ((F = 0),\n                y.push(g),\n                (v = g > v ? g : v),\n                (g = -2 * S),\n                (s = \"\"),\n                (r = !0),\n                (u += 1))\n              : (s = D),\n            h.chars\n              ? ((o = h.getCharData(D, b.fStyle, h.getFontByName(t.f).fFamily)),\n                (x = r ? 0 : (o.w * t.finalSize) / 100))\n              : (x = h.measureText(s, t.f, t.finalSize)),\n            \" \" === D ? (F += x + S) : ((g += x + S + F), (F = 0)),\n            p.push({\n              l: x,\n              an: x,\n              add: c,\n              n: r,\n              anIndexes: [],\n              val: s,\n              line: u,\n              animatorJustifyOffset: 0,\n            }),\n            2 == m)\n          ) {\n            if (((c += x), \"\" === s || \" \" === s || e === i - 1)) {\n              for ((\"\" !== s && \" \" !== s) || (c -= x); d <= e; )\n                (p[d].an = c), (p[d].ind = f), (p[d].extra = x), (d += 1);\n              (f += 1), (c = 0);\n            }\n          } else if (3 == m) {\n            if (((c += x), \"\" === s || e === i - 1)) {\n              for (\"\" === s && (c -= x); d <= e; )\n                (p[d].an = c), (p[d].ind = f), (p[d].extra = x), (d += 1);\n              (c = 0), (f += 1);\n            }\n          } else (p[f].ind = f), (p[f].extra = 0), (f += 1);\n        if (((t.l = p), (v = g > v ? g : v), y.push(g), t.sz))\n          (t.boxWidth = t.sz[0]), (t.justifyOffset = 0);\n        else\n          switch (((t.boxWidth = v), t.j)) {\n            case 1:\n              t.justifyOffset = -t.boxWidth;\n              break;\n            case 2:\n              t.justifyOffset = -t.boxWidth / 2;\n              break;\n            default:\n              t.justifyOffset = 0;\n          }\n        t.lineWidths = y;\n        var w,\n          I,\n          V,\n          B,\n          R = l.a;\n        n = R.length;\n        var L = [];\n        for (a = 0; a < n; a += 1) {\n          for (\n            (w = R[a]).a.sc && (t.strokeColorAnim = !0),\n              w.a.sw && (t.strokeWidthAnim = !0),\n              (w.a.fc || w.a.fh || w.a.fs || w.a.fb) && (t.fillColorAnim = !0),\n              B = 0,\n              V = w.s.b,\n              e = 0;\n            e < i;\n            e += 1\n          )\n            ((I = p[e]).anIndexes[a] = B),\n              ((1 == V && \"\" !== I.val) ||\n                (2 == V && \"\" !== I.val && \" \" !== I.val) ||\n                (3 == V && (I.n || \" \" == I.val || e == i - 1)) ||\n                (4 == V && (I.n || e == i - 1))) &&\n                (1 === w.s.rn && L.push(B), (B += 1));\n          l.a[a].s.totalChars = B;\n          var G,\n            z = -1;\n          if (1 === w.s.rn)\n            for (e = 0; e < i; e += 1)\n              z != (I = p[e]).anIndexes[a] &&\n                ((z = I.anIndexes[a]),\n                (G = L.splice(Math.floor(Math.random() * L.length), 1)[0])),\n                (I.anIndexes[a] = G);\n        }\n        (t.yOffset = t.finalLineHeight || 1.2 * t.finalSize),\n          (t.ls = t.ls || 0),\n          (t.ascent = (b.ascent * t.finalSize) / 100);\n      }),\n      (TextProperty.prototype.updateDocumentData = function (t, e) {\n        e = void 0 === e ? this.keysIndex : e;\n        var i = this.copyData({}, this.data.d.k[e].s);\n        (i = this.copyData(i, t)),\n          (this.data.d.k[e].s = i),\n          this.recalculate(e),\n          this.setCurrentData(i),\n          this.elem.addDynamicProperty(this);\n      }),\n      (TextProperty.prototype.recalculate = function (t) {\n        var e = this.data.d.k[t].s;\n        (e.__complete = !1),\n          (this.keysIndex = 0),\n          (this._isFirstFrame = !0),\n          this.getValue(e);\n      }),\n      (TextProperty.prototype.canResizeFont = function (t) {\n        (this.canResize = t),\n          this.recalculate(this.keysIndex),\n          this.elem.addDynamicProperty(this);\n      }),\n      (TextProperty.prototype.setMinimumFontSize = function (t) {\n        (this.minimumFontSize = Math.floor(t) || 1),\n          this.recalculate(this.keysIndex),\n          this.elem.addDynamicProperty(this);\n      });\n    var TextSelectorProp = (function () {\n      var t = Math.max,\n        e = Math.min,\n        i = Math.floor;\n      function r(t, e) {\n        (this._currentTextLength = -1),\n          (this.k = !1),\n          (this.data = e),\n          (this.elem = t),\n          (this.comp = t.comp),\n          (this.finalS = 0),\n          (this.finalE = 0),\n          this.initDynamicPropertyContainer(t),\n          (this.s = PropertyFactory.getProp(t, e.s || { k: 0 }, 0, 0, this)),\n          (this.e =\n            \"e\" in e\n              ? PropertyFactory.getProp(t, e.e, 0, 0, this)\n              : { v: 100 }),\n          (this.o = PropertyFactory.getProp(t, e.o || { k: 0 }, 0, 0, this)),\n          (this.xe = PropertyFactory.getProp(t, e.xe || { k: 0 }, 0, 0, this)),\n          (this.ne = PropertyFactory.getProp(t, e.ne || { k: 0 }, 0, 0, this)),\n          (this.sm = PropertyFactory.getProp(\n            t,\n            e.sm || { k: 100 },\n            0,\n            0,\n            this\n          )),\n          (this.a = PropertyFactory.getProp(t, e.a, 0, 0.01, this)),\n          this.dynamicProperties.length || this.getValue();\n      }\n      return (\n        (r.prototype = {\n          getMult: function (r) {\n            this._currentTextLength !==\n              this.elem.textProperty.currentData.l.length && this.getValue();\n            var s = 0,\n              a = 0,\n              n = 1,\n              o = 1;\n            this.ne.v > 0 ? (s = this.ne.v / 100) : (a = -this.ne.v / 100),\n              this.xe.v > 0\n                ? (n = 1 - this.xe.v / 100)\n                : (o = 1 + this.xe.v / 100);\n            var h = BezierFactory.getBezierEasing(s, a, n, o).get,\n              l = 0,\n              p = this.finalS,\n              f = this.finalE,\n              m = this.data.sh;\n            if (2 === m)\n              l = h(\n                (l =\n                  f === p\n                    ? r >= f\n                      ? 1\n                      : 0\n                    : t(0, e(0.5 / (f - p) + (r - p) / (f - p), 1)))\n              );\n            else if (3 === m)\n              l = h(\n                (l =\n                  f === p\n                    ? r >= f\n                      ? 0\n                      : 1\n                    : 1 - t(0, e(0.5 / (f - p) + (r - p) / (f - p), 1)))\n              );\n            else if (4 === m)\n              f === p\n                ? (l = 0)\n                : (l = t(0, e(0.5 / (f - p) + (r - p) / (f - p), 1))) < 0.5\n                ? (l *= 2)\n                : (l = 1 - 2 * (l - 0.5)),\n                (l = h(l));\n            else if (5 === m) {\n              if (f === p) l = 0;\n              else {\n                var c = f - p,\n                  d = -c / 2 + (r = e(t(0, r + 0.5 - p), f - p)),\n                  u = c / 2;\n                l = Math.sqrt(1 - (d * d) / (u * u));\n              }\n              l = h(l);\n            } else\n              6 === m\n                ? (f === p\n                    ? (l = 0)\n                    : ((r = e(t(0, r + 0.5 - p), f - p)),\n                      (l =\n                        (1 + Math.cos(Math.PI + (2 * Math.PI * r) / (f - p))) /\n                        2)),\n                  (l = h(l)))\n                : (r >= i(p) &&\n                    (l = t(0, e(r - p < 0 ? e(f, 1) - (p - r) : f - r, 1))),\n                  (l = h(l)));\n            if (100 !== this.sm.v) {\n              var y = 0.01 * this.sm.v;\n              0 === y && (y = 1e-8);\n              var g = 0.5 - 0.5 * y;\n              l < g ? (l = 0) : (l = (l - g) / y) > 1 && (l = 1);\n            }\n            return l * this.a.v;\n          },\n          getValue: function (t) {\n            this.iterateDynamicProperties(),\n              (this._mdf = t || this._mdf),\n              (this._currentTextLength =\n                this.elem.textProperty.currentData.l.length || 0),\n              t && 2 === this.data.r && (this.e.v = this._currentTextLength);\n            var e = 2 === this.data.r ? 1 : 100 / this.data.totalChars,\n              i = this.o.v / e,\n              r = this.s.v / e + i,\n              s = this.e.v / e + i;\n            if (r > s) {\n              var a = r;\n              (r = s), (s = a);\n            }\n            (this.finalS = r), (this.finalE = s);\n          },\n        }),\n        extendPrototype([DynamicPropertyContainer], r),\n        {\n          getTextSelectorProp: function (t, e, i) {\n            return new r(t, e, i);\n          },\n        }\n      );\n    })();\n    function TextAnimatorDataProperty(t, e, i) {\n      var r = { propType: !1 },\n        s = PropertyFactory.getProp,\n        a = e.a;\n      (this.a = {\n        r: a.r ? s(t, a.r, 0, degToRads, i) : r,\n        rx: a.rx ? s(t, a.rx, 0, degToRads, i) : r,\n        ry: a.ry ? s(t, a.ry, 0, degToRads, i) : r,\n        sk: a.sk ? s(t, a.sk, 0, degToRads, i) : r,\n        sa: a.sa ? s(t, a.sa, 0, degToRads, i) : r,\n        s: a.s ? s(t, a.s, 1, 0.01, i) : r,\n        a: a.a ? s(t, a.a, 1, 0, i) : r,\n        o: a.o ? s(t, a.o, 0, 0.01, i) : r,\n        p: a.p ? s(t, a.p, 1, 0, i) : r,\n        sw: a.sw ? s(t, a.sw, 0, 0, i) : r,\n        sc: a.sc ? s(t, a.sc, 1, 0, i) : r,\n        fc: a.fc ? s(t, a.fc, 1, 0, i) : r,\n        fh: a.fh ? s(t, a.fh, 0, 0, i) : r,\n        fs: a.fs ? s(t, a.fs, 0, 0.01, i) : r,\n        fb: a.fb ? s(t, a.fb, 0, 0.01, i) : r,\n        t: a.t ? s(t, a.t, 0, 0, i) : r,\n      }),\n        (this.s = TextSelectorProp.getTextSelectorProp(t, e.s, i)),\n        (this.s.t = e.s.t);\n    }\n    function TextAnimatorProperty(t, e, i) {\n      (this._isFirstFrame = !0),\n        (this._hasMaskedPath = !1),\n        (this._frameId = -1),\n        (this._textData = t),\n        (this._renderType = e),\n        (this._elem = i),\n        (this._animatorsData = createSizedArray(this._textData.a.length)),\n        (this._pathData = {}),\n        (this._moreOptions = { alignment: {} }),\n        (this.renderedLetters = []),\n        (this.lettersChangedFlag = !1),\n        this.initDynamicPropertyContainer(i);\n    }\n    function ITextElement() {}\n    (TextAnimatorProperty.prototype.searchProperties = function () {\n      var t,\n        e,\n        i = this._textData.a.length,\n        r = PropertyFactory.getProp;\n      for (t = 0; t < i; t += 1)\n        (e = this._textData.a[t]),\n          (this._animatorsData[t] = new TextAnimatorDataProperty(\n            this._elem,\n            e,\n            this\n          ));\n      this._textData.p && \"m\" in this._textData.p\n        ? ((this._pathData = {\n            a: r(this._elem, this._textData.p.a, 0, 0, this),\n            f: r(this._elem, this._textData.p.f, 0, 0, this),\n            l: r(this._elem, this._textData.p.l, 0, 0, this),\n            r: r(this._elem, this._textData.p.r, 0, 0, this),\n            p: r(this._elem, this._textData.p.p, 0, 0, this),\n            m: this._elem.maskManager.getMaskProperty(this._textData.p.m),\n          }),\n          (this._hasMaskedPath = !0))\n        : (this._hasMaskedPath = !1),\n        (this._moreOptions.alignment = r(\n          this._elem,\n          this._textData.m.a,\n          1,\n          0,\n          this\n        ));\n    }),\n      (TextAnimatorProperty.prototype.getMeasures = function (t, e) {\n        if (\n          ((this.lettersChangedFlag = e),\n          this._mdf ||\n            this._isFirstFrame ||\n            e ||\n            (this._hasMaskedPath && this._pathData.m._mdf))\n        ) {\n          this._isFirstFrame = !1;\n          var i,\n            r,\n            s,\n            a,\n            n,\n            o,\n            h,\n            l,\n            p,\n            f,\n            m,\n            c,\n            d,\n            u,\n            y,\n            g,\n            v,\n            b,\n            x,\n            P = this._moreOptions.alignment.v,\n            E = this._animatorsData,\n            S = this._textData,\n            C = this.mHelper,\n            _ = this._renderType,\n            A = this.renderedLetters.length,\n            T = t.l;\n          if (this._hasMaskedPath) {\n            if (\n              ((x = this._pathData.m), !this._pathData.n || this._pathData._mdf)\n            ) {\n              var M,\n                k = x.v;\n              for (\n                this._pathData.r.v && (k = k.reverse()),\n                  n = { tLength: 0, segments: [] },\n                  a = k._length - 1,\n                  g = 0,\n                  s = 0;\n                s < a;\n                s += 1\n              )\n                (M = bez.buildBezierData(\n                  k.v[s],\n                  k.v[s + 1],\n                  [k.o[s][0] - k.v[s][0], k.o[s][1] - k.v[s][1]],\n                  [k.i[s + 1][0] - k.v[s + 1][0], k.i[s + 1][1] - k.v[s + 1][1]]\n                )),\n                  (n.tLength += M.segmentLength),\n                  n.segments.push(M),\n                  (g += M.segmentLength);\n              (s = a),\n                x.v.c &&\n                  ((M = bez.buildBezierData(\n                    k.v[s],\n                    k.v[0],\n                    [k.o[s][0] - k.v[s][0], k.o[s][1] - k.v[s][1]],\n                    [k.i[0][0] - k.v[0][0], k.i[0][1] - k.v[0][1]]\n                  )),\n                  (n.tLength += M.segmentLength),\n                  n.segments.push(M),\n                  (g += M.segmentLength)),\n                (this._pathData.pi = n);\n            }\n            if (\n              ((n = this._pathData.pi),\n              (o = this._pathData.f.v),\n              (m = 0),\n              (f = 1),\n              (l = 0),\n              (p = !0),\n              (u = n.segments),\n              o < 0 && x.v.c)\n            )\n              for (\n                n.tLength < Math.abs(o) && (o = -Math.abs(o) % n.tLength),\n                  f = (d = u[(m = u.length - 1)].points).length - 1;\n                o < 0;\n\n              )\n                (o += d[f].partialLength),\n                  (f -= 1) < 0 && (f = (d = u[(m -= 1)].points).length - 1);\n            (c = (d = u[m].points)[f - 1]), (y = (h = d[f]).partialLength);\n          }\n          (a = T.length), (i = 0), (r = 0);\n          var D,\n            F,\n            w,\n            I,\n            V,\n            B = 1.2 * t.finalSize * 0.714,\n            R = !0;\n          w = E.length;\n          var L,\n            G,\n            z,\n            O,\n            N,\n            H,\n            q,\n            j,\n            W,\n            $,\n            Y,\n            J,\n            X = -1,\n            Z = o,\n            K = m,\n            U = f,\n            Q = -1,\n            tt = \"\",\n            et = this.defaultPropsArray;\n          if (2 === t.j || 1 === t.j) {\n            var it = 0,\n              rt = 0,\n              st = 2 === t.j ? -0.5 : -1,\n              at = 0,\n              nt = !0;\n            for (s = 0; s < a; s += 1)\n              if (T[s].n) {\n                for (it && (it += rt); at < s; )\n                  (T[at].animatorJustifyOffset = it), (at += 1);\n                (it = 0), (nt = !0);\n              } else {\n                for (F = 0; F < w; F += 1)\n                  (D = E[F].a).t.propType &&\n                    (nt && 2 === t.j && (rt += D.t.v * st),\n                    (V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars))\n                      .length\n                      ? (it += D.t.v * V[0] * st)\n                      : (it += D.t.v * V * st));\n                nt = !1;\n              }\n            for (it && (it += rt); at < s; )\n              (T[at].animatorJustifyOffset = it), (at += 1);\n          }\n          for (s = 0; s < a; s += 1) {\n            if ((C.reset(), (O = 1), T[s].n))\n              (i = 0),\n                (r += t.yOffset),\n                (r += R ? 1 : 0),\n                (o = Z),\n                (R = !1),\n                this._hasMaskedPath &&\n                  ((f = U),\n                  (c = (d = u[(m = K)].points)[f - 1]),\n                  (y = (h = d[f]).partialLength),\n                  (l = 0)),\n                (tt = \"\"),\n                (Y = \"\"),\n                (W = \"\"),\n                (J = \"\"),\n                (et = this.defaultPropsArray);\n            else {\n              if (this._hasMaskedPath) {\n                if (Q !== T[s].line) {\n                  switch (t.j) {\n                    case 1:\n                      o += g - t.lineWidths[T[s].line];\n                      break;\n                    case 2:\n                      o += (g - t.lineWidths[T[s].line]) / 2;\n                  }\n                  Q = T[s].line;\n                }\n                X !== T[s].ind &&\n                  (T[X] && (o += T[X].extra),\n                  (o += T[s].an / 2),\n                  (X = T[s].ind)),\n                  (o += P[0] * T[s].an * 0.005);\n                var ot = 0;\n                for (F = 0; F < w; F += 1)\n                  (D = E[F].a).p.propType &&\n                    ((V = E[F].s.getMult(\n                      T[s].anIndexes[F],\n                      S.a[F].s.totalChars\n                    )).length\n                      ? (ot += D.p.v[0] * V[0])\n                      : (ot += D.p.v[0] * V)),\n                    D.a.propType &&\n                      ((V = E[F].s.getMult(\n                        T[s].anIndexes[F],\n                        S.a[F].s.totalChars\n                      )).length\n                        ? (ot += D.a.v[0] * V[0])\n                        : (ot += D.a.v[0] * V));\n                for (\n                  p = !0,\n                    this._pathData.a.v &&\n                      ((o =\n                        0.5 * T[0].an +\n                        ((g -\n                          this._pathData.f.v -\n                          0.5 * T[0].an -\n                          0.5 * T[T.length - 1].an) *\n                          X) /\n                          (a - 1)),\n                      (o += this._pathData.f.v));\n                  p;\n\n                )\n                  l + y >= o + ot || !d\n                    ? ((v = (o + ot - l) / h.partialLength),\n                      (G = c.point[0] + (h.point[0] - c.point[0]) * v),\n                      (z = c.point[1] + (h.point[1] - c.point[1]) * v),\n                      C.translate(-P[0] * T[s].an * 0.005, -P[1] * B * 0.01),\n                      (p = !1))\n                    : d &&\n                      ((l += h.partialLength),\n                      (f += 1) >= d.length &&\n                        ((f = 0),\n                        u[(m += 1)]\n                          ? (d = u[m].points)\n                          : x.v.c\n                          ? ((f = 0), (d = u[(m = 0)].points))\n                          : ((l -= h.partialLength), (d = null))),\n                      d && ((c = h), (y = (h = d[f]).partialLength)));\n                (L = T[s].an / 2 - T[s].add), C.translate(-L, 0, 0);\n              } else\n                (L = T[s].an / 2 - T[s].add),\n                  C.translate(-L, 0, 0),\n                  C.translate(-P[0] * T[s].an * 0.005, -P[1] * B * 0.01, 0);\n              for (F = 0; F < w; F += 1)\n                (D = E[F].a).t.propType &&\n                  ((V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars)),\n                  (0 === i && 0 === t.j) ||\n                    (this._hasMaskedPath\n                      ? V.length\n                        ? (o += D.t.v * V[0])\n                        : (o += D.t.v * V)\n                      : V.length\n                      ? (i += D.t.v * V[0])\n                      : (i += D.t.v * V)));\n              for (\n                t.strokeWidthAnim && (H = t.sw || 0),\n                  t.strokeColorAnim &&\n                    (N = t.sc ? [t.sc[0], t.sc[1], t.sc[2]] : [0, 0, 0]),\n                  t.fillColorAnim && t.fc && (q = [t.fc[0], t.fc[1], t.fc[2]]),\n                  F = 0;\n                F < w;\n                F += 1\n              )\n                (D = E[F].a).a.propType &&\n                  ((V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars))\n                    .length\n                    ? C.translate(\n                        -D.a.v[0] * V[0],\n                        -D.a.v[1] * V[1],\n                        D.a.v[2] * V[2]\n                      )\n                    : C.translate(-D.a.v[0] * V, -D.a.v[1] * V, D.a.v[2] * V));\n              for (F = 0; F < w; F += 1)\n                (D = E[F].a).s.propType &&\n                  ((V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars))\n                    .length\n                    ? C.scale(\n                        1 + (D.s.v[0] - 1) * V[0],\n                        1 + (D.s.v[1] - 1) * V[1],\n                        1\n                      )\n                    : C.scale(\n                        1 + (D.s.v[0] - 1) * V,\n                        1 + (D.s.v[1] - 1) * V,\n                        1\n                      ));\n              for (F = 0; F < w; F += 1) {\n                if (\n                  ((D = E[F].a),\n                  (V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars)),\n                  D.sk.propType &&\n                    (V.length\n                      ? C.skewFromAxis(-D.sk.v * V[0], D.sa.v * V[1])\n                      : C.skewFromAxis(-D.sk.v * V, D.sa.v * V)),\n                  D.r.propType &&\n                    (V.length\n                      ? C.rotateZ(-D.r.v * V[2])\n                      : C.rotateZ(-D.r.v * V)),\n                  D.ry.propType &&\n                    (V.length\n                      ? C.rotateY(D.ry.v * V[1])\n                      : C.rotateY(D.ry.v * V)),\n                  D.rx.propType &&\n                    (V.length\n                      ? C.rotateX(D.rx.v * V[0])\n                      : C.rotateX(D.rx.v * V)),\n                  D.o.propType &&\n                    (V.length\n                      ? (O += (D.o.v * V[0] - O) * V[0])\n                      : (O += (D.o.v * V - O) * V)),\n                  t.strokeWidthAnim &&\n                    D.sw.propType &&\n                    (V.length ? (H += D.sw.v * V[0]) : (H += D.sw.v * V)),\n                  t.strokeColorAnim && D.sc.propType)\n                )\n                  for (j = 0; j < 3; j += 1)\n                    V.length\n                      ? (N[j] += (D.sc.v[j] - N[j]) * V[0])\n                      : (N[j] += (D.sc.v[j] - N[j]) * V);\n                if (t.fillColorAnim && t.fc) {\n                  if (D.fc.propType)\n                    for (j = 0; j < 3; j += 1)\n                      V.length\n                        ? (q[j] += (D.fc.v[j] - q[j]) * V[0])\n                        : (q[j] += (D.fc.v[j] - q[j]) * V);\n                  D.fh.propType &&\n                    (q = V.length\n                      ? addHueToRGB(q, D.fh.v * V[0])\n                      : addHueToRGB(q, D.fh.v * V)),\n                    D.fs.propType &&\n                      (q = V.length\n                        ? addSaturationToRGB(q, D.fs.v * V[0])\n                        : addSaturationToRGB(q, D.fs.v * V)),\n                    D.fb.propType &&\n                      (q = V.length\n                        ? addBrightnessToRGB(q, D.fb.v * V[0])\n                        : addBrightnessToRGB(q, D.fb.v * V));\n                }\n              }\n              for (F = 0; F < w; F += 1)\n                (D = E[F].a).p.propType &&\n                  ((V = E[F].s.getMult(T[s].anIndexes[F], S.a[F].s.totalChars)),\n                  this._hasMaskedPath\n                    ? V.length\n                      ? C.translate(0, D.p.v[1] * V[0], -D.p.v[2] * V[1])\n                      : C.translate(0, D.p.v[1] * V, -D.p.v[2] * V)\n                    : V.length\n                    ? C.translate(\n                        D.p.v[0] * V[0],\n                        D.p.v[1] * V[1],\n                        -D.p.v[2] * V[2]\n                      )\n                    : C.translate(D.p.v[0] * V, D.p.v[1] * V, -D.p.v[2] * V));\n              if (\n                (t.strokeWidthAnim && (W = H < 0 ? 0 : H),\n                t.strokeColorAnim &&\n                  ($ =\n                    \"rgb(\" +\n                    Math.round(255 * N[0]) +\n                    \",\" +\n                    Math.round(255 * N[1]) +\n                    \",\" +\n                    Math.round(255 * N[2]) +\n                    \")\"),\n                t.fillColorAnim &&\n                  t.fc &&\n                  (Y =\n                    \"rgb(\" +\n                    Math.round(255 * q[0]) +\n                    \",\" +\n                    Math.round(255 * q[1]) +\n                    \",\" +\n                    Math.round(255 * q[2]) +\n                    \")\"),\n                this._hasMaskedPath)\n              ) {\n                if (\n                  (C.translate(0, -t.ls),\n                  C.translate(0, P[1] * B * 0.01 + r, 0),\n                  this._pathData.p.v)\n                ) {\n                  b = (h.point[1] - c.point[1]) / (h.point[0] - c.point[0]);\n                  var ht = (180 * Math.atan(b)) / Math.PI;\n                  h.point[0] < c.point[0] && (ht += 180),\n                    C.rotate((-ht * Math.PI) / 180);\n                }\n                C.translate(G, z, 0),\n                  (o -= P[0] * T[s].an * 0.005),\n                  T[s + 1] &&\n                    X !== T[s + 1].ind &&\n                    ((o += T[s].an / 2), (o += 0.001 * t.tr * t.finalSize));\n              } else {\n                switch (\n                  (C.translate(i, r, 0),\n                  t.ps && C.translate(t.ps[0], t.ps[1] + t.ascent, 0),\n                  t.j)\n                ) {\n                  case 1:\n                    C.translate(\n                      T[s].animatorJustifyOffset +\n                        t.justifyOffset +\n                        (t.boxWidth - t.lineWidths[T[s].line]),\n                      0,\n                      0\n                    );\n                    break;\n                  case 2:\n                    C.translate(\n                      T[s].animatorJustifyOffset +\n                        t.justifyOffset +\n                        (t.boxWidth - t.lineWidths[T[s].line]) / 2,\n                      0,\n                      0\n                    );\n                }\n                C.translate(0, -t.ls),\n                  C.translate(L, 0, 0),\n                  C.translate(P[0] * T[s].an * 0.005, P[1] * B * 0.01, 0),\n                  (i += T[s].l + 0.001 * t.tr * t.finalSize);\n              }\n              \"html\" === _\n                ? (tt = C.toCSS())\n                : \"svg\" === _\n                ? (tt = C.to2dCSS())\n                : (et = [\n                    C.props[0],\n                    C.props[1],\n                    C.props[2],\n                    C.props[3],\n                    C.props[4],\n                    C.props[5],\n                    C.props[6],\n                    C.props[7],\n                    C.props[8],\n                    C.props[9],\n                    C.props[10],\n                    C.props[11],\n                    C.props[12],\n                    C.props[13],\n                    C.props[14],\n                    C.props[15],\n                  ]),\n                (J = O);\n            }\n            A <= s\n              ? ((I = new LetterProps(J, W, $, Y, tt, et)),\n                this.renderedLetters.push(I),\n                (A += 1),\n                (this.lettersChangedFlag = !0))\n              : ((I = this.renderedLetters[s]),\n                (this.lettersChangedFlag =\n                  I.update(J, W, $, Y, tt, et) || this.lettersChangedFlag));\n          }\n        }\n      }),\n      (TextAnimatorProperty.prototype.getValue = function () {\n        this._elem.globalData.frameId !== this._frameId &&\n          ((this._frameId = this._elem.globalData.frameId),\n          this.iterateDynamicProperties());\n      }),\n      (TextAnimatorProperty.prototype.mHelper = new Matrix()),\n      (TextAnimatorProperty.prototype.defaultPropsArray = []),\n      extendPrototype([DynamicPropertyContainer], TextAnimatorProperty),\n      (ITextElement.prototype.initElement = function (t, e, i) {\n        (this.lettersChangedFlag = !0),\n          this.initFrame(),\n          this.initBaseData(t, e, i),\n          (this.textProperty = new TextProperty(\n            this,\n            t.t,\n            this.dynamicProperties\n          )),\n          (this.textAnimator = new TextAnimatorProperty(\n            t.t,\n            this.renderType,\n            this\n          )),\n          this.initTransform(t, e, i),\n          this.initHierarchy(),\n          this.initRenderable(),\n          this.initRendererElement(),\n          this.createContainerElements(),\n          this.createRenderableComponents(),\n          this.createContent(),\n          this.hide(),\n          this.textAnimator.searchProperties(this.dynamicProperties);\n      }),\n      (ITextElement.prototype.prepareFrame = function (t) {\n        (this._mdf = !1),\n          this.prepareRenderableFrame(t),\n          this.prepareProperties(t, this.isInRange);\n      }),\n      (ITextElement.prototype.createPathShape = function (t, e) {\n        var i,\n          r,\n          s = e.length,\n          a = \"\";\n        for (i = 0; i < s; i += 1)\n          \"sh\" === e[i].ty &&\n            ((r = e[i].ks.k), (a += buildShapeString(r, r.i.length, !0, t)));\n        return a;\n      }),\n      (ITextElement.prototype.updateDocumentData = function (t, e) {\n        this.textProperty.updateDocumentData(t, e);\n      }),\n      (ITextElement.prototype.canResizeFont = function (t) {\n        this.textProperty.canResizeFont(t);\n      }),\n      (ITextElement.prototype.setMinimumFontSize = function (t) {\n        this.textProperty.setMinimumFontSize(t);\n      }),\n      (ITextElement.prototype.applyTextPropertiesToMatrix = function (\n        t,\n        e,\n        i,\n        r,\n        s\n      ) {\n        switch (\n          (t.ps && e.translate(t.ps[0], t.ps[1] + t.ascent, 0),\n          e.translate(0, -t.ls, 0),\n          t.j)\n        ) {\n          case 1:\n            e.translate(t.justifyOffset + (t.boxWidth - t.lineWidths[i]), 0, 0);\n            break;\n          case 2:\n            e.translate(\n              t.justifyOffset + (t.boxWidth - t.lineWidths[i]) / 2,\n              0,\n              0\n            );\n        }\n        e.translate(r, s, 0);\n      }),\n      (ITextElement.prototype.buildColor = function (t) {\n        return (\n          \"rgb(\" +\n          Math.round(255 * t[0]) +\n          \",\" +\n          Math.round(255 * t[1]) +\n          \",\" +\n          Math.round(255 * t[2]) +\n          \")\"\n        );\n      }),\n      (ITextElement.prototype.emptyProp = new LetterProps()),\n      (ITextElement.prototype.destroy = function () {}),\n      (ITextElement.prototype.validateText = function () {\n        (this.textProperty._mdf || this.textProperty._isFirstFrame) &&\n          (this.buildNewText(),\n          (this.textProperty._isFirstFrame = !1),\n          (this.textProperty._mdf = !1));\n      });\n    var emptyShapeData = { shapes: [] };\n    function SVGTextLottieElement(t, e, i) {\n      (this.textSpans = []),\n        (this.renderType = \"svg\"),\n        this.initElement(t, e, i);\n    }\n    function ISolidElement(t, e, i) {\n      this.initElement(t, e, i);\n    }\n    function NullElement(t, e, i) {\n      this.initFrame(),\n        this.initBaseData(t, e, i),\n        this.initFrame(),\n        this.initTransform(t, e, i),\n        this.initHierarchy();\n    }\n    function SVGRendererBase() {}\n    function ICompElement() {}\n    function SVGCompElement(t, e, i) {\n      (this.layers = t.layers),\n        (this.supports3d = !0),\n        (this.completeLayers = !1),\n        (this.pendingElements = []),\n        (this.elements = this.layers\n          ? createSizedArray(this.layers.length)\n          : []),\n        this.initElement(t, e, i),\n        (this.tm = t.tm\n          ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this)\n          : { _placeholder: !0 });\n    }\n    function SVGRenderer(t, e) {\n      (this.animationItem = t),\n        (this.layers = null),\n        (this.renderedFrame = -1),\n        (this.svgElement = createNS(\"svg\"));\n      var i = \"\";\n      if (e && e.title) {\n        var r = createNS(\"title\"),\n          s = createElementID();\n        r.setAttribute(\"id\", s),\n          (r.textContent = e.title),\n          this.svgElement.appendChild(r),\n          (i += s);\n      }\n      if (e && e.description) {\n        var a = createNS(\"desc\"),\n          n = createElementID();\n        a.setAttribute(\"id\", n),\n          (a.textContent = e.description),\n          this.svgElement.appendChild(a),\n          (i += \" \" + n);\n      }\n      i && this.svgElement.setAttribute(\"aria-labelledby\", i);\n      var o = createNS(\"defs\");\n      this.svgElement.appendChild(o);\n      var h = createNS(\"g\");\n      this.svgElement.appendChild(h),\n        (this.layerElement = h),\n        (this.renderConfig = {\n          preserveAspectRatio: (e && e.preserveAspectRatio) || \"xMidYMid meet\",\n          imagePreserveAspectRatio:\n            (e && e.imagePreserveAspectRatio) || \"xMidYMid slice\",\n          contentVisibility: (e && e.contentVisibility) || \"visible\",\n          progressiveLoad: (e && e.progressiveLoad) || !1,\n          hideOnTransparent: !(e && !1 === e.hideOnTransparent),\n          viewBoxOnly: (e && e.viewBoxOnly) || !1,\n          viewBoxSize: (e && e.viewBoxSize) || !1,\n          className: (e && e.className) || \"\",\n          id: (e && e.id) || \"\",\n          focusable: e && e.focusable,\n          filterSize: {\n            width: (e && e.filterSize && e.filterSize.width) || \"100%\",\n            height: (e && e.filterSize && e.filterSize.height) || \"100%\",\n            x: (e && e.filterSize && e.filterSize.x) || \"0%\",\n            y: (e && e.filterSize && e.filterSize.y) || \"0%\",\n          },\n          width: e && e.width,\n          height: e && e.height,\n          runExpressions: !e || void 0 === e.runExpressions || e.runExpressions,\n        }),\n        (this.globalData = {\n          _mdf: !1,\n          frameNum: -1,\n          defs: o,\n          renderConfig: this.renderConfig,\n        }),\n        (this.elements = []),\n        (this.pendingElements = []),\n        (this.destroyed = !1),\n        (this.rendererType = \"svg\");\n    }\n    function ShapeTransformManager() {\n      (this.sequences = {}),\n        (this.sequenceList = []),\n        (this.transform_key_count = 0);\n    }\n    extendPrototype(\n      [\n        BaseElement,\n        TransformElement,\n        SVGBaseElement,\n        HierarchyElement,\n        FrameElement,\n        RenderableDOMElement,\n        ITextElement,\n      ],\n      SVGTextLottieElement\n    ),\n      (SVGTextLottieElement.prototype.createContent = function () {\n        this.data.singleShape &&\n          !this.globalData.fontManager.chars &&\n          (this.textContainer = createNS(\"text\"));\n      }),\n      (SVGTextLottieElement.prototype.buildTextContents = function (t) {\n        for (var e = 0, i = t.length, r = [], s = \"\"; e < i; )\n          t[e] === String.fromCharCode(13) || t[e] === String.fromCharCode(3)\n            ? (r.push(s), (s = \"\"))\n            : (s += t[e]),\n            (e += 1);\n        return r.push(s), r;\n      }),\n      (SVGTextLottieElement.prototype.buildShapeData = function (t, e) {\n        if (t.shapes && t.shapes.length) {\n          var i = t.shapes[0];\n          if (i.it) {\n            var r = i.it[i.it.length - 1];\n            r.s && ((r.s.k[0] = e), (r.s.k[1] = e));\n          }\n        }\n        return t;\n      }),\n      (SVGTextLottieElement.prototype.buildNewText = function () {\n        var t, e;\n        this.addDynamicProperty(this);\n        var i = this.textProperty.currentData;\n        (this.renderedLetters = createSizedArray(i ? i.l.length : 0)),\n          i.fc\n            ? this.layerElement.setAttribute(\"fill\", this.buildColor(i.fc))\n            : this.layerElement.setAttribute(\"fill\", \"rgba(0,0,0,0)\"),\n          i.sc &&\n            (this.layerElement.setAttribute(\"stroke\", this.buildColor(i.sc)),\n            this.layerElement.setAttribute(\"stroke-width\", i.sw)),\n          this.layerElement.setAttribute(\"font-size\", i.finalSize);\n        var r = this.globalData.fontManager.getFontByName(i.f);\n        if (r.fClass) this.layerElement.setAttribute(\"class\", r.fClass);\n        else {\n          this.layerElement.setAttribute(\"font-family\", r.fFamily);\n          var s = i.fWeight,\n            a = i.fStyle;\n          this.layerElement.setAttribute(\"font-style\", a),\n            this.layerElement.setAttribute(\"font-weight\", s);\n        }\n        this.layerElement.setAttribute(\"aria-label\", i.t);\n        var n,\n          o = i.l || [],\n          h = !!this.globalData.fontManager.chars;\n        e = o.length;\n        var l = this.mHelper,\n          p = this.data.singleShape,\n          f = 0,\n          m = 0,\n          c = !0,\n          d = 0.001 * i.tr * i.finalSize;\n        if (!p || h || i.sz) {\n          var u,\n            y = this.textSpans.length;\n          for (t = 0; t < e; t += 1) {\n            if (\n              (this.textSpans[t] ||\n                (this.textSpans[t] = {\n                  span: null,\n                  childSpan: null,\n                  glyph: null,\n                }),\n              !h || !p || 0 === t)\n            ) {\n              if (\n                ((n =\n                  y > t ? this.textSpans[t].span : createNS(h ? \"g\" : \"text\")),\n                y <= t)\n              ) {\n                if (\n                  (n.setAttribute(\"stroke-linecap\", \"butt\"),\n                  n.setAttribute(\"stroke-linejoin\", \"round\"),\n                  n.setAttribute(\"stroke-miterlimit\", \"4\"),\n                  (this.textSpans[t].span = n),\n                  h)\n                ) {\n                  var g = createNS(\"g\");\n                  n.appendChild(g), (this.textSpans[t].childSpan = g);\n                }\n                (this.textSpans[t].span = n), this.layerElement.appendChild(n);\n              }\n              n.style.display = \"inherit\";\n            }\n            if (\n              (l.reset(),\n              p &&\n                (o[t].n &&\n                  ((f = -d), (m += i.yOffset), (m += c ? 1 : 0), (c = !1)),\n                this.applyTextPropertiesToMatrix(i, l, o[t].line, f, m),\n                (f += o[t].l || 0),\n                (f += d)),\n              h)\n            ) {\n              var v;\n              if (\n                1 ===\n                (u = this.globalData.fontManager.getCharData(\n                  i.finalText[t],\n                  r.fStyle,\n                  this.globalData.fontManager.getFontByName(i.f).fFamily\n                )).t\n              )\n                v = new SVGCompElement(u.data, this.globalData, this);\n              else {\n                var b = emptyShapeData;\n                u.data &&\n                  u.data.shapes &&\n                  (b = this.buildShapeData(u.data, i.finalSize)),\n                  (v = new SVGShapeElement(b, this.globalData, this));\n              }\n              if (this.textSpans[t].glyph) {\n                var x = this.textSpans[t].glyph;\n                this.textSpans[t].childSpan.removeChild(x.layerElement),\n                  x.destroy();\n              }\n              (this.textSpans[t].glyph = v),\n                (v._debug = !0),\n                v.prepareFrame(0),\n                v.renderFrame(),\n                this.textSpans[t].childSpan.appendChild(v.layerElement),\n                1 === u.t &&\n                  this.textSpans[t].childSpan.setAttribute(\n                    \"transform\",\n                    \"scale(\" + i.finalSize / 100 + \",\" + i.finalSize / 100 + \")\"\n                  );\n            } else\n              p &&\n                n.setAttribute(\n                  \"transform\",\n                  \"translate(\" + l.props[12] + \",\" + l.props[13] + \")\"\n                ),\n                (n.textContent = o[t].val),\n                n.setAttributeNS(\n                  \"http://www.w3.org/XML/1998/namespace\",\n                  \"xml:space\",\n                  \"preserve\"\n                );\n          }\n          p && n && n.setAttribute(\"d\", \"\");\n        } else {\n          var P = this.textContainer,\n            E = \"start\";\n          switch (i.j) {\n            case 1:\n              E = \"end\";\n              break;\n            case 2:\n              E = \"middle\";\n              break;\n            default:\n              E = \"start\";\n          }\n          P.setAttribute(\"text-anchor\", E), P.setAttribute(\"letter-spacing\", d);\n          var S = this.buildTextContents(i.finalText);\n          for (\n            e = S.length, m = i.ps ? i.ps[1] + i.ascent : 0, t = 0;\n            t < e;\n            t += 1\n          )\n            ((n = this.textSpans[t].span || createNS(\"tspan\")).textContent =\n              S[t]),\n              n.setAttribute(\"x\", 0),\n              n.setAttribute(\"y\", m),\n              (n.style.display = \"inherit\"),\n              P.appendChild(n),\n              this.textSpans[t] ||\n                (this.textSpans[t] = { span: null, glyph: null }),\n              (this.textSpans[t].span = n),\n              (m += i.finalLineHeight);\n          this.layerElement.appendChild(P);\n        }\n        for (; t < this.textSpans.length; )\n          (this.textSpans[t].span.style.display = \"none\"), (t += 1);\n        this._sizeChanged = !0;\n      }),\n      (SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n        if (\n          (this.prepareFrame(this.comp.renderedFrame - this.data.st),\n          this.renderInnerContent(),\n          this._sizeChanged)\n        ) {\n          this._sizeChanged = !1;\n          var t = this.layerElement.getBBox();\n          this.bbox = { top: t.y, left: t.x, width: t.width, height: t.height };\n        }\n        return this.bbox;\n      }),\n      (SVGTextLottieElement.prototype.getValue = function () {\n        var t,\n          e,\n          i = this.textSpans.length;\n        for (this.renderedFrame = this.comp.renderedFrame, t = 0; t < i; t += 1)\n          (e = this.textSpans[t].glyph) &&\n            (e.prepareFrame(this.comp.renderedFrame - this.data.st),\n            e._mdf && (this._mdf = !0));\n      }),\n      (SVGTextLottieElement.prototype.renderInnerContent = function () {\n        if (\n          (this.validateText(),\n          (!this.data.singleShape || this._mdf) &&\n            (this.textAnimator.getMeasures(\n              this.textProperty.currentData,\n              this.lettersChangedFlag\n            ),\n            this.lettersChangedFlag || this.textAnimator.lettersChangedFlag))\n        ) {\n          var t, e;\n          this._sizeChanged = !0;\n          var i,\n            r,\n            s,\n            a = this.textAnimator.renderedLetters,\n            n = this.textProperty.currentData.l;\n          for (e = n.length, t = 0; t < e; t += 1)\n            n[t].n ||\n              ((i = a[t]),\n              (r = this.textSpans[t].span),\n              (s = this.textSpans[t].glyph) && s.renderFrame(),\n              i._mdf.m && r.setAttribute(\"transform\", i.m),\n              i._mdf.o && r.setAttribute(\"opacity\", i.o),\n              i._mdf.sw && r.setAttribute(\"stroke-width\", i.sw),\n              i._mdf.sc && r.setAttribute(\"stroke\", i.sc),\n              i._mdf.fc && r.setAttribute(\"fill\", i.fc));\n        }\n      }),\n      extendPrototype([IImageElement], ISolidElement),\n      (ISolidElement.prototype.createContent = function () {\n        var t = createNS(\"rect\");\n        t.setAttribute(\"width\", this.data.sw),\n          t.setAttribute(\"height\", this.data.sh),\n          t.setAttribute(\"fill\", this.data.sc),\n          this.layerElement.appendChild(t);\n      }),\n      (NullElement.prototype.prepareFrame = function (t) {\n        this.prepareProperties(t, !0);\n      }),\n      (NullElement.prototype.renderFrame = function () {}),\n      (NullElement.prototype.getBaseElement = function () {\n        return null;\n      }),\n      (NullElement.prototype.destroy = function () {}),\n      (NullElement.prototype.sourceRectAtTime = function () {}),\n      (NullElement.prototype.hide = function () {}),\n      extendPrototype(\n        [BaseElement, TransformElement, HierarchyElement, FrameElement],\n        NullElement\n      ),\n      extendPrototype([BaseRenderer], SVGRendererBase),\n      (SVGRendererBase.prototype.createNull = function (t) {\n        return new NullElement(t, this.globalData, this);\n      }),\n      (SVGRendererBase.prototype.createShape = function (t) {\n        return new SVGShapeElement(t, this.globalData, this);\n      }),\n      (SVGRendererBase.prototype.createText = function (t) {\n        return new SVGTextLottieElement(t, this.globalData, this);\n      }),\n      (SVGRendererBase.prototype.createImage = function (t) {\n        return new IImageElement(t, this.globalData, this);\n      }),\n      (SVGRendererBase.prototype.createSolid = function (t) {\n        return new ISolidElement(t, this.globalData, this);\n      }),\n      (SVGRendererBase.prototype.configAnimation = function (t) {\n        this.svgElement.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\"),\n          this.svgElement.setAttribute(\n            \"xmlns:xlink\",\n            \"http://www.w3.org/1999/xlink\"\n          ),\n          this.renderConfig.viewBoxSize\n            ? this.svgElement.setAttribute(\n                \"viewBox\",\n                this.renderConfig.viewBoxSize\n              )\n            : this.svgElement.setAttribute(\"viewBox\", \"0 0 \" + t.w + \" \" + t.h),\n          this.renderConfig.viewBoxOnly ||\n            (this.svgElement.setAttribute(\"width\", t.w),\n            this.svgElement.setAttribute(\"height\", t.h),\n            (this.svgElement.style.width = \"100%\"),\n            (this.svgElement.style.height = \"100%\"),\n            (this.svgElement.style.transform = \"translate3d(0,0,0)\"),\n            (this.svgElement.style.contentVisibility =\n              this.renderConfig.contentVisibility)),\n          this.renderConfig.width &&\n            this.svgElement.setAttribute(\"width\", this.renderConfig.width),\n          this.renderConfig.height &&\n            this.svgElement.setAttribute(\"height\", this.renderConfig.height),\n          this.renderConfig.className &&\n            this.svgElement.setAttribute(\"class\", this.renderConfig.className),\n          this.renderConfig.id &&\n            this.svgElement.setAttribute(\"id\", this.renderConfig.id),\n          void 0 !== this.renderConfig.focusable &&\n            this.svgElement.setAttribute(\n              \"focusable\",\n              this.renderConfig.focusable\n            ),\n          this.svgElement.setAttribute(\n            \"preserveAspectRatio\",\n            this.renderConfig.preserveAspectRatio\n          ),\n          this.animationItem.wrapper.appendChild(this.svgElement);\n        var e = this.globalData.defs;\n        this.setupGlobalData(t, e),\n          (this.globalData.progressiveLoad = this.renderConfig.progressiveLoad),\n          (this.data = t);\n        var i = createNS(\"clipPath\"),\n          r = createNS(\"rect\");\n        r.setAttribute(\"width\", t.w),\n          r.setAttribute(\"height\", t.h),\n          r.setAttribute(\"x\", 0),\n          r.setAttribute(\"y\", 0);\n        var s = createElementID();\n        i.setAttribute(\"id\", s),\n          i.appendChild(r),\n          this.layerElement.setAttribute(\n            \"clip-path\",\n            \"url(\" + getLocationHref() + \"#\" + s + \")\"\n          ),\n          e.appendChild(i),\n          (this.layers = t.layers),\n          (this.elements = createSizedArray(t.layers.length));\n      }),\n      (SVGRendererBase.prototype.destroy = function () {\n        var t;\n        this.animationItem.wrapper &&\n          (this.animationItem.wrapper.innerText = \"\"),\n          (this.layerElement = null),\n          (this.globalData.defs = null);\n        var e = this.layers ? this.layers.length : 0;\n        for (t = 0; t < e; t += 1)\n          this.elements[t] &&\n            this.elements[t].destroy &&\n            this.elements[t].destroy();\n        (this.elements.length = 0),\n          (this.destroyed = !0),\n          (this.animationItem = null);\n      }),\n      (SVGRendererBase.prototype.updateContainerSize = function () {}),\n      (SVGRendererBase.prototype.findIndexByInd = function (t) {\n        var e = 0,\n          i = this.layers.length;\n        for (e = 0; e < i; e += 1) if (this.layers[e].ind === t) return e;\n        return -1;\n      }),\n      (SVGRendererBase.prototype.buildItem = function (t) {\n        var e = this.elements;\n        if (!e[t] && 99 !== this.layers[t].ty) {\n          e[t] = !0;\n          var i = this.createItem(this.layers[t]);\n          if (\n            ((e[t] = i),\n            getExpressionsPlugin() &&\n              (0 === this.layers[t].ty &&\n                this.globalData.projectInterface.registerComposition(i),\n              i.initExpressions()),\n            this.appendElementInPos(i, t),\n            this.layers[t].tt)\n          ) {\n            var r =\n              \"tp\" in this.layers[t]\n                ? this.findIndexByInd(this.layers[t].tp)\n                : t - 1;\n            if (-1 === r) return;\n            if (this.elements[r] && !0 !== this.elements[r]) {\n              var s = e[r].getMatte(this.layers[t].tt);\n              i.setMatte(s);\n            } else this.buildItem(r), this.addPendingElement(i);\n          }\n        }\n      }),\n      (SVGRendererBase.prototype.checkPendingElements = function () {\n        for (; this.pendingElements.length; ) {\n          var t = this.pendingElements.pop();\n          if ((t.checkParenting(), t.data.tt))\n            for (var e = 0, i = this.elements.length; e < i; ) {\n              if (this.elements[e] === t) {\n                var r = \"tp\" in t.data ? this.findIndexByInd(t.data.tp) : e - 1,\n                  s = this.elements[r].getMatte(this.layers[e].tt);\n                t.setMatte(s);\n                break;\n              }\n              e += 1;\n            }\n        }\n      }),\n      (SVGRendererBase.prototype.renderFrame = function (t) {\n        if (this.renderedFrame !== t && !this.destroyed) {\n          var e;\n          null === t ? (t = this.renderedFrame) : (this.renderedFrame = t),\n            (this.globalData.frameNum = t),\n            (this.globalData.frameId += 1),\n            (this.globalData.projectInterface.currentFrame = t),\n            (this.globalData._mdf = !1);\n          var i = this.layers.length;\n          for (\n            this.completeLayers || this.checkLayers(t), e = i - 1;\n            e >= 0;\n            e -= 1\n          )\n            (this.completeLayers || this.elements[e]) &&\n              this.elements[e].prepareFrame(t - this.layers[e].st);\n          if (this.globalData._mdf)\n            for (e = 0; e < i; e += 1)\n              (this.completeLayers || this.elements[e]) &&\n                this.elements[e].renderFrame();\n        }\n      }),\n      (SVGRendererBase.prototype.appendElementInPos = function (t, e) {\n        var i = t.getBaseElement();\n        if (i) {\n          for (var r, s = 0; s < e; )\n            this.elements[s] &&\n              !0 !== this.elements[s] &&\n              this.elements[s].getBaseElement() &&\n              (r = this.elements[s].getBaseElement()),\n              (s += 1);\n          r\n            ? this.layerElement.insertBefore(i, r)\n            : this.layerElement.appendChild(i);\n        }\n      }),\n      (SVGRendererBase.prototype.hide = function () {\n        this.layerElement.style.display = \"none\";\n      }),\n      (SVGRendererBase.prototype.show = function () {\n        this.layerElement.style.display = \"block\";\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableDOMElement,\n        ],\n        ICompElement\n      ),\n      (ICompElement.prototype.initElement = function (t, e, i) {\n        this.initFrame(),\n          this.initBaseData(t, e, i),\n          this.initTransform(t, e, i),\n          this.initRenderable(),\n          this.initHierarchy(),\n          this.initRendererElement(),\n          this.createContainerElements(),\n          this.createRenderableComponents(),\n          (!this.data.xt && e.progressiveLoad) || this.buildAllItems(),\n          this.hide();\n      }),\n      (ICompElement.prototype.prepareFrame = function (t) {\n        if (\n          ((this._mdf = !1),\n          this.prepareRenderableFrame(t),\n          this.prepareProperties(t, this.isInRange),\n          this.isInRange || this.data.xt)\n        ) {\n          if (this.tm._placeholder) this.renderedFrame = t / this.data.sr;\n          else {\n            var e = this.tm.v;\n            e === this.data.op && (e = this.data.op - 1),\n              (this.renderedFrame = e);\n          }\n          var i,\n            r = this.elements.length;\n          for (\n            this.completeLayers || this.checkLayers(this.renderedFrame),\n              i = r - 1;\n            i >= 0;\n            i -= 1\n          )\n            (this.completeLayers || this.elements[i]) &&\n              (this.elements[i].prepareFrame(\n                this.renderedFrame - this.layers[i].st\n              ),\n              this.elements[i]._mdf && (this._mdf = !0));\n        }\n      }),\n      (ICompElement.prototype.renderInnerContent = function () {\n        var t,\n          e = this.layers.length;\n        for (t = 0; t < e; t += 1)\n          (this.completeLayers || this.elements[t]) &&\n            this.elements[t].renderFrame();\n      }),\n      (ICompElement.prototype.setElements = function (t) {\n        this.elements = t;\n      }),\n      (ICompElement.prototype.getElements = function () {\n        return this.elements;\n      }),\n      (ICompElement.prototype.destroyElements = function () {\n        var t,\n          e = this.layers.length;\n        for (t = 0; t < e; t += 1)\n          this.elements[t] && this.elements[t].destroy();\n      }),\n      (ICompElement.prototype.destroy = function () {\n        this.destroyElements(), this.destroyBaseElement();\n      }),\n      extendPrototype(\n        [SVGRendererBase, ICompElement, SVGBaseElement],\n        SVGCompElement\n      ),\n      (SVGCompElement.prototype.createComp = function (t) {\n        return new SVGCompElement(t, this.globalData, this);\n      }),\n      extendPrototype([SVGRendererBase], SVGRenderer),\n      (SVGRenderer.prototype.createComp = function (t) {\n        return new SVGCompElement(t, this.globalData, this);\n      }),\n      (ShapeTransformManager.prototype = {\n        addTransformSequence: function (t) {\n          var e,\n            i = t.length,\n            r = \"_\";\n          for (e = 0; e < i; e += 1) r += t[e].transform.key + \"_\";\n          var s = this.sequences[r];\n          return (\n            s ||\n              ((s = {\n                transforms: [].concat(t),\n                finalTransform: new Matrix(),\n                _mdf: !1,\n              }),\n              (this.sequences[r] = s),\n              this.sequenceList.push(s)),\n            s\n          );\n        },\n        processSequence: function (t, e) {\n          for (var i = 0, r = t.transforms.length, s = e; i < r && !e; ) {\n            if (t.transforms[i].transform.mProps._mdf) {\n              s = !0;\n              break;\n            }\n            i += 1;\n          }\n          if (s)\n            for (t.finalTransform.reset(), i = r - 1; i >= 0; i -= 1)\n              t.finalTransform.multiply(t.transforms[i].transform.mProps.v);\n          t._mdf = s;\n        },\n        processSequences: function (t) {\n          var e,\n            i = this.sequenceList.length;\n          for (e = 0; e < i; e += 1)\n            this.processSequence(this.sequenceList[e], t);\n        },\n        getNewKey: function () {\n          return (\n            (this.transform_key_count += 1), \"_\" + this.transform_key_count\n          );\n        },\n      });\n    var lumaLoader = function () {\n      var t = \"__lottie_element_luma_buffer\",\n        e = null,\n        i = null,\n        r = null;\n      function s() {\n        var s, a, n;\n        e ||\n          ((s = createNS(\"svg\")),\n          (a = createNS(\"filter\")),\n          (n = createNS(\"feColorMatrix\")),\n          a.setAttribute(\"id\", t),\n          n.setAttribute(\"type\", \"matrix\"),\n          n.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n          n.setAttribute(\n            \"values\",\n            \"0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0\"\n          ),\n          a.appendChild(n),\n          s.appendChild(a),\n          s.setAttribute(\"id\", t + \"_svg\"),\n          featureSupport.svgLumaHidden && (s.style.display = \"none\"),\n          (r = s),\n          document.body.appendChild(r),\n          (e = createTag(\"canvas\")),\n          ((i = e.getContext(\"2d\")).filter = \"url(#\" + t + \")\"),\n          (i.fillStyle = \"rgba(0,0,0,0)\"),\n          i.fillRect(0, 0, 1, 1));\n      }\n      return {\n        load: s,\n        get: function (r) {\n          return (\n            e || s(),\n            (e.width = r.width),\n            (e.height = r.height),\n            (i.filter = \"url(#\" + t + \")\"),\n            e\n          );\n        },\n      };\n    };\n    function createCanvas(t, e) {\n      if (featureSupport.offscreenCanvas) return new OffscreenCanvas(t, e);\n      var i = createTag(\"canvas\");\n      return (i.width = t), (i.height = e), i;\n    }\n    var assetLoader = {\n        loadLumaCanvas: lumaLoader.load,\n        getLumaCanvas: lumaLoader.get,\n        createCanvas: createCanvas,\n      },\n      registeredEffects = {};\n    function CVEffects(t) {\n      var e,\n        i,\n        r = t.data.ef ? t.data.ef.length : 0;\n      for (this.filters = [], e = 0; e < r; e += 1) {\n        i = null;\n        var s = t.data.ef[e].ty;\n        if (registeredEffects[s])\n          i = new (0, registeredEffects[s].effect)(\n            t.effectsManager.effectElements[e],\n            t\n          );\n        i && this.filters.push(i);\n      }\n      this.filters.length && t.addRenderableComponent(this);\n    }\n    function registerEffect(t, e) {\n      registeredEffects[t] = { effect: e };\n    }\n    function CVMaskElement(t, e) {\n      var i;\n      (this.data = t),\n        (this.element = e),\n        (this.masksProperties = this.data.masksProperties || []),\n        (this.viewData = createSizedArray(this.masksProperties.length));\n      var r = this.masksProperties.length,\n        s = !1;\n      for (i = 0; i < r; i += 1)\n        \"n\" !== this.masksProperties[i].mode && (s = !0),\n          (this.viewData[i] = ShapePropertyFactory.getShapeProp(\n            this.element,\n            this.masksProperties[i],\n            3\n          ));\n      (this.hasMasks = s), s && this.element.addRenderableComponent(this);\n    }\n    function CVBaseElement() {}\n    (CVEffects.prototype.renderFrame = function (t) {\n      var e,\n        i = this.filters.length;\n      for (e = 0; e < i; e += 1) this.filters[e].renderFrame(t);\n    }),\n      (CVEffects.prototype.getEffects = function (t) {\n        var e,\n          i = this.filters.length,\n          r = [];\n        for (e = 0; e < i; e += 1)\n          this.filters[e].type === t && r.push(this.filters[e]);\n        return r;\n      }),\n      (CVMaskElement.prototype.renderFrame = function () {\n        if (this.hasMasks) {\n          var t,\n            e,\n            i,\n            r,\n            s = this.element.finalTransform.mat,\n            a = this.element.canvasContext,\n            n = this.masksProperties.length;\n          for (a.beginPath(), t = 0; t < n; t += 1)\n            if (\"n\" !== this.masksProperties[t].mode) {\n              var o;\n              this.masksProperties[t].inv &&\n                (a.moveTo(0, 0),\n                a.lineTo(this.element.globalData.compSize.w, 0),\n                a.lineTo(\n                  this.element.globalData.compSize.w,\n                  this.element.globalData.compSize.h\n                ),\n                a.lineTo(0, this.element.globalData.compSize.h),\n                a.lineTo(0, 0)),\n                (r = this.viewData[t].v),\n                (e = s.applyToPointArray(r.v[0][0], r.v[0][1], 0)),\n                a.moveTo(e[0], e[1]);\n              var h = r._length;\n              for (o = 1; o < h; o += 1)\n                (i = s.applyToTriplePoints(r.o[o - 1], r.i[o], r.v[o])),\n                  a.bezierCurveTo(i[0], i[1], i[2], i[3], i[4], i[5]);\n              (i = s.applyToTriplePoints(r.o[o - 1], r.i[0], r.v[0])),\n                a.bezierCurveTo(i[0], i[1], i[2], i[3], i[4], i[5]);\n            }\n          this.element.globalData.renderer.save(!0), a.clip();\n        }\n      }),\n      (CVMaskElement.prototype.getMaskProperty =\n        MaskElement.prototype.getMaskProperty),\n      (CVMaskElement.prototype.destroy = function () {\n        this.element = null;\n      });\n    var operationsMap = {\n      1: \"source-in\",\n      2: \"source-out\",\n      3: \"source-in\",\n      4: \"source-out\",\n    };\n    function CVShapeData(t, e, i, r) {\n      (this.styledShapes = []), (this.tr = [0, 0, 0, 0, 0, 0]);\n      var s,\n        a = 4;\n      \"rc\" === e.ty\n        ? (a = 5)\n        : \"el\" === e.ty\n        ? (a = 6)\n        : \"sr\" === e.ty && (a = 7),\n        (this.sh = ShapePropertyFactory.getShapeProp(t, e, a, t));\n      var n,\n        o = i.length;\n      for (s = 0; s < o; s += 1)\n        i[s].closed ||\n          ((n = {\n            transforms: r.addTransformSequence(i[s].transforms),\n            trNodes: [],\n          }),\n          this.styledShapes.push(n),\n          i[s].elements.push(n));\n    }\n    function CVShapeElement(t, e, i) {\n      (this.shapes = []),\n        (this.shapesData = t.shapes),\n        (this.stylesList = []),\n        (this.itemsData = []),\n        (this.prevViewData = []),\n        (this.shapeModifiers = []),\n        (this.processedElements = []),\n        (this.transformsManager = new ShapeTransformManager()),\n        this.initElement(t, e, i);\n    }\n    function CVTextElement(t, e, i) {\n      (this.textSpans = []),\n        (this.yOffset = 0),\n        (this.fillColorAnim = !1),\n        (this.strokeColorAnim = !1),\n        (this.strokeWidthAnim = !1),\n        (this.stroke = !1),\n        (this.fill = !1),\n        (this.justifyOffset = 0),\n        (this.currentRender = null),\n        (this.renderType = \"canvas\"),\n        (this.values = {\n          fill: \"rgba(0,0,0,0)\",\n          stroke: \"rgba(0,0,0,0)\",\n          sWidth: 0,\n          fValue: \"\",\n        }),\n        this.initElement(t, e, i);\n    }\n    function CVImageElement(t, e, i) {\n      (this.assetData = e.getAssetData(t.refId)),\n        (this.img = e.imageLoader.getAsset(this.assetData)),\n        this.initElement(t, e, i);\n    }\n    function CVSolidElement(t, e, i) {\n      this.initElement(t, e, i);\n    }\n    function CanvasRendererBase() {}\n    function CanvasContext() {\n      (this.opacity = -1),\n        (this.transform = createTypedArray(\"float32\", 16)),\n        (this.fillStyle = \"\"),\n        (this.strokeStyle = \"\"),\n        (this.lineWidth = \"\"),\n        (this.lineCap = \"\"),\n        (this.lineJoin = \"\"),\n        (this.miterLimit = \"\"),\n        (this.id = Math.random());\n    }\n    function CVContextData() {\n      var t;\n      (this.stack = []), (this.cArrPos = 0), (this.cTr = new Matrix());\n      for (t = 0; t < 15; t += 1) {\n        var e = new CanvasContext();\n        this.stack[t] = e;\n      }\n      (this._length = 15),\n        (this.nativeContext = null),\n        (this.transformMat = new Matrix()),\n        (this.currentOpacity = 1),\n        (this.currentFillStyle = \"\"),\n        (this.appliedFillStyle = \"\"),\n        (this.currentStrokeStyle = \"\"),\n        (this.appliedStrokeStyle = \"\"),\n        (this.currentLineWidth = \"\"),\n        (this.appliedLineWidth = \"\"),\n        (this.currentLineCap = \"\"),\n        (this.appliedLineCap = \"\"),\n        (this.currentLineJoin = \"\"),\n        (this.appliedLineJoin = \"\"),\n        (this.appliedMiterLimit = \"\"),\n        (this.currentMiterLimit = \"\");\n    }\n    function CVCompElement(t, e, i) {\n      (this.completeLayers = !1),\n        (this.layers = t.layers),\n        (this.pendingElements = []),\n        (this.elements = createSizedArray(this.layers.length)),\n        this.initElement(t, e, i),\n        (this.tm = t.tm\n          ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this)\n          : { _placeholder: !0 });\n    }\n    function CanvasRenderer(t, e) {\n      (this.animationItem = t),\n        (this.renderConfig = {\n          clearCanvas: !e || void 0 === e.clearCanvas || e.clearCanvas,\n          context: (e && e.context) || null,\n          progressiveLoad: (e && e.progressiveLoad) || !1,\n          preserveAspectRatio: (e && e.preserveAspectRatio) || \"xMidYMid meet\",\n          imagePreserveAspectRatio:\n            (e && e.imagePreserveAspectRatio) || \"xMidYMid slice\",\n          contentVisibility: (e && e.contentVisibility) || \"visible\",\n          className: (e && e.className) || \"\",\n          id: (e && e.id) || \"\",\n          runExpressions: !e || void 0 === e.runExpressions || e.runExpressions,\n        }),\n        (this.renderConfig.dpr = (e && e.dpr) || 1),\n        this.animationItem.wrapper &&\n          (this.renderConfig.dpr =\n            (e && e.dpr) || window.devicePixelRatio || 1),\n        (this.renderedFrame = -1),\n        (this.globalData = {\n          frameNum: -1,\n          _mdf: !1,\n          renderConfig: this.renderConfig,\n          currentGlobalAlpha: -1,\n        }),\n        (this.contextData = new CVContextData()),\n        (this.elements = []),\n        (this.pendingElements = []),\n        (this.transformMat = new Matrix()),\n        (this.completeLayers = !1),\n        (this.rendererType = \"canvas\"),\n        this.renderConfig.clearCanvas &&\n          ((this.ctxTransform = this.contextData.transform.bind(\n            this.contextData\n          )),\n          (this.ctxOpacity = this.contextData.opacity.bind(this.contextData)),\n          (this.ctxFillStyle = this.contextData.fillStyle.bind(\n            this.contextData\n          )),\n          (this.ctxStrokeStyle = this.contextData.strokeStyle.bind(\n            this.contextData\n          )),\n          (this.ctxLineWidth = this.contextData.lineWidth.bind(\n            this.contextData\n          )),\n          (this.ctxLineCap = this.contextData.lineCap.bind(this.contextData)),\n          (this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData)),\n          (this.ctxMiterLimit = this.contextData.miterLimit.bind(\n            this.contextData\n          )),\n          (this.ctxFill = this.contextData.fill.bind(this.contextData)),\n          (this.ctxFillRect = this.contextData.fillRect.bind(this.contextData)),\n          (this.ctxStroke = this.contextData.stroke.bind(this.contextData)),\n          (this.save = this.contextData.save.bind(this.contextData)));\n    }\n    function HBaseElement() {}\n    function HSolidElement(t, e, i) {\n      this.initElement(t, e, i);\n    }\n    function HShapeElement(t, e, i) {\n      (this.shapes = []),\n        (this.shapesData = t.shapes),\n        (this.stylesList = []),\n        (this.shapeModifiers = []),\n        (this.itemsData = []),\n        (this.processedElements = []),\n        (this.animatedContents = []),\n        (this.shapesContainer = createNS(\"g\")),\n        this.initElement(t, e, i),\n        (this.prevViewData = []),\n        (this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 });\n    }\n    function HTextElement(t, e, i) {\n      (this.textSpans = []),\n        (this.textPaths = []),\n        (this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 }),\n        (this.renderType = \"svg\"),\n        (this.isMasked = !1),\n        this.initElement(t, e, i);\n    }\n    function HCameraElement(t, e, i) {\n      this.initFrame(), this.initBaseData(t, e, i), this.initHierarchy();\n      var r = PropertyFactory.getProp;\n      if (\n        ((this.pe = r(this, t.pe, 0, 0, this)),\n        t.ks.p.s\n          ? ((this.px = r(this, t.ks.p.x, 1, 0, this)),\n            (this.py = r(this, t.ks.p.y, 1, 0, this)),\n            (this.pz = r(this, t.ks.p.z, 1, 0, this)))\n          : (this.p = r(this, t.ks.p, 1, 0, this)),\n        t.ks.a && (this.a = r(this, t.ks.a, 1, 0, this)),\n        t.ks.or.k.length && t.ks.or.k[0].to)\n      ) {\n        var s,\n          a = t.ks.or.k.length;\n        for (s = 0; s < a; s += 1)\n          (t.ks.or.k[s].to = null), (t.ks.or.k[s].ti = null);\n      }\n      (this.or = r(this, t.ks.or, 1, degToRads, this)),\n        (this.or.sh = !0),\n        (this.rx = r(this, t.ks.rx, 0, degToRads, this)),\n        (this.ry = r(this, t.ks.ry, 0, degToRads, this)),\n        (this.rz = r(this, t.ks.rz, 0, degToRads, this)),\n        (this.mat = new Matrix()),\n        (this._prevMat = new Matrix()),\n        (this._isFirstFrame = !0),\n        (this.finalTransform = { mProp: this });\n    }\n    function HImageElement(t, e, i) {\n      (this.assetData = e.getAssetData(t.refId)), this.initElement(t, e, i);\n    }\n    function HybridRendererBase(t, e) {\n      (this.animationItem = t),\n        (this.layers = null),\n        (this.renderedFrame = -1),\n        (this.renderConfig = {\n          className: (e && e.className) || \"\",\n          imagePreserveAspectRatio:\n            (e && e.imagePreserveAspectRatio) || \"xMidYMid slice\",\n          hideOnTransparent: !(e && !1 === e.hideOnTransparent),\n          filterSize: {\n            width: (e && e.filterSize && e.filterSize.width) || \"400%\",\n            height: (e && e.filterSize && e.filterSize.height) || \"400%\",\n            x: (e && e.filterSize && e.filterSize.x) || \"-100%\",\n            y: (e && e.filterSize && e.filterSize.y) || \"-100%\",\n          },\n        }),\n        (this.globalData = {\n          _mdf: !1,\n          frameNum: -1,\n          renderConfig: this.renderConfig,\n        }),\n        (this.pendingElements = []),\n        (this.elements = []),\n        (this.threeDElements = []),\n        (this.destroyed = !1),\n        (this.camera = null),\n        (this.supports3d = !0),\n        (this.rendererType = \"html\");\n    }\n    function HCompElement(t, e, i) {\n      (this.layers = t.layers),\n        (this.supports3d = !t.hasMask),\n        (this.completeLayers = !1),\n        (this.pendingElements = []),\n        (this.elements = this.layers\n          ? createSizedArray(this.layers.length)\n          : []),\n        this.initElement(t, e, i),\n        (this.tm = t.tm\n          ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this)\n          : { _placeholder: !0 });\n    }\n    function HybridRenderer(t, e) {\n      (this.animationItem = t),\n        (this.layers = null),\n        (this.renderedFrame = -1),\n        (this.renderConfig = {\n          className: (e && e.className) || \"\",\n          imagePreserveAspectRatio:\n            (e && e.imagePreserveAspectRatio) || \"xMidYMid slice\",\n          hideOnTransparent: !(e && !1 === e.hideOnTransparent),\n          filterSize: {\n            width: (e && e.filterSize && e.filterSize.width) || \"400%\",\n            height: (e && e.filterSize && e.filterSize.height) || \"400%\",\n            x: (e && e.filterSize && e.filterSize.x) || \"-100%\",\n            y: (e && e.filterSize && e.filterSize.y) || \"-100%\",\n          },\n          runExpressions: !e || void 0 === e.runExpressions || e.runExpressions,\n        }),\n        (this.globalData = {\n          _mdf: !1,\n          frameNum: -1,\n          renderConfig: this.renderConfig,\n        }),\n        (this.pendingElements = []),\n        (this.elements = []),\n        (this.threeDElements = []),\n        (this.destroyed = !1),\n        (this.camera = null),\n        (this.supports3d = !0),\n        (this.rendererType = \"html\");\n    }\n    (CVBaseElement.prototype = {\n      createElements: function () {},\n      initRendererElement: function () {},\n      createContainerElements: function () {\n        if (this.data.tt >= 1) {\n          this.buffers = [];\n          var t = this.globalData.canvasContext,\n            e = assetLoader.createCanvas(t.canvas.width, t.canvas.height);\n          this.buffers.push(e);\n          var i = assetLoader.createCanvas(t.canvas.width, t.canvas.height);\n          this.buffers.push(i),\n            this.data.tt >= 3 &&\n              !document._isProxy &&\n              assetLoader.loadLumaCanvas();\n        }\n        (this.canvasContext = this.globalData.canvasContext),\n          (this.transformCanvas = this.globalData.transformCanvas),\n          (this.renderableEffectsManager = new CVEffects(this)),\n          this.searchEffectTransforms();\n      },\n      createContent: function () {},\n      setBlendMode: function () {\n        var t = this.globalData;\n        if (t.blendMode !== this.data.bm) {\n          t.blendMode = this.data.bm;\n          var e = getBlendMode(this.data.bm);\n          t.canvasContext.globalCompositeOperation = e;\n        }\n      },\n      createRenderableComponents: function () {\n        (this.maskManager = new CVMaskElement(this.data, this)),\n          (this.transformEffects = this.renderableEffectsManager.getEffects(\n            effectTypes.TRANSFORM_EFFECT\n          ));\n      },\n      hideElement: function () {\n        this.hidden ||\n          (this.isInRange && !this.isTransparent) ||\n          (this.hidden = !0);\n      },\n      showElement: function () {\n        this.isInRange &&\n          !this.isTransparent &&\n          ((this.hidden = !1),\n          (this._isFirstFrame = !0),\n          (this.maskManager._isFirstFrame = !0));\n      },\n      clearCanvas: function (t) {\n        t.clearRect(\n          this.transformCanvas.tx,\n          this.transformCanvas.ty,\n          this.transformCanvas.w * this.transformCanvas.sx,\n          this.transformCanvas.h * this.transformCanvas.sy\n        );\n      },\n      prepareLayer: function () {\n        if (this.data.tt >= 1) {\n          var t = this.buffers[0].getContext(\"2d\");\n          this.clearCanvas(t),\n            t.drawImage(this.canvasContext.canvas, 0, 0),\n            (this.currentTransform = this.canvasContext.getTransform()),\n            this.canvasContext.setTransform(1, 0, 0, 1, 0, 0),\n            this.clearCanvas(this.canvasContext),\n            this.canvasContext.setTransform(this.currentTransform);\n        }\n      },\n      exitLayer: function () {\n        if (this.data.tt >= 1) {\n          var t = this.buffers[1],\n            e = t.getContext(\"2d\");\n          if (\n            (this.clearCanvas(e),\n            e.drawImage(this.canvasContext.canvas, 0, 0),\n            this.canvasContext.setTransform(1, 0, 0, 1, 0, 0),\n            this.clearCanvas(this.canvasContext),\n            this.canvasContext.setTransform(this.currentTransform),\n            this.comp\n              .getElementById(\n                \"tp\" in this.data ? this.data.tp : this.data.ind - 1\n              )\n              .renderFrame(!0),\n            this.canvasContext.setTransform(1, 0, 0, 1, 0, 0),\n            this.data.tt >= 3 && !document._isProxy)\n          ) {\n            var i = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n            i.getContext(\"2d\").drawImage(this.canvasContext.canvas, 0, 0),\n              this.clearCanvas(this.canvasContext),\n              this.canvasContext.drawImage(i, 0, 0);\n          }\n          (this.canvasContext.globalCompositeOperation =\n            operationsMap[this.data.tt]),\n            this.canvasContext.drawImage(t, 0, 0),\n            (this.canvasContext.globalCompositeOperation = \"destination-over\"),\n            this.canvasContext.drawImage(this.buffers[0], 0, 0),\n            this.canvasContext.setTransform(this.currentTransform),\n            (this.canvasContext.globalCompositeOperation = \"source-over\");\n        }\n      },\n      renderFrame: function (t) {\n        if (!this.hidden && !this.data.hd && (1 !== this.data.td || t)) {\n          this.renderTransform(),\n            this.renderRenderable(),\n            this.renderLocalTransform(),\n            this.setBlendMode();\n          var e = 0 === this.data.ty;\n          this.prepareLayer(),\n            this.globalData.renderer.save(e),\n            this.globalData.renderer.ctxTransform(\n              this.finalTransform.localMat.props\n            ),\n            this.globalData.renderer.ctxOpacity(\n              this.finalTransform.localOpacity\n            ),\n            this.renderInnerContent(),\n            this.globalData.renderer.restore(e),\n            this.exitLayer(),\n            this.maskManager.hasMasks && this.globalData.renderer.restore(!0),\n            this._isFirstFrame && (this._isFirstFrame = !1);\n        }\n      },\n      destroy: function () {\n        (this.canvasContext = null),\n          (this.data = null),\n          (this.globalData = null),\n          this.maskManager.destroy();\n      },\n      mHelper: new Matrix(),\n    }),\n      (CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement),\n      (CVBaseElement.prototype.show = CVBaseElement.prototype.showElement),\n      (CVShapeData.prototype.setAsAnimated =\n        SVGShapeData.prototype.setAsAnimated),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          CVBaseElement,\n          IShapeElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n        ],\n        CVShapeElement\n      ),\n      (CVShapeElement.prototype.initElement =\n        RenderableDOMElement.prototype.initElement),\n      (CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: !1 }),\n      (CVShapeElement.prototype.dashResetter = []),\n      (CVShapeElement.prototype.createContent = function () {\n        this.searchShapes(\n          this.shapesData,\n          this.itemsData,\n          this.prevViewData,\n          !0,\n          []\n        );\n      }),\n      (CVShapeElement.prototype.createStyleElement = function (t, e) {\n        var i = {\n            data: t,\n            type: t.ty,\n            preTransforms: this.transformsManager.addTransformSequence(e),\n            transforms: [],\n            elements: [],\n            closed: !0 === t.hd,\n          },\n          r = {};\n        if (\n          (\"fl\" === t.ty || \"st\" === t.ty\n            ? ((r.c = PropertyFactory.getProp(this, t.c, 1, 255, this)),\n              r.c.k ||\n                (i.co =\n                  \"rgb(\" +\n                  bmFloor(r.c.v[0]) +\n                  \",\" +\n                  bmFloor(r.c.v[1]) +\n                  \",\" +\n                  bmFloor(r.c.v[2]) +\n                  \")\"))\n            : (\"gf\" !== t.ty && \"gs\" !== t.ty) ||\n              ((r.s = PropertyFactory.getProp(this, t.s, 1, null, this)),\n              (r.e = PropertyFactory.getProp(this, t.e, 1, null, this)),\n              (r.h = PropertyFactory.getProp(\n                this,\n                t.h || { k: 0 },\n                0,\n                0.01,\n                this\n              )),\n              (r.a = PropertyFactory.getProp(\n                this,\n                t.a || { k: 0 },\n                0,\n                degToRads,\n                this\n              )),\n              (r.g = new GradientProperty(this, t.g, this))),\n          (r.o = PropertyFactory.getProp(this, t.o, 0, 0.01, this)),\n          \"st\" === t.ty || \"gs\" === t.ty)\n        ) {\n          if (\n            ((i.lc = lineCapEnum[t.lc || 2]),\n            (i.lj = lineJoinEnum[t.lj || 2]),\n            1 == t.lj && (i.ml = t.ml),\n            (r.w = PropertyFactory.getProp(this, t.w, 0, null, this)),\n            r.w.k || (i.wi = r.w.v),\n            t.d)\n          ) {\n            var s = new DashProperty(this, t.d, \"canvas\", this);\n            (r.d = s),\n              r.d.k || ((i.da = r.d.dashArray), (i.do = r.d.dashoffset[0]));\n          }\n        } else i.r = 2 === t.r ? \"evenodd\" : \"nonzero\";\n        return this.stylesList.push(i), (r.style = i), r;\n      }),\n      (CVShapeElement.prototype.createGroupElement = function () {\n        return { it: [], prevViewData: [] };\n      }),\n      (CVShapeElement.prototype.createTransformElement = function (t) {\n        return {\n          transform: {\n            opacity: 1,\n            _opMdf: !1,\n            key: this.transformsManager.getNewKey(),\n            op: PropertyFactory.getProp(this, t.o, 0, 0.01, this),\n            mProps: TransformPropertyFactory.getTransformProperty(\n              this,\n              t,\n              this\n            ),\n          },\n        };\n      }),\n      (CVShapeElement.prototype.createShapeElement = function (t) {\n        var e = new CVShapeData(\n          this,\n          t,\n          this.stylesList,\n          this.transformsManager\n        );\n        return this.shapes.push(e), this.addShapeToModifiers(e), e;\n      }),\n      (CVShapeElement.prototype.reloadShapes = function () {\n        var t;\n        this._isFirstFrame = !0;\n        var e = this.itemsData.length;\n        for (t = 0; t < e; t += 1) this.prevViewData[t] = this.itemsData[t];\n        for (\n          this.searchShapes(\n            this.shapesData,\n            this.itemsData,\n            this.prevViewData,\n            !0,\n            []\n          ),\n            e = this.dynamicProperties.length,\n            t = 0;\n          t < e;\n          t += 1\n        )\n          this.dynamicProperties[t].getValue();\n        this.renderModifiers(),\n          this.transformsManager.processSequences(this._isFirstFrame);\n      }),\n      (CVShapeElement.prototype.addTransformToStyleList = function (t) {\n        var e,\n          i = this.stylesList.length;\n        for (e = 0; e < i; e += 1)\n          this.stylesList[e].closed || this.stylesList[e].transforms.push(t);\n      }),\n      (CVShapeElement.prototype.removeTransformFromStyleList = function () {\n        var t,\n          e = this.stylesList.length;\n        for (t = 0; t < e; t += 1)\n          this.stylesList[t].closed || this.stylesList[t].transforms.pop();\n      }),\n      (CVShapeElement.prototype.closeStyles = function (t) {\n        var e,\n          i = t.length;\n        for (e = 0; e < i; e += 1) t[e].closed = !0;\n      }),\n      (CVShapeElement.prototype.searchShapes = function (t, e, i, r, s) {\n        var a,\n          n,\n          o,\n          h,\n          l,\n          p,\n          f = t.length - 1,\n          m = [],\n          c = [],\n          d = [].concat(s);\n        for (a = f; a >= 0; a -= 1) {\n          if (\n            ((h = this.searchProcessedElement(t[a]))\n              ? (e[a] = i[h - 1])\n              : (t[a]._shouldRender = r),\n            \"fl\" === t[a].ty ||\n              \"st\" === t[a].ty ||\n              \"gf\" === t[a].ty ||\n              \"gs\" === t[a].ty)\n          )\n            h\n              ? (e[a].style.closed = !1)\n              : (e[a] = this.createStyleElement(t[a], d)),\n              m.push(e[a].style);\n          else if (\"gr\" === t[a].ty) {\n            if (h)\n              for (o = e[a].it.length, n = 0; n < o; n += 1)\n                e[a].prevViewData[n] = e[a].it[n];\n            else e[a] = this.createGroupElement(t[a]);\n            this.searchShapes(t[a].it, e[a].it, e[a].prevViewData, r, d);\n          } else\n            \"tr\" === t[a].ty\n              ? (h || ((p = this.createTransformElement(t[a])), (e[a] = p)),\n                d.push(e[a]),\n                this.addTransformToStyleList(e[a]))\n              : \"sh\" === t[a].ty ||\n                \"rc\" === t[a].ty ||\n                \"el\" === t[a].ty ||\n                \"sr\" === t[a].ty\n              ? h || (e[a] = this.createShapeElement(t[a]))\n              : \"tm\" === t[a].ty ||\n                \"rd\" === t[a].ty ||\n                \"pb\" === t[a].ty ||\n                \"zz\" === t[a].ty ||\n                \"op\" === t[a].ty\n              ? (h\n                  ? ((l = e[a]).closed = !1)\n                  : ((l = ShapeModifiers.getModifier(t[a].ty)).init(this, t[a]),\n                    (e[a] = l),\n                    this.shapeModifiers.push(l)),\n                c.push(l))\n              : \"rp\" === t[a].ty &&\n                (h\n                  ? ((l = e[a]).closed = !0)\n                  : ((l = ShapeModifiers.getModifier(t[a].ty)),\n                    (e[a] = l),\n                    l.init(this, t, a, e),\n                    this.shapeModifiers.push(l),\n                    (r = !1)),\n                c.push(l));\n          this.addProcessedElement(t[a], a + 1);\n        }\n        for (\n          this.removeTransformFromStyleList(),\n            this.closeStyles(m),\n            f = c.length,\n            a = 0;\n          a < f;\n          a += 1\n        )\n          c[a].closed = !0;\n      }),\n      (CVShapeElement.prototype.renderInnerContent = function () {\n        (this.transformHelper.opacity = 1),\n          (this.transformHelper._opMdf = !1),\n          this.renderModifiers(),\n          this.transformsManager.processSequences(this._isFirstFrame),\n          this.renderShape(\n            this.transformHelper,\n            this.shapesData,\n            this.itemsData,\n            !0\n          );\n      }),\n      (CVShapeElement.prototype.renderShapeTransform = function (t, e) {\n        (t._opMdf || e.op._mdf || this._isFirstFrame) &&\n          ((e.opacity = t.opacity), (e.opacity *= e.op.v), (e._opMdf = !0));\n      }),\n      (CVShapeElement.prototype.drawLayer = function () {\n        var t,\n          e,\n          i,\n          r,\n          s,\n          a,\n          n,\n          o,\n          h,\n          l = this.stylesList.length,\n          p = this.globalData.renderer,\n          f = this.globalData.canvasContext;\n        for (t = 0; t < l; t += 1)\n          if (\n            ((\"st\" !== (o = (h = this.stylesList[t]).type) && \"gs\" !== o) ||\n              0 !== h.wi) &&\n            h.data._shouldRender &&\n            0 !== h.coOp &&\n            0 !== this.globalData.currentGlobalAlpha\n          ) {\n            for (\n              p.save(),\n                a = h.elements,\n                \"st\" === o || \"gs\" === o\n                  ? (p.ctxStrokeStyle(\"st\" === o ? h.co : h.grd),\n                    p.ctxLineWidth(h.wi),\n                    p.ctxLineCap(h.lc),\n                    p.ctxLineJoin(h.lj),\n                    p.ctxMiterLimit(h.ml || 0))\n                  : p.ctxFillStyle(\"fl\" === o ? h.co : h.grd),\n                p.ctxOpacity(h.coOp),\n                \"st\" !== o && \"gs\" !== o && f.beginPath(),\n                p.ctxTransform(h.preTransforms.finalTransform.props),\n                i = a.length,\n                e = 0;\n              e < i;\n              e += 1\n            ) {\n              for (\n                (\"st\" !== o && \"gs\" !== o) ||\n                  (f.beginPath(),\n                  h.da && (f.setLineDash(h.da), (f.lineDashOffset = h.do))),\n                  s = (n = a[e].trNodes).length,\n                  r = 0;\n                r < s;\n                r += 1\n              )\n                \"m\" === n[r].t\n                  ? f.moveTo(n[r].p[0], n[r].p[1])\n                  : \"c\" === n[r].t\n                  ? f.bezierCurveTo(\n                      n[r].pts[0],\n                      n[r].pts[1],\n                      n[r].pts[2],\n                      n[r].pts[3],\n                      n[r].pts[4],\n                      n[r].pts[5]\n                    )\n                  : f.closePath();\n              (\"st\" !== o && \"gs\" !== o) ||\n                (p.ctxStroke(), h.da && f.setLineDash(this.dashResetter));\n            }\n            \"st\" !== o && \"gs\" !== o && this.globalData.renderer.ctxFill(h.r),\n              p.restore();\n          }\n      }),\n      (CVShapeElement.prototype.renderShape = function (t, e, i, r) {\n        var s, a;\n        for (a = t, s = e.length - 1; s >= 0; s -= 1)\n          \"tr\" === e[s].ty\n            ? ((a = i[s].transform), this.renderShapeTransform(t, a))\n            : \"sh\" === e[s].ty ||\n              \"el\" === e[s].ty ||\n              \"rc\" === e[s].ty ||\n              \"sr\" === e[s].ty\n            ? this.renderPath(e[s], i[s])\n            : \"fl\" === e[s].ty\n            ? this.renderFill(e[s], i[s], a)\n            : \"st\" === e[s].ty\n            ? this.renderStroke(e[s], i[s], a)\n            : \"gf\" === e[s].ty || \"gs\" === e[s].ty\n            ? this.renderGradientFill(e[s], i[s], a)\n            : \"gr\" === e[s].ty\n            ? this.renderShape(a, e[s].it, i[s].it)\n            : e[s].ty;\n        r && this.drawLayer();\n      }),\n      (CVShapeElement.prototype.renderStyledShape = function (t, e) {\n        if (this._isFirstFrame || e._mdf || t.transforms._mdf) {\n          var i,\n            r,\n            s,\n            a = t.trNodes,\n            n = e.paths,\n            o = n._length;\n          a.length = 0;\n          var h = t.transforms.finalTransform;\n          for (s = 0; s < o; s += 1) {\n            var l = n.shapes[s];\n            if (l && l.v) {\n              for (r = l._length, i = 1; i < r; i += 1)\n                1 === i &&\n                  a.push({\n                    t: \"m\",\n                    p: h.applyToPointArray(l.v[0][0], l.v[0][1], 0),\n                  }),\n                  a.push({\n                    t: \"c\",\n                    pts: h.applyToTriplePoints(l.o[i - 1], l.i[i], l.v[i]),\n                  });\n              1 === r &&\n                a.push({\n                  t: \"m\",\n                  p: h.applyToPointArray(l.v[0][0], l.v[0][1], 0),\n                }),\n                l.c &&\n                  r &&\n                  (a.push({\n                    t: \"c\",\n                    pts: h.applyToTriplePoints(l.o[i - 1], l.i[0], l.v[0]),\n                  }),\n                  a.push({ t: \"z\" }));\n            }\n          }\n          t.trNodes = a;\n        }\n      }),\n      (CVShapeElement.prototype.renderPath = function (t, e) {\n        if (!0 !== t.hd && t._shouldRender) {\n          var i,\n            r = e.styledShapes.length;\n          for (i = 0; i < r; i += 1)\n            this.renderStyledShape(e.styledShapes[i], e.sh);\n        }\n      }),\n      (CVShapeElement.prototype.renderFill = function (t, e, i) {\n        var r = e.style;\n        (e.c._mdf || this._isFirstFrame) &&\n          (r.co =\n            \"rgb(\" +\n            bmFloor(e.c.v[0]) +\n            \",\" +\n            bmFloor(e.c.v[1]) +\n            \",\" +\n            bmFloor(e.c.v[2]) +\n            \")\"),\n          (e.o._mdf || i._opMdf || this._isFirstFrame) &&\n            (r.coOp = e.o.v * i.opacity);\n      }),\n      (CVShapeElement.prototype.renderGradientFill = function (t, e, i) {\n        var r,\n          s = e.style;\n        if (\n          !s.grd ||\n          e.g._mdf ||\n          e.s._mdf ||\n          e.e._mdf ||\n          (1 !== t.t && (e.h._mdf || e.a._mdf))\n        ) {\n          var a,\n            n = this.globalData.canvasContext,\n            o = e.s.v,\n            h = e.e.v;\n          if (1 === t.t) r = n.createLinearGradient(o[0], o[1], h[0], h[1]);\n          else {\n            var l = Math.sqrt(\n                Math.pow(o[0] - h[0], 2) + Math.pow(o[1] - h[1], 2)\n              ),\n              p = Math.atan2(h[1] - o[1], h[0] - o[0]),\n              f = e.h.v;\n            f >= 1 ? (f = 0.99) : f <= -1 && (f = -0.99);\n            var m = l * f,\n              c = Math.cos(p + e.a.v) * m + o[0],\n              d = Math.sin(p + e.a.v) * m + o[1];\n            r = n.createRadialGradient(c, d, 0, o[0], o[1], l);\n          }\n          var u = t.g.p,\n            y = e.g.c,\n            g = 1;\n          for (a = 0; a < u; a += 1)\n            e.g._hasOpacity && e.g._collapsable && (g = e.g.o[2 * a + 1]),\n              r.addColorStop(\n                y[4 * a] / 100,\n                \"rgba(\" +\n                  y[4 * a + 1] +\n                  \",\" +\n                  y[4 * a + 2] +\n                  \",\" +\n                  y[4 * a + 3] +\n                  \",\" +\n                  g +\n                  \")\"\n              );\n          s.grd = r;\n        }\n        s.coOp = e.o.v * i.opacity;\n      }),\n      (CVShapeElement.prototype.renderStroke = function (t, e, i) {\n        var r = e.style,\n          s = e.d;\n        s &&\n          (s._mdf || this._isFirstFrame) &&\n          ((r.da = s.dashArray), (r.do = s.dashoffset[0])),\n          (e.c._mdf || this._isFirstFrame) &&\n            (r.co =\n              \"rgb(\" +\n              bmFloor(e.c.v[0]) +\n              \",\" +\n              bmFloor(e.c.v[1]) +\n              \",\" +\n              bmFloor(e.c.v[2]) +\n              \")\"),\n          (e.o._mdf || i._opMdf || this._isFirstFrame) &&\n            (r.coOp = e.o.v * i.opacity),\n          (e.w._mdf || this._isFirstFrame) && (r.wi = e.w.v);\n      }),\n      (CVShapeElement.prototype.destroy = function () {\n        (this.shapesData = null),\n          (this.globalData = null),\n          (this.canvasContext = null),\n          (this.stylesList.length = 0),\n          (this.itemsData.length = 0);\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          CVBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n          ITextElement,\n        ],\n        CVTextElement\n      ),\n      (CVTextElement.prototype.tHelper = createTag(\"canvas\").getContext(\"2d\")),\n      (CVTextElement.prototype.buildNewText = function () {\n        var t = this.textProperty.currentData;\n        this.renderedLetters = createSizedArray(t.l ? t.l.length : 0);\n        var e = !1;\n        t.fc\n          ? ((e = !0), (this.values.fill = this.buildColor(t.fc)))\n          : (this.values.fill = \"rgba(0,0,0,0)\"),\n          (this.fill = e);\n        var i = !1;\n        t.sc &&\n          ((i = !0),\n          (this.values.stroke = this.buildColor(t.sc)),\n          (this.values.sWidth = t.sw));\n        var r,\n          s,\n          a,\n          n,\n          o,\n          h,\n          l,\n          p,\n          f,\n          m,\n          c,\n          d,\n          u = this.globalData.fontManager.getFontByName(t.f),\n          y = t.l,\n          g = this.mHelper;\n        (this.stroke = i),\n          (this.values.fValue =\n            t.finalSize +\n            \"px \" +\n            this.globalData.fontManager.getFontByName(t.f).fFamily),\n          (s = t.finalText.length);\n        var v = this.data.singleShape,\n          b = 0.001 * t.tr * t.finalSize,\n          x = 0,\n          P = 0,\n          E = !0,\n          S = 0;\n        for (r = 0; r < s; r += 1) {\n          (n =\n            ((a = this.globalData.fontManager.getCharData(\n              t.finalText[r],\n              u.fStyle,\n              this.globalData.fontManager.getFontByName(t.f).fFamily\n            )) &&\n              a.data) ||\n            {}),\n            g.reset(),\n            v &&\n              y[r].n &&\n              ((x = -b), (P += t.yOffset), (P += E ? 1 : 0), (E = !1)),\n            (f = (l = n.shapes ? n.shapes[0].it : []).length),\n            g.scale(t.finalSize / 100, t.finalSize / 100),\n            v && this.applyTextPropertiesToMatrix(t, g, y[r].line, x, P),\n            (c = createSizedArray(f - 1));\n          var C = 0;\n          for (p = 0; p < f; p += 1)\n            if (\"sh\" === l[p].ty) {\n              for (\n                h = l[p].ks.k.i.length, m = l[p].ks.k, d = [], o = 1;\n                o < h;\n                o += 1\n              )\n                1 === o &&\n                  d.push(\n                    g.applyToX(m.v[0][0], m.v[0][1], 0),\n                    g.applyToY(m.v[0][0], m.v[0][1], 0)\n                  ),\n                  d.push(\n                    g.applyToX(m.o[o - 1][0], m.o[o - 1][1], 0),\n                    g.applyToY(m.o[o - 1][0], m.o[o - 1][1], 0),\n                    g.applyToX(m.i[o][0], m.i[o][1], 0),\n                    g.applyToY(m.i[o][0], m.i[o][1], 0),\n                    g.applyToX(m.v[o][0], m.v[o][1], 0),\n                    g.applyToY(m.v[o][0], m.v[o][1], 0)\n                  );\n              d.push(\n                g.applyToX(m.o[o - 1][0], m.o[o - 1][1], 0),\n                g.applyToY(m.o[o - 1][0], m.o[o - 1][1], 0),\n                g.applyToX(m.i[0][0], m.i[0][1], 0),\n                g.applyToY(m.i[0][0], m.i[0][1], 0),\n                g.applyToX(m.v[0][0], m.v[0][1], 0),\n                g.applyToY(m.v[0][0], m.v[0][1], 0)\n              ),\n                (c[C] = d),\n                (C += 1);\n            }\n          v && ((x += y[r].l), (x += b)),\n            this.textSpans[S]\n              ? (this.textSpans[S].elem = c)\n              : (this.textSpans[S] = { elem: c }),\n            (S += 1);\n        }\n      }),\n      (CVTextElement.prototype.renderInnerContent = function () {\n        var t, e, i, r, s, a;\n        this.validateText(),\n          (this.canvasContext.font = this.values.fValue),\n          this.globalData.renderer.ctxLineCap(\"butt\"),\n          this.globalData.renderer.ctxLineJoin(\"miter\"),\n          this.globalData.renderer.ctxMiterLimit(4),\n          this.data.singleShape ||\n            this.textAnimator.getMeasures(\n              this.textProperty.currentData,\n              this.lettersChangedFlag\n            );\n        var n,\n          o = this.textAnimator.renderedLetters,\n          h = this.textProperty.currentData.l;\n        e = h.length;\n        var l,\n          p,\n          f = null,\n          m = null,\n          c = null,\n          d = this.globalData.renderer;\n        for (t = 0; t < e; t += 1)\n          if (!h[t].n) {\n            if (\n              ((n = o[t]) && (d.save(), d.ctxTransform(n.p), d.ctxOpacity(n.o)),\n              this.fill)\n            ) {\n              for (\n                n && n.fc\n                  ? f !== n.fc && (d.ctxFillStyle(n.fc), (f = n.fc))\n                  : f !== this.values.fill &&\n                    ((f = this.values.fill), d.ctxFillStyle(this.values.fill)),\n                  r = (l = this.textSpans[t].elem).length,\n                  this.globalData.canvasContext.beginPath(),\n                  i = 0;\n                i < r;\n                i += 1\n              )\n                for (\n                  a = (p = l[i]).length,\n                    this.globalData.canvasContext.moveTo(p[0], p[1]),\n                    s = 2;\n                  s < a;\n                  s += 6\n                )\n                  this.globalData.canvasContext.bezierCurveTo(\n                    p[s],\n                    p[s + 1],\n                    p[s + 2],\n                    p[s + 3],\n                    p[s + 4],\n                    p[s + 5]\n                  );\n              this.globalData.canvasContext.closePath(), d.ctxFill();\n            }\n            if (this.stroke) {\n              for (\n                n && n.sw\n                  ? c !== n.sw && ((c = n.sw), d.ctxLineWidth(n.sw))\n                  : c !== this.values.sWidth &&\n                    ((c = this.values.sWidth),\n                    d.ctxLineWidth(this.values.sWidth)),\n                  n && n.sc\n                    ? m !== n.sc && ((m = n.sc), d.ctxStrokeStyle(n.sc))\n                    : m !== this.values.stroke &&\n                      ((m = this.values.stroke),\n                      d.ctxStrokeStyle(this.values.stroke)),\n                  r = (l = this.textSpans[t].elem).length,\n                  this.globalData.canvasContext.beginPath(),\n                  i = 0;\n                i < r;\n                i += 1\n              )\n                for (\n                  a = (p = l[i]).length,\n                    this.globalData.canvasContext.moveTo(p[0], p[1]),\n                    s = 2;\n                  s < a;\n                  s += 6\n                )\n                  this.globalData.canvasContext.bezierCurveTo(\n                    p[s],\n                    p[s + 1],\n                    p[s + 2],\n                    p[s + 3],\n                    p[s + 4],\n                    p[s + 5]\n                  );\n              this.globalData.canvasContext.closePath(), d.ctxStroke();\n            }\n            n && this.globalData.renderer.restore();\n          }\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          CVBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n        ],\n        CVImageElement\n      ),\n      (CVImageElement.prototype.initElement =\n        SVGShapeElement.prototype.initElement),\n      (CVImageElement.prototype.prepareFrame =\n        IImageElement.prototype.prepareFrame),\n      (CVImageElement.prototype.createContent = function () {\n        if (\n          this.img.width &&\n          (this.assetData.w !== this.img.width ||\n            this.assetData.h !== this.img.height)\n        ) {\n          var t = createTag(\"canvas\");\n          (t.width = this.assetData.w), (t.height = this.assetData.h);\n          var e,\n            i,\n            r = t.getContext(\"2d\"),\n            s = this.img.width,\n            a = this.img.height,\n            n = s / a,\n            o = this.assetData.w / this.assetData.h,\n            h =\n              this.assetData.pr ||\n              this.globalData.renderConfig.imagePreserveAspectRatio;\n          (n > o && \"xMidYMid slice\" === h) || (n < o && \"xMidYMid slice\" !== h)\n            ? (e = (i = a) * o)\n            : (i = (e = s) / o),\n            r.drawImage(\n              this.img,\n              (s - e) / 2,\n              (a - i) / 2,\n              e,\n              i,\n              0,\n              0,\n              this.assetData.w,\n              this.assetData.h\n            ),\n            (this.img = t);\n        }\n      }),\n      (CVImageElement.prototype.renderInnerContent = function () {\n        this.canvasContext.drawImage(this.img, 0, 0);\n      }),\n      (CVImageElement.prototype.destroy = function () {\n        this.img = null;\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          CVBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n        ],\n        CVSolidElement\n      ),\n      (CVSolidElement.prototype.initElement =\n        SVGShapeElement.prototype.initElement),\n      (CVSolidElement.prototype.prepareFrame =\n        IImageElement.prototype.prepareFrame),\n      (CVSolidElement.prototype.renderInnerContent = function () {\n        this.globalData.renderer.ctxFillStyle(this.data.sc),\n          this.globalData.renderer.ctxFillRect(\n            0,\n            0,\n            this.data.sw,\n            this.data.sh\n          );\n      }),\n      extendPrototype([BaseRenderer], CanvasRendererBase),\n      (CanvasRendererBase.prototype.createShape = function (t) {\n        return new CVShapeElement(t, this.globalData, this);\n      }),\n      (CanvasRendererBase.prototype.createText = function (t) {\n        return new CVTextElement(t, this.globalData, this);\n      }),\n      (CanvasRendererBase.prototype.createImage = function (t) {\n        return new CVImageElement(t, this.globalData, this);\n      }),\n      (CanvasRendererBase.prototype.createSolid = function (t) {\n        return new CVSolidElement(t, this.globalData, this);\n      }),\n      (CanvasRendererBase.prototype.createNull =\n        SVGRenderer.prototype.createNull),\n      (CanvasRendererBase.prototype.ctxTransform = function (t) {\n        (1 === t[0] &&\n          0 === t[1] &&\n          0 === t[4] &&\n          1 === t[5] &&\n          0 === t[12] &&\n          0 === t[13]) ||\n          this.canvasContext.transform(t[0], t[1], t[4], t[5], t[12], t[13]);\n      }),\n      (CanvasRendererBase.prototype.ctxOpacity = function (t) {\n        this.canvasContext.globalAlpha *= t < 0 ? 0 : t;\n      }),\n      (CanvasRendererBase.prototype.ctxFillStyle = function (t) {\n        this.canvasContext.fillStyle = t;\n      }),\n      (CanvasRendererBase.prototype.ctxStrokeStyle = function (t) {\n        this.canvasContext.strokeStyle = t;\n      }),\n      (CanvasRendererBase.prototype.ctxLineWidth = function (t) {\n        this.canvasContext.lineWidth = t;\n      }),\n      (CanvasRendererBase.prototype.ctxLineCap = function (t) {\n        this.canvasContext.lineCap = t;\n      }),\n      (CanvasRendererBase.prototype.ctxLineJoin = function (t) {\n        this.canvasContext.lineJoin = t;\n      }),\n      (CanvasRendererBase.prototype.ctxMiterLimit = function (t) {\n        this.canvasContext.miterLimit = t;\n      }),\n      (CanvasRendererBase.prototype.ctxFill = function (t) {\n        this.canvasContext.fill(t);\n      }),\n      (CanvasRendererBase.prototype.ctxFillRect = function (t, e, i, r) {\n        this.canvasContext.fillRect(t, e, i, r);\n      }),\n      (CanvasRendererBase.prototype.ctxStroke = function () {\n        this.canvasContext.stroke();\n      }),\n      (CanvasRendererBase.prototype.reset = function () {\n        this.renderConfig.clearCanvas\n          ? this.contextData.reset()\n          : this.canvasContext.restore();\n      }),\n      (CanvasRendererBase.prototype.save = function () {\n        this.canvasContext.save();\n      }),\n      (CanvasRendererBase.prototype.restore = function (t) {\n        this.renderConfig.clearCanvas\n          ? (t && (this.globalData.blendMode = \"source-over\"),\n            this.contextData.restore(t))\n          : this.canvasContext.restore();\n      }),\n      (CanvasRendererBase.prototype.configAnimation = function (t) {\n        if (this.animationItem.wrapper) {\n          this.animationItem.container = createTag(\"canvas\");\n          var e = this.animationItem.container.style;\n          (e.width = \"100%\"), (e.height = \"100%\");\n          var i = \"0px 0px 0px\";\n          (e.transformOrigin = i),\n            (e.mozTransformOrigin = i),\n            (e.webkitTransformOrigin = i),\n            (e[\"-webkit-transform\"] = i),\n            (e.contentVisibility = this.renderConfig.contentVisibility),\n            this.animationItem.wrapper.appendChild(\n              this.animationItem.container\n            ),\n            (this.canvasContext =\n              this.animationItem.container.getContext(\"2d\")),\n            this.renderConfig.className &&\n              this.animationItem.container.setAttribute(\n                \"class\",\n                this.renderConfig.className\n              ),\n            this.renderConfig.id &&\n              this.animationItem.container.setAttribute(\n                \"id\",\n                this.renderConfig.id\n              );\n        } else this.canvasContext = this.renderConfig.context;\n        this.contextData.setContext(this.canvasContext),\n          (this.data = t),\n          (this.layers = t.layers),\n          (this.transformCanvas = {\n            w: t.w,\n            h: t.h,\n            sx: 0,\n            sy: 0,\n            tx: 0,\n            ty: 0,\n          }),\n          this.setupGlobalData(t, document.body),\n          (this.globalData.canvasContext = this.canvasContext),\n          (this.globalData.renderer = this),\n          (this.globalData.isDashed = !1),\n          (this.globalData.progressiveLoad = this.renderConfig.progressiveLoad),\n          (this.globalData.transformCanvas = this.transformCanvas),\n          (this.elements = createSizedArray(t.layers.length)),\n          this.updateContainerSize();\n      }),\n      (CanvasRendererBase.prototype.updateContainerSize = function (t, e) {\n        var i, r, s, a;\n        if (\n          (this.reset(),\n          t\n            ? ((i = t),\n              (r = e),\n              (this.canvasContext.canvas.width = i),\n              (this.canvasContext.canvas.height = r))\n            : (this.animationItem.wrapper && this.animationItem.container\n                ? ((i = this.animationItem.wrapper.offsetWidth),\n                  (r = this.animationItem.wrapper.offsetHeight))\n                : ((i = this.canvasContext.canvas.width),\n                  (r = this.canvasContext.canvas.height)),\n              (this.canvasContext.canvas.width = i * this.renderConfig.dpr),\n              (this.canvasContext.canvas.height = r * this.renderConfig.dpr)),\n          -1 !== this.renderConfig.preserveAspectRatio.indexOf(\"meet\") ||\n            -1 !== this.renderConfig.preserveAspectRatio.indexOf(\"slice\"))\n        ) {\n          var n = this.renderConfig.preserveAspectRatio.split(\" \"),\n            o = n[1] || \"meet\",\n            h = n[0] || \"xMidYMid\",\n            l = h.substr(0, 4),\n            p = h.substr(4);\n          (s = i / r),\n            ((a = this.transformCanvas.w / this.transformCanvas.h) > s &&\n              \"meet\" === o) ||\n            (a < s && \"slice\" === o)\n              ? ((this.transformCanvas.sx =\n                  i / (this.transformCanvas.w / this.renderConfig.dpr)),\n                (this.transformCanvas.sy =\n                  i / (this.transformCanvas.w / this.renderConfig.dpr)))\n              : ((this.transformCanvas.sx =\n                  r / (this.transformCanvas.h / this.renderConfig.dpr)),\n                (this.transformCanvas.sy =\n                  r / (this.transformCanvas.h / this.renderConfig.dpr))),\n            (this.transformCanvas.tx =\n              \"xMid\" === l &&\n              ((a < s && \"meet\" === o) || (a > s && \"slice\" === o))\n                ? ((i - this.transformCanvas.w * (r / this.transformCanvas.h)) /\n                    2) *\n                  this.renderConfig.dpr\n                : \"xMax\" === l &&\n                  ((a < s && \"meet\" === o) || (a > s && \"slice\" === o))\n                ? (i - this.transformCanvas.w * (r / this.transformCanvas.h)) *\n                  this.renderConfig.dpr\n                : 0),\n            (this.transformCanvas.ty =\n              \"YMid\" === p &&\n              ((a > s && \"meet\" === o) || (a < s && \"slice\" === o))\n                ? ((r - this.transformCanvas.h * (i / this.transformCanvas.w)) /\n                    2) *\n                  this.renderConfig.dpr\n                : \"YMax\" === p &&\n                  ((a > s && \"meet\" === o) || (a < s && \"slice\" === o))\n                ? (r - this.transformCanvas.h * (i / this.transformCanvas.w)) *\n                  this.renderConfig.dpr\n                : 0);\n        } else\n          \"none\" === this.renderConfig.preserveAspectRatio\n            ? ((this.transformCanvas.sx =\n                i / (this.transformCanvas.w / this.renderConfig.dpr)),\n              (this.transformCanvas.sy =\n                r / (this.transformCanvas.h / this.renderConfig.dpr)),\n              (this.transformCanvas.tx = 0),\n              (this.transformCanvas.ty = 0))\n            : ((this.transformCanvas.sx = this.renderConfig.dpr),\n              (this.transformCanvas.sy = this.renderConfig.dpr),\n              (this.transformCanvas.tx = 0),\n              (this.transformCanvas.ty = 0));\n        (this.transformCanvas.props = [\n          this.transformCanvas.sx,\n          0,\n          0,\n          0,\n          0,\n          this.transformCanvas.sy,\n          0,\n          0,\n          0,\n          0,\n          1,\n          0,\n          this.transformCanvas.tx,\n          this.transformCanvas.ty,\n          0,\n          1,\n        ]),\n          this.ctxTransform(this.transformCanvas.props),\n          this.canvasContext.beginPath(),\n          this.canvasContext.rect(\n            0,\n            0,\n            this.transformCanvas.w,\n            this.transformCanvas.h\n          ),\n          this.canvasContext.closePath(),\n          this.canvasContext.clip(),\n          this.renderFrame(this.renderedFrame, !0);\n      }),\n      (CanvasRendererBase.prototype.destroy = function () {\n        var t;\n        for (\n          this.renderConfig.clearCanvas &&\n            this.animationItem.wrapper &&\n            (this.animationItem.wrapper.innerText = \"\"),\n            t = (this.layers ? this.layers.length : 0) - 1;\n          t >= 0;\n          t -= 1\n        )\n          this.elements[t] &&\n            this.elements[t].destroy &&\n            this.elements[t].destroy();\n        (this.elements.length = 0),\n          (this.globalData.canvasContext = null),\n          (this.animationItem.container = null),\n          (this.destroyed = !0);\n      }),\n      (CanvasRendererBase.prototype.renderFrame = function (t, e) {\n        if (\n          (this.renderedFrame !== t ||\n            !0 !== this.renderConfig.clearCanvas ||\n            e) &&\n          !this.destroyed &&\n          -1 !== t\n        ) {\n          var i;\n          (this.renderedFrame = t),\n            (this.globalData.frameNum = t - this.animationItem._isFirstFrame),\n            (this.globalData.frameId += 1),\n            (this.globalData._mdf = !this.renderConfig.clearCanvas || e),\n            (this.globalData.projectInterface.currentFrame = t);\n          var r = this.layers.length;\n          for (\n            this.completeLayers || this.checkLayers(t), i = r - 1;\n            i >= 0;\n            i -= 1\n          )\n            (this.completeLayers || this.elements[i]) &&\n              this.elements[i].prepareFrame(t - this.layers[i].st);\n          if (this.globalData._mdf) {\n            for (\n              !0 === this.renderConfig.clearCanvas\n                ? this.canvasContext.clearRect(\n                    0,\n                    0,\n                    this.transformCanvas.w,\n                    this.transformCanvas.h\n                  )\n                : this.save(),\n                i = r - 1;\n              i >= 0;\n              i -= 1\n            )\n              (this.completeLayers || this.elements[i]) &&\n                this.elements[i].renderFrame();\n            !0 !== this.renderConfig.clearCanvas && this.restore();\n          }\n        }\n      }),\n      (CanvasRendererBase.prototype.buildItem = function (t) {\n        var e = this.elements;\n        if (!e[t] && 99 !== this.layers[t].ty) {\n          var i = this.createItem(this.layers[t], this, this.globalData);\n          (e[t] = i), i.initExpressions();\n        }\n      }),\n      (CanvasRendererBase.prototype.checkPendingElements = function () {\n        for (; this.pendingElements.length; ) {\n          this.pendingElements.pop().checkParenting();\n        }\n      }),\n      (CanvasRendererBase.prototype.hide = function () {\n        this.animationItem.container.style.display = \"none\";\n      }),\n      (CanvasRendererBase.prototype.show = function () {\n        this.animationItem.container.style.display = \"block\";\n      }),\n      (CVContextData.prototype.duplicate = function () {\n        var t = 2 * this._length,\n          e = 0;\n        for (e = this._length; e < t; e += 1)\n          this.stack[e] = new CanvasContext();\n        this._length = t;\n      }),\n      (CVContextData.prototype.reset = function () {\n        (this.cArrPos = 0),\n          this.cTr.reset(),\n          (this.stack[this.cArrPos].opacity = 1);\n      }),\n      (CVContextData.prototype.restore = function (t) {\n        this.cArrPos -= 1;\n        var e,\n          i = this.stack[this.cArrPos],\n          r = i.transform,\n          s = this.cTr.props;\n        for (e = 0; e < 16; e += 1) s[e] = r[e];\n        if (t) {\n          this.nativeContext.restore();\n          var a = this.stack[this.cArrPos + 1];\n          (this.appliedFillStyle = a.fillStyle),\n            (this.appliedStrokeStyle = a.strokeStyle),\n            (this.appliedLineWidth = a.lineWidth),\n            (this.appliedLineCap = a.lineCap),\n            (this.appliedLineJoin = a.lineJoin),\n            (this.appliedMiterLimit = a.miterLimit);\n        }\n        this.nativeContext.setTransform(r[0], r[1], r[4], r[5], r[12], r[13]),\n          (t || (-1 !== i.opacity && this.currentOpacity !== i.opacity)) &&\n            ((this.nativeContext.globalAlpha = i.opacity),\n            (this.currentOpacity = i.opacity)),\n          (this.currentFillStyle = i.fillStyle),\n          (this.currentStrokeStyle = i.strokeStyle),\n          (this.currentLineWidth = i.lineWidth),\n          (this.currentLineCap = i.lineCap),\n          (this.currentLineJoin = i.lineJoin),\n          (this.currentMiterLimit = i.miterLimit);\n      }),\n      (CVContextData.prototype.save = function (t) {\n        t && this.nativeContext.save();\n        var e = this.cTr.props;\n        this._length <= this.cArrPos && this.duplicate();\n        var i,\n          r = this.stack[this.cArrPos];\n        for (i = 0; i < 16; i += 1) r.transform[i] = e[i];\n        this.cArrPos += 1;\n        var s = this.stack[this.cArrPos];\n        (s.opacity = r.opacity),\n          (s.fillStyle = r.fillStyle),\n          (s.strokeStyle = r.strokeStyle),\n          (s.lineWidth = r.lineWidth),\n          (s.lineCap = r.lineCap),\n          (s.lineJoin = r.lineJoin),\n          (s.miterLimit = r.miterLimit);\n      }),\n      (CVContextData.prototype.setOpacity = function (t) {\n        this.stack[this.cArrPos].opacity = t;\n      }),\n      (CVContextData.prototype.setContext = function (t) {\n        this.nativeContext = t;\n      }),\n      (CVContextData.prototype.fillStyle = function (t) {\n        this.stack[this.cArrPos].fillStyle !== t &&\n          ((this.currentFillStyle = t),\n          (this.stack[this.cArrPos].fillStyle = t));\n      }),\n      (CVContextData.prototype.strokeStyle = function (t) {\n        this.stack[this.cArrPos].strokeStyle !== t &&\n          ((this.currentStrokeStyle = t),\n          (this.stack[this.cArrPos].strokeStyle = t));\n      }),\n      (CVContextData.prototype.lineWidth = function (t) {\n        this.stack[this.cArrPos].lineWidth !== t &&\n          ((this.currentLineWidth = t),\n          (this.stack[this.cArrPos].lineWidth = t));\n      }),\n      (CVContextData.prototype.lineCap = function (t) {\n        this.stack[this.cArrPos].lineCap !== t &&\n          ((this.currentLineCap = t), (this.stack[this.cArrPos].lineCap = t));\n      }),\n      (CVContextData.prototype.lineJoin = function (t) {\n        this.stack[this.cArrPos].lineJoin !== t &&\n          ((this.currentLineJoin = t), (this.stack[this.cArrPos].lineJoin = t));\n      }),\n      (CVContextData.prototype.miterLimit = function (t) {\n        this.stack[this.cArrPos].miterLimit !== t &&\n          ((this.currentMiterLimit = t),\n          (this.stack[this.cArrPos].miterLimit = t));\n      }),\n      (CVContextData.prototype.transform = function (t) {\n        this.transformMat.cloneFromProps(t);\n        var e = this.cTr;\n        this.transformMat.multiply(e),\n          e.cloneFromProps(this.transformMat.props);\n        var i = e.props;\n        this.nativeContext.setTransform(i[0], i[1], i[4], i[5], i[12], i[13]);\n      }),\n      (CVContextData.prototype.opacity = function (t) {\n        var e = this.stack[this.cArrPos].opacity;\n        (e *= t < 0 ? 0 : t),\n          this.stack[this.cArrPos].opacity !== e &&\n            (this.currentOpacity !== t &&\n              ((this.nativeContext.globalAlpha = t), (this.currentOpacity = t)),\n            (this.stack[this.cArrPos].opacity = e));\n      }),\n      (CVContextData.prototype.fill = function (t) {\n        this.appliedFillStyle !== this.currentFillStyle &&\n          ((this.appliedFillStyle = this.currentFillStyle),\n          (this.nativeContext.fillStyle = this.appliedFillStyle)),\n          this.nativeContext.fill(t);\n      }),\n      (CVContextData.prototype.fillRect = function (t, e, i, r) {\n        this.appliedFillStyle !== this.currentFillStyle &&\n          ((this.appliedFillStyle = this.currentFillStyle),\n          (this.nativeContext.fillStyle = this.appliedFillStyle)),\n          this.nativeContext.fillRect(t, e, i, r);\n      }),\n      (CVContextData.prototype.stroke = function () {\n        this.appliedStrokeStyle !== this.currentStrokeStyle &&\n          ((this.appliedStrokeStyle = this.currentStrokeStyle),\n          (this.nativeContext.strokeStyle = this.appliedStrokeStyle)),\n          this.appliedLineWidth !== this.currentLineWidth &&\n            ((this.appliedLineWidth = this.currentLineWidth),\n            (this.nativeContext.lineWidth = this.appliedLineWidth)),\n          this.appliedLineCap !== this.currentLineCap &&\n            ((this.appliedLineCap = this.currentLineCap),\n            (this.nativeContext.lineCap = this.appliedLineCap)),\n          this.appliedLineJoin !== this.currentLineJoin &&\n            ((this.appliedLineJoin = this.currentLineJoin),\n            (this.nativeContext.lineJoin = this.appliedLineJoin)),\n          this.appliedMiterLimit !== this.currentMiterLimit &&\n            ((this.appliedMiterLimit = this.currentMiterLimit),\n            (this.nativeContext.miterLimit = this.appliedMiterLimit)),\n          this.nativeContext.stroke();\n      }),\n      extendPrototype(\n        [CanvasRendererBase, ICompElement, CVBaseElement],\n        CVCompElement\n      ),\n      (CVCompElement.prototype.renderInnerContent = function () {\n        var t,\n          e = this.canvasContext;\n        for (\n          e.beginPath(),\n            e.moveTo(0, 0),\n            e.lineTo(this.data.w, 0),\n            e.lineTo(this.data.w, this.data.h),\n            e.lineTo(0, this.data.h),\n            e.lineTo(0, 0),\n            e.clip(),\n            t = this.layers.length - 1;\n          t >= 0;\n          t -= 1\n        )\n          (this.completeLayers || this.elements[t]) &&\n            this.elements[t].renderFrame();\n      }),\n      (CVCompElement.prototype.destroy = function () {\n        var t;\n        for (t = this.layers.length - 1; t >= 0; t -= 1)\n          this.elements[t] && this.elements[t].destroy();\n        (this.layers = null), (this.elements = null);\n      }),\n      (CVCompElement.prototype.createComp = function (t) {\n        return new CVCompElement(t, this.globalData, this);\n      }),\n      extendPrototype([CanvasRendererBase], CanvasRenderer),\n      (CanvasRenderer.prototype.createComp = function (t) {\n        return new CVCompElement(t, this.globalData, this);\n      }),\n      (HBaseElement.prototype = {\n        checkBlendMode: function () {},\n        initRendererElement: function () {\n          (this.baseElement = createTag(this.data.tg || \"div\")),\n            this.data.hasMask\n              ? ((this.svgElement = createNS(\"svg\")),\n                (this.layerElement = createNS(\"g\")),\n                (this.maskedElement = this.layerElement),\n                this.svgElement.appendChild(this.layerElement),\n                this.baseElement.appendChild(this.svgElement))\n              : (this.layerElement = this.baseElement),\n            styleDiv(this.baseElement);\n        },\n        createContainerElements: function () {\n          (this.renderableEffectsManager = new CVEffects(this)),\n            (this.transformedElement = this.baseElement),\n            (this.maskedElement = this.layerElement),\n            this.data.ln && this.layerElement.setAttribute(\"id\", this.data.ln),\n            this.data.cl &&\n              this.layerElement.setAttribute(\"class\", this.data.cl),\n            0 !== this.data.bm && this.setBlendMode();\n        },\n        renderElement: function () {\n          var t = this.transformedElement ? this.transformedElement.style : {};\n          if (this.finalTransform._matMdf) {\n            var e = this.finalTransform.mat.toCSS();\n            (t.transform = e), (t.webkitTransform = e);\n          }\n          this.finalTransform._opMdf &&\n            (t.opacity = this.finalTransform.mProp.o.v);\n        },\n        renderFrame: function () {\n          this.data.hd ||\n            this.hidden ||\n            (this.renderTransform(),\n            this.renderRenderable(),\n            this.renderElement(),\n            this.renderInnerContent(),\n            this._isFirstFrame && (this._isFirstFrame = !1));\n        },\n        destroy: function () {\n          (this.layerElement = null),\n            (this.transformedElement = null),\n            this.matteElement && (this.matteElement = null),\n            this.maskManager &&\n              (this.maskManager.destroy(), (this.maskManager = null));\n        },\n        createRenderableComponents: function () {\n          this.maskManager = new MaskElement(this.data, this, this.globalData);\n        },\n        addEffects: function () {},\n        setMatte: function () {},\n      }),\n      (HBaseElement.prototype.getBaseElement =\n        SVGBaseElement.prototype.getBaseElement),\n      (HBaseElement.prototype.destroyBaseElement =\n        HBaseElement.prototype.destroy),\n      (HBaseElement.prototype.buildElementParenting =\n        BaseRenderer.prototype.buildElementParenting),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          HBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableDOMElement,\n        ],\n        HSolidElement\n      ),\n      (HSolidElement.prototype.createContent = function () {\n        var t;\n        this.data.hasMask\n          ? ((t = createNS(\"rect\")).setAttribute(\"width\", this.data.sw),\n            t.setAttribute(\"height\", this.data.sh),\n            t.setAttribute(\"fill\", this.data.sc),\n            this.svgElement.setAttribute(\"width\", this.data.sw),\n            this.svgElement.setAttribute(\"height\", this.data.sh))\n          : (((t = createTag(\"div\")).style.width = this.data.sw + \"px\"),\n            (t.style.height = this.data.sh + \"px\"),\n            (t.style.backgroundColor = this.data.sc)),\n          this.layerElement.appendChild(t);\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          HSolidElement,\n          SVGShapeElement,\n          HBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n        ],\n        HShapeElement\n      ),\n      (HShapeElement.prototype._renderShapeFrame =\n        HShapeElement.prototype.renderInnerContent),\n      (HShapeElement.prototype.createContent = function () {\n        var t;\n        if (((this.baseElement.style.fontSize = 0), this.data.hasMask))\n          this.layerElement.appendChild(this.shapesContainer),\n            (t = this.svgElement);\n        else {\n          t = createNS(\"svg\");\n          var e = this.comp.data ? this.comp.data : this.globalData.compSize;\n          t.setAttribute(\"width\", e.w),\n            t.setAttribute(\"height\", e.h),\n            t.appendChild(this.shapesContainer),\n            this.layerElement.appendChild(t);\n        }\n        this.searchShapes(\n          this.shapesData,\n          this.itemsData,\n          this.prevViewData,\n          this.shapesContainer,\n          0,\n          [],\n          !0\n        ),\n          this.filterUniqueShapes(),\n          (this.shapeCont = t);\n      }),\n      (HShapeElement.prototype.getTransformedPoint = function (t, e) {\n        var i,\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          e = t[i].mProps.v.applyToPointArray(e[0], e[1], 0);\n        return e;\n      }),\n      (HShapeElement.prototype.calculateShapeBoundingBox = function (t, e) {\n        var i,\n          r,\n          s,\n          a,\n          n,\n          o = t.sh.v,\n          h = t.transformers,\n          l = o._length;\n        if (!(l <= 1)) {\n          for (i = 0; i < l - 1; i += 1)\n            (r = this.getTransformedPoint(h, o.v[i])),\n              (s = this.getTransformedPoint(h, o.o[i])),\n              (a = this.getTransformedPoint(h, o.i[i + 1])),\n              (n = this.getTransformedPoint(h, o.v[i + 1])),\n              this.checkBounds(r, s, a, n, e);\n          o.c &&\n            ((r = this.getTransformedPoint(h, o.v[i])),\n            (s = this.getTransformedPoint(h, o.o[i])),\n            (a = this.getTransformedPoint(h, o.i[0])),\n            (n = this.getTransformedPoint(h, o.v[0])),\n            this.checkBounds(r, s, a, n, e));\n        }\n      }),\n      (HShapeElement.prototype.checkBounds = function (t, e, i, r, s) {\n        this.getBoundsOfCurve(t, e, i, r);\n        var a = this.shapeBoundingBox;\n        (s.x = bmMin(a.left, s.x)),\n          (s.xMax = bmMax(a.right, s.xMax)),\n          (s.y = bmMin(a.top, s.y)),\n          (s.yMax = bmMax(a.bottom, s.yMax));\n      }),\n      (HShapeElement.prototype.shapeBoundingBox = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n      }),\n      (HShapeElement.prototype.tempBoundingBox = {\n        x: 0,\n        xMax: 0,\n        y: 0,\n        yMax: 0,\n        width: 0,\n        height: 0,\n      }),\n      (HShapeElement.prototype.getBoundsOfCurve = function (t, e, i, r) {\n        for (\n          var s,\n            a,\n            n,\n            o,\n            h,\n            l,\n            p,\n            f = [\n              [t[0], r[0]],\n              [t[1], r[1]],\n            ],\n            m = 0;\n          m < 2;\n          ++m\n        )\n          (a = 6 * t[m] - 12 * e[m] + 6 * i[m]),\n            (s = -3 * t[m] + 9 * e[m] - 9 * i[m] + 3 * r[m]),\n            (n = 3 * e[m] - 3 * t[m]),\n            (a |= 0),\n            (n |= 0),\n            (0 === (s |= 0) && 0 === a) ||\n              (0 === s\n                ? (o = -n / a) > 0 &&\n                  o < 1 &&\n                  f[m].push(this.calculateF(o, t, e, i, r, m))\n                : (h = a * a - 4 * n * s) >= 0 &&\n                  ((l = (-a + bmSqrt(h)) / (2 * s)) > 0 &&\n                    l < 1 &&\n                    f[m].push(this.calculateF(l, t, e, i, r, m)),\n                  (p = (-a - bmSqrt(h)) / (2 * s)) > 0 &&\n                    p < 1 &&\n                    f[m].push(this.calculateF(p, t, e, i, r, m))));\n        (this.shapeBoundingBox.left = bmMin.apply(null, f[0])),\n          (this.shapeBoundingBox.top = bmMin.apply(null, f[1])),\n          (this.shapeBoundingBox.right = bmMax.apply(null, f[0])),\n          (this.shapeBoundingBox.bottom = bmMax.apply(null, f[1]));\n      }),\n      (HShapeElement.prototype.calculateF = function (t, e, i, r, s, a) {\n        return (\n          bmPow(1 - t, 3) * e[a] +\n          3 * bmPow(1 - t, 2) * t * i[a] +\n          3 * (1 - t) * bmPow(t, 2) * r[a] +\n          bmPow(t, 3) * s[a]\n        );\n      }),\n      (HShapeElement.prototype.calculateBoundingBox = function (t, e) {\n        var i,\n          r = t.length;\n        for (i = 0; i < r; i += 1)\n          t[i] && t[i].sh\n            ? this.calculateShapeBoundingBox(t[i], e)\n            : t[i] && t[i].it\n            ? this.calculateBoundingBox(t[i].it, e)\n            : t[i] &&\n              t[i].style &&\n              t[i].w &&\n              this.expandStrokeBoundingBox(t[i].w, e);\n      }),\n      (HShapeElement.prototype.expandStrokeBoundingBox = function (t, e) {\n        var i = 0;\n        if (t.keyframes) {\n          for (var r = 0; r < t.keyframes.length; r += 1) {\n            var s = t.keyframes[r].s;\n            s > i && (i = s);\n          }\n          i *= t.mult;\n        } else i = t.v * t.mult;\n        (e.x -= i), (e.xMax += i), (e.y -= i), (e.yMax += i);\n      }),\n      (HShapeElement.prototype.currentBoxContains = function (t) {\n        return (\n          this.currentBBox.x <= t.x &&\n          this.currentBBox.y <= t.y &&\n          this.currentBBox.width + this.currentBBox.x >= t.x + t.width &&\n          this.currentBBox.height + this.currentBBox.y >= t.y + t.height\n        );\n      }),\n      (HShapeElement.prototype.renderInnerContent = function () {\n        if (\n          (this._renderShapeFrame(),\n          !this.hidden && (this._isFirstFrame || this._mdf))\n        ) {\n          var t = this.tempBoundingBox,\n            e = 999999;\n          if (\n            ((t.x = e),\n            (t.xMax = -e),\n            (t.y = e),\n            (t.yMax = -e),\n            this.calculateBoundingBox(this.itemsData, t),\n            (t.width = t.xMax < t.x ? 0 : t.xMax - t.x),\n            (t.height = t.yMax < t.y ? 0 : t.yMax - t.y),\n            this.currentBoxContains(t))\n          )\n            return;\n          var i = !1;\n          if (\n            (this.currentBBox.w !== t.width &&\n              ((this.currentBBox.w = t.width),\n              this.shapeCont.setAttribute(\"width\", t.width),\n              (i = !0)),\n            this.currentBBox.h !== t.height &&\n              ((this.currentBBox.h = t.height),\n              this.shapeCont.setAttribute(\"height\", t.height),\n              (i = !0)),\n            i || this.currentBBox.x !== t.x || this.currentBBox.y !== t.y)\n          ) {\n            (this.currentBBox.w = t.width),\n              (this.currentBBox.h = t.height),\n              (this.currentBBox.x = t.x),\n              (this.currentBBox.y = t.y),\n              this.shapeCont.setAttribute(\n                \"viewBox\",\n                this.currentBBox.x +\n                  \" \" +\n                  this.currentBBox.y +\n                  \" \" +\n                  this.currentBBox.w +\n                  \" \" +\n                  this.currentBBox.h\n              );\n            var r = this.shapeCont.style,\n              s =\n                \"translate(\" +\n                this.currentBBox.x +\n                \"px,\" +\n                this.currentBBox.y +\n                \"px)\";\n            (r.transform = s), (r.webkitTransform = s);\n          }\n        }\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          HBaseElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableDOMElement,\n          ITextElement,\n        ],\n        HTextElement\n      ),\n      (HTextElement.prototype.createContent = function () {\n        if (((this.isMasked = this.checkMasks()), this.isMasked)) {\n          (this.renderType = \"svg\"),\n            (this.compW = this.comp.data.w),\n            (this.compH = this.comp.data.h),\n            this.svgElement.setAttribute(\"width\", this.compW),\n            this.svgElement.setAttribute(\"height\", this.compH);\n          var t = createNS(\"g\");\n          this.maskedElement.appendChild(t), (this.innerElem = t);\n        } else (this.renderType = \"html\"), (this.innerElem = this.layerElement);\n        this.checkParenting();\n      }),\n      (HTextElement.prototype.buildNewText = function () {\n        var t = this.textProperty.currentData;\n        this.renderedLetters = createSizedArray(t.l ? t.l.length : 0);\n        var e = this.innerElem.style,\n          i = t.fc ? this.buildColor(t.fc) : \"rgba(0,0,0,0)\";\n        (e.fill = i),\n          (e.color = i),\n          t.sc &&\n            ((e.stroke = this.buildColor(t.sc)), (e.strokeWidth = t.sw + \"px\"));\n        var r,\n          s,\n          a = this.globalData.fontManager.getFontByName(t.f);\n        if (!this.globalData.fontManager.chars)\n          if (\n            ((e.fontSize = t.finalSize + \"px\"),\n            (e.lineHeight = t.finalSize + \"px\"),\n            a.fClass)\n          )\n            this.innerElem.className = a.fClass;\n          else {\n            e.fontFamily = a.fFamily;\n            var n = t.fWeight,\n              o = t.fStyle;\n            (e.fontStyle = o), (e.fontWeight = n);\n          }\n        var h,\n          l,\n          p,\n          f = t.l;\n        s = f.length;\n        var m,\n          c = this.mHelper,\n          d = \"\",\n          u = 0;\n        for (r = 0; r < s; r += 1) {\n          if (\n            (this.globalData.fontManager.chars\n              ? (this.textPaths[u]\n                  ? (h = this.textPaths[u])\n                  : ((h = createNS(\"path\")).setAttribute(\n                      \"stroke-linecap\",\n                      lineCapEnum[1]\n                    ),\n                    h.setAttribute(\"stroke-linejoin\", lineJoinEnum[2]),\n                    h.setAttribute(\"stroke-miterlimit\", \"4\")),\n                this.isMasked ||\n                  (this.textSpans[u]\n                    ? (p = (l = this.textSpans[u]).children[0])\n                    : (((l = createTag(\"div\")).style.lineHeight = 0),\n                      (p = createNS(\"svg\")).appendChild(h),\n                      styleDiv(l))))\n              : this.isMasked\n              ? (h = this.textPaths[u] ? this.textPaths[u] : createNS(\"text\"))\n              : this.textSpans[u]\n              ? ((l = this.textSpans[u]), (h = this.textPaths[u]))\n              : (styleDiv((l = createTag(\"span\"))),\n                styleDiv((h = createTag(\"span\"))),\n                l.appendChild(h)),\n            this.globalData.fontManager.chars)\n          ) {\n            var y,\n              g = this.globalData.fontManager.getCharData(\n                t.finalText[r],\n                a.fStyle,\n                this.globalData.fontManager.getFontByName(t.f).fFamily\n              );\n            if (\n              ((y = g ? g.data : null),\n              c.reset(),\n              y &&\n                y.shapes &&\n                y.shapes.length &&\n                ((m = y.shapes[0].it),\n                c.scale(t.finalSize / 100, t.finalSize / 100),\n                (d = this.createPathShape(c, m)),\n                h.setAttribute(\"d\", d)),\n              this.isMasked)\n            )\n              this.innerElem.appendChild(h);\n            else {\n              if ((this.innerElem.appendChild(l), y && y.shapes)) {\n                document.body.appendChild(p);\n                var v = p.getBBox();\n                p.setAttribute(\"width\", v.width + 2),\n                  p.setAttribute(\"height\", v.height + 2),\n                  p.setAttribute(\n                    \"viewBox\",\n                    v.x -\n                      1 +\n                      \" \" +\n                      (v.y - 1) +\n                      \" \" +\n                      (v.width + 2) +\n                      \" \" +\n                      (v.height + 2)\n                  );\n                var b = p.style,\n                  x = \"translate(\" + (v.x - 1) + \"px,\" + (v.y - 1) + \"px)\";\n                (b.transform = x),\n                  (b.webkitTransform = x),\n                  (f[r].yOffset = v.y - 1);\n              } else p.setAttribute(\"width\", 1), p.setAttribute(\"height\", 1);\n              l.appendChild(p);\n            }\n          } else if (\n            ((h.textContent = f[r].val),\n            h.setAttributeNS(\n              \"http://www.w3.org/XML/1998/namespace\",\n              \"xml:space\",\n              \"preserve\"\n            ),\n            this.isMasked)\n          )\n            this.innerElem.appendChild(h);\n          else {\n            this.innerElem.appendChild(l);\n            var P = h.style,\n              E = \"translate3d(0,\" + -t.finalSize / 1.2 + \"px,0)\";\n            (P.transform = E), (P.webkitTransform = E);\n          }\n          this.isMasked ? (this.textSpans[u] = h) : (this.textSpans[u] = l),\n            (this.textSpans[u].style.display = \"block\"),\n            (this.textPaths[u] = h),\n            (u += 1);\n        }\n        for (; u < this.textSpans.length; )\n          (this.textSpans[u].style.display = \"none\"), (u += 1);\n      }),\n      (HTextElement.prototype.renderInnerContent = function () {\n        var t;\n        if ((this.validateText(), this.data.singleShape)) {\n          if (!this._isFirstFrame && !this.lettersChangedFlag) return;\n          if (this.isMasked && this.finalTransform._matMdf) {\n            this.svgElement.setAttribute(\n              \"viewBox\",\n              -this.finalTransform.mProp.p.v[0] +\n                \" \" +\n                -this.finalTransform.mProp.p.v[1] +\n                \" \" +\n                this.compW +\n                \" \" +\n                this.compH\n            ),\n              (t = this.svgElement.style);\n            var e =\n              \"translate(\" +\n              -this.finalTransform.mProp.p.v[0] +\n              \"px,\" +\n              -this.finalTransform.mProp.p.v[1] +\n              \"px)\";\n            (t.transform = e), (t.webkitTransform = e);\n          }\n        }\n        if (\n          (this.textAnimator.getMeasures(\n            this.textProperty.currentData,\n            this.lettersChangedFlag\n          ),\n          this.lettersChangedFlag || this.textAnimator.lettersChangedFlag)\n        ) {\n          var i,\n            r,\n            s,\n            a,\n            n,\n            o = 0,\n            h = this.textAnimator.renderedLetters,\n            l = this.textProperty.currentData.l;\n          for (r = l.length, i = 0; i < r; i += 1)\n            l[i].n\n              ? (o += 1)\n              : ((a = this.textSpans[i]),\n                (n = this.textPaths[i]),\n                (s = h[o]),\n                (o += 1),\n                s._mdf.m &&\n                  (this.isMasked\n                    ? a.setAttribute(\"transform\", s.m)\n                    : ((a.style.webkitTransform = s.m),\n                      (a.style.transform = s.m))),\n                (a.style.opacity = s.o),\n                s.sw && s._mdf.sw && n.setAttribute(\"stroke-width\", s.sw),\n                s.sc && s._mdf.sc && n.setAttribute(\"stroke\", s.sc),\n                s.fc &&\n                  s._mdf.fc &&\n                  (n.setAttribute(\"fill\", s.fc), (n.style.color = s.fc)));\n          if (\n            this.innerElem.getBBox &&\n            !this.hidden &&\n            (this._isFirstFrame || this._mdf)\n          ) {\n            var p = this.innerElem.getBBox();\n            this.currentBBox.w !== p.width &&\n              ((this.currentBBox.w = p.width),\n              this.svgElement.setAttribute(\"width\", p.width)),\n              this.currentBBox.h !== p.height &&\n                ((this.currentBBox.h = p.height),\n                this.svgElement.setAttribute(\"height\", p.height));\n            if (\n              this.currentBBox.w !== p.width + 2 ||\n              this.currentBBox.h !== p.height + 2 ||\n              this.currentBBox.x !== p.x - 1 ||\n              this.currentBBox.y !== p.y - 1\n            ) {\n              (this.currentBBox.w = p.width + 2),\n                (this.currentBBox.h = p.height + 2),\n                (this.currentBBox.x = p.x - 1),\n                (this.currentBBox.y = p.y - 1),\n                this.svgElement.setAttribute(\n                  \"viewBox\",\n                  this.currentBBox.x +\n                    \" \" +\n                    this.currentBBox.y +\n                    \" \" +\n                    this.currentBBox.w +\n                    \" \" +\n                    this.currentBBox.h\n                ),\n                (t = this.svgElement.style);\n              var f =\n                \"translate(\" +\n                this.currentBBox.x +\n                \"px,\" +\n                this.currentBBox.y +\n                \"px)\";\n              (t.transform = f), (t.webkitTransform = f);\n            }\n          }\n        }\n      }),\n      extendPrototype(\n        [BaseElement, FrameElement, HierarchyElement],\n        HCameraElement\n      ),\n      (HCameraElement.prototype.setup = function () {\n        var t,\n          e,\n          i,\n          r,\n          s = this.comp.threeDElements.length;\n        for (t = 0; t < s; t += 1)\n          if (\"3d\" === (e = this.comp.threeDElements[t]).type) {\n            (i = e.perspectiveElem.style), (r = e.container.style);\n            var a = this.pe.v + \"px\",\n              n = \"0px 0px 0px\",\n              o = \"matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)\";\n            (i.perspective = a),\n              (i.webkitPerspective = a),\n              (r.transformOrigin = n),\n              (r.mozTransformOrigin = n),\n              (r.webkitTransformOrigin = n),\n              (i.transform = o),\n              (i.webkitTransform = o);\n          }\n      }),\n      (HCameraElement.prototype.createElements = function () {}),\n      (HCameraElement.prototype.hide = function () {}),\n      (HCameraElement.prototype.renderFrame = function () {\n        var t,\n          e,\n          i = this._isFirstFrame;\n        if (this.hierarchy)\n          for (e = this.hierarchy.length, t = 0; t < e; t += 1)\n            i = this.hierarchy[t].finalTransform.mProp._mdf || i;\n        if (\n          i ||\n          this.pe._mdf ||\n          (this.p && this.p._mdf) ||\n          (this.px && (this.px._mdf || this.py._mdf || this.pz._mdf)) ||\n          this.rx._mdf ||\n          this.ry._mdf ||\n          this.rz._mdf ||\n          this.or._mdf ||\n          (this.a && this.a._mdf)\n        ) {\n          if ((this.mat.reset(), this.hierarchy))\n            for (t = e = this.hierarchy.length - 1; t >= 0; t -= 1) {\n              var r = this.hierarchy[t].finalTransform.mProp;\n              this.mat.translate(-r.p.v[0], -r.p.v[1], r.p.v[2]),\n                this.mat\n                  .rotateX(-r.or.v[0])\n                  .rotateY(-r.or.v[1])\n                  .rotateZ(r.or.v[2]),\n                this.mat.rotateX(-r.rx.v).rotateY(-r.ry.v).rotateZ(r.rz.v),\n                this.mat.scale(1 / r.s.v[0], 1 / r.s.v[1], 1 / r.s.v[2]),\n                this.mat.translate(r.a.v[0], r.a.v[1], r.a.v[2]);\n            }\n          if (\n            (this.p\n              ? this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2])\n              : this.mat.translate(-this.px.v, -this.py.v, this.pz.v),\n            this.a)\n          ) {\n            var s;\n            s = this.p\n              ? [\n                  this.p.v[0] - this.a.v[0],\n                  this.p.v[1] - this.a.v[1],\n                  this.p.v[2] - this.a.v[2],\n                ]\n              : [\n                  this.px.v - this.a.v[0],\n                  this.py.v - this.a.v[1],\n                  this.pz.v - this.a.v[2],\n                ];\n            var a = Math.sqrt(\n                Math.pow(s[0], 2) + Math.pow(s[1], 2) + Math.pow(s[2], 2)\n              ),\n              n = [s[0] / a, s[1] / a, s[2] / a],\n              o = Math.sqrt(n[2] * n[2] + n[0] * n[0]),\n              h = Math.atan2(n[1], o),\n              l = Math.atan2(n[0], -n[2]);\n            this.mat.rotateY(l).rotateX(-h);\n          }\n          this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),\n            this.mat\n              .rotateX(-this.or.v[0])\n              .rotateY(-this.or.v[1])\n              .rotateZ(this.or.v[2]),\n            this.mat.translate(\n              this.globalData.compSize.w / 2,\n              this.globalData.compSize.h / 2,\n              0\n            ),\n            this.mat.translate(0, 0, this.pe.v);\n          var p = !this._prevMat.equals(this.mat);\n          if ((p || this.pe._mdf) && this.comp.threeDElements) {\n            var f, m, c;\n            for (e = this.comp.threeDElements.length, t = 0; t < e; t += 1)\n              if (\"3d\" === (f = this.comp.threeDElements[t]).type) {\n                if (p) {\n                  var d = this.mat.toCSS();\n                  ((c = f.container.style).transform = d),\n                    (c.webkitTransform = d);\n                }\n                this.pe._mdf &&\n                  (((m = f.perspectiveElem.style).perspective =\n                    this.pe.v + \"px\"),\n                  (m.webkitPerspective = this.pe.v + \"px\"));\n              }\n            this.mat.clone(this._prevMat);\n          }\n        }\n        this._isFirstFrame = !1;\n      }),\n      (HCameraElement.prototype.prepareFrame = function (t) {\n        this.prepareProperties(t, !0);\n      }),\n      (HCameraElement.prototype.destroy = function () {}),\n      (HCameraElement.prototype.getBaseElement = function () {\n        return null;\n      }),\n      extendPrototype(\n        [\n          BaseElement,\n          TransformElement,\n          HBaseElement,\n          HSolidElement,\n          HierarchyElement,\n          FrameElement,\n          RenderableElement,\n        ],\n        HImageElement\n      ),\n      (HImageElement.prototype.createContent = function () {\n        var t = this.globalData.getAssetsPath(this.assetData),\n          e = new Image();\n        this.data.hasMask\n          ? ((this.imageElem = createNS(\"image\")),\n            this.imageElem.setAttribute(\"width\", this.assetData.w + \"px\"),\n            this.imageElem.setAttribute(\"height\", this.assetData.h + \"px\"),\n            this.imageElem.setAttributeNS(\n              \"http://www.w3.org/1999/xlink\",\n              \"href\",\n              t\n            ),\n            this.layerElement.appendChild(this.imageElem),\n            this.baseElement.setAttribute(\"width\", this.assetData.w),\n            this.baseElement.setAttribute(\"height\", this.assetData.h))\n          : this.layerElement.appendChild(e),\n          (e.crossOrigin = \"anonymous\"),\n          (e.src = t),\n          this.data.ln && this.baseElement.setAttribute(\"id\", this.data.ln);\n      }),\n      extendPrototype([BaseRenderer], HybridRendererBase),\n      (HybridRendererBase.prototype.buildItem =\n        SVGRenderer.prototype.buildItem),\n      (HybridRendererBase.prototype.checkPendingElements = function () {\n        for (; this.pendingElements.length; ) {\n          this.pendingElements.pop().checkParenting();\n        }\n      }),\n      (HybridRendererBase.prototype.appendElementInPos = function (t, e) {\n        var i = t.getBaseElement();\n        if (i) {\n          var r = this.layers[e];\n          if (r.ddd && this.supports3d) this.addTo3dContainer(i, e);\n          else if (this.threeDElements) this.addTo3dContainer(i, e);\n          else {\n            for (var s, a, n = 0; n < e; )\n              this.elements[n] &&\n                !0 !== this.elements[n] &&\n                this.elements[n].getBaseElement &&\n                ((a = this.elements[n]),\n                (s =\n                  (this.layers[n].ddd\n                    ? this.getThreeDContainerByPos(n)\n                    : a.getBaseElement()) || s)),\n                (n += 1);\n            s\n              ? (r.ddd && this.supports3d) ||\n                this.layerElement.insertBefore(i, s)\n              : (r.ddd && this.supports3d) || this.layerElement.appendChild(i);\n          }\n        }\n      }),\n      (HybridRendererBase.prototype.createShape = function (t) {\n        return this.supports3d\n          ? new HShapeElement(t, this.globalData, this)\n          : new SVGShapeElement(t, this.globalData, this);\n      }),\n      (HybridRendererBase.prototype.createText = function (t) {\n        return this.supports3d\n          ? new HTextElement(t, this.globalData, this)\n          : new SVGTextLottieElement(t, this.globalData, this);\n      }),\n      (HybridRendererBase.prototype.createCamera = function (t) {\n        return (\n          (this.camera = new HCameraElement(t, this.globalData, this)),\n          this.camera\n        );\n      }),\n      (HybridRendererBase.prototype.createImage = function (t) {\n        return this.supports3d\n          ? new HImageElement(t, this.globalData, this)\n          : new IImageElement(t, this.globalData, this);\n      }),\n      (HybridRendererBase.prototype.createSolid = function (t) {\n        return this.supports3d\n          ? new HSolidElement(t, this.globalData, this)\n          : new ISolidElement(t, this.globalData, this);\n      }),\n      (HybridRendererBase.prototype.createNull =\n        SVGRenderer.prototype.createNull),\n      (HybridRendererBase.prototype.getThreeDContainerByPos = function (t) {\n        for (var e = 0, i = this.threeDElements.length; e < i; ) {\n          if (\n            this.threeDElements[e].startPos <= t &&\n            this.threeDElements[e].endPos >= t\n          )\n            return this.threeDElements[e].perspectiveElem;\n          e += 1;\n        }\n        return null;\n      }),\n      (HybridRendererBase.prototype.createThreeDContainer = function (t, e) {\n        var i,\n          r,\n          s = createTag(\"div\");\n        styleDiv(s);\n        var a = createTag(\"div\");\n        if ((styleDiv(a), \"3d\" === e)) {\n          ((i = s.style).width = this.globalData.compSize.w + \"px\"),\n            (i.height = this.globalData.compSize.h + \"px\");\n          var n = \"50% 50%\";\n          (i.webkitTransformOrigin = n),\n            (i.mozTransformOrigin = n),\n            (i.transformOrigin = n);\n          var o = \"matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)\";\n          ((r = a.style).transform = o), (r.webkitTransform = o);\n        }\n        s.appendChild(a);\n        var h = {\n          container: a,\n          perspectiveElem: s,\n          startPos: t,\n          endPos: t,\n          type: e,\n        };\n        return this.threeDElements.push(h), h;\n      }),\n      (HybridRendererBase.prototype.build3dContainers = function () {\n        var t,\n          e,\n          i = this.layers.length,\n          r = \"\";\n        for (t = 0; t < i; t += 1)\n          this.layers[t].ddd && 3 !== this.layers[t].ty\n            ? (\"3d\" !== r &&\n                ((r = \"3d\"), (e = this.createThreeDContainer(t, \"3d\"))),\n              (e.endPos = Math.max(e.endPos, t)))\n            : (\"2d\" !== r &&\n                ((r = \"2d\"), (e = this.createThreeDContainer(t, \"2d\"))),\n              (e.endPos = Math.max(e.endPos, t)));\n        for (t = (i = this.threeDElements.length) - 1; t >= 0; t -= 1)\n          this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem);\n      }),\n      (HybridRendererBase.prototype.addTo3dContainer = function (t, e) {\n        for (var i = 0, r = this.threeDElements.length; i < r; ) {\n          if (e <= this.threeDElements[i].endPos) {\n            for (var s, a = this.threeDElements[i].startPos; a < e; )\n              this.elements[a] &&\n                this.elements[a].getBaseElement &&\n                (s = this.elements[a].getBaseElement()),\n                (a += 1);\n            s\n              ? this.threeDElements[i].container.insertBefore(t, s)\n              : this.threeDElements[i].container.appendChild(t);\n            break;\n          }\n          i += 1;\n        }\n      }),\n      (HybridRendererBase.prototype.configAnimation = function (t) {\n        var e = createTag(\"div\"),\n          i = this.animationItem.wrapper,\n          r = e.style;\n        (r.width = t.w + \"px\"),\n          (r.height = t.h + \"px\"),\n          (this.resizerElem = e),\n          styleDiv(e),\n          (r.transformStyle = \"flat\"),\n          (r.mozTransformStyle = \"flat\"),\n          (r.webkitTransformStyle = \"flat\"),\n          this.renderConfig.className &&\n            e.setAttribute(\"class\", this.renderConfig.className),\n          i.appendChild(e),\n          (r.overflow = \"hidden\");\n        var s = createNS(\"svg\");\n        s.setAttribute(\"width\", \"1\"),\n          s.setAttribute(\"height\", \"1\"),\n          styleDiv(s),\n          this.resizerElem.appendChild(s);\n        var a = createNS(\"defs\");\n        s.appendChild(a),\n          (this.data = t),\n          this.setupGlobalData(t, s),\n          (this.globalData.defs = a),\n          (this.layers = t.layers),\n          (this.layerElement = this.resizerElem),\n          this.build3dContainers(),\n          this.updateContainerSize();\n      }),\n      (HybridRendererBase.prototype.destroy = function () {\n        var t;\n        this.animationItem.wrapper &&\n          (this.animationItem.wrapper.innerText = \"\"),\n          (this.animationItem.container = null),\n          (this.globalData.defs = null);\n        var e = this.layers ? this.layers.length : 0;\n        for (t = 0; t < e; t += 1)\n          this.elements[t] &&\n            this.elements[t].destroy &&\n            this.elements[t].destroy();\n        (this.elements.length = 0),\n          (this.destroyed = !0),\n          (this.animationItem = null);\n      }),\n      (HybridRendererBase.prototype.updateContainerSize = function () {\n        var t,\n          e,\n          i,\n          r,\n          s = this.animationItem.wrapper.offsetWidth,\n          a = this.animationItem.wrapper.offsetHeight,\n          n = s / a;\n        this.globalData.compSize.w / this.globalData.compSize.h > n\n          ? ((t = s / this.globalData.compSize.w),\n            (e = s / this.globalData.compSize.w),\n            (i = 0),\n            (r =\n              (a -\n                this.globalData.compSize.h * (s / this.globalData.compSize.w)) /\n              2))\n          : ((t = a / this.globalData.compSize.h),\n            (e = a / this.globalData.compSize.h),\n            (i =\n              (s -\n                this.globalData.compSize.w * (a / this.globalData.compSize.h)) /\n              2),\n            (r = 0));\n        var o = this.resizerElem.style;\n        (o.webkitTransform =\n          \"matrix3d(\" +\n          t +\n          \",0,0,0,0,\" +\n          e +\n          \",0,0,0,0,1,0,\" +\n          i +\n          \",\" +\n          r +\n          \",0,1)\"),\n          (o.transform = o.webkitTransform);\n      }),\n      (HybridRendererBase.prototype.renderFrame =\n        SVGRenderer.prototype.renderFrame),\n      (HybridRendererBase.prototype.hide = function () {\n        this.resizerElem.style.display = \"none\";\n      }),\n      (HybridRendererBase.prototype.show = function () {\n        this.resizerElem.style.display = \"block\";\n      }),\n      (HybridRendererBase.prototype.initItems = function () {\n        if ((this.buildAllItems(), this.camera)) this.camera.setup();\n        else {\n          var t,\n            e = this.globalData.compSize.w,\n            i = this.globalData.compSize.h,\n            r = this.threeDElements.length;\n          for (t = 0; t < r; t += 1) {\n            var s = this.threeDElements[t].perspectiveElem.style;\n            (s.webkitPerspective =\n              Math.sqrt(Math.pow(e, 2) + Math.pow(i, 2)) + \"px\"),\n              (s.perspective = s.webkitPerspective);\n          }\n        }\n      }),\n      (HybridRendererBase.prototype.searchExtraCompositions = function (t) {\n        var e,\n          i = t.length,\n          r = createTag(\"div\");\n        for (e = 0; e < i; e += 1)\n          if (t[e].xt) {\n            var s = this.createComp(t[e], r, this.globalData.comp, null);\n            s.initExpressions(),\n              this.globalData.projectInterface.registerComposition(s);\n          }\n      }),\n      extendPrototype(\n        [HybridRendererBase, ICompElement, HBaseElement],\n        HCompElement\n      ),\n      (HCompElement.prototype._createBaseContainerElements =\n        HCompElement.prototype.createContainerElements),\n      (HCompElement.prototype.createContainerElements = function () {\n        this._createBaseContainerElements(),\n          this.data.hasMask\n            ? (this.svgElement.setAttribute(\"width\", this.data.w),\n              this.svgElement.setAttribute(\"height\", this.data.h),\n              (this.transformedElement = this.baseElement))\n            : (this.transformedElement = this.layerElement);\n      }),\n      (HCompElement.prototype.addTo3dContainer = function (t, e) {\n        for (var i, r = 0; r < e; )\n          this.elements[r] &&\n            this.elements[r].getBaseElement &&\n            (i = this.elements[r].getBaseElement()),\n            (r += 1);\n        i\n          ? this.layerElement.insertBefore(t, i)\n          : this.layerElement.appendChild(t);\n      }),\n      (HCompElement.prototype.createComp = function (t) {\n        return this.supports3d\n          ? new HCompElement(t, this.globalData, this)\n          : new SVGCompElement(t, this.globalData, this);\n      }),\n      extendPrototype([HybridRendererBase], HybridRenderer),\n      (HybridRenderer.prototype.createComp = function (t) {\n        return this.supports3d\n          ? new HCompElement(t, this.globalData, this)\n          : new SVGCompElement(t, this.globalData, this);\n      });\n    var CompExpressionInterface = function (t) {\n      function e(e) {\n        for (var i = 0, r = t.layers.length; i < r; ) {\n          if (t.layers[i].nm === e || t.layers[i].ind === e)\n            return t.elements[i].layerInterface;\n          i += 1;\n        }\n        return null;\n      }\n      return (\n        Object.defineProperty(e, \"_name\", { value: t.data.nm }),\n        (e.layer = e),\n        (e.pixelAspect = 1),\n        (e.height = t.data.h || t.globalData.compSize.h),\n        (e.width = t.data.w || t.globalData.compSize.w),\n        (e.pixelAspect = 1),\n        (e.frameDuration = 1 / t.globalData.frameRate),\n        (e.displayStartTime = 0),\n        (e.numLayers = t.layers.length),\n        e\n      );\n    };\n    function _typeof$2(t) {\n      return (\n        (_typeof$2 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$2(t)\n      );\n    }\n    function seedRandom(t, e) {\n      var i,\n        r = this,\n        s = 256,\n        a = e.pow(s, 6),\n        n = e.pow(2, 52),\n        o = 2 * n,\n        h = 255;\n      function l(t) {\n        var e,\n          i = t.length,\n          r = this,\n          a = 0,\n          n = (r.i = r.j = 0),\n          o = (r.S = []);\n        for (i || (t = [i++]); a < s; ) o[a] = a++;\n        for (a = 0; a < s; a++)\n          (o[a] = o[(n = h & (n + t[a % i] + (e = o[a])))]), (o[n] = e);\n        r.g = function (t) {\n          for (var e, i = 0, a = r.i, n = r.j, o = r.S; t--; )\n            (e = o[(a = h & (a + 1))]),\n              (i = i * s + o[h & ((o[a] = o[(n = h & (n + e))]) + (o[n] = e))]);\n          return (r.i = a), (r.j = n), i;\n        };\n      }\n      function p(t, e) {\n        return (e.i = t.i), (e.j = t.j), (e.S = t.S.slice()), e;\n      }\n      function f(t, e) {\n        var i,\n          r = [],\n          s = _typeof$2(t);\n        if (e && \"object\" == s)\n          for (i in t)\n            try {\n              r.push(f(t[i], e - 1));\n            } catch (t) {}\n        return r.length ? r : \"string\" == s ? t : t + \"\\0\";\n      }\n      function m(t, e) {\n        for (var i, r = t + \"\", s = 0; s < r.length; )\n          e[h & s] = h & ((i ^= 19 * e[h & s]) + r.charCodeAt(s++));\n        return c(e);\n      }\n      function c(t) {\n        return String.fromCharCode.apply(0, t);\n      }\n      (e.seedrandom = function (h, d, u) {\n        var y = [],\n          g = m(\n            f(\n              (d = !0 === d ? { entropy: !0 } : d || {}).entropy\n                ? [h, c(t)]\n                : null === h\n                ? (function () {\n                    try {\n                      i;\n                      var e = new Uint8Array(s);\n                      return (r.crypto || r.msCrypto).getRandomValues(e), c(e);\n                    } catch (e) {\n                      var a = r.navigator,\n                        n = a && a.plugins;\n                      return [+new Date(), r, n, r.screen, c(t)];\n                    }\n                  })()\n                : h,\n              3\n            ),\n            y\n          ),\n          v = new l(y),\n          b = function () {\n            for (var t = v.g(6), e = a, i = 0; t < n; )\n              (t = (t + i) * s), (e *= s), (i = v.g(1));\n            for (; t >= o; ) (t /= 2), (e /= 2), (i >>>= 1);\n            return (t + i) / e;\n          };\n        return (\n          (b.int32 = function () {\n            return 0 | v.g(4);\n          }),\n          (b.quick = function () {\n            return v.g(4) / 4294967296;\n          }),\n          (b.double = b),\n          m(c(v.S), t),\n          (\n            d.pass ||\n            u ||\n            function (t, i, r, s) {\n              return (\n                s &&\n                  (s.S && p(s, v),\n                  (t.state = function () {\n                    return p(v, {});\n                  })),\n                r ? ((e.random = t), i) : t\n              );\n            }\n          )(b, g, \"global\" in d ? d.global : this == e, d.state)\n        );\n      }),\n        m(e.random(), t);\n    }\n    function initialize$2(t) {\n      seedRandom([], t);\n    }\n    var propTypes = { SHAPE: \"shape\" };\n    function _typeof$1(t) {\n      return (\n        (_typeof$1 =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof$1(t)\n      );\n    }\n    var ExpressionManager = (function () {\n        var ob = {},\n          Math = BMMath,\n          window = null,\n          document = null,\n          XMLHttpRequest = null,\n          fetch = null,\n          frames = null,\n          _lottieGlobal = {};\n        function resetFrame() {\n          _lottieGlobal = {};\n        }\n        function $bm_isInstanceOfArray(t) {\n          return t.constructor === Array || t.constructor === Float32Array;\n        }\n        function isNumerable(t, e) {\n          return (\n            \"number\" === t ||\n            e instanceof Number ||\n            \"boolean\" === t ||\n            \"string\" === t\n          );\n        }\n        function $bm_neg(t) {\n          var e = _typeof$1(t);\n          if (\"number\" === e || t instanceof Number || \"boolean\" === e)\n            return -t;\n          if ($bm_isInstanceOfArray(t)) {\n            var i,\n              r = t.length,\n              s = [];\n            for (i = 0; i < r; i += 1) s[i] = -t[i];\n            return s;\n          }\n          return t.propType ? t.v : -t;\n        }\n        initialize$2(BMMath);\n        var easeInBez = BezierFactory.getBezierEasing(\n            0.333,\n            0,\n            0.833,\n            0.833,\n            \"easeIn\"\n          ).get,\n          easeOutBez = BezierFactory.getBezierEasing(\n            0.167,\n            0.167,\n            0.667,\n            1,\n            \"easeOut\"\n          ).get,\n          easeInOutBez = BezierFactory.getBezierEasing(\n            0.33,\n            0,\n            0.667,\n            1,\n            \"easeInOut\"\n          ).get;\n        function sum(t, e) {\n          var i = _typeof$1(t),\n            r = _typeof$1(e);\n          if (\n            (isNumerable(i, t) && isNumerable(r, e)) ||\n            \"string\" === i ||\n            \"string\" === r\n          )\n            return t + e;\n          if ($bm_isInstanceOfArray(t) && isNumerable(r, e))\n            return ((t = t.slice(0))[0] += e), t;\n          if (isNumerable(i, t) && $bm_isInstanceOfArray(e))\n            return ((e = e.slice(0))[0] = t + e[0]), e;\n          if ($bm_isInstanceOfArray(t) && $bm_isInstanceOfArray(e)) {\n            for (\n              var s = 0, a = t.length, n = e.length, o = [];\n              s < a || s < n;\n\n            )\n              (\"number\" == typeof t[s] || t[s] instanceof Number) &&\n              (\"number\" == typeof e[s] || e[s] instanceof Number)\n                ? (o[s] = t[s] + e[s])\n                : (o[s] = void 0 === e[s] ? t[s] : t[s] || e[s]),\n                (s += 1);\n            return o;\n          }\n          return 0;\n        }\n        var add = sum;\n        function sub(t, e) {\n          var i = _typeof$1(t),\n            r = _typeof$1(e);\n          if (isNumerable(i, t) && isNumerable(r, e))\n            return (\n              \"string\" === i && (t = parseInt(t, 10)),\n              \"string\" === r && (e = parseInt(e, 10)),\n              t - e\n            );\n          if ($bm_isInstanceOfArray(t) && isNumerable(r, e))\n            return ((t = t.slice(0))[0] -= e), t;\n          if (isNumerable(i, t) && $bm_isInstanceOfArray(e))\n            return ((e = e.slice(0))[0] = t - e[0]), e;\n          if ($bm_isInstanceOfArray(t) && $bm_isInstanceOfArray(e)) {\n            for (\n              var s = 0, a = t.length, n = e.length, o = [];\n              s < a || s < n;\n\n            )\n              (\"number\" == typeof t[s] || t[s] instanceof Number) &&\n              (\"number\" == typeof e[s] || e[s] instanceof Number)\n                ? (o[s] = t[s] - e[s])\n                : (o[s] = void 0 === e[s] ? t[s] : t[s] || e[s]),\n                (s += 1);\n            return o;\n          }\n          return 0;\n        }\n        function mul(t, e) {\n          var i,\n            r,\n            s,\n            a = _typeof$1(t),\n            n = _typeof$1(e);\n          if (isNumerable(a, t) && isNumerable(n, e)) return t * e;\n          if ($bm_isInstanceOfArray(t) && isNumerable(n, e)) {\n            for (\n              s = t.length, i = createTypedArray(\"float32\", s), r = 0;\n              r < s;\n              r += 1\n            )\n              i[r] = t[r] * e;\n            return i;\n          }\n          if (isNumerable(a, t) && $bm_isInstanceOfArray(e)) {\n            for (\n              s = e.length, i = createTypedArray(\"float32\", s), r = 0;\n              r < s;\n              r += 1\n            )\n              i[r] = t * e[r];\n            return i;\n          }\n          return 0;\n        }\n        function div(t, e) {\n          var i,\n            r,\n            s,\n            a = _typeof$1(t),\n            n = _typeof$1(e);\n          if (isNumerable(a, t) && isNumerable(n, e)) return t / e;\n          if ($bm_isInstanceOfArray(t) && isNumerable(n, e)) {\n            for (\n              s = t.length, i = createTypedArray(\"float32\", s), r = 0;\n              r < s;\n              r += 1\n            )\n              i[r] = t[r] / e;\n            return i;\n          }\n          if (isNumerable(a, t) && $bm_isInstanceOfArray(e)) {\n            for (\n              s = e.length, i = createTypedArray(\"float32\", s), r = 0;\n              r < s;\n              r += 1\n            )\n              i[r] = t / e[r];\n            return i;\n          }\n          return 0;\n        }\n        function mod(t, e) {\n          return (\n            \"string\" == typeof t && (t = parseInt(t, 10)),\n            \"string\" == typeof e && (e = parseInt(e, 10)),\n            t % e\n          );\n        }\n        var $bm_sum = sum,\n          $bm_sub = sub,\n          $bm_mul = mul,\n          $bm_div = div,\n          $bm_mod = mod;\n        function clamp(t, e, i) {\n          if (e > i) {\n            var r = i;\n            (i = e), (e = r);\n          }\n          return Math.min(Math.max(t, e), i);\n        }\n        function radiansToDegrees(t) {\n          return t / degToRads;\n        }\n        var radians_to_degrees = radiansToDegrees;\n        function degreesToRadians(t) {\n          return t * degToRads;\n        }\n        var degrees_to_radians = radiansToDegrees,\n          helperLengthArray = [0, 0, 0, 0, 0, 0];\n        function length(t, e) {\n          if (\"number\" == typeof t || t instanceof Number)\n            return (e = e || 0), Math.abs(t - e);\n          var i;\n          e || (e = helperLengthArray);\n          var r = Math.min(t.length, e.length),\n            s = 0;\n          for (i = 0; i < r; i += 1) s += Math.pow(e[i] - t[i], 2);\n          return Math.sqrt(s);\n        }\n        function normalize(t) {\n          return div(t, length(t));\n        }\n        function rgbToHsl(t) {\n          var e,\n            i,\n            r = t[0],\n            s = t[1],\n            a = t[2],\n            n = Math.max(r, s, a),\n            o = Math.min(r, s, a),\n            h = (n + o) / 2;\n          if (n === o) (e = 0), (i = 0);\n          else {\n            var l = n - o;\n            switch (((i = h > 0.5 ? l / (2 - n - o) : l / (n + o)), n)) {\n              case r:\n                e = (s - a) / l + (s < a ? 6 : 0);\n                break;\n              case s:\n                e = (a - r) / l + 2;\n                break;\n              case a:\n                e = (r - s) / l + 4;\n            }\n            e /= 6;\n          }\n          return [e, i, h, t[3]];\n        }\n        function hue2rgb(t, e, i) {\n          return (\n            i < 0 && (i += 1),\n            i > 1 && (i -= 1),\n            i < 1 / 6\n              ? t + 6 * (e - t) * i\n              : i < 0.5\n              ? e\n              : i < 2 / 3\n              ? t + (e - t) * (2 / 3 - i) * 6\n              : t\n          );\n        }\n        function hslToRgb(t) {\n          var e,\n            i,\n            r,\n            s = t[0],\n            a = t[1],\n            n = t[2];\n          if (0 === a) (e = n), (r = n), (i = n);\n          else {\n            var o = n < 0.5 ? n * (1 + a) : n + a - n * a,\n              h = 2 * n - o;\n            (e = hue2rgb(h, o, s + 1 / 3)),\n              (i = hue2rgb(h, o, s)),\n              (r = hue2rgb(h, o, s - 1 / 3));\n          }\n          return [e, i, r, t[3]];\n        }\n        function linear(t, e, i, r, s) {\n          if (\n            ((void 0 !== r && void 0 !== s) ||\n              ((r = e), (s = i), (e = 0), (i = 1)),\n            i < e)\n          ) {\n            var a = i;\n            (i = e), (e = a);\n          }\n          if (t <= e) return r;\n          if (t >= i) return s;\n          var n,\n            o = i === e ? 0 : (t - e) / (i - e);\n          if (!r.length) return r + (s - r) * o;\n          var h = r.length,\n            l = createTypedArray(\"float32\", h);\n          for (n = 0; n < h; n += 1) l[n] = r[n] + (s[n] - r[n]) * o;\n          return l;\n        }\n        function random(t, e) {\n          if (\n            (void 0 === e &&\n              (void 0 === t ? ((t = 0), (e = 1)) : ((e = t), (t = void 0))),\n            e.length)\n          ) {\n            var i,\n              r = e.length;\n            t || (t = createTypedArray(\"float32\", r));\n            var s = createTypedArray(\"float32\", r),\n              a = BMMath.random();\n            for (i = 0; i < r; i += 1) s[i] = t[i] + a * (e[i] - t[i]);\n            return s;\n          }\n          return void 0 === t && (t = 0), t + BMMath.random() * (e - t);\n        }\n        function createPath(t, e, i, r) {\n          var s,\n            a = t.length,\n            n = shapePool.newElement();\n          n.setPathData(!!r, a);\n          var o,\n            h,\n            l = [0, 0];\n          for (s = 0; s < a; s += 1)\n            (o = e && e[s] ? e[s] : l),\n              (h = i && i[s] ? i[s] : l),\n              n.setTripleAt(\n                t[s][0],\n                t[s][1],\n                h[0] + t[s][0],\n                h[1] + t[s][1],\n                o[0] + t[s][0],\n                o[1] + t[s][1],\n                s,\n                !0\n              );\n          return n;\n        }\n        function initiateExpression(elem, data, property) {\n          function noOp(t) {\n            return t;\n          }\n          if (!elem.globalData.renderConfig.runExpressions) return noOp;\n          var val = data.x,\n            needsVelocity = /velocity(?![\\w\\d])/.test(val),\n            _needsRandom = -1 !== val.indexOf(\"random\"),\n            elemType = elem.data.ty,\n            transform,\n            $bm_transform,\n            content,\n            effect,\n            thisProperty = property;\n          (thisProperty.valueAtTime = thisProperty.getValueAtTime),\n            Object.defineProperty(thisProperty, \"value\", {\n              get: function () {\n                return thisProperty.v;\n              },\n            }),\n            (elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate),\n            (elem.comp.displayStartTime = 0);\n          var inPoint = elem.data.ip / elem.comp.globalData.frameRate,\n            outPoint = elem.data.op / elem.comp.globalData.frameRate,\n            width = elem.data.sw ? elem.data.sw : 0,\n            height = elem.data.sh ? elem.data.sh : 0,\n            name = elem.data.nm,\n            loopIn,\n            loop_in,\n            loopOut,\n            loop_out,\n            smooth,\n            toWorld,\n            fromWorld,\n            fromComp,\n            toComp,\n            fromCompToSurface,\n            position,\n            rotation,\n            anchorPoint,\n            scale,\n            thisLayer,\n            thisComp,\n            mask,\n            valueAtTime,\n            velocityAtTime,\n            scoped_bm_rt,\n            expression_function = eval(\n              \"[function _expression_function(){\" +\n                val +\n                \";scoped_bm_rt=$bm_rt}]\"\n            )[0],\n            numKeys = property.kf ? data.k.length : 0,\n            active = !this.data || !0 !== this.data.hd,\n            wiggle = function (t, e) {\n              var i,\n                r,\n                s = this.pv.length ? this.pv.length : 1,\n                a = createTypedArray(\"float32\", s);\n              var n = Math.floor(5 * time);\n              for (i = 0, r = 0; i < n; ) {\n                for (r = 0; r < s; r += 1) a[r] += -e + 2 * e * BMMath.random();\n                i += 1;\n              }\n              var o = 5 * time,\n                h = o - Math.floor(o),\n                l = createTypedArray(\"float32\", s);\n              if (s > 1) {\n                for (r = 0; r < s; r += 1)\n                  l[r] = this.pv[r] + a[r] + (-e + 2 * e * BMMath.random()) * h;\n                return l;\n              }\n              return this.pv + a[0] + (-e + 2 * e * BMMath.random()) * h;\n            }.bind(this);\n          function loopInDuration(t, e) {\n            return loopIn(t, e, !0);\n          }\n          function loopOutDuration(t, e) {\n            return loopOut(t, e, !0);\n          }\n          thisProperty.loopIn &&\n            ((loopIn = thisProperty.loopIn.bind(thisProperty)),\n            (loop_in = loopIn)),\n            thisProperty.loopOut &&\n              ((loopOut = thisProperty.loopOut.bind(thisProperty)),\n              (loop_out = loopOut)),\n            thisProperty.smooth &&\n              (smooth = thisProperty.smooth.bind(thisProperty)),\n            this.getValueAtTime &&\n              (valueAtTime = this.getValueAtTime.bind(this)),\n            this.getVelocityAtTime &&\n              (velocityAtTime = this.getVelocityAtTime.bind(this));\n          var comp = elem.comp.globalData.projectInterface.bind(\n              elem.comp.globalData.projectInterface\n            ),\n            time,\n            velocity,\n            value,\n            text,\n            textIndex,\n            textTotal,\n            selectorValue;\n          function lookAt(t, e) {\n            var i = [e[0] - t[0], e[1] - t[1], e[2] - t[2]],\n              r =\n                Math.atan2(i[0], Math.sqrt(i[1] * i[1] + i[2] * i[2])) /\n                degToRads;\n            return [-Math.atan2(i[1], i[2]) / degToRads, r, 0];\n          }\n          function easeOut(t, e, i, r, s) {\n            return applyEase(easeOutBez, t, e, i, r, s);\n          }\n          function easeIn(t, e, i, r, s) {\n            return applyEase(easeInBez, t, e, i, r, s);\n          }\n          function ease(t, e, i, r, s) {\n            return applyEase(easeInOutBez, t, e, i, r, s);\n          }\n          function applyEase(t, e, i, r, s, a) {\n            void 0 === s ? ((s = i), (a = r)) : (e = (e - i) / (r - i)),\n              e > 1 ? (e = 1) : e < 0 && (e = 0);\n            var n = t(e);\n            if ($bm_isInstanceOfArray(s)) {\n              var o,\n                h = s.length,\n                l = createTypedArray(\"float32\", h);\n              for (o = 0; o < h; o += 1) l[o] = (a[o] - s[o]) * n + s[o];\n              return l;\n            }\n            return (a - s) * n + s;\n          }\n          function nearestKey(t) {\n            var e,\n              i,\n              r,\n              s = data.k.length;\n            if (data.k.length && \"number\" != typeof data.k[0])\n              if (\n                ((i = -1), (t *= elem.comp.globalData.frameRate) < data.k[0].t)\n              )\n                (i = 1), (r = data.k[0].t);\n              else {\n                for (e = 0; e < s - 1; e += 1) {\n                  if (t === data.k[e].t) {\n                    (i = e + 1), (r = data.k[e].t);\n                    break;\n                  }\n                  if (t > data.k[e].t && t < data.k[e + 1].t) {\n                    t - data.k[e].t > data.k[e + 1].t - t\n                      ? ((i = e + 2), (r = data.k[e + 1].t))\n                      : ((i = e + 1), (r = data.k[e].t));\n                    break;\n                  }\n                }\n                -1 === i && ((i = e + 1), (r = data.k[e].t));\n              }\n            else (i = 0), (r = 0);\n            var a = {};\n            return (\n              (a.index = i), (a.time = r / elem.comp.globalData.frameRate), a\n            );\n          }\n          function key(t) {\n            var e, i, r;\n            if (!data.k.length || \"number\" == typeof data.k[0])\n              throw new Error(\"The property has no keyframe at index \" + t);\n            (t -= 1),\n              (e = {\n                time: data.k[t].t / elem.comp.globalData.frameRate,\n                value: [],\n              });\n            var s = Object.prototype.hasOwnProperty.call(data.k[t], \"s\")\n              ? data.k[t].s\n              : data.k[t - 1].e;\n            for (r = s.length, i = 0; i < r; i += 1)\n              (e[i] = s[i]), (e.value[i] = s[i]);\n            return e;\n          }\n          function framesToTime(t, e) {\n            return e || (e = elem.comp.globalData.frameRate), t / e;\n          }\n          function timeToFrames(t, e) {\n            return (\n              t || 0 === t || (t = time),\n              e || (e = elem.comp.globalData.frameRate),\n              t * e\n            );\n          }\n          function seedRandom(t) {\n            BMMath.seedrandom(randSeed + t);\n          }\n          function sourceRectAtTime() {\n            return elem.sourceRectAtTime();\n          }\n          function substring(t, e) {\n            return \"string\" == typeof value\n              ? void 0 === e\n                ? value.substring(t)\n                : value.substring(t, e)\n              : \"\";\n          }\n          function substr(t, e) {\n            return \"string\" == typeof value\n              ? void 0 === e\n                ? value.substr(t)\n                : value.substr(t, e)\n              : \"\";\n          }\n          function posterizeTime(t) {\n            (time = 0 === t ? 0 : Math.floor(time * t) / t),\n              (value = valueAtTime(time));\n          }\n          var index = elem.data.ind,\n            hasParent = !(!elem.hierarchy || !elem.hierarchy.length),\n            parent,\n            randSeed = Math.floor(1e6 * Math.random()),\n            globalData = elem.globalData;\n          function executeExpression(t) {\n            return (\n              (value = t),\n              this.frameExpressionId === elem.globalData.frameId &&\n              \"textSelector\" !== this.propType\n                ? value\n                : (\"textSelector\" === this.propType &&\n                    ((textIndex = this.textIndex),\n                    (textTotal = this.textTotal),\n                    (selectorValue = this.selectorValue)),\n                  thisLayer ||\n                    ((text = elem.layerInterface.text),\n                    (thisLayer = elem.layerInterface),\n                    (thisComp = elem.comp.compInterface),\n                    (toWorld = thisLayer.toWorld.bind(thisLayer)),\n                    (fromWorld = thisLayer.fromWorld.bind(thisLayer)),\n                    (fromComp = thisLayer.fromComp.bind(thisLayer)),\n                    (toComp = thisLayer.toComp.bind(thisLayer)),\n                    (mask = thisLayer.mask\n                      ? thisLayer.mask.bind(thisLayer)\n                      : null),\n                    (fromCompToSurface = fromComp)),\n                  transform ||\n                    ((transform = elem.layerInterface(\"ADBE Transform Group\")),\n                    ($bm_transform = transform),\n                    transform && (anchorPoint = transform.anchorPoint)),\n                  4 !== elemType ||\n                    content ||\n                    (content = thisLayer(\"ADBE Root Vectors Group\")),\n                  effect || (effect = thisLayer(4)),\n                  (hasParent = !(!elem.hierarchy || !elem.hierarchy.length)) &&\n                    !parent &&\n                    (parent = elem.hierarchy[0].layerInterface),\n                  (time =\n                    this.comp.renderedFrame / this.comp.globalData.frameRate),\n                  _needsRandom && seedRandom(randSeed + time),\n                  needsVelocity && (velocity = velocityAtTime(time)),\n                  expression_function(),\n                  (this.frameExpressionId = elem.globalData.frameId),\n                  (scoped_bm_rt =\n                    scoped_bm_rt.propType === propTypes.SHAPE\n                      ? scoped_bm_rt.v\n                      : scoped_bm_rt))\n            );\n          }\n          return (\n            (executeExpression.__preventDeadCodeRemoval = [\n              $bm_transform,\n              anchorPoint,\n              time,\n              velocity,\n              inPoint,\n              outPoint,\n              width,\n              height,\n              name,\n              loop_in,\n              loop_out,\n              smooth,\n              toComp,\n              fromCompToSurface,\n              toWorld,\n              fromWorld,\n              mask,\n              position,\n              rotation,\n              scale,\n              thisComp,\n              numKeys,\n              active,\n              wiggle,\n              loopInDuration,\n              loopOutDuration,\n              comp,\n              lookAt,\n              easeOut,\n              easeIn,\n              ease,\n              nearestKey,\n              key,\n              text,\n              textIndex,\n              textTotal,\n              selectorValue,\n              framesToTime,\n              timeToFrames,\n              sourceRectAtTime,\n              substring,\n              substr,\n              posterizeTime,\n              index,\n              globalData,\n            ]),\n            executeExpression\n          );\n        }\n        return (\n          (ob.initiateExpression = initiateExpression),\n          (ob.__preventDeadCodeRemoval = [\n            window,\n            document,\n            XMLHttpRequest,\n            fetch,\n            frames,\n            $bm_neg,\n            add,\n            $bm_sum,\n            $bm_sub,\n            $bm_mul,\n            $bm_div,\n            $bm_mod,\n            clamp,\n            radians_to_degrees,\n            degreesToRadians,\n            degrees_to_radians,\n            normalize,\n            rgbToHsl,\n            hslToRgb,\n            linear,\n            random,\n            createPath,\n            _lottieGlobal,\n          ]),\n          (ob.resetFrame = resetFrame),\n          ob\n        );\n      })(),\n      Expressions = (function () {\n        var t = {};\n        return (\n          (t.initExpressions = function (t) {\n            var e = 0,\n              i = [];\n            (t.renderer.compInterface = CompExpressionInterface(t.renderer)),\n              t.renderer.globalData.projectInterface.registerComposition(\n                t.renderer\n              ),\n              (t.renderer.globalData.pushExpression = function () {\n                e += 1;\n              }),\n              (t.renderer.globalData.popExpression = function () {\n                0 == (e -= 1) &&\n                  (function () {\n                    var t,\n                      e = i.length;\n                    for (t = 0; t < e; t += 1) i[t].release();\n                    i.length = 0;\n                  })();\n              }),\n              (t.renderer.globalData.registerExpressionProperty = function (t) {\n                -1 === i.indexOf(t) && i.push(t);\n              });\n          }),\n          (t.resetFrame = ExpressionManager.resetFrame),\n          t\n        );\n      })(),\n      MaskManagerInterface = (function () {\n        function t(t, e) {\n          (this._mask = t), (this._data = e);\n        }\n        Object.defineProperty(t.prototype, \"maskPath\", {\n          get: function () {\n            return (\n              this._mask.prop.k && this._mask.prop.getValue(), this._mask.prop\n            );\n          },\n        }),\n          Object.defineProperty(t.prototype, \"maskOpacity\", {\n            get: function () {\n              return (\n                this._mask.op.k && this._mask.op.getValue(),\n                100 * this._mask.op.v\n              );\n            },\n          });\n        return function (e) {\n          var i,\n            r = createSizedArray(e.viewData.length),\n            s = e.viewData.length;\n          for (i = 0; i < s; i += 1)\n            r[i] = new t(e.viewData[i], e.masksProperties[i]);\n          return function (t) {\n            for (i = 0; i < s; ) {\n              if (e.masksProperties[i].nm === t) return r[i];\n              i += 1;\n            }\n            return null;\n          };\n        };\n      })(),\n      ExpressionPropertyInterface = (function () {\n        var t = { pv: 0, v: 0, mult: 1 },\n          e = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 };\n        function i(t, e, i) {\n          Object.defineProperty(t, \"velocity\", {\n            get: function () {\n              return e.getVelocityAtTime(e.comp.currentFrame);\n            },\n          }),\n            (t.numKeys = e.keyframes ? e.keyframes.length : 0),\n            (t.key = function (r) {\n              if (!t.numKeys) return 0;\n              var s = \"\";\n              s =\n                \"s\" in e.keyframes[r - 1]\n                  ? e.keyframes[r - 1].s\n                  : \"e\" in e.keyframes[r - 2]\n                  ? e.keyframes[r - 2].e\n                  : e.keyframes[r - 2].s;\n              var a =\n                \"unidimensional\" === i ? new Number(s) : Object.assign({}, s);\n              return (\n                (a.time =\n                  e.keyframes[r - 1].t / e.elem.comp.globalData.frameRate),\n                (a.value = \"unidimensional\" === i ? s[0] : s),\n                a\n              );\n            }),\n            (t.valueAtTime = e.getValueAtTime),\n            (t.speedAtTime = e.getSpeedAtTime),\n            (t.velocityAtTime = e.getVelocityAtTime),\n            (t.propertyGroup = e.propertyGroup);\n        }\n        function r() {\n          return t;\n        }\n        return function (s) {\n          return s\n            ? \"unidimensional\" === s.propType\n              ? (function (e) {\n                  (e && \"pv\" in e) || (e = t);\n                  var r = 1 / e.mult,\n                    s = e.pv * r,\n                    a = new Number(s);\n                  return (\n                    (a.value = s),\n                    i(a, e, \"unidimensional\"),\n                    function () {\n                      return (\n                        e.k && e.getValue(),\n                        (s = e.v * r),\n                        a.value !== s &&\n                          (((a = new Number(s)).value = s),\n                          i(a, e, \"unidimensional\")),\n                        a\n                      );\n                    }\n                  );\n                })(s)\n              : (function (t) {\n                  (t && \"pv\" in t) || (t = e);\n                  var r = 1 / t.mult,\n                    s = (t.data && t.data.l) || t.pv.length,\n                    a = createTypedArray(\"float32\", s),\n                    n = createTypedArray(\"float32\", s);\n                  return (\n                    (a.value = n),\n                    i(a, t, \"multidimensional\"),\n                    function () {\n                      t.k && t.getValue();\n                      for (var e = 0; e < s; e += 1)\n                        (n[e] = t.v[e] * r), (a[e] = n[e]);\n                      return a;\n                    }\n                  );\n                })(s)\n            : r;\n        };\n      })(),\n      TransformExpressionInterface = function (t) {\n        function e(t) {\n          switch (t) {\n            case \"scale\":\n            case \"Scale\":\n            case \"ADBE Scale\":\n            case 6:\n              return e.scale;\n            case \"rotation\":\n            case \"Rotation\":\n            case \"ADBE Rotation\":\n            case \"ADBE Rotate Z\":\n            case 10:\n              return e.rotation;\n            case \"ADBE Rotate X\":\n              return e.xRotation;\n            case \"ADBE Rotate Y\":\n              return e.yRotation;\n            case \"position\":\n            case \"Position\":\n            case \"ADBE Position\":\n            case 2:\n              return e.position;\n            case \"ADBE Position_0\":\n              return e.xPosition;\n            case \"ADBE Position_1\":\n              return e.yPosition;\n            case \"ADBE Position_2\":\n              return e.zPosition;\n            case \"anchorPoint\":\n            case \"AnchorPoint\":\n            case \"Anchor Point\":\n            case \"ADBE AnchorPoint\":\n            case 1:\n              return e.anchorPoint;\n            case \"opacity\":\n            case \"Opacity\":\n            case 11:\n              return e.opacity;\n            default:\n              return null;\n          }\n        }\n        var i, r, s, a;\n        return (\n          Object.defineProperty(e, \"rotation\", {\n            get: ExpressionPropertyInterface(t.r || t.rz),\n          }),\n          Object.defineProperty(e, \"zRotation\", {\n            get: ExpressionPropertyInterface(t.rz || t.r),\n          }),\n          Object.defineProperty(e, \"xRotation\", {\n            get: ExpressionPropertyInterface(t.rx),\n          }),\n          Object.defineProperty(e, \"yRotation\", {\n            get: ExpressionPropertyInterface(t.ry),\n          }),\n          Object.defineProperty(e, \"scale\", {\n            get: ExpressionPropertyInterface(t.s),\n          }),\n          t.p\n            ? (a = ExpressionPropertyInterface(t.p))\n            : ((i = ExpressionPropertyInterface(t.px)),\n              (r = ExpressionPropertyInterface(t.py)),\n              t.pz && (s = ExpressionPropertyInterface(t.pz))),\n          Object.defineProperty(e, \"position\", {\n            get: function () {\n              return t.p ? a() : [i(), r(), s ? s() : 0];\n            },\n          }),\n          Object.defineProperty(e, \"xPosition\", {\n            get: ExpressionPropertyInterface(t.px),\n          }),\n          Object.defineProperty(e, \"yPosition\", {\n            get: ExpressionPropertyInterface(t.py),\n          }),\n          Object.defineProperty(e, \"zPosition\", {\n            get: ExpressionPropertyInterface(t.pz),\n          }),\n          Object.defineProperty(e, \"anchorPoint\", {\n            get: ExpressionPropertyInterface(t.a),\n          }),\n          Object.defineProperty(e, \"opacity\", {\n            get: ExpressionPropertyInterface(t.o),\n          }),\n          Object.defineProperty(e, \"skew\", {\n            get: ExpressionPropertyInterface(t.sk),\n          }),\n          Object.defineProperty(e, \"skewAxis\", {\n            get: ExpressionPropertyInterface(t.sa),\n          }),\n          Object.defineProperty(e, \"orientation\", {\n            get: ExpressionPropertyInterface(t.or),\n          }),\n          e\n        );\n      },\n      LayerExpressionInterface = (function () {\n        function t(t) {\n          var e = new Matrix();\n          void 0 !== t\n            ? this._elem.finalTransform.mProp.getValueAtTime(t).clone(e)\n            : this._elem.finalTransform.mProp.applyToMatrix(e);\n          return e;\n        }\n        function e(t, e) {\n          var i = this.getMatrix(e);\n          return (\n            (i.props[12] = 0),\n            (i.props[13] = 0),\n            (i.props[14] = 0),\n            this.applyPoint(i, t)\n          );\n        }\n        function i(t, e) {\n          var i = this.getMatrix(e);\n          return this.applyPoint(i, t);\n        }\n        function r(t, e) {\n          var i = this.getMatrix(e);\n          return (\n            (i.props[12] = 0),\n            (i.props[13] = 0),\n            (i.props[14] = 0),\n            this.invertPoint(i, t)\n          );\n        }\n        function s(t, e) {\n          var i = this.getMatrix(e);\n          return this.invertPoint(i, t);\n        }\n        function a(t, e) {\n          if (this._elem.hierarchy && this._elem.hierarchy.length) {\n            var i,\n              r = this._elem.hierarchy.length;\n            for (i = 0; i < r; i += 1)\n              this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(t);\n          }\n          return t.applyToPointArray(e[0], e[1], e[2] || 0);\n        }\n        function n(t, e) {\n          if (this._elem.hierarchy && this._elem.hierarchy.length) {\n            var i,\n              r = this._elem.hierarchy.length;\n            for (i = 0; i < r; i += 1)\n              this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(t);\n          }\n          return t.inversePoint(e);\n        }\n        function o(t) {\n          var e = new Matrix();\n          if (\n            (e.reset(),\n            this._elem.finalTransform.mProp.applyToMatrix(e),\n            this._elem.hierarchy && this._elem.hierarchy.length)\n          ) {\n            var i,\n              r = this._elem.hierarchy.length;\n            for (i = 0; i < r; i += 1)\n              this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(e);\n            return e.inversePoint(t);\n          }\n          return e.inversePoint(t);\n        }\n        function h() {\n          return [1, 1, 1, 1];\n        }\n        return function (l) {\n          var p;\n          function f(t) {\n            switch (t) {\n              case \"ADBE Root Vectors Group\":\n              case \"Contents\":\n              case 2:\n                return f.shapeInterface;\n              case 1:\n              case 6:\n              case \"Transform\":\n              case \"transform\":\n              case \"ADBE Transform Group\":\n                return p;\n              case 4:\n              case \"ADBE Effect Parade\":\n              case \"effects\":\n              case \"Effects\":\n                return f.effect;\n              case \"ADBE Text Properties\":\n                return f.textInterface;\n              default:\n                return null;\n            }\n          }\n          (f.getMatrix = t),\n            (f.invertPoint = n),\n            (f.applyPoint = a),\n            (f.toWorld = i),\n            (f.toWorldVec = e),\n            (f.fromWorld = s),\n            (f.fromWorldVec = r),\n            (f.toComp = i),\n            (f.fromComp = o),\n            (f.sampleImage = h),\n            (f.sourceRectAtTime = l.sourceRectAtTime.bind(l)),\n            (f._elem = l);\n          var m = getDescriptor(\n            (p = TransformExpressionInterface(l.finalTransform.mProp)),\n            \"anchorPoint\"\n          );\n          return (\n            Object.defineProperties(f, {\n              hasParent: {\n                get: function () {\n                  return l.hierarchy.length;\n                },\n              },\n              parent: {\n                get: function () {\n                  return l.hierarchy[0].layerInterface;\n                },\n              },\n              rotation: getDescriptor(p, \"rotation\"),\n              scale: getDescriptor(p, \"scale\"),\n              position: getDescriptor(p, \"position\"),\n              opacity: getDescriptor(p, \"opacity\"),\n              anchorPoint: m,\n              anchor_point: m,\n              transform: {\n                get: function () {\n                  return p;\n                },\n              },\n              active: {\n                get: function () {\n                  return l.isInRange;\n                },\n              },\n            }),\n            (f.startTime = l.data.st),\n            (f.index = l.data.ind),\n            (f.source = l.data.refId),\n            (f.height = 0 === l.data.ty ? l.data.h : 100),\n            (f.width = 0 === l.data.ty ? l.data.w : 100),\n            (f.inPoint = l.data.ip / l.comp.globalData.frameRate),\n            (f.outPoint = l.data.op / l.comp.globalData.frameRate),\n            (f._name = l.data.nm),\n            (f.registerMaskInterface = function (t) {\n              f.mask = new MaskManagerInterface(t, l);\n            }),\n            (f.registerEffectsInterface = function (t) {\n              f.effect = t;\n            }),\n            f\n          );\n        };\n      })(),\n      propertyGroupFactory = function (t, e) {\n        return function (i) {\n          return (i = void 0 === i ? 1 : i) <= 0 ? t : e(i - 1);\n        };\n      },\n      PropertyInterface = function (t, e) {\n        var i = { _name: t };\n        return function (t) {\n          return (t = void 0 === t ? 1 : t) <= 0 ? i : e(t - 1);\n        };\n      },\n      EffectsExpressionInterface = (function () {\n        function t(i, r, s, a) {\n          function n(t) {\n            for (var e = i.ef, r = 0, s = e.length; r < s; ) {\n              if (t === e[r].nm || t === e[r].mn || t === e[r].ix)\n                return 5 === e[r].ty ? l[r] : l[r]();\n              r += 1;\n            }\n            throw new Error();\n          }\n          var o,\n            h = propertyGroupFactory(n, s),\n            l = [],\n            p = i.ef.length;\n          for (o = 0; o < p; o += 1)\n            5 === i.ef[o].ty\n              ? l.push(\n                  t(\n                    i.ef[o],\n                    r.effectElements[o],\n                    r.effectElements[o].propertyGroup,\n                    a\n                  )\n                )\n              : l.push(e(r.effectElements[o], i.ef[o].ty, a, h));\n          return (\n            \"ADBE Color Control\" === i.mn &&\n              Object.defineProperty(n, \"color\", {\n                get: function () {\n                  return l[0]();\n                },\n              }),\n            Object.defineProperties(n, {\n              numProperties: {\n                get: function () {\n                  return i.np;\n                },\n              },\n              _name: { value: i.nm },\n              propertyGroup: { value: h },\n            }),\n            (n.enabled = 0 !== i.en),\n            (n.active = n.enabled),\n            n\n          );\n        }\n        function e(t, e, i, r) {\n          var s = ExpressionPropertyInterface(t.p);\n          return (\n            t.p.setGroupProperty &&\n              t.p.setGroupProperty(PropertyInterface(\"\", r)),\n            function () {\n              return 10 === e ? i.comp.compInterface(t.p.v) : s();\n            }\n          );\n        }\n        return {\n          createEffectsInterface: function (e, i) {\n            if (e.effectsManager) {\n              var r,\n                s = [],\n                a = e.data.ef,\n                n = e.effectsManager.effectElements.length;\n              for (r = 0; r < n; r += 1)\n                s.push(t(a[r], e.effectsManager.effectElements[r], i, e));\n              var o = e.data.ef || [],\n                h = function (t) {\n                  for (r = 0, n = o.length; r < n; ) {\n                    if (t === o[r].nm || t === o[r].mn || t === o[r].ix)\n                      return s[r];\n                    r += 1;\n                  }\n                  return null;\n                };\n              return (\n                Object.defineProperty(h, \"numProperties\", {\n                  get: function () {\n                    return o.length;\n                  },\n                }),\n                h\n              );\n            }\n            return null;\n          },\n        };\n      })(),\n      ShapePathInterface = function (t, e, i) {\n        var r = e.sh;\n        function s(t) {\n          return \"Shape\" === t ||\n            \"shape\" === t ||\n            \"Path\" === t ||\n            \"path\" === t ||\n            \"ADBE Vector Shape\" === t ||\n            2 === t\n            ? s.path\n            : null;\n        }\n        var a = propertyGroupFactory(s, i);\n        return (\n          r.setGroupProperty(PropertyInterface(\"Path\", a)),\n          Object.defineProperties(s, {\n            path: {\n              get: function () {\n                return r.k && r.getValue(), r;\n              },\n            },\n            shape: {\n              get: function () {\n                return r.k && r.getValue(), r;\n              },\n            },\n            _name: { value: t.nm },\n            ix: { value: t.ix },\n            propertyIndex: { value: t.ix },\n            mn: { value: t.mn },\n            propertyGroup: { value: i },\n          }),\n          s\n        );\n      },\n      ShapeExpressionInterface = (function () {\n        function t(t, o, c) {\n          var d,\n            u = [],\n            y = t ? t.length : 0;\n          for (d = 0; d < y; d += 1)\n            \"gr\" === t[d].ty\n              ? u.push(e(t[d], o[d], c))\n              : \"fl\" === t[d].ty\n              ? u.push(i(t[d], o[d], c))\n              : \"st\" === t[d].ty\n              ? u.push(a(t[d], o[d], c))\n              : \"tm\" === t[d].ty\n              ? u.push(n(t[d], o[d], c))\n              : \"tr\" === t[d].ty ||\n                (\"el\" === t[d].ty\n                  ? u.push(h(t[d], o[d], c))\n                  : \"sr\" === t[d].ty\n                  ? u.push(l(t[d], o[d], c))\n                  : \"sh\" === t[d].ty\n                  ? u.push(ShapePathInterface(t[d], o[d], c))\n                  : \"rc\" === t[d].ty\n                  ? u.push(p(t[d], o[d], c))\n                  : \"rd\" === t[d].ty\n                  ? u.push(f(t[d], o[d], c))\n                  : \"rp\" === t[d].ty\n                  ? u.push(m(t[d], o[d], c))\n                  : \"gf\" === t[d].ty\n                  ? u.push(r(t[d], o[d], c))\n                  : u.push(s(t[d], o[d])));\n          return u;\n        }\n        function e(e, i, r) {\n          var s = function (t) {\n            switch (t) {\n              case \"ADBE Vectors Group\":\n              case \"Contents\":\n              case 2:\n                return s.content;\n              default:\n                return s.transform;\n            }\n          };\n          s.propertyGroup = propertyGroupFactory(s, r);\n          var a = (function (e, i, r) {\n              var s,\n                a = function (t) {\n                  for (var e = 0, i = s.length; e < i; ) {\n                    if (\n                      s[e]._name === t ||\n                      s[e].mn === t ||\n                      s[e].propertyIndex === t ||\n                      s[e].ix === t ||\n                      s[e].ind === t\n                    )\n                      return s[e];\n                    e += 1;\n                  }\n                  return \"number\" == typeof t ? s[t - 1] : null;\n                };\n              (a.propertyGroup = propertyGroupFactory(a, r)),\n                (s = t(e.it, i.it, a.propertyGroup)),\n                (a.numProperties = s.length);\n              var n = o(\n                e.it[e.it.length - 1],\n                i.it[i.it.length - 1],\n                a.propertyGroup\n              );\n              return (\n                (a.transform = n),\n                (a.propertyIndex = e.cix),\n                (a._name = e.nm),\n                a\n              );\n            })(e, i, s.propertyGroup),\n            n = o(\n              e.it[e.it.length - 1],\n              i.it[i.it.length - 1],\n              s.propertyGroup\n            );\n          return (\n            (s.content = a),\n            (s.transform = n),\n            Object.defineProperty(s, \"_name\", {\n              get: function () {\n                return e.nm;\n              },\n            }),\n            (s.numProperties = e.np),\n            (s.propertyIndex = e.ix),\n            (s.nm = e.nm),\n            (s.mn = e.mn),\n            s\n          );\n        }\n        function i(t, e, i) {\n          function r(t) {\n            return \"Color\" === t || \"color\" === t\n              ? r.color\n              : \"Opacity\" === t || \"opacity\" === t\n              ? r.opacity\n              : null;\n          }\n          return (\n            Object.defineProperties(r, {\n              color: { get: ExpressionPropertyInterface(e.c) },\n              opacity: { get: ExpressionPropertyInterface(e.o) },\n              _name: { value: t.nm },\n              mn: { value: t.mn },\n            }),\n            e.c.setGroupProperty(PropertyInterface(\"Color\", i)),\n            e.o.setGroupProperty(PropertyInterface(\"Opacity\", i)),\n            r\n          );\n        }\n        function r(t, e, i) {\n          function r(t) {\n            return \"Start Point\" === t || \"start point\" === t\n              ? r.startPoint\n              : \"End Point\" === t || \"end point\" === t\n              ? r.endPoint\n              : \"Opacity\" === t || \"opacity\" === t\n              ? r.opacity\n              : null;\n          }\n          return (\n            Object.defineProperties(r, {\n              startPoint: { get: ExpressionPropertyInterface(e.s) },\n              endPoint: { get: ExpressionPropertyInterface(e.e) },\n              opacity: { get: ExpressionPropertyInterface(e.o) },\n              type: {\n                get: function () {\n                  return \"a\";\n                },\n              },\n              _name: { value: t.nm },\n              mn: { value: t.mn },\n            }),\n            e.s.setGroupProperty(PropertyInterface(\"Start Point\", i)),\n            e.e.setGroupProperty(PropertyInterface(\"End Point\", i)),\n            e.o.setGroupProperty(PropertyInterface(\"Opacity\", i)),\n            r\n          );\n        }\n        function s() {\n          return function () {\n            return null;\n          };\n        }\n        function a(t, e, i) {\n          var r,\n            s = propertyGroupFactory(l, i),\n            a = propertyGroupFactory(h, s);\n          function n(i) {\n            Object.defineProperty(h, t.d[i].nm, {\n              get: ExpressionPropertyInterface(e.d.dataProps[i].p),\n            });\n          }\n          var o = t.d ? t.d.length : 0,\n            h = {};\n          for (r = 0; r < o; r += 1)\n            n(r), e.d.dataProps[r].p.setGroupProperty(a);\n          function l(t) {\n            return \"Color\" === t || \"color\" === t\n              ? l.color\n              : \"Opacity\" === t || \"opacity\" === t\n              ? l.opacity\n              : \"Stroke Width\" === t || \"stroke width\" === t\n              ? l.strokeWidth\n              : null;\n          }\n          return (\n            Object.defineProperties(l, {\n              color: { get: ExpressionPropertyInterface(e.c) },\n              opacity: { get: ExpressionPropertyInterface(e.o) },\n              strokeWidth: { get: ExpressionPropertyInterface(e.w) },\n              dash: {\n                get: function () {\n                  return h;\n                },\n              },\n              _name: { value: t.nm },\n              mn: { value: t.mn },\n            }),\n            e.c.setGroupProperty(PropertyInterface(\"Color\", s)),\n            e.o.setGroupProperty(PropertyInterface(\"Opacity\", s)),\n            e.w.setGroupProperty(PropertyInterface(\"Stroke Width\", s)),\n            l\n          );\n        }\n        function n(t, e, i) {\n          function r(e) {\n            return e === t.e.ix || \"End\" === e || \"end\" === e\n              ? r.end\n              : e === t.s.ix\n              ? r.start\n              : e === t.o.ix\n              ? r.offset\n              : null;\n          }\n          var s = propertyGroupFactory(r, i);\n          return (\n            (r.propertyIndex = t.ix),\n            e.s.setGroupProperty(PropertyInterface(\"Start\", s)),\n            e.e.setGroupProperty(PropertyInterface(\"End\", s)),\n            e.o.setGroupProperty(PropertyInterface(\"Offset\", s)),\n            (r.propertyIndex = t.ix),\n            (r.propertyGroup = i),\n            Object.defineProperties(r, {\n              start: { get: ExpressionPropertyInterface(e.s) },\n              end: { get: ExpressionPropertyInterface(e.e) },\n              offset: { get: ExpressionPropertyInterface(e.o) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        function o(t, e, i) {\n          function r(e) {\n            return t.a.ix === e || \"Anchor Point\" === e\n              ? r.anchorPoint\n              : t.o.ix === e || \"Opacity\" === e\n              ? r.opacity\n              : t.p.ix === e || \"Position\" === e\n              ? r.position\n              : t.r.ix === e || \"Rotation\" === e || \"ADBE Vector Rotation\" === e\n              ? r.rotation\n              : t.s.ix === e || \"Scale\" === e\n              ? r.scale\n              : (t.sk && t.sk.ix === e) || \"Skew\" === e\n              ? r.skew\n              : (t.sa && t.sa.ix === e) || \"Skew Axis\" === e\n              ? r.skewAxis\n              : null;\n          }\n          var s = propertyGroupFactory(r, i);\n          return (\n            e.transform.mProps.o.setGroupProperty(\n              PropertyInterface(\"Opacity\", s)\n            ),\n            e.transform.mProps.p.setGroupProperty(\n              PropertyInterface(\"Position\", s)\n            ),\n            e.transform.mProps.a.setGroupProperty(\n              PropertyInterface(\"Anchor Point\", s)\n            ),\n            e.transform.mProps.s.setGroupProperty(\n              PropertyInterface(\"Scale\", s)\n            ),\n            e.transform.mProps.r.setGroupProperty(\n              PropertyInterface(\"Rotation\", s)\n            ),\n            e.transform.mProps.sk &&\n              (e.transform.mProps.sk.setGroupProperty(\n                PropertyInterface(\"Skew\", s)\n              ),\n              e.transform.mProps.sa.setGroupProperty(\n                PropertyInterface(\"Skew Angle\", s)\n              )),\n            e.transform.op.setGroupProperty(PropertyInterface(\"Opacity\", s)),\n            Object.defineProperties(r, {\n              opacity: {\n                get: ExpressionPropertyInterface(e.transform.mProps.o),\n              },\n              position: {\n                get: ExpressionPropertyInterface(e.transform.mProps.p),\n              },\n              anchorPoint: {\n                get: ExpressionPropertyInterface(e.transform.mProps.a),\n              },\n              scale: { get: ExpressionPropertyInterface(e.transform.mProps.s) },\n              rotation: {\n                get: ExpressionPropertyInterface(e.transform.mProps.r),\n              },\n              skew: { get: ExpressionPropertyInterface(e.transform.mProps.sk) },\n              skewAxis: {\n                get: ExpressionPropertyInterface(e.transform.mProps.sa),\n              },\n              _name: { value: t.nm },\n            }),\n            (r.ty = \"tr\"),\n            (r.mn = t.mn),\n            (r.propertyGroup = i),\n            r\n          );\n        }\n        function h(t, e, i) {\n          function r(e) {\n            return t.p.ix === e ? r.position : t.s.ix === e ? r.size : null;\n          }\n          var s = propertyGroupFactory(r, i);\n          r.propertyIndex = t.ix;\n          var a = \"tm\" === e.sh.ty ? e.sh.prop : e.sh;\n          return (\n            a.s.setGroupProperty(PropertyInterface(\"Size\", s)),\n            a.p.setGroupProperty(PropertyInterface(\"Position\", s)),\n            Object.defineProperties(r, {\n              size: { get: ExpressionPropertyInterface(a.s) },\n              position: { get: ExpressionPropertyInterface(a.p) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        function l(t, e, i) {\n          function r(e) {\n            return t.p.ix === e\n              ? r.position\n              : t.r.ix === e\n              ? r.rotation\n              : t.pt.ix === e\n              ? r.points\n              : t.or.ix === e || \"ADBE Vector Star Outer Radius\" === e\n              ? r.outerRadius\n              : t.os.ix === e\n              ? r.outerRoundness\n              : !t.ir ||\n                (t.ir.ix !== e && \"ADBE Vector Star Inner Radius\" !== e)\n              ? t.is && t.is.ix === e\n                ? r.innerRoundness\n                : null\n              : r.innerRadius;\n          }\n          var s = propertyGroupFactory(r, i),\n            a = \"tm\" === e.sh.ty ? e.sh.prop : e.sh;\n          return (\n            (r.propertyIndex = t.ix),\n            a.or.setGroupProperty(PropertyInterface(\"Outer Radius\", s)),\n            a.os.setGroupProperty(PropertyInterface(\"Outer Roundness\", s)),\n            a.pt.setGroupProperty(PropertyInterface(\"Points\", s)),\n            a.p.setGroupProperty(PropertyInterface(\"Position\", s)),\n            a.r.setGroupProperty(PropertyInterface(\"Rotation\", s)),\n            t.ir &&\n              (a.ir.setGroupProperty(PropertyInterface(\"Inner Radius\", s)),\n              a.is.setGroupProperty(PropertyInterface(\"Inner Roundness\", s))),\n            Object.defineProperties(r, {\n              position: { get: ExpressionPropertyInterface(a.p) },\n              rotation: { get: ExpressionPropertyInterface(a.r) },\n              points: { get: ExpressionPropertyInterface(a.pt) },\n              outerRadius: { get: ExpressionPropertyInterface(a.or) },\n              outerRoundness: { get: ExpressionPropertyInterface(a.os) },\n              innerRadius: { get: ExpressionPropertyInterface(a.ir) },\n              innerRoundness: { get: ExpressionPropertyInterface(a.is) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        function p(t, e, i) {\n          function r(e) {\n            return t.p.ix === e\n              ? r.position\n              : t.r.ix === e\n              ? r.roundness\n              : t.s.ix === e || \"Size\" === e || \"ADBE Vector Rect Size\" === e\n              ? r.size\n              : null;\n          }\n          var s = propertyGroupFactory(r, i),\n            a = \"tm\" === e.sh.ty ? e.sh.prop : e.sh;\n          return (\n            (r.propertyIndex = t.ix),\n            a.p.setGroupProperty(PropertyInterface(\"Position\", s)),\n            a.s.setGroupProperty(PropertyInterface(\"Size\", s)),\n            a.r.setGroupProperty(PropertyInterface(\"Rotation\", s)),\n            Object.defineProperties(r, {\n              position: { get: ExpressionPropertyInterface(a.p) },\n              roundness: { get: ExpressionPropertyInterface(a.r) },\n              size: { get: ExpressionPropertyInterface(a.s) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        function f(t, e, i) {\n          function r(e) {\n            return t.r.ix === e || \"Round Corners 1\" === e ? r.radius : null;\n          }\n          var s = propertyGroupFactory(r, i),\n            a = e;\n          return (\n            (r.propertyIndex = t.ix),\n            a.rd.setGroupProperty(PropertyInterface(\"Radius\", s)),\n            Object.defineProperties(r, {\n              radius: { get: ExpressionPropertyInterface(a.rd) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        function m(t, e, i) {\n          function r(e) {\n            return t.c.ix === e || \"Copies\" === e\n              ? r.copies\n              : t.o.ix === e || \"Offset\" === e\n              ? r.offset\n              : null;\n          }\n          var s = propertyGroupFactory(r, i),\n            a = e;\n          return (\n            (r.propertyIndex = t.ix),\n            a.c.setGroupProperty(PropertyInterface(\"Copies\", s)),\n            a.o.setGroupProperty(PropertyInterface(\"Offset\", s)),\n            Object.defineProperties(r, {\n              copies: { get: ExpressionPropertyInterface(a.c) },\n              offset: { get: ExpressionPropertyInterface(a.o) },\n              _name: { value: t.nm },\n            }),\n            (r.mn = t.mn),\n            r\n          );\n        }\n        return function (e, i, r) {\n          var s;\n          function a(t) {\n            if (\"number\" == typeof t)\n              return 0 === (t = void 0 === t ? 1 : t) ? r : s[t - 1];\n            for (var e = 0, i = s.length; e < i; ) {\n              if (s[e]._name === t) return s[e];\n              e += 1;\n            }\n            return null;\n          }\n          return (\n            (a.propertyGroup = propertyGroupFactory(a, function () {\n              return r;\n            })),\n            (s = t(e, i, a.propertyGroup)),\n            (a.numProperties = s.length),\n            (a._name = \"Contents\"),\n            a\n          );\n        };\n      })(),\n      TextExpressionInterface = function (t) {\n        var e;\n        function i(t) {\n          return \"ADBE Text Document\" === t ? i.sourceText : null;\n        }\n        return (\n          Object.defineProperty(i, \"sourceText\", {\n            get: function () {\n              t.textProperty.getValue();\n              var i = t.textProperty.currentData.t;\n              return (\n                (e && i === e.value) ||\n                  (((e = new String(i)).value = i || new String(i)),\n                  Object.defineProperty(e, \"style\", {\n                    get: function () {\n                      return { fillColor: t.textProperty.currentData.fc };\n                    },\n                  })),\n                e\n              );\n            },\n          }),\n          i\n        );\n      };\n    function _typeof(t) {\n      return (\n        (_typeof =\n          \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n            ? function (t) {\n                return typeof t;\n              }\n            : function (t) {\n                return t &&\n                  \"function\" == typeof Symbol &&\n                  t.constructor === Symbol &&\n                  t !== Symbol.prototype\n                  ? \"symbol\"\n                  : typeof t;\n              }),\n        _typeof(t)\n      );\n    }\n    var FootageInterface =\n        ((dataInterfaceFactory = function (t) {\n          function e(t) {\n            return \"Outline\" === t ? e.outlineInterface() : null;\n          }\n          return (\n            (e._name = \"Outline\"),\n            (e.outlineInterface = (function (t) {\n              var e = \"\",\n                i = t.getFootageData();\n              function r(t) {\n                if (i[t])\n                  return (e = t), \"object\" === _typeof((i = i[t])) ? r : i;\n                var s = t.indexOf(e);\n                if (-1 !== s) {\n                  var a = parseInt(t.substr(s + e.length), 10);\n                  return \"object\" === _typeof((i = i[a])) ? r : i;\n                }\n                return \"\";\n              }\n              return function () {\n                return (e = \"\"), (i = t.getFootageData()), r;\n              };\n            })(t)),\n            e\n          );\n        }),\n        function (t) {\n          function e(t) {\n            return \"Data\" === t ? e.dataInterface : null;\n          }\n          return (\n            (e._name = \"Data\"), (e.dataInterface = dataInterfaceFactory(t)), e\n          );\n        }),\n      dataInterfaceFactory,\n      interfaces = {\n        layer: LayerExpressionInterface,\n        effects: EffectsExpressionInterface,\n        comp: CompExpressionInterface,\n        shape: ShapeExpressionInterface,\n        text: TextExpressionInterface,\n        footage: FootageInterface,\n      };\n    function getInterface(t) {\n      return interfaces[t] || null;\n    }\n    var expressionHelpers = {\n      searchExpressions: function (t, e, i) {\n        e.x &&\n          ((i.k = !0),\n          (i.x = !0),\n          (i.initiateExpression = ExpressionManager.initiateExpression),\n          i.effectsSequence.push(i.initiateExpression(t, e, i).bind(i)));\n      },\n      getSpeedAtTime: function (t) {\n        var e = this.getValueAtTime(t),\n          i = this.getValueAtTime(t + -0.01),\n          r = 0;\n        if (e.length) {\n          var s;\n          for (s = 0; s < e.length; s += 1) r += Math.pow(i[s] - e[s], 2);\n          r = 100 * Math.sqrt(r);\n        } else r = 0;\n        return r;\n      },\n      getVelocityAtTime: function (t) {\n        if (void 0 !== this.vel) return this.vel;\n        var e,\n          i,\n          r = -0.001,\n          s = this.getValueAtTime(t),\n          a = this.getValueAtTime(t + r);\n        if (s.length)\n          for (\n            e = createTypedArray(\"float32\", s.length), i = 0;\n            i < s.length;\n            i += 1\n          )\n            e[i] = (a[i] - s[i]) / r;\n        else e = (a - s) / r;\n        return e;\n      },\n      getValueAtTime: function (t) {\n        return (\n          (t *= this.elem.globalData.frameRate),\n          (t -= this.offsetTime) !== this._cachingAtTime.lastFrame &&\n            ((this._cachingAtTime.lastIndex =\n              this._cachingAtTime.lastFrame < t\n                ? this._cachingAtTime.lastIndex\n                : 0),\n            (this._cachingAtTime.value = this.interpolateValue(\n              t,\n              this._cachingAtTime\n            )),\n            (this._cachingAtTime.lastFrame = t)),\n          this._cachingAtTime.value\n        );\n      },\n      getStaticValueAtTime: function () {\n        return this.pv;\n      },\n      setGroupProperty: function (t) {\n        this.propertyGroup = t;\n      },\n    };\n    function addPropertyDecorator() {\n      function t(t, e, i) {\n        if (!this.k || !this.keyframes) return this.pv;\n        t = t ? t.toLowerCase() : \"\";\n        var r,\n          s,\n          a,\n          n,\n          o,\n          h = this.comp.renderedFrame,\n          l = this.keyframes,\n          p = l[l.length - 1].t;\n        if (h <= p) return this.pv;\n        if (\n          (i\n            ? (s =\n                p -\n                (r = e\n                  ? Math.abs(p - this.elem.comp.globalData.frameRate * e)\n                  : Math.max(0, p - this.elem.data.ip)))\n            : ((!e || e > l.length - 1) && (e = l.length - 1),\n              (r = p - (s = l[l.length - 1 - e].t))),\n          \"pingpong\" === t)\n        ) {\n          if (Math.floor((h - s) / r) % 2 != 0)\n            return this.getValueAtTime(\n              (r - ((h - s) % r) + s) / this.comp.globalData.frameRate,\n              0\n            );\n        } else {\n          if (\"offset\" === t) {\n            var f = this.getValueAtTime(s / this.comp.globalData.frameRate, 0),\n              m = this.getValueAtTime(p / this.comp.globalData.frameRate, 0),\n              c = this.getValueAtTime(\n                (((h - s) % r) + s) / this.comp.globalData.frameRate,\n                0\n              ),\n              d = Math.floor((h - s) / r);\n            if (this.pv.length) {\n              for (n = (o = new Array(f.length)).length, a = 0; a < n; a += 1)\n                o[a] = (m[a] - f[a]) * d + c[a];\n              return o;\n            }\n            return (m - f) * d + c;\n          }\n          if (\"continue\" === t) {\n            var u = this.getValueAtTime(p / this.comp.globalData.frameRate, 0),\n              y = this.getValueAtTime(\n                (p - 0.001) / this.comp.globalData.frameRate,\n                0\n              );\n            if (this.pv.length) {\n              for (n = (o = new Array(u.length)).length, a = 0; a < n; a += 1)\n                o[a] =\n                  u[a] +\n                  ((u[a] - y[a]) * ((h - p) / this.comp.globalData.frameRate)) /\n                    5e-4;\n              return o;\n            }\n            return u + ((h - p) / 0.001) * (u - y);\n          }\n        }\n        return this.getValueAtTime(\n          (((h - s) % r) + s) / this.comp.globalData.frameRate,\n          0\n        );\n      }\n      function e(t, e, i) {\n        if (!this.k) return this.pv;\n        t = t ? t.toLowerCase() : \"\";\n        var r,\n          s,\n          a,\n          n,\n          o,\n          h = this.comp.renderedFrame,\n          l = this.keyframes,\n          p = l[0].t;\n        if (h >= p) return this.pv;\n        if (\n          (i\n            ? (s =\n                p +\n                (r = e\n                  ? Math.abs(this.elem.comp.globalData.frameRate * e)\n                  : Math.max(0, this.elem.data.op - p)))\n            : ((!e || e > l.length - 1) && (e = l.length - 1),\n              (r = (s = l[e].t) - p)),\n          \"pingpong\" === t)\n        ) {\n          if (Math.floor((p - h) / r) % 2 == 0)\n            return this.getValueAtTime(\n              (((p - h) % r) + p) / this.comp.globalData.frameRate,\n              0\n            );\n        } else {\n          if (\"offset\" === t) {\n            var f = this.getValueAtTime(p / this.comp.globalData.frameRate, 0),\n              m = this.getValueAtTime(s / this.comp.globalData.frameRate, 0),\n              c = this.getValueAtTime(\n                (r - ((p - h) % r) + p) / this.comp.globalData.frameRate,\n                0\n              ),\n              d = Math.floor((p - h) / r) + 1;\n            if (this.pv.length) {\n              for (n = (o = new Array(f.length)).length, a = 0; a < n; a += 1)\n                o[a] = c[a] - (m[a] - f[a]) * d;\n              return o;\n            }\n            return c - (m - f) * d;\n          }\n          if (\"continue\" === t) {\n            var u = this.getValueAtTime(p / this.comp.globalData.frameRate, 0),\n              y = this.getValueAtTime(\n                (p + 0.001) / this.comp.globalData.frameRate,\n                0\n              );\n            if (this.pv.length) {\n              for (n = (o = new Array(u.length)).length, a = 0; a < n; a += 1)\n                o[a] = u[a] + ((u[a] - y[a]) * (p - h)) / 0.001;\n              return o;\n            }\n            return u + ((u - y) * (p - h)) / 0.001;\n          }\n        }\n        return this.getValueAtTime(\n          (r - (((p - h) % r) + p)) / this.comp.globalData.frameRate,\n          0\n        );\n      }\n      function i(t, e) {\n        if (!this.k) return this.pv;\n        if (((t = 0.5 * (t || 0.4)), (e = Math.floor(e || 5)) <= 1))\n          return this.pv;\n        var i,\n          r,\n          s = this.comp.renderedFrame / this.comp.globalData.frameRate,\n          a = s - t,\n          n = e > 1 ? (s + t - a) / (e - 1) : 1,\n          o = 0,\n          h = 0;\n        for (\n          i = this.pv.length ? createTypedArray(\"float32\", this.pv.length) : 0;\n          o < e;\n\n        ) {\n          if (((r = this.getValueAtTime(a + o * n)), this.pv.length))\n            for (h = 0; h < this.pv.length; h += 1) i[h] += r[h];\n          else i += r;\n          o += 1;\n        }\n        if (this.pv.length) for (h = 0; h < this.pv.length; h += 1) i[h] /= e;\n        else i /= e;\n        return i;\n      }\n      function r(t) {\n        this._transformCachingAtTime ||\n          (this._transformCachingAtTime = { v: new Matrix() });\n        var e = this._transformCachingAtTime.v;\n        if (\n          (e.cloneFromProps(this.pre.props), this.appliedTransformations < 1)\n        ) {\n          var i = this.a.getValueAtTime(t);\n          e.translate(\n            -i[0] * this.a.mult,\n            -i[1] * this.a.mult,\n            i[2] * this.a.mult\n          );\n        }\n        if (this.appliedTransformations < 2) {\n          var r = this.s.getValueAtTime(t);\n          e.scale(r[0] * this.s.mult, r[1] * this.s.mult, r[2] * this.s.mult);\n        }\n        if (this.sk && this.appliedTransformations < 3) {\n          var s = this.sk.getValueAtTime(t),\n            a = this.sa.getValueAtTime(t);\n          e.skewFromAxis(-s * this.sk.mult, a * this.sa.mult);\n        }\n        if (this.r && this.appliedTransformations < 4) {\n          var n = this.r.getValueAtTime(t);\n          e.rotate(-n * this.r.mult);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          var o = this.rz.getValueAtTime(t),\n            h = this.ry.getValueAtTime(t),\n            l = this.rx.getValueAtTime(t),\n            p = this.or.getValueAtTime(t);\n          e.rotateZ(-o * this.rz.mult)\n            .rotateY(h * this.ry.mult)\n            .rotateX(l * this.rx.mult)\n            .rotateZ(-p[2] * this.or.mult)\n            .rotateY(p[1] * this.or.mult)\n            .rotateX(p[0] * this.or.mult);\n        }\n        if (this.data.p && this.data.p.s) {\n          var f = this.px.getValueAtTime(t),\n            m = this.py.getValueAtTime(t);\n          if (this.data.p.z) {\n            var c = this.pz.getValueAtTime(t);\n            e.translate(f * this.px.mult, m * this.py.mult, -c * this.pz.mult);\n          } else e.translate(f * this.px.mult, m * this.py.mult, 0);\n        } else {\n          var d = this.p.getValueAtTime(t);\n          e.translate(\n            d[0] * this.p.mult,\n            d[1] * this.p.mult,\n            -d[2] * this.p.mult\n          );\n        }\n        return e;\n      }\n      function s() {\n        return this.v.clone(new Matrix());\n      }\n      var a = TransformPropertyFactory.getTransformProperty;\n      TransformPropertyFactory.getTransformProperty = function (t, e, i) {\n        var n = a(t, e, i);\n        return (\n          n.dynamicProperties.length\n            ? (n.getValueAtTime = r.bind(n))\n            : (n.getValueAtTime = s.bind(n)),\n          (n.setGroupProperty = expressionHelpers.setGroupProperty),\n          n\n        );\n      };\n      var n = PropertyFactory.getProp;\n      PropertyFactory.getProp = function (r, s, a, o, h) {\n        var l = n(r, s, a, o, h);\n        l.kf\n          ? (l.getValueAtTime = expressionHelpers.getValueAtTime.bind(l))\n          : (l.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(l)),\n          (l.setGroupProperty = expressionHelpers.setGroupProperty),\n          (l.loopOut = t),\n          (l.loopIn = e),\n          (l.smooth = i),\n          (l.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(l)),\n          (l.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(l)),\n          (l.numKeys = 1 === s.a ? s.k.length : 0),\n          (l.propertyIndex = s.ix);\n        var p = 0;\n        return (\n          0 !== a &&\n            (p = createTypedArray(\n              \"float32\",\n              1 === s.a ? s.k[0].s.length : s.k.length\n            )),\n          (l._cachingAtTime = {\n            lastFrame: initialDefaultFrame,\n            lastIndex: 0,\n            value: p,\n          }),\n          expressionHelpers.searchExpressions(r, s, l),\n          l.k && h.addDynamicProperty(l),\n          l\n        );\n      };\n      var o = ShapePropertyFactory.getConstructorFunction(),\n        h = ShapePropertyFactory.getKeyframedConstructorFunction();\n      function l() {}\n      (l.prototype = {\n        vertices: function (t, e) {\n          this.k && this.getValue();\n          var i,\n            r = this.v;\n          void 0 !== e && (r = this.getValueAtTime(e, 0));\n          var s = r._length,\n            a = r[t],\n            n = r.v,\n            o = createSizedArray(s);\n          for (i = 0; i < s; i += 1)\n            o[i] =\n              \"i\" === t || \"o\" === t\n                ? [a[i][0] - n[i][0], a[i][1] - n[i][1]]\n                : [a[i][0], a[i][1]];\n          return o;\n        },\n        points: function (t) {\n          return this.vertices(\"v\", t);\n        },\n        inTangents: function (t) {\n          return this.vertices(\"i\", t);\n        },\n        outTangents: function (t) {\n          return this.vertices(\"o\", t);\n        },\n        isClosed: function () {\n          return this.v.c;\n        },\n        pointOnPath: function (t, e) {\n          var i = this.v;\n          void 0 !== e && (i = this.getValueAtTime(e, 0)),\n            this._segmentsLength ||\n              (this._segmentsLength = bez.getSegmentsLength(i));\n          for (\n            var r,\n              s = this._segmentsLength,\n              a = s.lengths,\n              n = s.totalLength * t,\n              o = 0,\n              h = a.length,\n              l = 0;\n            o < h;\n\n          ) {\n            if (l + a[o].addedLength > n) {\n              var p = o,\n                f = i.c && o === h - 1 ? 0 : o + 1,\n                m = (n - l) / a[o].addedLength;\n              r = bez.getPointInSegment(\n                i.v[p],\n                i.v[f],\n                i.o[p],\n                i.i[f],\n                m,\n                a[o]\n              );\n              break;\n            }\n            (l += a[o].addedLength), (o += 1);\n          }\n          return (\n            r ||\n              (r = i.c\n                ? [i.v[0][0], i.v[0][1]]\n                : [i.v[i._length - 1][0], i.v[i._length - 1][1]]),\n            r\n          );\n        },\n        vectorOnPath: function (t, e, i) {\n          1 == t ? (t = this.v.c) : 0 == t && (t = 0.999);\n          var r = this.pointOnPath(t, e),\n            s = this.pointOnPath(t + 0.001, e),\n            a = s[0] - r[0],\n            n = s[1] - r[1],\n            o = Math.sqrt(Math.pow(a, 2) + Math.pow(n, 2));\n          return 0 === o\n            ? [0, 0]\n            : \"tangent\" === i\n            ? [a / o, n / o]\n            : [-n / o, a / o];\n        },\n        tangentOnPath: function (t, e) {\n          return this.vectorOnPath(t, e, \"tangent\");\n        },\n        normalOnPath: function (t, e) {\n          return this.vectorOnPath(t, e, \"normal\");\n        },\n        setGroupProperty: expressionHelpers.setGroupProperty,\n        getValueAtTime: expressionHelpers.getStaticValueAtTime,\n      }),\n        extendPrototype([l], o),\n        extendPrototype([l], h),\n        (h.prototype.getValueAtTime = function (t) {\n          return (\n            this._cachingAtTime ||\n              (this._cachingAtTime = {\n                shapeValue: shapePool.clone(this.pv),\n                lastIndex: 0,\n                lastTime: initialDefaultFrame,\n              }),\n            (t *= this.elem.globalData.frameRate),\n            (t -= this.offsetTime) !== this._cachingAtTime.lastTime &&\n              ((this._cachingAtTime.lastIndex =\n                this._cachingAtTime.lastTime < t ? this._caching.lastIndex : 0),\n              (this._cachingAtTime.lastTime = t),\n              this.interpolateShape(\n                t,\n                this._cachingAtTime.shapeValue,\n                this._cachingAtTime\n              )),\n            this._cachingAtTime.shapeValue\n          );\n        }),\n        (h.prototype.initiateExpression = ExpressionManager.initiateExpression);\n      var p = ShapePropertyFactory.getShapeProp;\n      ShapePropertyFactory.getShapeProp = function (t, e, i, r, s) {\n        var a = p(t, e, i, r, s);\n        return (\n          (a.propertyIndex = e.ix),\n          (a.lock = !1),\n          3 === i\n            ? expressionHelpers.searchExpressions(t, e.pt, a)\n            : 4 === i && expressionHelpers.searchExpressions(t, e.ks, a),\n          a.k && t.addDynamicProperty(a),\n          a\n        );\n      };\n    }\n    function initialize$1() {\n      addPropertyDecorator();\n    }\n    function addDecorator() {\n      (TextProperty.prototype.getExpressionValue = function (t, e) {\n        var i = this.calculateExpression(e);\n        if (t.t !== i) {\n          var r = {};\n          return (\n            this.copyData(r, t), (r.t = i.toString()), (r.__complete = !1), r\n          );\n        }\n        return t;\n      }),\n        (TextProperty.prototype.searchProperty = function () {\n          var t = this.searchKeyframes(),\n            e = this.searchExpressions();\n          return (this.kf = t || e), this.kf;\n        }),\n        (TextProperty.prototype.searchExpressions = function () {\n          return this.data.d.x\n            ? ((this.calculateExpression =\n                ExpressionManager.initiateExpression.bind(this)(\n                  this.elem,\n                  this.data.d,\n                  this\n                )),\n              this.addEffect(this.getExpressionValue.bind(this)),\n              !0)\n            : null;\n        });\n    }\n    function initialize() {\n      addDecorator();\n    }\n    function SVGComposableEffect() {}\n    SVGComposableEffect.prototype = {\n      createMergeNode: function (t, e) {\n        var i,\n          r,\n          s = createNS(\"feMerge\");\n        for (s.setAttribute(\"result\", t), r = 0; r < e.length; r += 1)\n          (i = createNS(\"feMergeNode\")).setAttribute(\"in\", e[r]),\n            s.appendChild(i),\n            s.appendChild(i);\n        return s;\n      },\n    };\n    var linearFilterValue =\n      \"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0\";\n    function SVGTintFilter(t, e, i, r, s) {\n      this.filterManager = e;\n      var a = createNS(\"feColorMatrix\");\n      a.setAttribute(\"type\", \"matrix\"),\n        a.setAttribute(\"color-interpolation-filters\", \"linearRGB\"),\n        a.setAttribute(\"values\", linearFilterValue + \" 1 0\"),\n        (this.linearFilter = a),\n        a.setAttribute(\"result\", r + \"_tint_1\"),\n        t.appendChild(a),\n        (a = createNS(\"feColorMatrix\")).setAttribute(\"type\", \"matrix\"),\n        a.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n        a.setAttribute(\"values\", \"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\"),\n        a.setAttribute(\"result\", r + \"_tint_2\"),\n        t.appendChild(a),\n        (this.matrixFilter = a);\n      var n = this.createMergeNode(r, [s, r + \"_tint_1\", r + \"_tint_2\"]);\n      t.appendChild(n);\n    }\n    function SVGFillFilter(t, e, i, r) {\n      this.filterManager = e;\n      var s = createNS(\"feColorMatrix\");\n      s.setAttribute(\"type\", \"matrix\"),\n        s.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n        s.setAttribute(\"values\", \"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\"),\n        s.setAttribute(\"result\", r),\n        t.appendChild(s),\n        (this.matrixFilter = s);\n    }\n    function SVGStrokeEffect(t, e, i) {\n      (this.initialized = !1),\n        (this.filterManager = e),\n        (this.elem = i),\n        (this.paths = []);\n    }\n    function SVGTritoneFilter(t, e, i, r) {\n      this.filterManager = e;\n      var s = createNS(\"feColorMatrix\");\n      s.setAttribute(\"type\", \"matrix\"),\n        s.setAttribute(\"color-interpolation-filters\", \"linearRGB\"),\n        s.setAttribute(\n          \"values\",\n          \"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"\n        ),\n        t.appendChild(s);\n      var a = createNS(\"feComponentTransfer\");\n      a.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n        a.setAttribute(\"result\", r),\n        (this.matrixFilter = a);\n      var n = createNS(\"feFuncR\");\n      n.setAttribute(\"type\", \"table\"), a.appendChild(n), (this.feFuncR = n);\n      var o = createNS(\"feFuncG\");\n      o.setAttribute(\"type\", \"table\"), a.appendChild(o), (this.feFuncG = o);\n      var h = createNS(\"feFuncB\");\n      h.setAttribute(\"type\", \"table\"),\n        a.appendChild(h),\n        (this.feFuncB = h),\n        t.appendChild(a);\n    }\n    function SVGProLevelsFilter(t, e, i, r) {\n      this.filterManager = e;\n      var s = this.filterManager.effectElements,\n        a = createNS(\"feComponentTransfer\");\n      (s[10].p.k ||\n        0 !== s[10].p.v ||\n        s[11].p.k ||\n        1 !== s[11].p.v ||\n        s[12].p.k ||\n        1 !== s[12].p.v ||\n        s[13].p.k ||\n        0 !== s[13].p.v ||\n        s[14].p.k ||\n        1 !== s[14].p.v) &&\n        (this.feFuncR = this.createFeFunc(\"feFuncR\", a)),\n        (s[17].p.k ||\n          0 !== s[17].p.v ||\n          s[18].p.k ||\n          1 !== s[18].p.v ||\n          s[19].p.k ||\n          1 !== s[19].p.v ||\n          s[20].p.k ||\n          0 !== s[20].p.v ||\n          s[21].p.k ||\n          1 !== s[21].p.v) &&\n          (this.feFuncG = this.createFeFunc(\"feFuncG\", a)),\n        (s[24].p.k ||\n          0 !== s[24].p.v ||\n          s[25].p.k ||\n          1 !== s[25].p.v ||\n          s[26].p.k ||\n          1 !== s[26].p.v ||\n          s[27].p.k ||\n          0 !== s[27].p.v ||\n          s[28].p.k ||\n          1 !== s[28].p.v) &&\n          (this.feFuncB = this.createFeFunc(\"feFuncB\", a)),\n        (s[31].p.k ||\n          0 !== s[31].p.v ||\n          s[32].p.k ||\n          1 !== s[32].p.v ||\n          s[33].p.k ||\n          1 !== s[33].p.v ||\n          s[34].p.k ||\n          0 !== s[34].p.v ||\n          s[35].p.k ||\n          1 !== s[35].p.v) &&\n          (this.feFuncA = this.createFeFunc(\"feFuncA\", a)),\n        (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) &&\n          (a.setAttribute(\"color-interpolation-filters\", \"sRGB\"),\n          t.appendChild(a)),\n        (s[3].p.k ||\n          0 !== s[3].p.v ||\n          s[4].p.k ||\n          1 !== s[4].p.v ||\n          s[5].p.k ||\n          1 !== s[5].p.v ||\n          s[6].p.k ||\n          0 !== s[6].p.v ||\n          s[7].p.k ||\n          1 !== s[7].p.v) &&\n          ((a = createNS(\"feComponentTransfer\")).setAttribute(\n            \"color-interpolation-filters\",\n            \"sRGB\"\n          ),\n          a.setAttribute(\"result\", r),\n          t.appendChild(a),\n          (this.feFuncRComposed = this.createFeFunc(\"feFuncR\", a)),\n          (this.feFuncGComposed = this.createFeFunc(\"feFuncG\", a)),\n          (this.feFuncBComposed = this.createFeFunc(\"feFuncB\", a)));\n    }\n    function SVGDropShadowEffect(t, e, i, r, s) {\n      var a = e.container.globalData.renderConfig.filterSize,\n        n = e.data.fs || a;\n      t.setAttribute(\"x\", n.x || a.x),\n        t.setAttribute(\"y\", n.y || a.y),\n        t.setAttribute(\"width\", n.width || a.width),\n        t.setAttribute(\"height\", n.height || a.height),\n        (this.filterManager = e);\n      var o = createNS(\"feGaussianBlur\");\n      o.setAttribute(\"in\", \"SourceAlpha\"),\n        o.setAttribute(\"result\", r + \"_drop_shadow_1\"),\n        o.setAttribute(\"stdDeviation\", \"0\"),\n        (this.feGaussianBlur = o),\n        t.appendChild(o);\n      var h = createNS(\"feOffset\");\n      h.setAttribute(\"dx\", \"25\"),\n        h.setAttribute(\"dy\", \"0\"),\n        h.setAttribute(\"in\", r + \"_drop_shadow_1\"),\n        h.setAttribute(\"result\", r + \"_drop_shadow_2\"),\n        (this.feOffset = h),\n        t.appendChild(h);\n      var l = createNS(\"feFlood\");\n      l.setAttribute(\"flood-color\", \"#00ff00\"),\n        l.setAttribute(\"flood-opacity\", \"1\"),\n        l.setAttribute(\"result\", r + \"_drop_shadow_3\"),\n        (this.feFlood = l),\n        t.appendChild(l);\n      var p = createNS(\"feComposite\");\n      p.setAttribute(\"in\", r + \"_drop_shadow_3\"),\n        p.setAttribute(\"in2\", r + \"_drop_shadow_2\"),\n        p.setAttribute(\"operator\", \"in\"),\n        p.setAttribute(\"result\", r + \"_drop_shadow_4\"),\n        t.appendChild(p);\n      var f = this.createMergeNode(r, [r + \"_drop_shadow_4\", s]);\n      t.appendChild(f);\n    }\n    extendPrototype([SVGComposableEffect], SVGTintFilter),\n      (SVGTintFilter.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          var e = this.filterManager.effectElements[0].p.v,\n            i = this.filterManager.effectElements[1].p.v,\n            r = this.filterManager.effectElements[2].p.v / 100;\n          this.linearFilter.setAttribute(\n            \"values\",\n            linearFilterValue + \" \" + r + \" 0\"\n          ),\n            this.matrixFilter.setAttribute(\n              \"values\",\n              i[0] -\n                e[0] +\n                \" 0 0 0 \" +\n                e[0] +\n                \" \" +\n                (i[1] - e[1]) +\n                \" 0 0 0 \" +\n                e[1] +\n                \" \" +\n                (i[2] - e[2]) +\n                \" 0 0 0 \" +\n                e[2] +\n                \" 0 0 0 1 0\"\n            );\n        }\n      }),\n      (SVGFillFilter.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          var e = this.filterManager.effectElements[2].p.v,\n            i = this.filterManager.effectElements[6].p.v;\n          this.matrixFilter.setAttribute(\n            \"values\",\n            \"0 0 0 0 \" +\n              e[0] +\n              \" 0 0 0 0 \" +\n              e[1] +\n              \" 0 0 0 0 \" +\n              e[2] +\n              \" 0 0 0 \" +\n              i +\n              \" 0\"\n          );\n        }\n      }),\n      (SVGStrokeEffect.prototype.initialize = function () {\n        var t,\n          e,\n          i,\n          r,\n          s =\n            this.elem.layerElement.children ||\n            this.elem.layerElement.childNodes;\n        for (\n          1 === this.filterManager.effectElements[1].p.v\n            ? ((r = this.elem.maskManager.masksProperties.length), (i = 0))\n            : (r = (i = this.filterManager.effectElements[0].p.v - 1) + 1),\n            (e = createNS(\"g\")).setAttribute(\"fill\", \"none\"),\n            e.setAttribute(\"stroke-linecap\", \"round\"),\n            e.setAttribute(\"stroke-dashoffset\", 1);\n          i < r;\n          i += 1\n        )\n          (t = createNS(\"path\")),\n            e.appendChild(t),\n            this.paths.push({ p: t, m: i });\n        if (3 === this.filterManager.effectElements[10].p.v) {\n          var a = createNS(\"mask\"),\n            n = createElementID();\n          a.setAttribute(\"id\", n),\n            a.setAttribute(\"mask-type\", \"alpha\"),\n            a.appendChild(e),\n            this.elem.globalData.defs.appendChild(a);\n          var o = createNS(\"g\");\n          for (\n            o.setAttribute(\"mask\", \"url(\" + getLocationHref() + \"#\" + n + \")\");\n            s[0];\n\n          )\n            o.appendChild(s[0]);\n          this.elem.layerElement.appendChild(o),\n            (this.masker = a),\n            e.setAttribute(\"stroke\", \"#fff\");\n        } else if (\n          1 === this.filterManager.effectElements[10].p.v ||\n          2 === this.filterManager.effectElements[10].p.v\n        ) {\n          if (2 === this.filterManager.effectElements[10].p.v)\n            for (\n              s =\n                this.elem.layerElement.children ||\n                this.elem.layerElement.childNodes;\n              s.length;\n\n            )\n              this.elem.layerElement.removeChild(s[0]);\n          this.elem.layerElement.appendChild(e),\n            this.elem.layerElement.removeAttribute(\"mask\"),\n            e.setAttribute(\"stroke\", \"#fff\");\n        }\n        (this.initialized = !0), (this.pathMasker = e);\n      }),\n      (SVGStrokeEffect.prototype.renderFrame = function (t) {\n        var e;\n        this.initialized || this.initialize();\n        var i,\n          r,\n          s = this.paths.length;\n        for (e = 0; e < s; e += 1)\n          if (\n            -1 !== this.paths[e].m &&\n            ((i = this.elem.maskManager.viewData[this.paths[e].m]),\n            (r = this.paths[e].p),\n            (t || this.filterManager._mdf || i.prop._mdf) &&\n              r.setAttribute(\"d\", i.lastPath),\n            t ||\n              this.filterManager.effectElements[9].p._mdf ||\n              this.filterManager.effectElements[4].p._mdf ||\n              this.filterManager.effectElements[7].p._mdf ||\n              this.filterManager.effectElements[8].p._mdf ||\n              i.prop._mdf)\n          ) {\n            var a;\n            if (\n              0 !== this.filterManager.effectElements[7].p.v ||\n              100 !== this.filterManager.effectElements[8].p.v\n            ) {\n              var n =\n                  0.01 *\n                  Math.min(\n                    this.filterManager.effectElements[7].p.v,\n                    this.filterManager.effectElements[8].p.v\n                  ),\n                o =\n                  0.01 *\n                  Math.max(\n                    this.filterManager.effectElements[7].p.v,\n                    this.filterManager.effectElements[8].p.v\n                  ),\n                h = r.getTotalLength();\n              a = \"0 0 0 \" + h * n + \" \";\n              var l,\n                p = h * (o - n),\n                f =\n                  1 +\n                  2 *\n                    this.filterManager.effectElements[4].p.v *\n                    this.filterManager.effectElements[9].p.v *\n                    0.01,\n                m = Math.floor(p / f);\n              for (l = 0; l < m; l += 1)\n                a +=\n                  \"1 \" +\n                  2 *\n                    this.filterManager.effectElements[4].p.v *\n                    this.filterManager.effectElements[9].p.v *\n                    0.01 +\n                  \" \";\n              a += \"0 \" + 10 * h + \" 0 0\";\n            } else\n              a =\n                \"1 \" +\n                2 *\n                  this.filterManager.effectElements[4].p.v *\n                  this.filterManager.effectElements[9].p.v *\n                  0.01;\n            r.setAttribute(\"stroke-dasharray\", a);\n          }\n        if (\n          ((t || this.filterManager.effectElements[4].p._mdf) &&\n            this.pathMasker.setAttribute(\n              \"stroke-width\",\n              2 * this.filterManager.effectElements[4].p.v\n            ),\n          (t || this.filterManager.effectElements[6].p._mdf) &&\n            this.pathMasker.setAttribute(\n              \"opacity\",\n              this.filterManager.effectElements[6].p.v\n            ),\n          (1 === this.filterManager.effectElements[10].p.v ||\n            2 === this.filterManager.effectElements[10].p.v) &&\n            (t || this.filterManager.effectElements[3].p._mdf))\n        ) {\n          var c = this.filterManager.effectElements[3].p.v;\n          this.pathMasker.setAttribute(\n            \"stroke\",\n            \"rgb(\" +\n              bmFloor(255 * c[0]) +\n              \",\" +\n              bmFloor(255 * c[1]) +\n              \",\" +\n              bmFloor(255 * c[2]) +\n              \")\"\n          );\n        }\n      }),\n      (SVGTritoneFilter.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          var e = this.filterManager.effectElements[0].p.v,\n            i = this.filterManager.effectElements[1].p.v,\n            r = this.filterManager.effectElements[2].p.v,\n            s = r[0] + \" \" + i[0] + \" \" + e[0],\n            a = r[1] + \" \" + i[1] + \" \" + e[1],\n            n = r[2] + \" \" + i[2] + \" \" + e[2];\n          this.feFuncR.setAttribute(\"tableValues\", s),\n            this.feFuncG.setAttribute(\"tableValues\", a),\n            this.feFuncB.setAttribute(\"tableValues\", n);\n        }\n      }),\n      (SVGProLevelsFilter.prototype.createFeFunc = function (t, e) {\n        var i = createNS(t);\n        return i.setAttribute(\"type\", \"table\"), e.appendChild(i), i;\n      }),\n      (SVGProLevelsFilter.prototype.getTableValue = function (t, e, i, r, s) {\n        for (\n          var a,\n            n,\n            o = 0,\n            h = Math.min(t, e),\n            l = Math.max(t, e),\n            p = Array.call(null, { length: 256 }),\n            f = 0,\n            m = s - r,\n            c = e - t;\n          o <= 256;\n\n        )\n          (n =\n            (a = o / 256) <= h\n              ? c < 0\n                ? s\n                : r\n              : a >= l\n              ? c < 0\n                ? r\n                : s\n              : r + m * Math.pow((a - t) / c, 1 / i)),\n            (p[f] = n),\n            (f += 1),\n            (o += 256 / 255);\n        return p.join(\" \");\n      }),\n      (SVGProLevelsFilter.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          var e,\n            i = this.filterManager.effectElements;\n          this.feFuncRComposed &&\n            (t ||\n              i[3].p._mdf ||\n              i[4].p._mdf ||\n              i[5].p._mdf ||\n              i[6].p._mdf ||\n              i[7].p._mdf) &&\n            ((e = this.getTableValue(\n              i[3].p.v,\n              i[4].p.v,\n              i[5].p.v,\n              i[6].p.v,\n              i[7].p.v\n            )),\n            this.feFuncRComposed.setAttribute(\"tableValues\", e),\n            this.feFuncGComposed.setAttribute(\"tableValues\", e),\n            this.feFuncBComposed.setAttribute(\"tableValues\", e)),\n            this.feFuncR &&\n              (t ||\n                i[10].p._mdf ||\n                i[11].p._mdf ||\n                i[12].p._mdf ||\n                i[13].p._mdf ||\n                i[14].p._mdf) &&\n              ((e = this.getTableValue(\n                i[10].p.v,\n                i[11].p.v,\n                i[12].p.v,\n                i[13].p.v,\n                i[14].p.v\n              )),\n              this.feFuncR.setAttribute(\"tableValues\", e)),\n            this.feFuncG &&\n              (t ||\n                i[17].p._mdf ||\n                i[18].p._mdf ||\n                i[19].p._mdf ||\n                i[20].p._mdf ||\n                i[21].p._mdf) &&\n              ((e = this.getTableValue(\n                i[17].p.v,\n                i[18].p.v,\n                i[19].p.v,\n                i[20].p.v,\n                i[21].p.v\n              )),\n              this.feFuncG.setAttribute(\"tableValues\", e)),\n            this.feFuncB &&\n              (t ||\n                i[24].p._mdf ||\n                i[25].p._mdf ||\n                i[26].p._mdf ||\n                i[27].p._mdf ||\n                i[28].p._mdf) &&\n              ((e = this.getTableValue(\n                i[24].p.v,\n                i[25].p.v,\n                i[26].p.v,\n                i[27].p.v,\n                i[28].p.v\n              )),\n              this.feFuncB.setAttribute(\"tableValues\", e)),\n            this.feFuncA &&\n              (t ||\n                i[31].p._mdf ||\n                i[32].p._mdf ||\n                i[33].p._mdf ||\n                i[34].p._mdf ||\n                i[35].p._mdf) &&\n              ((e = this.getTableValue(\n                i[31].p.v,\n                i[32].p.v,\n                i[33].p.v,\n                i[34].p.v,\n                i[35].p.v\n              )),\n              this.feFuncA.setAttribute(\"tableValues\", e));\n        }\n      }),\n      extendPrototype([SVGComposableEffect], SVGDropShadowEffect),\n      (SVGDropShadowEffect.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          if (\n            ((t || this.filterManager.effectElements[4].p._mdf) &&\n              this.feGaussianBlur.setAttribute(\n                \"stdDeviation\",\n                this.filterManager.effectElements[4].p.v / 4\n              ),\n            t || this.filterManager.effectElements[0].p._mdf)\n          ) {\n            var e = this.filterManager.effectElements[0].p.v;\n            this.feFlood.setAttribute(\n              \"flood-color\",\n              rgbToHex(\n                Math.round(255 * e[0]),\n                Math.round(255 * e[1]),\n                Math.round(255 * e[2])\n              )\n            );\n          }\n          if (\n            ((t || this.filterManager.effectElements[1].p._mdf) &&\n              this.feFlood.setAttribute(\n                \"flood-opacity\",\n                this.filterManager.effectElements[1].p.v / 255\n              ),\n            t ||\n              this.filterManager.effectElements[2].p._mdf ||\n              this.filterManager.effectElements[3].p._mdf)\n          ) {\n            var i = this.filterManager.effectElements[3].p.v,\n              r = (this.filterManager.effectElements[2].p.v - 90) * degToRads,\n              s = i * Math.cos(r),\n              a = i * Math.sin(r);\n            this.feOffset.setAttribute(\"dx\", s),\n              this.feOffset.setAttribute(\"dy\", a);\n          }\n        }\n      });\n    var _svgMatteSymbols = [];\n    function SVGMatte3Effect(t, e, i) {\n      (this.initialized = !1),\n        (this.filterManager = e),\n        (this.filterElem = t),\n        (this.elem = i),\n        (i.matteElement = createNS(\"g\")),\n        i.matteElement.appendChild(i.layerElement),\n        i.matteElement.appendChild(i.transformedElement),\n        (i.baseElement = i.matteElement);\n    }\n    function SVGGaussianBlurEffect(t, e, i, r) {\n      t.setAttribute(\"x\", \"-100%\"),\n        t.setAttribute(\"y\", \"-100%\"),\n        t.setAttribute(\"width\", \"300%\"),\n        t.setAttribute(\"height\", \"300%\"),\n        (this.filterManager = e);\n      var s = createNS(\"feGaussianBlur\");\n      s.setAttribute(\"result\", r), t.appendChild(s), (this.feGaussianBlur = s);\n    }\n    function TransformEffect() {}\n    function SVGTransformEffect(t, e) {\n      this.init(e);\n    }\n    function CVTransformEffect(t) {\n      this.init(t);\n    }\n    return (\n      (SVGMatte3Effect.prototype.findSymbol = function (t) {\n        for (var e = 0, i = _svgMatteSymbols.length; e < i; ) {\n          if (_svgMatteSymbols[e] === t) return _svgMatteSymbols[e];\n          e += 1;\n        }\n        return null;\n      }),\n      (SVGMatte3Effect.prototype.replaceInParent = function (t, e) {\n        var i = t.layerElement.parentNode;\n        if (i) {\n          for (\n            var r, s = i.children, a = 0, n = s.length;\n            a < n && s[a] !== t.layerElement;\n\n          )\n            a += 1;\n          a <= n - 2 && (r = s[a + 1]);\n          var o = createNS(\"use\");\n          o.setAttribute(\"href\", \"#\" + e),\n            r ? i.insertBefore(o, r) : i.appendChild(o);\n        }\n      }),\n      (SVGMatte3Effect.prototype.setElementAsMask = function (t, e) {\n        if (!this.findSymbol(e)) {\n          var i = createElementID(),\n            r = createNS(\"mask\");\n          r.setAttribute(\"id\", e.layerId),\n            r.setAttribute(\"mask-type\", \"alpha\"),\n            _svgMatteSymbols.push(e);\n          var s = t.globalData.defs;\n          s.appendChild(r);\n          var a = createNS(\"symbol\");\n          a.setAttribute(\"id\", i),\n            this.replaceInParent(e, i),\n            a.appendChild(e.layerElement),\n            s.appendChild(a);\n          var n = createNS(\"use\");\n          n.setAttribute(\"href\", \"#\" + i),\n            r.appendChild(n),\n            (e.data.hd = !1),\n            e.show();\n        }\n        t.setMatte(e.layerId);\n      }),\n      (SVGMatte3Effect.prototype.initialize = function () {\n        for (\n          var t = this.filterManager.effectElements[0].p.v,\n            e = this.elem.comp.elements,\n            i = 0,\n            r = e.length;\n          i < r;\n\n        )\n          e[i] && e[i].data.ind === t && this.setElementAsMask(this.elem, e[i]),\n            (i += 1);\n        this.initialized = !0;\n      }),\n      (SVGMatte3Effect.prototype.renderFrame = function () {\n        this.initialized || this.initialize();\n      }),\n      (SVGGaussianBlurEffect.prototype.renderFrame = function (t) {\n        if (t || this.filterManager._mdf) {\n          var e = 0.3 * this.filterManager.effectElements[0].p.v,\n            i = this.filterManager.effectElements[1].p.v,\n            r = 3 == i ? 0 : e,\n            s = 2 == i ? 0 : e;\n          this.feGaussianBlur.setAttribute(\"stdDeviation\", r + \" \" + s);\n          var a =\n            1 == this.filterManager.effectElements[2].p.v\n              ? \"wrap\"\n              : \"duplicate\";\n          this.feGaussianBlur.setAttribute(\"edgeMode\", a);\n        }\n      }),\n      (TransformEffect.prototype.init = function (t) {\n        (this.effectsManager = t),\n          (this.type = effectTypes.TRANSFORM_EFFECT),\n          (this.matrix = new Matrix()),\n          (this.opacity = -1),\n          (this._mdf = !1),\n          (this._opMdf = !1);\n      }),\n      (TransformEffect.prototype.renderFrame = function (t) {\n        if (\n          ((this._opMdf = !1), (this._mdf = !1), t || this.effectsManager._mdf)\n        ) {\n          var e = this.effectsManager.effectElements,\n            i = e[0].p.v,\n            r = e[1].p.v,\n            s = 1 === e[2].p.v,\n            a = e[3].p.v,\n            n = s ? a : e[4].p.v,\n            o = e[5].p.v,\n            h = e[6].p.v,\n            l = e[7].p.v;\n          this.matrix.reset(),\n            this.matrix.translate(-i[0], -i[1], i[2]),\n            this.matrix.scale(0.01 * n, 0.01 * a, 1),\n            this.matrix.rotate(-l * degToRads),\n            this.matrix.skewFromAxis(-o * degToRads, (h + 90) * degToRads),\n            this.matrix.translate(r[0], r[1], 0),\n            (this._mdf = !0),\n            this.opacity !== e[8].p.v &&\n              ((this.opacity = e[8].p.v), (this._opMdf = !0));\n        }\n      }),\n      extendPrototype([TransformEffect], SVGTransformEffect),\n      extendPrototype([TransformEffect], CVTransformEffect),\n      registerRenderer(\"canvas\", CanvasRenderer),\n      registerRenderer(\"html\", HybridRenderer),\n      registerRenderer(\"svg\", SVGRenderer),\n      ShapeModifiers.registerModifier(\"tm\", TrimModifier),\n      ShapeModifiers.registerModifier(\"pb\", PuckerAndBloatModifier),\n      ShapeModifiers.registerModifier(\"rp\", RepeaterModifier),\n      ShapeModifiers.registerModifier(\"rd\", RoundCornersModifier),\n      ShapeModifiers.registerModifier(\"zz\", ZigZagModifier),\n      ShapeModifiers.registerModifier(\"op\", OffsetPathModifier),\n      setExpressionsPlugin(Expressions),\n      setExpressionInterfaces(getInterface),\n      initialize$1(),\n      initialize(),\n      registerEffect$1(20, SVGTintFilter, !0),\n      registerEffect$1(21, SVGFillFilter, !0),\n      registerEffect$1(22, SVGStrokeEffect, !1),\n      registerEffect$1(23, SVGTritoneFilter, !0),\n      registerEffect$1(24, SVGProLevelsFilter, !0),\n      registerEffect$1(25, SVGDropShadowEffect, !0),\n      registerEffect$1(28, SVGMatte3Effect, !1),\n      registerEffect$1(29, SVGGaussianBlurEffect, !0),\n      registerEffect$1(35, SVGTransformEffect, !1),\n      registerEffect(35, CVTransformEffect),\n      lottie\n    );\n  });\n"
  },
  {
    "path": "web/loader.css",
    "content": "body{\n    margin: 0;\n}\n\n#loader {\n  width: 100vw;\n  height: 100vh;\n  /* display: block; */\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  justify-items: center;\n  align-items: center;\n  align-content: center;\n  background-color: #fff9e6;\n}\n\n#loader-title {\n  font-family: Butler ,-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n    Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n\n  font-weight: 500;\n  font-size: 22;\n  color: white;\n}\n\n.lds-heart {\n    display: inline-block;\n    position: relative;\n    width: 80px;\n    height: 80px;\n    transform: rotate(45deg);\n    transform-origin: 40px 40px;\n  }\n  .lds-heart div {\n    top: 32px;\n    left: 32px;\n    position: absolute;\n    width: 32px;\n    height: 32px;\n    background: #728C6D;\n    animation: lds-heart 1.2s infinite cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n  .lds-heart div:after,\n  .lds-heart div:before {\n    content: \" \";\n    position: absolute;\n    display: block;\n    width: 32px;\n    height: 32px;\n    background: #728C6D;\n  }\n  .lds-heart div:before {\n    left: -24px;\n    border-radius: 50% 0 0 50%;\n  }\n  .lds-heart div:after {\n    top: -24px;\n    border-radius: 50% 50% 0 0;\n  }\n  @keyframes lds-heart {\n    0% {\n      transform: scale(0.95);\n    }\n    5% {\n      transform: scale(1.1);\n    }\n    39% {\n      transform: scale(0.85);\n    }\n    45% {\n      transform: scale(1);\n    }\n    60% {\n      transform: scale(0.95);\n    }\n    100% {\n      transform: scale(0.9);\n    }\n  }\n  "
  },
  {
    "path": "web/loading_rosary.json",
    "content": "{\"v\":\"5.12.1\",\"fr\":120,\"ip\":0,\"op\":286,\"w\":720,\"h\":720,\"nm\":\"CHAPELET-LOGIN\",\"ddd\":0,\"assets\":[{\"id\":\"comp_0\",\"nm\":\"Précomp. 1\",\"fr\":120,\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":0,\"nm\":\"croix\",\"refId\":\"comp_1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[359.25,435,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[1499.141,1699.646,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.36,0.36,0.36],\"y\":[1,1,1]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[100,100,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,1.725]},\"o\":{\"x\":[0.21,0.21,0.21],\"y\":[0,0,0]},\"t\":144,\"s\":[100,100,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":207,\"s\":[110,110,100]},{\"t\":256,\"s\":[100,100,100]}],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\n$bm_rt = loopOut();\"}},\"ao\":0,\"w\":3000,\"h\":3000,\"ip\":0,\"op\":1200,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\">>Controller\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.85,\"y\":1},\"o\":{\"x\":0.561,\"y\":0},\"t\":0,\"s\":[356,553,0],\"to\":[-541.11,-540.985,0],\"ti\":[515.428,-558.256,0]},{\"i\":{\"x\":0.92,\"y\":1},\"o\":{\"x\":0.79,\"y\":0},\"t\":171,\"s\":[372.129,539.652,0],\"to\":[-21.845,23.66,0],\"ti\":[28.351,-27.669,0]},{\"i\":{\"x\":0.92,\"y\":1},\"o\":{\"x\":0.99,\"y\":0},\"t\":224,\"s\":[357,551.822,0],\"to\":[-2.459,2.4,0],\"ti\":[-0.5,-0.333,0]},{\"t\":271,\"s\":[358,547.408,0]}],\"ix\":2,\"l\":2,\"x\":\"var $bm_rt;\\n$bm_rt = loopOut();\"},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":0,\"s\":[88.91,29.737,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":40,\"s\":[122.798,41.072,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":119,\"s\":[132.501,44.317,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":157,\"s\":[141.611,47.364,100]},{\"t\":221,\"s\":[94.89,31.737,100]}],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar temp;\\ntemp = transform.scale[0];\\n$bm_rt = [\\n    temp,\\n    temp\\n];\"}},\"ao\":0,\"ef\":[{\"ty\":5,\"nm\":\"Falloff Master\",\"np\":5,\"mn\":\"Pseudo/b0OA8d132c8bv\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":7,\"nm\":\"Enable\",\"mn\":\"Pseudo/b0OA8d132c8bv-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":1,\"ix\":1}},{\"ty\":7,\"nm\":\"Invert\",\"mn\":\"Pseudo/b0OA8d132c8bv-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":0,\"ix\":2}},{\"ty\":0,\"nm\":\"Falloff\",\"mn\":\"Pseudo/b0OA8d132c8bv-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":16.674,\"ix\":3,\"x\":\"var $bm_rt;\\n$bm_rt = value > 100 ? 100 : value;\"}}]},{\"ty\":5,\"nm\":\"Falloff - Echelle\",\"np\":5,\"mn\":\"Pseudo/iSOkadb76865x\",\"ix\":2,\"en\":1,\"ef\":[{\"ty\":0,\"nm\":\"X Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":100,\"ix\":1}},{\"ty\":0,\"nm\":\"Y Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":100,\"ix\":2}},{\"ty\":0,\"nm\":\"Z Amount\",\"mn\":\"Pseudo/iSOkadb76865x-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}}]},{\"ty\":5,\"nm\":\"Falloff - Opacité\",\"np\":3,\"mn\":\"Pseudo/ajO511f0e9a91\",\"ix\":3,\"en\":1,\"ef\":[{\"ty\":0,\"nm\":\"X Amount\",\"mn\":\"Pseudo/ajO511f0e9a91-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":100,\"ix\":1}}]}],\"shapes\":[],\"ip\":0,\"op\":1209,\"st\":12,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[237.185,406.348,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1313,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[191,321.029,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"3\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[202.935,229.728,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"4\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[267.099,155.338,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"5\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[355,130,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"6\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[452.053,161.548,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"7\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[508.856,229.728,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"8\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[520,321.029,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"9\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":30,\"ix\":11,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    $bm_rt = l = $bm_mul(a.effect('Falloff - Opacité')('Pseudo/ajO511f0e9a91-0001'), -1);\\n    if (c > 0) {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\\n    } else {\\n        $bm_rt = $bm_sub(value, $bm_mul(l, k));\\n    }\\n}\"},\"r\":{\"a\":0,\"k\":-10,\"ix\":10},\"p\":{\"a\":0,\"k\":[482.046,406.348,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-3.75,-83.75,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[334.146,334.146,100],\"ix\":6,\"l\":2,\"x\":\"var $bm_rt;\\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\\na = thisComp.layer('>>Controller');\\nb = a.position.value;\\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\\nif (isEnabled == 0) {\\n    $bm_rt = value;\\n} else {\\n    d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\\n    o = $bm_div(a.scale.value[0], 100);\\n    f = $bm_div($bm_mul(o, 300), 2);\\n    g = $bm_mul(f, d);\\n    h = thisLayer.toWorld(thisLayer.anchorPoint);\\n    dx = $bm_sub(b[0], h[0]);\\n    dy = $bm_sub(b[1], h[1]);\\n    iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\\n    i = Math.sqrt(iSq);\\n    var k;\\n    if (i > f) {\\n        k = 0;\\n    } else if (i < g) {\\n        k = 1;\\n    } else {\\n        k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\\n    }\\n    l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\\n    m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\\n    $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\\n    if (c > 0) {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\\n            $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\\n        }\\n        $bm_rt = result;\\n    } else {\\n        result = [\\n            $bm_sub(value[0], $bm_mul(l, k)),\\n            $bm_sub(value[1], $bm_mul(m, k))\\n        ];\\n        if (value.length === 3) {\\n            result.push($bm_sub(value[2], $bm_mul(n, k)));\\n        }\\n        $bm_rt = result;\\n    }\\n}\"}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],\"o\":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],\"v\":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],\"c\":true},\"ix\":2},\"nm\":\"Tracé 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.819607902976,0.400000029919,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-3.75,-83.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Ellipse 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.454901993275,0.61960786581,0.4392157197,1],\"ix\":4},\"o\":{\"a\":0,\"k\":0,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":1314,\"st\":0,\"ct\":1,\"bm\":0}]},{\"id\":\"comp_1\",\"nm\":\"croix\",\"fr\":24,\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"Calque de forme 15\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1744,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[49,244,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"rc\",\"d\":1,\"s\":{\"a\":0,\"k\":[42,236],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":4},\"nm\":\"Tracé rectangulaire 1\",\"mn\":\"ADBE Vector Shape - Rect\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.766274964576,0.137628996606,0.137628996606,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.211764720842,0.270588235294,0.309803921569,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[49,244],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"rd\",\"nm\":\"Sommets arrondis 1\",\"r\":{\"a\":0,\"k\":15,\"ix\":1},\"ix\":2,\"mn\":\"ADBE Vector Filter - RC\",\"hd\":false}],\"ip\":0,\"op\":1320,\"st\":0,\"ct\":1,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"Calque de forme 14\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":90,\"ix\":10},\"p\":{\"a\":0,\"k\":[1500,1694,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[49,244,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,56.78,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"rc\",\"d\":1,\"s\":{\"a\":0,\"k\":[42,236],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":4},\"nm\":\"Tracé rectangulaire 1\",\"mn\":\"ADBE Vector Shape - Rect\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.766274964576,0.137628996606,0.137628996606,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Contour 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.211764720842,0.270588235294,0.309803921569,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fond 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[49,244],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transformer \"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"rd\",\"nm\":\"Sommets arrondis 1\",\"r\":{\"a\":0,\"k\":24,\"ix\":1},\"ix\":2,\"mn\":\"ADBE Vector Filter - RC\",\"hd\":false}],\"ip\":0,\"op\":1320,\"st\":0,\"ct\":1,\"bm\":0}]}],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":0,\"nm\":\"Précomp. 1\",\"refId\":\"comp_0\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[364,384,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[360,360,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[130,130,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":720,\"h\":720,\"ip\":0,\"op\":1200,\"st\":0,\"bm\":0}],\"markers\":[{\"tm\":271,\"cm\":\"1\",\"dr\":0}],\"props\":{}}"
  },
  {
    "path": "web/lottie.js",
    "content": "\"undefined\"!=typeof navigator&&function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).lottie=e()}(this,(function(){\"use strict\";var svgNS=\"http://www.w3.org/2000/svg\",locationHref=\"\",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(t){_useWebWorker=!!t},getWebWorker=function(){return _useWebWorker},setLocationHref=function(t){locationHref=t},getLocationHref=function(){return locationHref};function createTag(t){return document.createElement(t)}function extendPrototype(t,e){var i,r,s=t.length;for(i=0;i<s;i+=1)for(var a in r=t[i].prototype)Object.prototype.hasOwnProperty.call(r,a)&&(e.prototype[a]=r[a])}function getDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)}function createProxyFunction(t){function e(){}return e.prototype=t,e}var audioControllerFactory=function(){function t(t){this.audios=[],this.audioFactory=t,this._volume=1,this._isMuted=!1}return t.prototype={addAudio:function(t){this.audios.push(t)},pause:function(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].pause()},resume:function(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].resume()},setRate:function(t){var e,i=this.audios.length;for(e=0;e<i;e+=1)this.audios[e].setRate(t)},createAudio:function(t){return this.audioFactory?this.audioFactory(t):window.Howl?new window.Howl({src:[t]}):{isPlaying:!1,play:function(){this.isPlaying=!0},seek:function(){this.isPlaying=!1},playing:function(){},rate:function(){},setVolume:function(){}}},setAudioFactory:function(t){this.audioFactory=t},setVolume:function(t){this._volume=t,this._updateVolume()},mute:function(){this._isMuted=!0,this._updateVolume()},unmute:function(){this._isMuted=!1,this._updateVolume()},getVolume:function(){return this._volume},_updateVolume:function(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].volume(this._volume*(this._isMuted?0:1))}},function(){return new t}}(),createTypedArray=function(){function t(t,e){var i,r=0,s=[];switch(t){case\"int16\":case\"uint8c\":i=1;break;default:i=1.1}for(r=0;r<e;r+=1)s.push(i);return s}return\"function\"==typeof Uint8ClampedArray&&\"function\"==typeof Float32Array?function(e,i){return\"float32\"===e?new Float32Array(i):\"int16\"===e?new Int16Array(i):\"uint8c\"===e?new Uint8ClampedArray(i):t(e,i)}:t}();function createSizedArray(t){return Array.apply(null,{length:t})}function _typeof$6(t){return _typeof$6=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$6(t)}var subframeEnabled=!0,expressionsPlugin=null,expressionsInterfaces=null,idPrefix$1=\"\",isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),_shouldRoundValues=!1,bmPow=Math.pow,bmSqrt=Math.sqrt,bmFloor=Math.floor,bmMax=Math.max,bmMin=Math.min,BMMath={};function ProjectInterface$1(){return{}}!function(){var t,e=[\"abs\",\"acos\",\"acosh\",\"asin\",\"asinh\",\"atan\",\"atanh\",\"atan2\",\"ceil\",\"cbrt\",\"expm1\",\"clz32\",\"cos\",\"cosh\",\"exp\",\"floor\",\"fround\",\"hypot\",\"imul\",\"log\",\"log1p\",\"log2\",\"log10\",\"max\",\"min\",\"pow\",\"random\",\"round\",\"sign\",\"sin\",\"sinh\",\"sqrt\",\"tan\",\"tanh\",\"trunc\",\"E\",\"LN10\",\"LN2\",\"LOG10E\",\"LOG2E\",\"PI\",\"SQRT1_2\",\"SQRT2\"],i=e.length;for(t=0;t<i;t+=1)BMMath[e[t]]=Math[e[t]]}(),BMMath.random=Math.random,BMMath.abs=function(t){if(\"object\"===_typeof$6(t)&&t.length){var e,i=createSizedArray(t.length),r=t.length;for(e=0;e<r;e+=1)i[e]=Math.abs(t[e]);return i}return Math.abs(t)};var defaultCurveSegments=150,degToRads=Math.PI/180,roundCorner=.5519;function roundValues(t){_shouldRoundValues=!!t}function bmRnd(t){return _shouldRoundValues?Math.round(t):t}function styleDiv(t){t.style.position=\"absolute\",t.style.top=0,t.style.left=0,t.style.display=\"block\",t.style.transformOrigin=\"0 0\",t.style.webkitTransformOrigin=\"0 0\",t.style.backfaceVisibility=\"visible\",t.style.webkitBackfaceVisibility=\"visible\",t.style.transformStyle=\"preserve-3d\",t.style.webkitTransformStyle=\"preserve-3d\",t.style.mozTransformStyle=\"preserve-3d\"}function BMEnterFrameEvent(t,e,i,r){this.type=t,this.currentTime=e,this.totalTime=i,this.direction=r<0?-1:1}function BMCompleteEvent(t,e){this.type=t,this.direction=e<0?-1:1}function BMCompleteLoopEvent(t,e,i,r){this.type=t,this.currentLoop=i,this.totalLoops=e,this.direction=r<0?-1:1}function BMSegmentStartEvent(t,e,i){this.type=t,this.firstFrame=e,this.totalFrames=i}function BMDestroyEvent(t,e){this.type=t,this.target=e}function BMRenderFrameErrorEvent(t,e){this.type=\"renderFrameError\",this.nativeError=t,this.currentTime=e}function BMConfigErrorEvent(t){this.type=\"configError\",this.nativeError=t}function BMAnimationConfigErrorEvent(t,e){this.type=t,this.nativeError=e}var createElementID=(_count=0,function(){return idPrefix$1+\"__lottie_element_\"+(_count+=1)}),_count;function HSVtoRGB(t,e,i){var r,s,a,n,o,h,l,p;switch(h=i*(1-e),l=i*(1-(o=6*t-(n=Math.floor(6*t)))*e),p=i*(1-(1-o)*e),n%6){case 0:r=i,s=p,a=h;break;case 1:r=l,s=i,a=h;break;case 2:r=h,s=i,a=p;break;case 3:r=h,s=l,a=i;break;case 4:r=p,s=h,a=i;break;case 5:r=i,s=h,a=l}return[r,s,a]}function RGBtoHSV(t,e,i){var r,s=Math.max(t,e,i),a=Math.min(t,e,i),n=s-a,o=0===s?0:n/s,h=s/255;switch(s){case a:r=0;break;case t:r=e-i+n*(e<i?6:0),r/=6*n;break;case e:r=i-t+2*n,r/=6*n;break;case i:r=t-e+4*n,r/=6*n}return[r,o,h]}function addSaturationToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return i[1]+=e,i[1]>1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}var rgbToHex=function(){var t,e,i=[];for(t=0;t<256;t+=1)e=t.toString(16),i[t]=1===e.length?\"0\"+e:e;return function(t,e,r){return t<0&&(t=0),e<0&&(e=0),r<0&&(r=0),\"#\"+i[t]+i[e]+i[r]}}(),setSubframeEnabled=function(t){subframeEnabled=!!t},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(t){expressionsPlugin=t},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(t){expressionsInterfaces=t},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(t){defaultCurveSegments=t},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(t){idPrefix$1=t},getIdPrefix=function(){return idPrefix$1};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){return _typeof$5=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$5(t)}var dataManager=function(){var t,e,i=1,r=[],s={onmessage:function(){},postMessage:function(e){t({data:e})}},a={postMessage:function(t){s.onmessage({data:t})}};function n(){e||(e=function(e){if(window.Worker&&window.Blob&&getWebWorker()){var i=new Blob([\"var _workerSelf = self; self.onmessage = \",e.toString()],{type:\"text/javascript\"}),r=URL.createObjectURL(i);return new Worker(r)}return t=e,s}((function(t){if(a.dataManager||(a.dataManager=function(){function t(s,a){var n,o,h,l,p,m,c=s.length;for(o=0;o<c;o+=1)if(\"ks\"in(n=s[o])&&!n.completed){if(n.completed=!0,n.hasMask){var d=n.masksProperties;for(l=d.length,h=0;h<l;h+=1)if(d[h].pt.k.i)r(d[h].pt.k);else for(m=d[h].pt.k.length,p=0;p<m;p+=1)d[h].pt.k[p].s&&r(d[h].pt.k[p].s[0]),d[h].pt.k[p].e&&r(d[h].pt.k[p].e[0])}0===n.ty?(n.layers=e(n.refId,a),t(n.layers,a)):4===n.ty?i(n.shapes):5===n.ty&&f(n)}}function e(t,e){var i=function(t,e){for(var i=0,r=e.length;i<r;){if(e[i].id===t)return e[i];i+=1}return null}(t,e);return i?i.layers.__used?JSON.parse(JSON.stringify(i.layers)):(i.layers.__used=!0,i.layers):null}function i(t){var e,s,a;for(e=t.length-1;e>=0;e-=1)if(\"sh\"===t[e].ty)if(t[e].ks.k.i)r(t[e].ks.k);else for(a=t[e].ks.k.length,s=0;s<a;s+=1)t[e].ks.k[s].s&&r(t[e].ks.k[s].s[0]),t[e].ks.k[s].e&&r(t[e].ks.k[s].e[0]);else\"gr\"===t[e].ty&&i(t[e].it)}function r(t){var e,i=t.i.length;for(e=0;e<i;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function s(t,e){var i=e?e.split(\".\"):[100,100,100];return t[0]>i[0]||!(i[0]>t[0])&&(t[1]>i[1]||!(i[1]>t[1])&&(t[2]>i[2]||!(i[2]>t[2])&&null))}var a,n=function(){var t=[4,4,14];function e(t){var e,i,r,s=t.length;for(e=0;e<s;e+=1)5===t[e].ty&&(r=void 0,r=(i=t[e]).t.d,i.t.d={k:[{s:r,t:0}]})}return function(i){if(s(t,i.v)&&(e(i.layers),i.assets)){var r,a=i.assets.length;for(r=0;r<a;r+=1)i.assets[r].layers&&e(i.assets[r].layers)}}}(),o=(a=[4,7,99],function(t){if(t.chars&&!s(a,t.v)){var e,r=t.chars.length;for(e=0;e<r;e+=1){var n=t.chars[e];n.data&&n.data.shapes&&(i(n.data.shapes),n.data.ip=0,n.data.op=99999,n.data.st=0,n.data.sr=1,n.data.ks={p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0}},t.chars[e].t||(n.data.shapes.push({ty:\"no\"}),n.data.shapes[0].it.push({p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0},sk:{k:0,a:0},sa:{k:0,a:0},ty:\"tr\"})))}}}),h=function(){var t=[5,7,15];function e(t){var e,i,r=t.length;for(e=0;e<r;e+=1)5===t[e].ty&&(i=void 0,\"number\"==typeof(i=t[e].t.p).a&&(i.a={a:0,k:i.a}),\"number\"==typeof i.p&&(i.p={a:0,k:i.p}),\"number\"==typeof i.r&&(i.r={a:0,k:i.r}))}return function(i){if(s(t,i.v)&&(e(i.layers),i.assets)){var r,a=i.assets.length;for(r=0;r<a;r+=1)i.assets[r].layers&&e(i.assets[r].layers)}}}(),l=function(){var t=[4,1,9];function e(t){var i,r,s,a=t.length;for(i=0;i<a;i+=1)if(\"gr\"===t[i].ty)e(t[i].it);else if(\"fl\"===t[i].ty||\"st\"===t[i].ty)if(t[i].c.k&&t[i].c.k[0].i)for(s=t[i].c.k.length,r=0;r<s;r+=1)t[i].c.k[r].s&&(t[i].c.k[r].s[0]/=255,t[i].c.k[r].s[1]/=255,t[i].c.k[r].s[2]/=255,t[i].c.k[r].s[3]/=255),t[i].c.k[r].e&&(t[i].c.k[r].e[0]/=255,t[i].c.k[r].e[1]/=255,t[i].c.k[r].e[2]/=255,t[i].c.k[r].e[3]/=255);else t[i].c.k[0]/=255,t[i].c.k[1]/=255,t[i].c.k[2]/=255,t[i].c.k[3]/=255}function i(t){var i,r=t.length;for(i=0;i<r;i+=1)4===t[i].ty&&e(t[i].shapes)}return function(e){if(s(t,e.v)&&(i(e.layers),e.assets)){var r,a=e.assets.length;for(r=0;r<a;r+=1)e.assets[r].layers&&i(e.assets[r].layers)}}}(),p=function(){var t=[4,4,18];function e(t){var i,r,s;for(i=t.length-1;i>=0;i-=1)if(\"sh\"===t[i].ty)if(t[i].ks.k.i)t[i].ks.k.c=t[i].closed;else for(s=t[i].ks.k.length,r=0;r<s;r+=1)t[i].ks.k[r].s&&(t[i].ks.k[r].s[0].c=t[i].closed),t[i].ks.k[r].e&&(t[i].ks.k[r].e[0].c=t[i].closed);else\"gr\"===t[i].ty&&e(t[i].it)}function i(t){var i,r,s,a,n,o,h=t.length;for(r=0;r<h;r+=1){if((i=t[r]).hasMask){var l=i.masksProperties;for(a=l.length,s=0;s<a;s+=1)if(l[s].pt.k.i)l[s].pt.k.c=l[s].cl;else for(o=l[s].pt.k.length,n=0;n<o;n+=1)l[s].pt.k[n].s&&(l[s].pt.k[n].s[0].c=l[s].cl),l[s].pt.k[n].e&&(l[s].pt.k[n].e[0].c=l[s].cl)}4===i.ty&&e(i.shapes)}}return function(e){if(s(t,e.v)&&(i(e.layers),e.assets)){var r,a=e.assets.length;for(r=0;r<a;r+=1)e.assets[r].layers&&i(e.assets[r].layers)}}}();function f(t){0===t.t.a.length&&t.t.p}var m={completeData:function(i){i.__complete||(l(i),n(i),o(i),h(i),p(i),t(i.layers,i.assets),function(i,r){if(i){var s=0,a=i.length;for(s=0;s<a;s+=1)1===i[s].t&&(i[s].data.layers=e(i[s].data.refId,r),t(i[s].data.layers,r))}}(i.chars,i.assets),i.__complete=!0)}};return m.checkColors=l,m.checkChars=o,m.checkPathProperties=h,m.checkShapes=p,m.completeLayers=t,m}()),a.assetLoader||(a.assetLoader=function(){function t(t){var e=t.getResponseHeader(\"content-type\");return e&&\"json\"===t.responseType&&-1!==e.indexOf(\"json\")||t.response&&\"object\"===_typeof$5(t.response)?t.response:t.response&&\"string\"==typeof t.response?JSON.parse(t.response):t.responseText?JSON.parse(t.responseText):null}return{load:function(e,i,r,s){var a,n=new XMLHttpRequest;try{n.responseType=\"json\"}catch(t){}n.onreadystatechange=function(){if(4===n.readyState)if(200===n.status)a=t(n),r(a);else try{a=t(n),r(a)}catch(t){s&&s(t)}};try{n.open([\"G\",\"E\",\"T\"].join(\"\"),e,!0)}catch(t){n.open([\"G\",\"E\",\"T\"].join(\"\"),i+\"/\"+e,!0)}n.send()}}}()),\"loadAnimation\"===t.data.type)a.assetLoader.load(t.data.path,t.data.fullPath,(function(e){a.dataManager.completeData(e),a.postMessage({id:t.data.id,payload:e,status:\"success\"})}),(function(){a.postMessage({id:t.data.id,status:\"error\"})}));else if(\"complete\"===t.data.type){var e=t.data.animation;a.dataManager.completeData(e),a.postMessage({id:t.data.id,payload:e,status:\"success\"})}else\"loadData\"===t.data.type&&a.assetLoader.load(t.data.path,t.data.fullPath,(function(e){a.postMessage({id:t.data.id,payload:e,status:\"success\"})}),(function(){a.postMessage({id:t.data.id,status:\"error\"})}))})),e.onmessage=function(t){var e=t.data,i=e.id,s=r[i];r[i]=null,\"success\"===e.status?s.onComplete(e.payload):s.onError&&s.onError()})}function o(t,e){var s=\"processId_\"+(i+=1);return r[s]={onComplete:t,onError:e},s}return{loadAnimation:function(t,i,r){n();var s=o(i,r);e.postMessage({type:\"loadAnimation\",path:t,fullPath:window.location.origin+window.location.pathname,id:s})},loadData:function(t,i,r){n();var s=o(i,r);e.postMessage({type:\"loadData\",path:t,fullPath:window.location.origin+window.location.pathname,id:s})},completeAnimation:function(t,i,r){n();var s=o(i,r);e.postMessage({type:\"complete\",animation:t,id:s})}}}(),ImagePreloader=function(){var t=function(){var t=createTag(\"canvas\");t.width=1,t.height=1;var e=t.getContext(\"2d\");return e.fillStyle=\"rgba(0,0,0,0)\",e.fillRect(0,0,1,1),t}();function e(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function i(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function r(t,e,i){var r=\"\";if(t.e)r=t.p;else if(e){var s=t.p;-1!==s.indexOf(\"images/\")&&(s=s.split(\"/\")[1]),r=e+s}else r=i,r+=t.u?t.u:\"\",r+=t.p;return r}function s(t){var e=0,i=setInterval(function(){(t.getBBox().width||e>500)&&(this._imageLoaded(),clearInterval(i)),e+=1}.bind(this),50)}function a(t){var e={assetData:t},i=r(t,this.assetsPath,this.path);return dataManager.loadData(i,function(t){e.img=t,this._footageLoaded()}.bind(this),function(){e.img={},this._footageLoaded()}.bind(this)),e}function n(){this._imageLoaded=e.bind(this),this._footageLoaded=i.bind(this),this.testImageLoaded=s.bind(this),this.createFootageData=a.bind(this),this.assetsPath=\"\",this.path=\"\",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return n.prototype={loadAssets:function(t,e){var i;this.imagesLoadedCb=e;var r=t.length;for(i=0;i<r;i+=1)t[i].layers||(t[i].t&&\"seq\"!==t[i].t?3===t[i].t&&(this.totalFootages+=1,this.images.push(this.createFootageData(t[i]))):(this.totalImages+=1,this.images.push(this._createImageData(t[i]))))},setAssetsPath:function(t){this.assetsPath=t||\"\"},setPath:function(t){this.path=t||\"\"},loadedImages:function(){return this.totalImages===this.loadedAssets},loadedFootages:function(){return this.totalFootages===this.loadedFootagesCount},destroy:function(){this.imagesLoadedCb=null,this.images.length=0},getAsset:function(t){for(var e=0,i=this.images.length;e<i;){if(this.images[e].assetData===t)return this.images[e].img;e+=1}return null},createImgData:function(e){var i=r(e,this.assetsPath,this.path),s=createTag(\"img\");s.crossOrigin=\"anonymous\",s.addEventListener(\"load\",this._imageLoaded,!1),s.addEventListener(\"error\",function(){a.img=t,this._imageLoaded()}.bind(this),!1),s.src=i;var a={img:s,assetData:e};return a},createImageData:function(e){var i=r(e,this.assetsPath,this.path),s=createNS(\"image\");isSafari?this.testImageLoaded(s):s.addEventListener(\"load\",this._imageLoaded,!1),s.addEventListener(\"error\",function(){a.img=t,this._imageLoaded()}.bind(this),!1),s.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",i),this._elementHelper.append?this._elementHelper.append(s):this._elementHelper.appendChild(s);var a={img:s,assetData:e};return a},imageLoaded:e,footageLoaded:i,setCacheType:function(t,e){\"svg\"===t?(this._elementHelper=e,this._createImageData=this.createImageData.bind(this)):this._createImageData=this.createImgData.bind(this)}},n}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function(t,e){if(this._cbs[t])for(var i=this._cbs[t],r=0;r<i.length;r+=1)i[r](e)},addEventListener:function(t,e){return this._cbs[t]||(this._cbs[t]=[]),this._cbs[t].push(e),function(){this.removeEventListener(t,e)}.bind(this)},removeEventListener:function(t,e){if(e){if(this._cbs[t]){for(var i=0,r=this._cbs[t].length;i<r;)this._cbs[t][i]===e&&(this._cbs[t].splice(i,1),i-=1,r-=1),i+=1;this._cbs[t].length||(this._cbs[t]=null)}}else this._cbs[t]=null}};var markerParser=function(){function t(t){for(var e,i=t.split(\"\\r\\n\"),r={},s=0,a=0;a<i.length;a+=1)2===(e=i[a].split(\":\")).length&&(r[e[0]]=e[1].trim(),s+=1);if(0===s)throw new Error;return r}return function(e){for(var i=[],r=0;r<e.length;r+=1){var s=e[r],a={time:s.tm,duration:s.dr};try{a.payload=JSON.parse(e[r].cm)}catch(i){try{a.payload=t(e[r].cm)}catch(t){a.payload={name:e[r].cm}}}i.push(a)}return i}}(),ProjectInterface=function(){function t(t){this.compositions.push(t)}return function(){function e(t){for(var e=0,i=this.compositions.length;e<i;){if(this.compositions[e].data&&this.compositions[e].data.nm===t)return this.compositions[e].prepareFrame&&this.compositions[e].data.xt&&this.compositions[e].prepareFrame(this.currentFrame),this.compositions[e].compInterface;e+=1}return null}return e.compositions=[],e.currentFrame=0,e.registerComposition=t,e}}(),renderers={},registerRenderer=function(t,e){renderers[t]=e};function getRenderer(t){return renderers[t]}function getRegisteredRenderer(){if(renderers.canvas)return\"canvas\";for(var t in renderers)if(renderers[t])return t;return\"\"}function _typeof$4(t){return _typeof$4=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$4(t)}var AnimationItem=function(){this._cbs=[],this.name=\"\",this.path=\"\",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.firstFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.playCount=0,this.animationData={},this.assets=[],this.isPaused=!0,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=createElementID(),this.assetsPath=\"\",this.timeCompleted=0,this.segmentPos=0,this.isSubframeEnabled=getSubframeEnabled(),this.segments=[],this._idle=!0,this._completedLoop=!1,this.projectInterface=ProjectInterface(),this.imagePreloader=new ImagePreloader,this.audioController=audioControllerFactory(),this.markers=[],this.configAnimation=this.configAnimation.bind(this),this.onSetupError=this.onSetupError.bind(this),this.onSegmentComplete=this.onSegmentComplete.bind(this),this.drawnFrameEvent=new BMEnterFrameEvent(\"drawnFrame\",0,0,0),this.expressionsPlugin=getExpressionsPlugin()};extendPrototype([BaseEvent],AnimationItem),AnimationItem.prototype.setParams=function(t){(t.wrapper||t.container)&&(this.wrapper=t.wrapper||t.container);var e=\"svg\";t.animType?e=t.animType:t.renderer&&(e=t.renderer);var i=getRenderer(e);this.renderer=new i(this,t.rendererSettings),this.imagePreloader.setCacheType(e,this.renderer.globalData.defs),this.renderer.setProjectInterface(this.projectInterface),this.animType=e,\"\"===t.loop||null===t.loop||void 0===t.loop||!0===t.loop?this.loop=!0:!1===t.loop?this.loop=!1:this.loop=parseInt(t.loop,10),this.autoplay=!(\"autoplay\"in t)||t.autoplay,this.name=t.name?t.name:\"\",this.autoloadSegments=!Object.prototype.hasOwnProperty.call(t,\"autoloadSegments\")||t.autoloadSegments,this.assetsPath=t.assetsPath,this.initialSegment=t.initialSegment,t.audioFactory&&this.audioController.setAudioFactory(t.audioFactory),t.animationData?this.setupAnimation(t.animationData):t.path&&(-1!==t.path.lastIndexOf(\"\\\\\")?this.path=t.path.substr(0,t.path.lastIndexOf(\"\\\\\")+1):this.path=t.path.substr(0,t.path.lastIndexOf(\"/\")+1),this.fileName=t.path.substr(t.path.lastIndexOf(\"/\")+1),this.fileName=this.fileName.substr(0,this.fileName.lastIndexOf(\".json\")),dataManager.loadAnimation(t.path,this.configAnimation,this.onSetupError))},AnimationItem.prototype.onSetupError=function(){this.trigger(\"data_failed\")},AnimationItem.prototype.setupAnimation=function(t){dataManager.completeAnimation(t,this.configAnimation)},AnimationItem.prototype.setData=function(t,e){e&&\"object\"!==_typeof$4(e)&&(e=JSON.parse(e));var i={wrapper:t,animationData:e},r=t.attributes;i.path=r.getNamedItem(\"data-animation-path\")?r.getNamedItem(\"data-animation-path\").value:r.getNamedItem(\"data-bm-path\")?r.getNamedItem(\"data-bm-path\").value:r.getNamedItem(\"bm-path\")?r.getNamedItem(\"bm-path\").value:\"\",i.animType=r.getNamedItem(\"data-anim-type\")?r.getNamedItem(\"data-anim-type\").value:r.getNamedItem(\"data-bm-type\")?r.getNamedItem(\"data-bm-type\").value:r.getNamedItem(\"bm-type\")?r.getNamedItem(\"bm-type\").value:r.getNamedItem(\"data-bm-renderer\")?r.getNamedItem(\"data-bm-renderer\").value:r.getNamedItem(\"bm-renderer\")?r.getNamedItem(\"bm-renderer\").value:getRegisteredRenderer()||\"canvas\";var s=r.getNamedItem(\"data-anim-loop\")?r.getNamedItem(\"data-anim-loop\").value:r.getNamedItem(\"data-bm-loop\")?r.getNamedItem(\"data-bm-loop\").value:r.getNamedItem(\"bm-loop\")?r.getNamedItem(\"bm-loop\").value:\"\";\"false\"===s?i.loop=!1:\"true\"===s?i.loop=!0:\"\"!==s&&(i.loop=parseInt(s,10));var a=r.getNamedItem(\"data-anim-autoplay\")?r.getNamedItem(\"data-anim-autoplay\").value:r.getNamedItem(\"data-bm-autoplay\")?r.getNamedItem(\"data-bm-autoplay\").value:!r.getNamedItem(\"bm-autoplay\")||r.getNamedItem(\"bm-autoplay\").value;i.autoplay=\"false\"!==a,i.name=r.getNamedItem(\"data-name\")?r.getNamedItem(\"data-name\").value:r.getNamedItem(\"data-bm-name\")?r.getNamedItem(\"data-bm-name\").value:r.getNamedItem(\"bm-name\")?r.getNamedItem(\"bm-name\").value:\"\",\"false\"===(r.getNamedItem(\"data-anim-prerender\")?r.getNamedItem(\"data-anim-prerender\").value:r.getNamedItem(\"data-bm-prerender\")?r.getNamedItem(\"data-bm-prerender\").value:r.getNamedItem(\"bm-prerender\")?r.getNamedItem(\"bm-prerender\").value:\"\")&&(i.prerender=!1),i.path?this.setParams(i):this.trigger(\"destroy\")},AnimationItem.prototype.includeLayers=function(t){t.op>this.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e,i,r=this.animationData.layers,s=r.length,a=t.layers,n=a.length;for(i=0;i<n;i+=1)for(e=0;e<s;){if(r[e].id===a[i].id){r[e]=a[i];break}e+=1}if((t.chars||t.fonts)&&(this.renderer.globalData.fontManager.addChars(t.chars),this.renderer.globalData.fontManager.addFonts(t.fonts,this.renderer.globalData.defs)),t.assets)for(s=t.assets.length,e=0;e<s;e+=1)this.animationData.assets.push(t.assets[e]);this.animationData.__complete=!1,dataManager.completeAnimation(this.animationData,this.onSegmentComplete)},AnimationItem.prototype.onSegmentComplete=function(t){this.animationData=t;var e=getExpressionsPlugin();e&&e.initExpressions(this),this.loadNextSegment()},AnimationItem.prototype.loadNextSegment=function(){var t=this.animationData.segments;if(!t||0===t.length||!this.autoloadSegments)return this.trigger(\"data_ready\"),void(this.timeCompleted=this.totalFrames);var e=t.shift();this.timeCompleted=e.time*this.frameRate;var i=this.path+this.fileName+\"_\"+this.segmentPos+\".json\";this.segmentPos+=1,dataManager.loadData(i,this.includeLayers.bind(this),function(){this.trigger(\"data_failed\")}.bind(this))},AnimationItem.prototype.loadSegments=function(){this.animationData.segments||(this.timeCompleted=this.totalFrames),this.loadNextSegment()},AnimationItem.prototype.imagesLoaded=function(){this.trigger(\"loaded_images\"),this.checkLoaded()},AnimationItem.prototype.preloadImages=function(){this.imagePreloader.setAssetsPath(this.assetsPath),this.imagePreloader.setPath(this.path),this.imagePreloader.loadAssets(this.animationData.assets,this.imagesLoaded.bind(this))},AnimationItem.prototype.configAnimation=function(t){if(this.renderer)try{this.animationData=t,this.initialSegment?(this.totalFrames=Math.floor(this.initialSegment[1]-this.initialSegment[0]),this.firstFrame=Math.round(this.initialSegment[0])):(this.totalFrames=Math.floor(this.animationData.op-this.animationData.ip),this.firstFrame=Math.round(this.animationData.ip)),this.renderer.configAnimation(t),t.assets||(t.assets=[]),this.assets=this.animationData.assets,this.frameRate=this.animationData.fr,this.frameMult=this.animationData.fr/1e3,this.renderer.searchExtraCompositions(t.assets),this.markers=markerParser(t.markers||[]),this.trigger(\"config_ready\"),this.preloadImages(),this.loadSegments(),this.updaFrameModifier(),this.waitForFontsLoaded(),this.isPaused&&this.audioController.pause()}catch(t){this.triggerConfigError(t)}},AnimationItem.prototype.waitForFontsLoaded=function(){this.renderer&&(this.renderer.globalData.fontManager.isLoaded?this.checkLoaded():setTimeout(this.waitForFontsLoaded.bind(this),20))},AnimationItem.prototype.checkLoaded=function(){if(!this.isLoaded&&this.renderer.globalData.fontManager.isLoaded&&(this.imagePreloader.loadedImages()||\"canvas\"!==this.renderer.rendererType)&&this.imagePreloader.loadedFootages()){this.isLoaded=!0;var t=getExpressionsPlugin();t&&t.initExpressions(this),this.renderer.initItems(),setTimeout(function(){this.trigger(\"DOMLoaded\")}.bind(this),0),this.gotoFrame(),this.autoplay&&this.play()}},AnimationItem.prototype.resize=function(t,e){var i=\"number\"==typeof t?t:void 0,r=\"number\"==typeof e?e:void 0;this.renderer.updateContainerSize(i,r)},AnimationItem.prototype.setSubframe=function(t){this.isSubframeEnabled=!!t},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=this.isSubframeEnabled?this.currentRawFrame:~~this.currentRawFrame,this.timeCompleted!==this.totalFrames&&this.currentFrame>this.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger(\"enterFrame\"),this.renderFrame(),this.trigger(\"drawnFrame\")},AnimationItem.prototype.renderFrame=function(){if(!1!==this.isLoaded&&this.renderer)try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(t){this.triggerRenderFrameError(t)}},AnimationItem.prototype.play=function(t){t&&this.name!==t||!0===this.isPaused&&(this.isPaused=!1,this.trigger(\"_play\"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger(\"_active\")))},AnimationItem.prototype.pause=function(t){t&&this.name!==t||!1===this.isPaused&&(this.isPaused=!0,this.trigger(\"_pause\"),this._idle=!0,this.trigger(\"_idle\"),this.audioController.pause())},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(!0===this.isPaused?this.play():this.pause())},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.getMarkerData=function(t){for(var e,i=0;i<this.markers.length;i+=1)if((e=this.markers[i]).payload&&e.payload.name===t)return e;return null},AnimationItem.prototype.goToAndStop=function(t,e,i){if(!i||this.name===i){var r=Number(t);if(isNaN(r)){var s=this.getMarkerData(t);s&&this.goToAndStop(s.time,!0)}else e?this.setCurrentRawFrameValue(t):this.setCurrentRawFrameValue(t*this.frameModifier);this.pause()}},AnimationItem.prototype.goToAndPlay=function(t,e,i){if(!i||this.name===i){var r=Number(t);if(isNaN(r)){var s=this.getMarkerData(t);s&&(s.duration?this.playSegments([s.time,s.time+s.duration],!0):this.goToAndStop(s.time,!0))}else this.goToAndStop(r,e,i);this.play()}},AnimationItem.prototype.advanceTime=function(t){if(!0!==this.isPaused&&!1!==this.isLoaded){var e=this.currentRawFrame+t*this.frameModifier,i=!1;e>=this.totalFrames-1&&this.frameModifier>0?this.loop&&this.playCount!==this.loop?e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger(\"loopComplete\"))):this.setCurrentRawFrameValue(e):this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e<0?this.checkSegments(e%this.totalFrames)||(!this.loop||this.playCount--<=0&&!0!==this.loop?(i=!0,e=0):(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger(\"loopComplete\"):this._completedLoop=!0)):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger(\"complete\"))}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]<t[0]?(this.frameModifier>0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger(\"segmentStart\")},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFrame<t?i=t:this.currentRawFrame+this.firstFrame>e&&(i=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,-1!==i&&this.goToAndStop(i,!0)},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),\"object\"===_typeof$4(t[0])){var i,r=t.length;for(i=0;i<r;i+=1)this.segments.push(t[i])}else this.segments.push(t);this.segments.length&&e&&this.adjustSegment(this.segments.shift(),0),this.isPaused&&this.play()},AnimationItem.prototype.resetSegments=function(t){this.segments.length=0,this.segments.push([this.animationData.ip,this.animationData.op]),t&&this.checkSegments(0)},AnimationItem.prototype.checkSegments=function(t){return!!this.segments.length&&(this.adjustSegment(this.segments.shift(),t),!0)},AnimationItem.prototype.destroy=function(t){t&&this.name!==t||!this.renderer||(this.renderer.destroy(),this.imagePreloader.destroy(),this.trigger(\"destroy\"),this._cbs=null,this.onEnterFrame=null,this.onLoopComplete=null,this.onComplete=null,this.onSegmentStart=null,this.onDestroy=null,this.renderer=null,this.expressionsPlugin=null,this.imagePreloader=null,this.projectInterface=null)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){this.currentRawFrame=t,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=t<0?-1:1,this.updaFrameModifier()},AnimationItem.prototype.setLoop=function(t){this.loop=t},AnimationItem.prototype.setVolume=function(t,e){e&&this.name!==e||this.audioController.setVolume(t)},AnimationItem.prototype.getVolume=function(){return this.audioController.getVolume()},AnimationItem.prototype.mute=function(t){t&&this.name!==t||this.audioController.mute()},AnimationItem.prototype.unmute=function(t){t&&this.name!==t||this.audioController.unmute()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection,this.audioController.setRate(this.playSpeed*this.playDirection)},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssetsPath=function(t){var e=\"\";if(t.e)e=t.p;else if(this.assetsPath){var i=t.p;-1!==i.indexOf(\"images/\")&&(i=i.split(\"/\")[1]),e=this.assetsPath+i}else e=this.path,e+=t.u?t.u:\"\",e+=t.p;return e},AnimationItem.prototype.getAssetData=function(t){for(var e=0,i=this.assets.length;e<i;){if(t===this.assets[e].id)return this.assets[e];e+=1}return null},AnimationItem.prototype.hide=function(){this.renderer.hide()},AnimationItem.prototype.show=function(){this.renderer.show()},AnimationItem.prototype.getDuration=function(t){return t?this.totalFrames:this.totalFrames/this.frameRate},AnimationItem.prototype.updateDocumentData=function(t,e,i){try{this.renderer.getElementByPath(t).updateDocumentData(e,i)}catch(t){}},AnimationItem.prototype.trigger=function(t){if(this._cbs&&this._cbs[t])switch(t){case\"enterFrame\":this.triggerEvent(t,new BMEnterFrameEvent(t,this.currentFrame,this.totalFrames,this.frameModifier));break;case\"drawnFrame\":this.drawnFrameEvent.currentTime=this.currentFrame,this.drawnFrameEvent.totalTime=this.totalFrames,this.drawnFrameEvent.direction=this.frameModifier,this.triggerEvent(t,this.drawnFrameEvent);break;case\"loopComplete\":this.triggerEvent(t,new BMCompleteLoopEvent(t,this.loop,this.playCount,this.frameMult));break;case\"complete\":this.triggerEvent(t,new BMCompleteEvent(t,this.frameMult));break;case\"segmentStart\":this.triggerEvent(t,new BMSegmentStartEvent(t,this.firstFrame,this.totalFrames));break;case\"destroy\":this.triggerEvent(t,new BMDestroyEvent(t,this));break;default:this.triggerEvent(t)}\"enterFrame\"===t&&this.onEnterFrame&&this.onEnterFrame.call(this,new BMEnterFrameEvent(t,this.currentFrame,this.totalFrames,this.frameMult)),\"loopComplete\"===t&&this.onLoopComplete&&this.onLoopComplete.call(this,new BMCompleteLoopEvent(t,this.loop,this.playCount,this.frameMult)),\"complete\"===t&&this.onComplete&&this.onComplete.call(this,new BMCompleteEvent(t,this.frameMult)),\"segmentStart\"===t&&this.onSegmentStart&&this.onSegmentStart.call(this,new BMSegmentStartEvent(t,this.firstFrame,this.totalFrames)),\"destroy\"===t&&this.onDestroy&&this.onDestroy.call(this,new BMDestroyEvent(t,this))},AnimationItem.prototype.triggerRenderFrameError=function(t){var e=new BMRenderFrameErrorEvent(t,this.currentFrame);this.triggerEvent(\"error\",e),this.onError&&this.onError.call(this,e)},AnimationItem.prototype.triggerConfigError=function(t){var e=new BMConfigErrorEvent(t,this.currentFrame);this.triggerEvent(\"error\",e),this.onError&&this.onError.call(this,e)};var animationManager=function(){var t={},e=[],i=0,r=0,s=0,a=!0,n=!1;function o(t){for(var i=0,s=t.target;i<r;)e[i].animation===s&&(e.splice(i,1),i-=1,r-=1,s.isPaused||p()),i+=1}function h(t,i){if(!t)return null;for(var s=0;s<r;){if(e[s].elem===t&&null!==e[s].elem)return e[s].animation;s+=1}var a=new AnimationItem;return f(a,t),a.setData(t,i),a}function l(){s+=1,d()}function p(){s-=1}function f(t,i){t.addEventListener(\"destroy\",o),t.addEventListener(\"_active\",l),t.addEventListener(\"_idle\",p),e.push({elem:i,animation:t}),r+=1}function m(t){var o,h=t-i;for(o=0;o<r;o+=1)e[o].animation.advanceTime(h);i=t,s&&!n?window.requestAnimationFrame(m):a=!0}function c(t){i=t,window.requestAnimationFrame(m)}function d(){!n&&s&&a&&(window.requestAnimationFrame(c),a=!1)}return t.registerAnimation=h,t.loadAnimation=function(t){var e=new AnimationItem;return f(e,null),e.setParams(t),e},t.setSpeed=function(t,i){var s;for(s=0;s<r;s+=1)e[s].animation.setSpeed(t,i)},t.setDirection=function(t,i){var s;for(s=0;s<r;s+=1)e[s].animation.setDirection(t,i)},t.play=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.play(t)},t.pause=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.pause(t)},t.stop=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.stop(t)},t.togglePause=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.togglePause(t)},t.searchAnimations=function(t,e,i){var r,s=[].concat([].slice.call(document.getElementsByClassName(\"lottie\")),[].slice.call(document.getElementsByClassName(\"bodymovin\"))),a=s.length;for(r=0;r<a;r+=1)i&&s[r].setAttribute(\"data-bm-type\",i),h(s[r],t);if(e&&0===a){i||(i=\"svg\");var n=document.getElementsByTagName(\"body\")[0];n.innerText=\"\";var o=createTag(\"div\");o.style.width=\"100%\",o.style.height=\"100%\",o.setAttribute(\"data-bm-type\",i),n.appendChild(o),h(o,t)}},t.resize=function(){var t;for(t=0;t<r;t+=1)e[t].animation.resize()},t.goToAndStop=function(t,i,s){var a;for(a=0;a<r;a+=1)e[a].animation.goToAndStop(t,i,s)},t.destroy=function(t){var i;for(i=r-1;i>=0;i-=1)e[i].animation.destroy(t)},t.freeze=function(){n=!0},t.unfreeze=function(){n=!1,d()},t.setVolume=function(t,i){var s;for(s=0;s<r;s+=1)e[s].animation.setVolume(t,i)},t.mute=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.mute(t)},t.unmute=function(t){var i;for(i=0;i<r;i+=1)e[i].animation.unmute(t)},t.getRegisteredAnimations=function(){var t,i=e.length,r=[];for(t=0;t<i;t+=1)r.push(e[t].animation);return r},t}(),BezierFactory=function(){var t={getBezierEasing:function(t,i,r,s,a){var n=a||(\"bez_\"+t+\"_\"+i+\"_\"+r+\"_\"+s).replace(/\\./g,\"p\");if(e[n])return e[n];var o=new l([t,i,r,s]);return e[n]=o,o}},e={};var i=.1,r=\"function\"==typeof Float32Array;function s(t,e){return 1-3*e+3*t}function a(t,e){return 3*e-6*t}function n(t){return 3*t}function o(t,e,i){return((s(e,i)*t+a(e,i))*t+n(e))*t}function h(t,e,i){return 3*s(e,i)*t*t+2*a(e,i)*t+n(e)}function l(t){this._p=t,this._mSampleValues=r?new Float32Array(11):new Array(11),this._precomputed=!1,this.get=this.get.bind(this)}return l.prototype={get:function(t){var e=this._p[0],i=this._p[1],r=this._p[2],s=this._p[3];return this._precomputed||this._precompute(),e===i&&r===s?t:0===t?0:1===t?1:o(this._getTForX(t),i,s)},_precompute:function(){var t=this._p[0],e=this._p[1],i=this._p[2],r=this._p[3];this._precomputed=!0,t===e&&i===r||this._calcSampleValues()},_calcSampleValues:function(){for(var t=this._p[0],e=this._p[2],r=0;r<11;++r)this._mSampleValues[r]=o(r*i,t,e)},_getTForX:function(t){for(var e=this._p[0],r=this._p[2],s=this._mSampleValues,a=0,n=1;10!==n&&s[n]<=t;++n)a+=i;var l=a+(t-s[--n])/(s[n+1]-s[n])*i,p=h(l,e,r);return p>=.001?function(t,e,i,r){for(var s=0;s<4;++s){var a=h(e,i,r);if(0===a)return e;e-=(o(e,i,r)-t)/a}return e}(t,l,e,r):0===p?l:function(t,e,i,r,s){var a,n,h=0;do{(a=o(n=e+(i-e)/2,r,s)-t)>0?i=n:e=n}while(Math.abs(a)>1e-7&&++h<10);return n}(t,a,a+i,e,r)}},t}(),pooling={double:function(t){return t.concat(createSizedArray(t.length))}},poolFactory=function(t,e,i){var r=0,s=t,a=createSizedArray(s);return{newElement:function(){return r?a[r-=1]:e()},release:function(t){r===s&&(a=pooling.double(a),s*=2),i&&i(t),a[r]=t,r+=1}}},bezierLengthPool=poolFactory(8,(function(){return{addedLength:0,percents:createTypedArray(\"float32\",getDefaultCurveSegments()),lengths:createTypedArray(\"float32\",getDefaultCurveSegments())}})),segmentsLengthPool=poolFactory(8,(function(){return{lengths:[],totalLength:0}}),(function(t){var e,i=t.lengths.length;for(e=0;e<i;e+=1)bezierLengthPool.release(t.lengths[e]);t.lengths.length=0}));function bezFunction(){var t=Math;function e(t,e,i,r,s,a){var n=t*r+e*s+i*a-s*r-a*t-i*e;return n>-.001&&n<.001}var i=function(t,e,i,r){var s,a,n,o,h,l,p=getDefaultCurveSegments(),f=0,m=[],c=[],d=bezierLengthPool.newElement();for(n=i.length,s=0;s<p;s+=1){for(h=s/(p-1),l=0,a=0;a<n;a+=1)o=bmPow(1-h,3)*t[a]+3*bmPow(1-h,2)*h*i[a]+3*(1-h)*bmPow(h,2)*r[a]+bmPow(h,3)*e[a],m[a]=o,null!==c[a]&&(l+=bmPow(m[a]-c[a],2)),c[a]=m[a];l&&(f+=l=bmSqrt(l)),d.percents[s]=h,d.lengths[s]=f}return d.addedLength=f,d};function r(t){this.segmentLength=0,this.points=new Array(t)}function s(t,e){this.partialLength=t,this.point=e}var a,n=(a={},function(t,i,n,o){var h=(t[0]+\"_\"+t[1]+\"_\"+i[0]+\"_\"+i[1]+\"_\"+n[0]+\"_\"+n[1]+\"_\"+o[0]+\"_\"+o[1]).replace(/\\./g,\"p\");if(!a[h]){var l,p,f,m,c,d,u,y=getDefaultCurveSegments(),g=0,v=null;2===t.length&&(t[0]!==i[0]||t[1]!==i[1])&&e(t[0],t[1],i[0],i[1],t[0]+n[0],t[1]+n[1])&&e(t[0],t[1],i[0],i[1],i[0]+o[0],i[1]+o[1])&&(y=2);var b=new r(y);for(f=n.length,l=0;l<y;l+=1){for(u=createSizedArray(f),c=l/(y-1),d=0,p=0;p<f;p+=1)m=bmPow(1-c,3)*t[p]+3*bmPow(1-c,2)*c*(t[p]+n[p])+3*(1-c)*bmPow(c,2)*(i[p]+o[p])+bmPow(c,3)*i[p],u[p]=m,null!==v&&(d+=bmPow(u[p]-v[p],2));g+=d=bmSqrt(d),b.points[l]=new s(d,u),v=u}b.segmentLength=g,a[h]=b}return a[h]});function o(t,e){var i=e.percents,r=e.lengths,s=i.length,a=bmFloor((s-1)*t),n=t*e.addedLength,o=0;if(a===s-1||0===a||n===r[a])return i[a];for(var h=r[a]>n?-1:1,l=!0;l;)if(r[a]<=n&&r[a+1]>n?(o=(n-r[a])/(r[a+1]-r[a]),l=!1):a+=h,a<0||a>=s-1){if(a===s-1)return i[a];l=!1}return i[a]+(i[a+1]-i[a])*o}var h=createTypedArray(\"float32\",8);return{getSegmentsLength:function(t){var e,r=segmentsLengthPool.newElement(),s=t.c,a=t.v,n=t.o,o=t.i,h=t._length,l=r.lengths,p=0;for(e=0;e<h-1;e+=1)l[e]=i(a[e],a[e+1],n[e],o[e+1]),p+=l[e].addedLength;return s&&h&&(l[e]=i(a[e],a[0],n[e],o[0]),p+=l[e].addedLength),r.totalLength=p,r},getNewSegment:function(e,i,r,s,a,n,l){a<0?a=0:a>1&&(a=1);var p,f=o(a,l),m=o(n=n>1?1:n,l),c=e.length,d=1-f,u=1-m,y=d*d*d,g=f*d*d*3,v=f*f*d*3,b=f*f*f,x=d*d*u,P=f*d*u+d*f*u+d*d*m,E=f*f*u+d*f*m+f*d*m,S=f*f*m,C=d*u*u,_=f*u*u+d*m*u+d*u*m,A=f*m*u+d*m*m+f*u*m,T=f*m*m,M=u*u*u,k=m*u*u+u*m*u+u*u*m,D=m*m*u+u*m*m+m*u*m,F=m*m*m;for(p=0;p<c;p+=1)h[4*p]=t.round(1e3*(y*e[p]+g*r[p]+v*s[p]+b*i[p]))/1e3,h[4*p+1]=t.round(1e3*(x*e[p]+P*r[p]+E*s[p]+S*i[p]))/1e3,h[4*p+2]=t.round(1e3*(C*e[p]+_*r[p]+A*s[p]+T*i[p]))/1e3,h[4*p+3]=t.round(1e3*(M*e[p]+k*r[p]+D*s[p]+F*i[p]))/1e3;return h},getPointInSegment:function(e,i,r,s,a,n){var h=o(a,n),l=1-h;return[t.round(1e3*(l*l*l*e[0]+(h*l*l+l*h*l+l*l*h)*r[0]+(h*h*l+l*h*h+h*l*h)*s[0]+h*h*h*i[0]))/1e3,t.round(1e3*(l*l*l*e[1]+(h*l*l+l*h*l+l*l*h)*r[1]+(h*h*l+l*h*h+h*l*h)*s[1]+h*h*h*i[1]))/1e3]},buildBezierData:n,pointOnLine2D:e,pointOnLine3D:function(i,r,s,a,n,o,h,l,p){if(0===s&&0===o&&0===p)return e(i,r,a,n,h,l);var f,m=t.sqrt(t.pow(a-i,2)+t.pow(n-r,2)+t.pow(o-s,2)),c=t.sqrt(t.pow(h-i,2)+t.pow(l-r,2)+t.pow(p-s,2)),d=t.sqrt(t.pow(h-a,2)+t.pow(l-n,2)+t.pow(p-o,2));return(f=m>c?m>d?m-c-d:d-c-m:d>c?d-c-m:c-m-d)>-1e-4&&f<1e-4}}}var bez=bezFunction(),initFrame=initialDefaultFrame,mathAbs=Math.abs;function interpolateValue(t,e){var i,r=this.offsetTime;\"multidimensional\"===this.propType&&(i=createTypedArray(\"float32\",this.pv.length));for(var s,a,n,o,h,l,p,f,m,c=e.lastIndex,d=c,u=this.keyframes.length-1,y=!0;y;){if(s=this.keyframes[d],a=this.keyframes[d+1],d===u-1&&t>=a.t-r){s.h&&(s=a),c=0;break}if(a.t-r>t){c=d;break}d<u-1?d+=1:(c=0,y=!1)}n=this.keyframesMetadata[d]||{};var g,v=a.t-r,b=s.t-r;if(s.to){n.bezierData||(n.bezierData=bez.buildBezierData(s.s,a.s||s.e,s.to,s.ti));var x=n.bezierData;if(t>=v||t<b){var P=t>=v?x.points.length-1:0;for(h=x.points[P].point.length,o=0;o<h;o+=1)i[o]=x.points[P].point[o]}else{n.__fnct?m=n.__fnct:(m=BezierFactory.getBezierEasing(s.o.x,s.o.y,s.i.x,s.i.y,s.n).get,n.__fnct=m),l=m((t-b)/(v-b));var E,S=x.segmentLength*l,C=e.lastFrame<t&&e._lastKeyframeIndex===d?e._lastAddedLength:0;for(f=e.lastFrame<t&&e._lastKeyframeIndex===d?e._lastPoint:0,y=!0,p=x.points.length;y;){if(C+=x.points[f].partialLength,0===S||0===l||f===x.points.length-1){for(h=x.points[f].point.length,o=0;o<h;o+=1)i[o]=x.points[f].point[o];break}if(S>=C&&S<C+x.points[f+1].partialLength){for(E=(S-C)/x.points[f+1].partialLength,h=x.points[f].point.length,o=0;o<h;o+=1)i[o]=x.points[f].point[o]+(x.points[f+1].point[o]-x.points[f].point[o])*E;break}f<p-1?f+=1:y=!1}e._lastPoint=f,e._lastAddedLength=C-x.points[f].partialLength,e._lastKeyframeIndex=d}}else{var _,A,T,M,k;if(u=s.s.length,g=a.s||s.e,this.sh&&1!==s.h)if(t>=v)i[0]=g[0],i[1]=g[1],i[2]=g[2];else if(t<=b)i[0]=s.s[0],i[1]=s.s[1],i[2]=s.s[2];else{quaternionToEuler(i,slerp(createQuaternion(s.s),createQuaternion(g),(t-b)/(v-b)))}else for(d=0;d<u;d+=1)1!==s.h&&(t>=v?l=1:t<b?l=0:(s.o.x.constructor===Array?(n.__fnct||(n.__fnct=[]),n.__fnct[d]?m=n.__fnct[d]:(_=void 0===s.o.x[d]?s.o.x[0]:s.o.x[d],A=void 0===s.o.y[d]?s.o.y[0]:s.o.y[d],T=void 0===s.i.x[d]?s.i.x[0]:s.i.x[d],M=void 0===s.i.y[d]?s.i.y[0]:s.i.y[d],m=BezierFactory.getBezierEasing(_,A,T,M).get,n.__fnct[d]=m)):n.__fnct?m=n.__fnct:(_=s.o.x,A=s.o.y,T=s.i.x,M=s.i.y,m=BezierFactory.getBezierEasing(_,A,T,M).get,s.keyframeMetadata=m),l=m((t-b)/(v-b)))),g=a.s||s.e,k=1===s.h?s.s[d]:s.s[d]+(g[d]-s.s[d])*l,\"multidimensional\"===this.propType?i[d]=k:i=k}return e.lastIndex=c,i}function slerp(t,e,i){var r,s,a,n,o,h=[],l=t[0],p=t[1],f=t[2],m=t[3],c=e[0],d=e[1],u=e[2],y=e[3];return(s=l*c+p*d+f*u+m*y)<0&&(s=-s,c=-c,d=-d,u=-u,y=-y),1-s>1e-6?(r=Math.acos(s),a=Math.sin(r),n=Math.sin((1-i)*r)/a,o=Math.sin(i*r)/a):(n=1-i,o=i),h[0]=n*l+o*c,h[1]=n*p+o*d,h[2]=n*f+o*u,h[3]=n*m+o*y,h}function quaternionToEuler(t,e){var i=e[0],r=e[1],s=e[2],a=e[3],n=Math.atan2(2*r*a-2*i*s,1-2*r*r-2*s*s),o=Math.asin(2*i*r+2*s*a),h=Math.atan2(2*i*a-2*r*s,1-2*i*i-2*s*s);t[0]=n/degToRads,t[1]=o/degToRads,t[2]=h/degToRads}function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,r=t[2]*degToRads,s=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(r/2),o=Math.sin(e/2),h=Math.sin(i/2),l=Math.sin(r/2);return[o*h*n+s*a*l,o*a*n+s*h*l,s*h*n-o*a*l,s*a*n-o*h*l]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame<e&&t<e))){this._caching.lastFrame>=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var r=this.interpolateValue(t,this._caching);this.pv=r}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if(\"unidimensional\"===this.propType)e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,r=this.v.length;i<r;)e=t[i]*this.mult,mathAbs(this.v[i]-e)>1e-5&&(this.v[i]=e,this._mdf=!0),i+=1}function processEffectsSequence(){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{var t;this.lock=!0,this._mdf=this._isFirstFrame;var e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t<e;t+=1)i=this.effectsSequence[t](i);this.setVValue(i),this._isFirstFrame=!1,this.lock=!1,this.frameId=this.elem.globalData.frameId}}function addEffect(t){this.effectsSequence.push(t),this.container.addDynamicProperty(this)}function ValueProperty(t,e,i,r){this.propType=\"unidimensional\",this.mult=i||1,this.data=e,this.v=i?e.k*i:e.k,this.pv=e.k,this._mdf=!1,this.elem=t,this.container=r,this.comp=t.comp,this.k=!1,this.kf=!1,this.vel=0,this.effectsSequence=[],this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function MultiDimensionalProperty(t,e,i,r){var s;this.propType=\"multidimensional\",this.mult=i||1,this.data=e,this._mdf=!1,this.elem=t,this.container=r,this.comp=t.comp,this.k=!1,this.kf=!1,this.frameId=-1;var a=e.k.length;for(this.v=createTypedArray(\"float32\",a),this.pv=createTypedArray(\"float32\",a),this.vel=createTypedArray(\"float32\",a),s=0;s<a;s+=1)this.v[s]=e.k[s]*this.mult,this.pv[s]=e.k[s];this._isFirstFrame=!0,this.effectsSequence=[],this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function KeyframedValueProperty(t,e,i,r){this.propType=\"unidimensional\",this.keyframes=e.k,this.keyframesMetadata=[],this.offsetTime=t.data.st,this.frameId=-1,this._caching={lastFrame:initFrame,lastIndex:0,value:0,_lastKeyframeIndex:-1},this.k=!0,this.kf=!0,this.data=e,this.mult=i||1,this.elem=t,this.container=r,this.comp=t.comp,this.v=initFrame,this.pv=initFrame,this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.addEffect=addEffect}function KeyframedMultidimensionalProperty(t,e,i,r){var s;this.propType=\"multidimensional\";var a,n,o,h,l=e.k.length;for(s=0;s<l-1;s+=1)e.k[s].to&&e.k[s].s&&e.k[s+1]&&e.k[s+1].s&&(a=e.k[s].s,n=e.k[s+1].s,o=e.k[s].to,h=e.k[s].ti,(2===a.length&&(a[0]!==n[0]||a[1]!==n[1])&&bez.pointOnLine2D(a[0],a[1],n[0],n[1],a[0]+o[0],a[1]+o[1])&&bez.pointOnLine2D(a[0],a[1],n[0],n[1],n[0]+h[0],n[1]+h[1])||3===a.length&&(a[0]!==n[0]||a[1]!==n[1]||a[2]!==n[2])&&bez.pointOnLine3D(a[0],a[1],a[2],n[0],n[1],n[2],a[0]+o[0],a[1]+o[1],a[2]+o[2])&&bez.pointOnLine3D(a[0],a[1],a[2],n[0],n[1],n[2],n[0]+h[0],n[1]+h[1],n[2]+h[2]))&&(e.k[s].to=null,e.k[s].ti=null),a[0]===n[0]&&a[1]===n[1]&&0===o[0]&&0===o[1]&&0===h[0]&&0===h[1]&&(2===a.length||a[2]===n[2]&&0===o[2]&&0===h[2])&&(e.k[s].to=null,e.k[s].ti=null));this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.data=e,this.keyframes=e.k,this.keyframesMetadata=[],this.offsetTime=t.data.st,this.k=!0,this.kf=!0,this._isFirstFrame=!0,this.mult=i||1,this.elem=t,this.container=r,this.comp=t.comp,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.frameId=-1;var p=e.k[0].s.length;for(this.v=createTypedArray(\"float32\",p),this.pv=createTypedArray(\"float32\",p),s=0;s<p;s+=1)this.v[s]=initFrame,this.pv[s]=initFrame;this._caching={lastFrame:initFrame,lastIndex:0,value:createTypedArray(\"float32\",p)},this.addEffect=addEffect}var PropertyFactory={getProp:function(t,e,i,r,s){var a;if(e.sid&&(e=t.globalData.slotManager.getProp(e)),e.k.length)if(\"number\"==typeof e.k[0])a=new MultiDimensionalProperty(t,e,r,s);else switch(i){case 0:a=new KeyframedValueProperty(t,e,r,s);break;case 1:a=new KeyframedMultidimensionalProperty(t,e,r,s)}else a=new ValueProperty(t,e,r,s);return a.effectsSequence.length&&s.addDynamicProperty(a),a}};function DynamicPropertyContainer(){}DynamicPropertyContainer.prototype={addDynamicProperty:function(t){-1===this.dynamicProperties.indexOf(t)&&(this.dynamicProperties.push(t),this.container.addDynamicProperty(this),this._isAnimated=!0)},iterateDynamicProperties:function(){var t;this._mdf=!1;var e=this.dynamicProperties.length;for(t=0;t<e;t+=1)this.dynamicProperties[t].getValue(),this.dynamicProperties[t]._mdf&&(this._mdf=!0)},initDynamicPropertyContainer:function(t){this.container=t,this.dynamicProperties=[],this._mdf=!1,this._isAnimated=!1}};var pointPool=poolFactory(8,(function(){return createTypedArray(\"float32\",2)}));function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=createSizedArray(this._maxLength),this.o=createSizedArray(this._maxLength),this.i=createSizedArray(this._maxLength)}ShapePath.prototype.setPathData=function(t,e){this.c=t,this.setLength(e);for(var i=0;i<e;)this.v[i]=pointPool.newElement(),this.o[i]=pointPool.newElement(),this.i[i]=pointPool.newElement(),i+=1},ShapePath.prototype.setLength=function(t){for(;this._maxLength<t;)this.doubleArrayLength();this._length=t},ShapePath.prototype.doubleArrayLength=function(){this.v=this.v.concat(createSizedArray(this._maxLength)),this.i=this.i.concat(createSizedArray(this._maxLength)),this.o=this.o.concat(createSizedArray(this._maxLength)),this._maxLength*=2},ShapePath.prototype.setXYAt=function(t,e,i,r,s){var a;switch(this._length=Math.max(this._length,r+1),this._length>=this._maxLength&&this.doubleArrayLength(),i){case\"v\":a=this.v;break;case\"i\":a=this.i;break;case\"o\":a=this.o;break;default:a=[]}(!a[r]||a[r]&&!s)&&(a[r]=pointPool.newElement()),a[r][0]=t,a[r][1]=e},ShapePath.prototype.setTripleAt=function(t,e,i,r,s,a,n,o){this.setXYAt(t,e,\"v\",n,o),this.setXYAt(i,r,\"o\",n,o),this.setXYAt(s,a,\"i\",n,o)},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,r=this.i,s=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],r[0][0],r[0][1],i[0][0],i[0][1],0,!1),s=1);var a,n=this._length-1,o=this._length;for(a=s;a<o;a+=1)t.setTripleAt(e[n][0],e[n][1],r[n][0],r[n][1],i[n][0],i[n][1],a,!1),n-=1;return t},ShapePath.prototype.length=function(){return this._length};var shapePool=(factory=poolFactory(4,(function(){return new ShapePath}),(function(t){var e,i=t._length;for(e=0;e<i;e+=1)pointPool.release(t.v[e]),pointPool.release(t.i[e]),pointPool.release(t.o[e]),t.v[e]=null,t.i[e]=null,t.o[e]=null;t._length=0,t.c=!1})),factory.clone=function(t){var e,i=factory.newElement(),r=void 0===t._length?t.v.length:t._length;for(i.setLength(r),i.c=t.c,e=0;e<r;e+=1)i.setTripleAt(t.v[e][0],t.v[e][1],t.o[e][0],t.o[e][1],t.i[e][0],t.i[e][1],e);return i},factory),factory;function ShapeCollection(){this._length=0,this._maxLength=4,this.shapes=createSizedArray(this._maxLength)}ShapeCollection.prototype.addShape=function(t){this._length===this._maxLength&&(this.shapes=this.shapes.concat(createSizedArray(this._maxLength)),this._maxLength*=2),this.shapes[this._length]=t,this._length+=1},ShapeCollection.prototype.releaseShapes=function(){var t;for(t=0;t<this._length;t+=1)shapePool.release(this.shapes[t]);this._length=0};var shapeCollectionPool=(ob={newShapeCollection:function(){return _length?pool[_length-=1]:new ShapeCollection},release:function(t){var e,i=t._length;for(e=0;e<i;e+=1)shapePool.release(t.shapes[e]);t._length=0,_length===_maxLength&&(pool=pooling.double(pool),_maxLength*=2),pool[_length]=t,_length+=1}},_length=0,_maxLength=4,pool=createSizedArray(_maxLength),ob),ob,_length,_maxLength,pool,ShapePropertyFactory=function(){var t=-999999;function e(t,e,i){var r,s,a,n,o,h,l,p,f,m=i.lastIndex,c=this.keyframes;if(t<c[0].t-this.offsetTime)r=c[0].s[0],a=!0,m=0;else if(t>=c[c.length-1].t-this.offsetTime)r=c[c.length-1].s?c[c.length-1].s[0]:c[c.length-2].e[0],a=!0;else{for(var d,u,y,g=m,v=c.length-1,b=!0;b&&(d=c[g],!((u=c[g+1]).t-this.offsetTime>t));)g<v-1?g+=1:b=!1;if(y=this.keyframesMetadata[g]||{},m=g,!(a=1===d.h)){if(t>=u.t-this.offsetTime)p=1;else if(t<d.t-this.offsetTime)p=0;else{var x;y.__fnct?x=y.__fnct:(x=BezierFactory.getBezierEasing(d.o.x,d.o.y,d.i.x,d.i.y).get,y.__fnct=x),p=x((t-(d.t-this.offsetTime))/(u.t-this.offsetTime-(d.t-this.offsetTime)))}s=u.s?u.s[0]:d.e[0]}r=d.s[0]}for(h=e._length,l=r.i[0].length,i.lastIndex=m,n=0;n<h;n+=1)for(o=0;o<l;o+=1)f=a?r.i[n][o]:r.i[n][o]+(s.i[n][o]-r.i[n][o])*p,e.i[n][o]=f,f=a?r.o[n][o]:r.o[n][o]+(s.o[n][o]-r.o[n][o])*p,e.o[n][o]=f,f=a?r.v[n][o]:r.v[n][o]+(s.v[n][o]-r.v[n][o])*p,e.v[n][o]=f}function i(){var e=this.comp.renderedFrame-this.offsetTime,i=this.keyframes[0].t-this.offsetTime,r=this.keyframes[this.keyframes.length-1].t-this.offsetTime,s=this._caching.lastFrame;return s!==t&&(s<i&&e<i||s>r&&e>r)||(this._caching.lastIndex=s<e?this._caching.lastIndex:0,this.interpolateShape(e,this.pv,this._caching)),this._caching.lastFrame=e,this.pv}function r(){this.paths=this.localShapeCollection}function s(t){(function(t,e){if(t._length!==e._length||t.c!==e.c)return!1;var i,r=t._length;for(i=0;i<r;i+=1)if(t.v[i][0]!==e.v[i][0]||t.v[i][1]!==e.v[i][1]||t.o[i][0]!==e.o[i][0]||t.o[i][1]!==e.o[i][1]||t.i[i][0]!==e.i[i][0]||t.i[i][1]!==e.i[i][1])return!1;return!0})(this.v,t)||(this.v=shapePool.clone(t),this.localShapeCollection.releaseShapes(),this.localShapeCollection.addShape(this.v),this._mdf=!0,this.paths=this.localShapeCollection)}function a(){if(this.elem.globalData.frameId!==this.frameId)if(this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{var t,e;this.lock=!0,this._mdf=!1,t=this.kf?this.pv:this.data.ks?this.data.ks.k:this.data.pt.k;var i=this.effectsSequence.length;for(e=0;e<i;e+=1)t=this.effectsSequence[e](t);this.setVValue(t),this.lock=!1,this.frameId=this.elem.globalData.frameId}else this._mdf=!1}function n(t,e,i){this.propType=\"shape\",this.comp=t.comp,this.container=t,this.elem=t,this.data=e,this.k=!1,this.kf=!1,this._mdf=!1;var s=3===i?e.pt.k:e.ks.k;this.v=shapePool.clone(s),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.reset=r,this.effectsSequence=[]}function o(t){this.effectsSequence.push(t),this.container.addDynamicProperty(this)}function h(e,s,a){this.propType=\"shape\",this.comp=e.comp,this.elem=e,this.container=e,this.offsetTime=e.data.st,this.keyframes=3===a?s.pt.k:s.ks.k,this.keyframesMetadata=[],this.k=!0,this.kf=!0;var n=this.keyframes[0].s[0].i.length;this.v=shapePool.newElement(),this.v.setPathData(this.keyframes[0].s[0].c,n),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.lastFrame=t,this.reset=r,this._caching={lastFrame:t,lastIndex:0},this.effectsSequence=[i.bind(this)]}n.prototype.interpolateShape=e,n.prototype.getValue=a,n.prototype.setVValue=s,n.prototype.addEffect=o,h.prototype.getValue=a,h.prototype.interpolateShape=e,h.prototype.setVValue=s,h.prototype.addEffect=o;var l=function(){var t=roundCorner;function e(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,4),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.localShapeCollection.addShape(this.v),this.d=e.d,this.elem=t,this.comp=t.comp,this.frameId=-1,this.initDynamicPropertyContainer(t),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.s=PropertyFactory.getProp(t,e.s,1,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertEllToPath())}return e.prototype={reset:r,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertEllToPath())},convertEllToPath:function(){var e=this.p.v[0],i=this.p.v[1],r=this.s.v[0]/2,s=this.s.v[1]/2,a=3!==this.d,n=this.v;n.v[0][0]=e,n.v[0][1]=i-s,n.v[1][0]=a?e+r:e-r,n.v[1][1]=i,n.v[2][0]=e,n.v[2][1]=i+s,n.v[3][0]=a?e-r:e+r,n.v[3][1]=i,n.i[0][0]=a?e-r*t:e+r*t,n.i[0][1]=i-s,n.i[1][0]=a?e+r:e-r,n.i[1][1]=i-s*t,n.i[2][0]=a?e+r*t:e-r*t,n.i[2][1]=i+s,n.i[3][0]=a?e-r:e+r,n.i[3][1]=i+s*t,n.o[0][0]=a?e+r*t:e-r*t,n.o[0][1]=i-s,n.o[1][0]=a?e+r:e-r,n.o[1][1]=i+s*t,n.o[2][0]=a?e-r*t:e+r*t,n.o[2][1]=i+s,n.o[3][0]=a?e-r:e+r,n.o[3][1]=i-s*t}},extendPrototype([DynamicPropertyContainer],e),e}(),p=function(){function t(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,0),this.elem=t,this.comp=t.comp,this.data=e,this.frameId=-1,this.d=e.d,this.initDynamicPropertyContainer(t),1===e.sy?(this.ir=PropertyFactory.getProp(t,e.ir,0,0,this),this.is=PropertyFactory.getProp(t,e.is,0,.01,this),this.convertToPath=this.convertStarToPath):this.convertToPath=this.convertPolygonToPath,this.pt=PropertyFactory.getProp(t,e.pt,0,0,this),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.r=PropertyFactory.getProp(t,e.r,0,degToRads,this),this.or=PropertyFactory.getProp(t,e.or,0,0,this),this.os=PropertyFactory.getProp(t,e.os,0,.01,this),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertToPath())}return t.prototype={reset:r,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertToPath())},convertStarToPath:function(){var t,e,i,r,s=2*Math.floor(this.pt.v),a=2*Math.PI/s,n=!0,o=this.or.v,h=this.ir.v,l=this.os.v,p=this.is.v,f=2*Math.PI*o/(2*s),m=2*Math.PI*h/(2*s),c=-Math.PI/2;c+=this.r.v;var d=3===this.data.d?-1:1;for(this.v._length=0,t=0;t<s;t+=1){i=n?l:p,r=n?f:m;var u=(e=n?o:h)*Math.cos(c),y=e*Math.sin(c),g=0===u&&0===y?0:y/Math.sqrt(u*u+y*y),v=0===u&&0===y?0:-u/Math.sqrt(u*u+y*y);u+=+this.p.v[0],y+=+this.p.v[1],this.v.setTripleAt(u,y,u-g*r*i*d,y-v*r*i*d,u+g*r*i*d,y+v*r*i*d,t,!0),n=!n,c+=a*d}},convertPolygonToPath:function(){var t,e=Math.floor(this.pt.v),i=2*Math.PI/e,r=this.or.v,s=this.os.v,a=2*Math.PI*r/(4*e),n=.5*-Math.PI,o=3===this.data.d?-1:1;for(n+=this.r.v,this.v._length=0,t=0;t<e;t+=1){var h=r*Math.cos(n),l=r*Math.sin(n),p=0===h&&0===l?0:l/Math.sqrt(h*h+l*l),f=0===h&&0===l?0:-h/Math.sqrt(h*h+l*l);h+=+this.p.v[0],l+=+this.p.v[1],this.v.setTripleAt(h,l,h-p*a*s*o,l-f*a*s*o,h+p*a*s*o,l+f*a*s*o,t,!0),n+=i*o}this.paths.length=0,this.paths[0]=this.v}},extendPrototype([DynamicPropertyContainer],t),t}(),f=function(){function t(t,e){this.v=shapePool.newElement(),this.v.c=!0,this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.elem=t,this.comp=t.comp,this.frameId=-1,this.d=e.d,this.initDynamicPropertyContainer(t),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.s=PropertyFactory.getProp(t,e.s,1,0,this),this.r=PropertyFactory.getProp(t,e.r,0,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertRectToPath())}return t.prototype={convertRectToPath:function(){var t=this.p.v[0],e=this.p.v[1],i=this.s.v[0]/2,r=this.s.v[1]/2,s=bmMin(i,r,this.r.v),a=s*(1-roundCorner);this.v._length=0,2===this.d||1===this.d?(this.v.setTripleAt(t+i,e-r+s,t+i,e-r+s,t+i,e-r+a,0,!0),this.v.setTripleAt(t+i,e+r-s,t+i,e+r-a,t+i,e+r-s,1,!0),0!==s?(this.v.setTripleAt(t+i-s,e+r,t+i-s,e+r,t+i-a,e+r,2,!0),this.v.setTripleAt(t-i+s,e+r,t-i+a,e+r,t-i+s,e+r,3,!0),this.v.setTripleAt(t-i,e+r-s,t-i,e+r-s,t-i,e+r-a,4,!0),this.v.setTripleAt(t-i,e-r+s,t-i,e-r+a,t-i,e-r+s,5,!0),this.v.setTripleAt(t-i+s,e-r,t-i+s,e-r,t-i+a,e-r,6,!0),this.v.setTripleAt(t+i-s,e-r,t+i-a,e-r,t+i-s,e-r,7,!0)):(this.v.setTripleAt(t-i,e+r,t-i+a,e+r,t-i,e+r,2),this.v.setTripleAt(t-i,e-r,t-i,e-r+a,t-i,e-r,3))):(this.v.setTripleAt(t+i,e-r+s,t+i,e-r+a,t+i,e-r+s,0,!0),0!==s?(this.v.setTripleAt(t+i-s,e-r,t+i-s,e-r,t+i-a,e-r,1,!0),this.v.setTripleAt(t-i+s,e-r,t-i+a,e-r,t-i+s,e-r,2,!0),this.v.setTripleAt(t-i,e-r+s,t-i,e-r+s,t-i,e-r+a,3,!0),this.v.setTripleAt(t-i,e+r-s,t-i,e+r-a,t-i,e+r-s,4,!0),this.v.setTripleAt(t-i+s,e+r,t-i+s,e+r,t-i+a,e+r,5,!0),this.v.setTripleAt(t+i-s,e+r,t+i-a,e+r,t+i-s,e+r,6,!0),this.v.setTripleAt(t+i,e+r-s,t+i,e+r-s,t+i,e+r-a,7,!0)):(this.v.setTripleAt(t-i,e-r,t-i+a,e-r,t-i,e-r,1,!0),this.v.setTripleAt(t-i,e+r,t-i,e+r-a,t-i,e+r,2,!0),this.v.setTripleAt(t+i,e+r,t+i-a,e+r,t+i,e+r,3,!0)))},getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertRectToPath())},reset:r},extendPrototype([DynamicPropertyContainer],t),t}();var m={getShapeProp:function(t,e,i){var r;return 3===i||4===i?r=(3===i?e.pt:e.ks).k.length?new h(t,e,i):new n(t,e,i):5===i?r=new f(t,e):6===i?r=new l(t,e):7===i&&(r=new p(t,e)),r.k&&t.addDynamicProperty(r),r},getConstructorFunction:function(){return n},getKeyframedConstructorFunction:function(){return h}};return m}(),Matrix=function(){var t=Math.cos,e=Math.sin,i=Math.tan,r=Math.round;function s(){return this.props[0]=1,this.props[1]=0,this.props[2]=0,this.props[3]=0,this.props[4]=0,this.props[5]=1,this.props[6]=0,this.props[7]=0,this.props[8]=0,this.props[9]=0,this.props[10]=1,this.props[11]=0,this.props[12]=0,this.props[13]=0,this.props[14]=0,this.props[15]=1,this}function a(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,-s,0,0,s,r,0,0,0,0,1,0,0,0,0,1)}function n(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(1,0,0,0,0,r,-s,0,0,s,r,0,0,0,0,1)}function o(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,0,s,0,0,1,0,0,-s,0,r,0,0,0,0,1)}function h(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,-s,0,0,s,r,0,0,0,0,1,0,0,0,0,1)}function l(t,e){return this._t(1,e,t,1,0,0)}function p(t,e){return this.shear(i(t),i(e))}function f(r,s){var a=t(s),n=e(s);return this._t(a,n,0,0,-n,a,0,0,0,0,1,0,0,0,0,1)._t(1,0,0,0,i(r),1,0,0,0,0,1,0,0,0,0,1)._t(a,-n,0,0,n,a,0,0,0,0,1,0,0,0,0,1)}function m(t,e,i){return i||0===i||(i=1),1===t&&1===e&&1===i?this:this._t(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1)}function c(t,e,i,r,s,a,n,o,h,l,p,f,m,c,d,u){return this.props[0]=t,this.props[1]=e,this.props[2]=i,this.props[3]=r,this.props[4]=s,this.props[5]=a,this.props[6]=n,this.props[7]=o,this.props[8]=h,this.props[9]=l,this.props[10]=p,this.props[11]=f,this.props[12]=m,this.props[13]=c,this.props[14]=d,this.props[15]=u,this}function d(t,e,i){return i=i||0,0!==t||0!==e||0!==i?this._t(1,0,0,0,0,1,0,0,0,0,1,0,t,e,i,1):this}function u(t,e,i,r,s,a,n,o,h,l,p,f,m,c,d,u){var y=this.props;if(1===t&&0===e&&0===i&&0===r&&0===s&&1===a&&0===n&&0===o&&0===h&&0===l&&1===p&&0===f)return y[12]=y[12]*t+y[15]*m,y[13]=y[13]*a+y[15]*c,y[14]=y[14]*p+y[15]*d,y[15]*=u,this._identityCalculated=!1,this;var g=y[0],v=y[1],b=y[2],x=y[3],P=y[4],E=y[5],S=y[6],C=y[7],_=y[8],A=y[9],T=y[10],M=y[11],k=y[12],D=y[13],F=y[14],w=y[15];return y[0]=g*t+v*s+b*h+x*m,y[1]=g*e+v*a+b*l+x*c,y[2]=g*i+v*n+b*p+x*d,y[3]=g*r+v*o+b*f+x*u,y[4]=P*t+E*s+S*h+C*m,y[5]=P*e+E*a+S*l+C*c,y[6]=P*i+E*n+S*p+C*d,y[7]=P*r+E*o+S*f+C*u,y[8]=_*t+A*s+T*h+M*m,y[9]=_*e+A*a+T*l+M*c,y[10]=_*i+A*n+T*p+M*d,y[11]=_*r+A*o+T*f+M*u,y[12]=k*t+D*s+F*h+w*m,y[13]=k*e+D*a+F*l+w*c,y[14]=k*i+D*n+F*p+w*d,y[15]=k*r+D*o+F*f+w*u,this._identityCalculated=!1,this}function y(t){var e=t.props;return this.transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}function g(){return this._identityCalculated||(this._identity=!(1!==this.props[0]||0!==this.props[1]||0!==this.props[2]||0!==this.props[3]||0!==this.props[4]||1!==this.props[5]||0!==this.props[6]||0!==this.props[7]||0!==this.props[8]||0!==this.props[9]||1!==this.props[10]||0!==this.props[11]||0!==this.props[12]||0!==this.props[13]||0!==this.props[14]||1!==this.props[15]),this._identityCalculated=!0),this._identity}function v(t){for(var e=0;e<16;){if(t.props[e]!==this.props[e])return!1;e+=1}return!0}function b(t){var e;for(e=0;e<16;e+=1)t.props[e]=this.props[e];return t}function x(t){var e;for(e=0;e<16;e+=1)this.props[e]=t[e]}function P(t,e,i){return{x:t*this.props[0]+e*this.props[4]+i*this.props[8]+this.props[12],y:t*this.props[1]+e*this.props[5]+i*this.props[9]+this.props[13],z:t*this.props[2]+e*this.props[6]+i*this.props[10]+this.props[14]}}function E(t,e,i){return t*this.props[0]+e*this.props[4]+i*this.props[8]+this.props[12]}function S(t,e,i){return t*this.props[1]+e*this.props[5]+i*this.props[9]+this.props[13]}function C(t,e,i){return t*this.props[2]+e*this.props[6]+i*this.props[10]+this.props[14]}function _(){var t=this.props[0]*this.props[5]-this.props[1]*this.props[4],e=this.props[5]/t,i=-this.props[1]/t,r=-this.props[4]/t,s=this.props[0]/t,a=(this.props[4]*this.props[13]-this.props[5]*this.props[12])/t,n=-(this.props[0]*this.props[13]-this.props[1]*this.props[12])/t,o=new Matrix;return o.props[0]=e,o.props[1]=i,o.props[4]=r,o.props[5]=s,o.props[12]=a,o.props[13]=n,o}function A(t){return this.getInverseMatrix().applyToPointArray(t[0],t[1],t[2]||0)}function T(t){var e,i=t.length,r=[];for(e=0;e<i;e+=1)r[e]=A(t[e]);return r}function M(t,e,i){var r=createTypedArray(\"float32\",6);if(this.isIdentity())r[0]=t[0],r[1]=t[1],r[2]=e[0],r[3]=e[1],r[4]=i[0],r[5]=i[1];else{var s=this.props[0],a=this.props[1],n=this.props[4],o=this.props[5],h=this.props[12],l=this.props[13];r[0]=t[0]*s+t[1]*n+h,r[1]=t[0]*a+t[1]*o+l,r[2]=e[0]*s+e[1]*n+h,r[3]=e[0]*a+e[1]*o+l,r[4]=i[0]*s+i[1]*n+h,r[5]=i[0]*a+i[1]*o+l}return r}function k(t,e,i){return this.isIdentity()?[t,e,i]:[t*this.props[0]+e*this.props[4]+i*this.props[8]+this.props[12],t*this.props[1]+e*this.props[5]+i*this.props[9]+this.props[13],t*this.props[2]+e*this.props[6]+i*this.props[10]+this.props[14]]}function D(t,e){if(this.isIdentity())return t+\",\"+e;var i=this.props;return Math.round(100*(t*i[0]+e*i[4]+i[12]))/100+\",\"+Math.round(100*(t*i[1]+e*i[5]+i[13]))/100}function F(){for(var t=0,e=this.props,i=\"matrix3d(\";t<16;)i+=r(1e4*e[t])/1e4,i+=15===t?\")\":\",\",t+=1;return i}function w(t){return t<1e-6&&t>0||t>-1e-6&&t<0?r(1e4*t)/1e4:t}function I(){var t=this.props;return\"matrix(\"+w(t[0])+\",\"+w(t[1])+\",\"+w(t[4])+\",\"+w(t[5])+\",\"+w(t[12])+\",\"+w(t[13])+\")\"}return function(){this.reset=s,this.rotate=a,this.rotateX=n,this.rotateY=o,this.rotateZ=h,this.skew=p,this.skewFromAxis=f,this.shear=l,this.scale=m,this.setTransform=c,this.translate=d,this.transform=u,this.multiply=y,this.applyToPoint=P,this.applyToX=E,this.applyToY=S,this.applyToZ=C,this.applyToPointArray=k,this.applyToTriplePoints=M,this.applyToPointStringified=D,this.toCSS=F,this.to2dCSS=I,this.clone=b,this.cloneFromProps=x,this.equals=v,this.inversePoints=T,this.inversePoint=A,this.getInverseMatrix=_,this._t=this.transform,this.isIdentity=g,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray(\"float32\",16),this.reset()}}();function _typeof$3(t){return _typeof$3=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$3(t)}var lottie={},standalone=\"__[STANDALONE]__\",animationData=\"__[ANIMATIONDATA]__\",renderer=\"\";function setLocation(t){setLocationHref(t)}function searchAnimations(){!0===standalone?animationManager.searchAnimations(animationData,standalone,renderer):animationManager.searchAnimations()}function setSubframeRendering(t){setSubframeEnabled(t)}function setPrefix(t){setIdPrefix(t)}function loadAnimation(t){return!0===standalone&&(t.animationData=JSON.parse(animationData)),animationManager.loadAnimation(t)}function setQuality(t){if(\"string\"==typeof t)switch(t){case\"high\":setDefaultCurveSegments(200);break;default:case\"medium\":setDefaultCurveSegments(50);break;case\"low\":setDefaultCurveSegments(10)}else!isNaN(t)&&t>1&&setDefaultCurveSegments(t);getDefaultCurveSegments()>=50?roundValues(!1):roundValues(!0)}function inBrowser(){return\"undefined\"!=typeof navigator}function installPlugin(t,e){\"expressions\"===t&&setExpressionsPlugin(e)}function getFactory(t){switch(t){case\"propertyFactory\":return PropertyFactory;case\"shapePropertyFactory\":return ShapePropertyFactory;case\"matrix\":return Matrix;default:return null}}function checkReady(){\"complete\"===document.readyState&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(t){for(var e=queryString.split(\"&\"),i=0;i<e.length;i+=1){var r=e[i].split(\"=\");if(decodeURIComponent(r[0])==t)return decodeURIComponent(r[1])}return null}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version=\"5.12.1\";var queryString=\"\";if(standalone){var scripts=document.getElementsByTagName(\"script\"),index=scripts.length-1,myScript=scripts[index]||{src:\"\"};queryString=myScript.src?myScript.src.replace(/^[^\\?]+\\??/,\"\"):\"\",renderer=getQueryVariable(\"renderer\")}var readyStateCheckInterval=setInterval(checkReady,100);try{\"object\"===(\"undefined\"==typeof exports?\"undefined\":_typeof$3(exports))&&\"undefined\"!=typeof module||\"function\"==typeof define&&define.amd||(window.bodymovin=lottie)}catch(t){}var ShapeModifiers=function(){var t={},e={};return t.registerModifier=function(t,i){e[t]||(e[t]=i)},t.getModifier=function(t,i,r){return new e[t](i,r)},t}();function ShapeModifier(){}function TrimModifier(){}function PuckerAndBloatModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated()}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0)},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties())},extendPrototype([DynamicPropertyContainer],ShapeModifier),extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[]},TrimModifier.prototype.calculateShapeEdges=function(t,e,i,r,s){var a=[];e<=1?a.push({s:t,e:e}):t>=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n,o,h=[],l=a.length;for(n=0;n<l;n+=1){var p,f;if(!((o=a[n]).e*s<r||o.s*s>r+i))p=o.s*s<=r?0:(o.s*s-r)/i,f=o.e*s>=r+i?1:(o.e*s-r)/i,h.push([p,f])}return h.length||h.push([0,0]),h},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;e<i;e+=1)segmentsLengthPool.release(t[e]);return t.length=0,t},TrimModifier.prototype.processShapes=function(t){var e,i,r,s;if(this._mdf||t){var a=this.o.v%360/360;if(a<0&&(a+=1),(e=this.s.v>1?1+a:this.s.v<0?0+a:this.s.v+a)>(i=this.e.v>1?1+a:this.e.v<0?0+a:this.e.v+a)){var n=e;e=i,i=n}e=1e-4*Math.round(1e4*e),i=1e-4*Math.round(1e4*i),this.sValue=e,this.eValue=i}else e=this.sValue,i=this.eValue;var o,h,l,p,f,m=this.shapes.length,c=0;if(i===e)for(s=0;s<m;s+=1)this.shapes[s].localShapeCollection.releaseShapes(),this.shapes[s].shape._mdf=!0,this.shapes[s].shape.paths=this.shapes[s].localShapeCollection,this._mdf&&(this.shapes[s].pathsData.length=0);else if(1===i&&0===e||0===i&&1===e){if(this._mdf)for(s=0;s<m;s+=1)this.shapes[s].pathsData.length=0,this.shapes[s].shape._mdf=!0}else{var d,u,y=[];for(s=0;s<m;s+=1)if((d=this.shapes[s]).shape._mdf||this._mdf||t||2===this.m){if(h=(r=d.shape.paths)._length,f=0,!d.shape._mdf&&d.pathsData.length)f=d.totalShapeLength;else{for(l=this.releasePathsData(d.pathsData),o=0;o<h;o+=1)p=bez.getSegmentsLength(r.shapes[o]),l.push(p),f+=p.totalLength;d.totalShapeLength=f,d.pathsData=l}c+=f,d.shape._mdf=!0}else d.shape.paths=d.localShapeCollection;var g,v=e,b=i,x=0;for(s=m-1;s>=0;s-=1)if((d=this.shapes[s]).shape._mdf){for((u=d.localShapeCollection).releaseShapes(),2===this.m&&m>1?(g=this.calculateShapeEdges(e,i,d.totalShapeLength,x,c),x+=d.totalShapeLength):g=[[v,b]],h=g.length,o=0;o<h;o+=1){v=g[o][0],b=g[o][1],y.length=0,b<=1?y.push({s:d.totalShapeLength*v,e:d.totalShapeLength*b}):v>=1?y.push({s:d.totalShapeLength*(v-1),e:d.totalShapeLength*(b-1)}):(y.push({s:d.totalShapeLength*v,e:d.totalShapeLength}),y.push({s:0,e:d.totalShapeLength*(b-1)}));var P=this.addShapes(d,y[0]);if(y[0].s!==y[0].e){if(y.length>1)if(d.shape.paths.shapes[d.shape.paths._length-1].c){var E=P.pop();this.addPaths(P,u),P=this.addShapes(d,y[1],E)}else this.addPaths(P,u),P=this.addShapes(d,y[1]);this.addPaths(P,u)}}d.shape.paths=u}}},TrimModifier.prototype.addPaths=function(t,e){var i,r=t.length;for(i=0;i<r;i+=1)e.addShape(t[i])},TrimModifier.prototype.addSegment=function(t,e,i,r,s,a,n){s.setXYAt(e[0],e[1],\"o\",a),s.setXYAt(i[0],i[1],\"i\",a+1),n&&s.setXYAt(t[0],t[1],\"v\",a),s.setXYAt(r[0],r[1],\"v\",a+1)},TrimModifier.prototype.addSegmentFromArray=function(t,e,i,r){e.setXYAt(t[1],t[5],\"o\",i),e.setXYAt(t[2],t[6],\"i\",i+1),r&&e.setXYAt(t[0],t[4],\"v\",i),e.setXYAt(t[3],t[7],\"v\",i+1)},TrimModifier.prototype.addShapes=function(t,e,i){var r,s,a,n,o,h,l,p,f=t.pathsData,m=t.shape.paths.shapes,c=t.shape.paths._length,d=0,u=[],y=!0;for(i?(o=i._length,p=i._length):(i=shapePool.newElement(),o=0,p=0),u.push(i),r=0;r<c;r+=1){for(h=f[r].lengths,i.c=m[r].c,a=m[r].c?h.length:h.length+1,s=1;s<a;s+=1)if(d+(n=h[s-1]).addedLength<e.s)d+=n.addedLength,i.c=!1;else{if(d>e.e){i.c=!1;break}e.s<=d&&e.e>=d+n.addedLength?(this.addSegment(m[r].v[s-1],m[r].o[s-1],m[r].i[s],m[r].v[s],i,o,y),y=!1):(l=bez.getNewSegment(m[r].v[s-1],m[r].v[s],m[r].o[s-1],m[r].i[s],(e.s-d)/n.addedLength,(e.e-d)/n.addedLength,h[s-1]),this.addSegmentFromArray(l,i,o,y),y=!1,i.c=!1),d+=n.addedLength,o+=1}if(m[r].c&&h.length){if(n=h[s-1],d<=e.e){var g=h[s-1].addedLength;e.s<=d&&e.e>=d+g?(this.addSegment(m[r].v[s-1],m[r].o[s-1],m[r].i[0],m[r].v[0],i,o,y),y=!1):(l=bez.getNewSegment(m[r].v[s-1],m[r].v[0],m[r].o[s-1],m[r].i[0],(e.s-d)/g,(e.e-d)/g,h[s-1]),this.addSegmentFromArray(l,i,o,y),y=!1,i.c=!1)}else i.c=!1;d+=n.addedLength,o+=1}if(i._length&&(i.setXYAt(i.v[p][0],i.v[p][1],\"i\",p),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],\"o\",i._length-1)),d>e.e)break;r<c-1&&(i=shapePool.newElement(),y=!0,u.push(i),o=0)}return u},extendPrototype([ShapeModifier],PuckerAndBloatModifier),PuckerAndBloatModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this._isAnimated=!!this.amount.effectsSequence.length},PuckerAndBloatModifier.prototype.processPath=function(t,e){var i=e/100,r=[0,0],s=t._length,a=0;for(a=0;a<s;a+=1)r[0]+=t.v[a][0],r[1]+=t.v[a][1];r[0]/=s,r[1]/=s;var n,o,h,l,p,f,m=shapePool.newElement();for(m.c=t.c,a=0;a<s;a+=1)n=t.v[a][0]+(r[0]-t.v[a][0])*i,o=t.v[a][1]+(r[1]-t.v[a][1])*i,h=t.o[a][0]+(r[0]-t.o[a][0])*-i,l=t.o[a][1]+(r[1]-t.o[a][1])*-i,p=t.i[a][0]+(r[0]-t.i[a][0])*-i,f=t.i[a][1]+(r[1]-t.i[a][1])*-i,m.setTripleAt(n,o,h,l,p,f,a);return m},PuckerAndBloatModifier.prototype.processShapes=function(t){var e,i,r,s,a,n,o=this.shapes.length,h=this.amount.v;if(0!==h)for(i=0;i<o;i+=1){if(n=(a=this.shapes[i]).localShapeCollection,a.shape._mdf||this._mdf||t)for(n.releaseShapes(),a.shape._mdf=!0,e=a.shape.paths.shapes,s=a.shape.paths._length,r=0;r<s;r+=1)n.addShape(this.processPath(e[r],h));a.shape.paths=a.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)};var TransformPropertyFactory=function(){var t=[0,0];function e(t,e,i){if(this.elem=t,this.frameId=-1,this.propType=\"transform\",this.data=e,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(i||t),e.p&&e.p.s?(this.px=PropertyFactory.getProp(t,e.p.x,0,0,this),this.py=PropertyFactory.getProp(t,e.p.y,0,0,this),e.p.z&&(this.pz=PropertyFactory.getProp(t,e.p.z,0,0,this))):this.p=PropertyFactory.getProp(t,e.p||{k:[0,0,0]},1,0,this),e.rx){if(this.rx=PropertyFactory.getProp(t,e.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(t,e.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(t,e.rz,0,degToRads,this),e.or.k[0].ti){var r,s=e.or.k.length;for(r=0;r<s;r+=1)e.or.k[r].to=null,e.or.k[r].ti=null}this.or=PropertyFactory.getProp(t,e.or,1,degToRads,this),this.or.sh=!0}else this.r=PropertyFactory.getProp(t,e.r||{k:0},0,degToRads,this);e.sk&&(this.sk=PropertyFactory.getProp(t,e.sk,0,degToRads,this),this.sa=PropertyFactory.getProp(t,e.sa,0,degToRads,this)),this.a=PropertyFactory.getProp(t,e.a||{k:[0,0,0]},1,0,this),this.s=PropertyFactory.getProp(t,e.s||{k:[100,100,100]},1,.01,this),e.o?this.o=PropertyFactory.getProp(t,e.o,0,.01,t):this.o={_mdf:!1,v:1},this._isDirty=!0,this.dynamicProperties.length||this.getValue(!0)}return e.prototype={applyToMatrix:function(t){var e=this._mdf;this.iterateDynamicProperties(),this._mdf=this._mdf||e,this.a&&t.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.s&&t.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&t.skewFromAxis(-this.sk.v,this.sa.v),this.r?t.rotate(-this.r.v):t.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.data.p.s?this.data.p.z?t.translate(this.px.v,this.py.v,-this.pz.v):t.translate(this.px.v,this.py.v,0):t.translate(this.p.v[0],this.p.v[1],-this.p.v[2])},getValue:function(e){if(this.elem.globalData.frameId!==this.frameId){if(this._isDirty&&(this.precalculateMatrix(),this._isDirty=!1),this.iterateDynamicProperties(),this._mdf||e){var i;if(this.v.cloneFromProps(this.pre.props),this.appliedTransformations<1&&this.v.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations<2&&this.v.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&this.appliedTransformations<3&&this.v.skewFromAxis(-this.sk.v,this.sa.v),this.r&&this.appliedTransformations<4?this.v.rotate(-this.r.v):!this.r&&this.appliedTransformations<4&&this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.autoOriented){var r,s;if(i=this.elem.globalData.frameRate,this.p&&this.p.keyframes&&this.p.getValueAtTime)this.p._caching.lastFrame+this.p.offsetTime<=this.p.keyframes[0].t?(r=this.p.getValueAtTime((this.p.keyframes[0].t+.01)/i,0),s=this.p.getValueAtTime(this.p.keyframes[0].t/i,0)):this.p._caching.lastFrame+this.p.offsetTime>=this.p.keyframes[this.p.keyframes.length-1].t?(r=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/i,0),s=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/i,0)):(r=this.p.pv,s=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/i,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){r=[],s=[];var a=this.px,n=this.py;a._caching.lastFrame+a.offsetTime<=a.keyframes[0].t?(r[0]=a.getValueAtTime((a.keyframes[0].t+.01)/i,0),r[1]=n.getValueAtTime((n.keyframes[0].t+.01)/i,0),s[0]=a.getValueAtTime(a.keyframes[0].t/i,0),s[1]=n.getValueAtTime(n.keyframes[0].t/i,0)):a._caching.lastFrame+a.offsetTime>=a.keyframes[a.keyframes.length-1].t?(r[0]=a.getValueAtTime(a.keyframes[a.keyframes.length-1].t/i,0),r[1]=n.getValueAtTime(n.keyframes[n.keyframes.length-1].t/i,0),s[0]=a.getValueAtTime((a.keyframes[a.keyframes.length-1].t-.01)/i,0),s[1]=n.getValueAtTime((n.keyframes[n.keyframes.length-1].t-.01)/i,0)):(r=[a.pv,n.pv],s[0]=a.getValueAtTime((a._caching.lastFrame+a.offsetTime-.01)/i,a.offsetTime),s[1]=n.getValueAtTime((n._caching.lastFrame+n.offsetTime-.01)/i,n.offsetTime))}else r=s=t;this.v.rotate(-Math.atan2(r[1]-s[1],r[0]-s[0]))}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}},precalculateMatrix:function(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length&&(this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1,!this.s.effectsSequence.length)){if(this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2,this.sk){if(this.sk.effectsSequence.length||this.sa.effectsSequence.length)return;this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3}this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):this.rz.effectsSequence.length||this.ry.effectsSequence.length||this.rx.effectsSequence.length||this.or.effectsSequence.length||(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}},autoOrient:function(){}},extendPrototype([DynamicPropertyContainer],e),e.prototype.addDynamicProperty=function(t){this._addDynamicProperty(t),this.elem.addDynamicProperty(t),this._isDirty=!0},e.prototype._addDynamicProperty=DynamicPropertyContainer.prototype.addDynamicProperty,{getTransformProperty:function(t,i,r){return new e(t,i,r)}}}();function RepeaterModifier(){}function RoundCornersModifier(){}function floatEqual(t,e){return 1e5*Math.abs(t-e)<=Math.min(Math.abs(t),Math.abs(e))}function floatZero(t){return Math.abs(t)<=1e-5}function lerp(t,e,i){return t*(1-i)+e*i}function lerpPoint(t,e,i){return[lerp(t[0],e[0],i),lerp(t[1],e[1],i)]}function quadRoots(t,e,i){if(0===t)return[];var r=e*e-4*t*i;if(r<0)return[];var s=-e/(2*t);if(0===r)return[s];var a=Math.sqrt(r)/(2*t);return[s-a,s+a]}function polynomialCoefficients(t,e,i,r){return[3*e-t-3*i+r,3*t-6*e+3*i,-3*t+3*e,t]}function singlePoint(t){return new PolynomialBezier(t,t,t,t,!1)}function PolynomialBezier(t,e,i,r,s){s&&pointEqual(t,e)&&(e=lerpPoint(t,r,1/3)),s&&pointEqual(i,r)&&(i=lerpPoint(t,r,2/3));var a=polynomialCoefficients(t[0],e[0],i[0],r[0]),n=polynomialCoefficients(t[1],e[1],i[1],r[1]);this.a=[a[0],n[0]],this.b=[a[1],n[1]],this.c=[a[2],n[2]],this.d=[a[3],n[3]],this.points=[t,e,i,r]}function extrema(t,e){var i=t.points[0][e],r=t.points[t.points.length-1][e];if(i>r){var s=r;r=i,i=s}for(var a=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n<a.length;n+=1)if(a[n]>0&&a[n]<1){var o=t.point(a[n])[e];o<i?i=o:o>r&&(r=o)}return{min:i,max:r}}function intersectData(t,e,i){var r=t.boundingBox();return{cx:r.cx,cy:r.cy,width:r.width,height:r.height,bez:t,t:(e+i)/2,t1:e,t2:i}}function splitData(t){var e=t.bez.split(.5);return[intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return 2*Math.abs(t.cx-e.cx)<t.width+e.width&&2*Math.abs(t.cy-e.cy)<t.height+e.height}function intersectsImpl(t,e,i,r,s,a){if(boxIntersect(t,e))if(i>=a||t.width<=r&&t.height<=r&&e.width<=r&&e.height<=r)s.push([t.t,e.t]);else{var n=splitData(t),o=splitData(e);intersectsImpl(n[0],o[0],i+1,r,s,a),intersectsImpl(n[0],o[1],i+1,r,s,a),intersectsImpl(n[1],o[0],i+1,r,s,a),intersectsImpl(n[1],o[1],i+1,r,s,a)}}function crossProduct(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,i,r){var s=[t[0],t[1],1],a=[e[0],e[1],1],n=[i[0],i[1],1],o=[r[0],r[1],1],h=crossProduct(crossProduct(s,a),crossProduct(n,o));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,i){return[t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}function setPoint(t,e,i,r,s,a,n){var o=i-Math.PI/2,h=i+Math.PI/2,l=e[0]+Math.cos(i)*r*s,p=e[1]-Math.sin(i)*r*s;t.setTripleAt(l,p,l+Math.cos(o)*a,p-Math.sin(o)*a,l+Math.cos(h)*n,p-Math.sin(h)*n,t.length())}function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],r=.5*-Math.PI;return[Math.cos(r)*i[0]-Math.sin(r)*i[1],Math.sin(r)*i[0]+Math.cos(r)*i[1]]}function getProjectingAngle(t,e){var i=0===e?t.length()-1:e-1,r=(e+1)%t.length(),s=getPerpendicularVector(t.v[i],t.v[r]);return Math.atan2(0,1)-Math.atan2(s[1],s[0])}function zigZagCorner(t,e,i,r,s,a,n){var o=getProjectingAngle(e,i),h=e.v[i%e._length],l=e.v[0===i?e._length-1:i-1],p=e.v[(i+1)%e._length],f=2===a?Math.sqrt(Math.pow(h[0]-l[0],2)+Math.pow(h[1]-l[1],2)):0,m=2===a?Math.sqrt(Math.pow(h[0]-p[0],2)+Math.pow(h[1]-p[1],2)):0;setPoint(t,e.v[i%e._length],o,n,r,m/(2*(s+1)),f/(2*(s+1)),a)}function zigZagSegment(t,e,i,r,s,a){for(var n=0;n<r;n+=1){var o=(n+1)/(r+1),h=2===s?Math.sqrt(Math.pow(e.points[3][0]-e.points[0][0],2)+Math.pow(e.points[3][1]-e.points[0][1],2)):0,l=e.normalAngle(o);setPoint(t,e.point(o),l,a,i,h/(2*(r+1)),h/(2*(r+1)),s),a=-a}return a}function linearOffset(t,e,i){var r=Math.atan2(e[0]-t[0],e[1]-t[1]);return[polarOffset(t,r,i),polarOffset(e,r,i)]}function offsetSegment(t,e){var i,r,s,a,n,o,h;i=(h=linearOffset(t.points[0],t.points[1],e))[0],r=h[1],s=(h=linearOffset(t.points[1],t.points[2],e))[0],a=h[1],n=(h=linearOffset(t.points[2],t.points[3],e))[0],o=h[1];var l=lineIntersection(i,r,s,a);null===l&&(l=r);var p=lineIntersection(n,o,s,a);return null===p&&(p=n),new PolynomialBezier(i,l,p,o)}function joinLines(t,e,i,r,s){var a=e.points[3],n=i.points[0];if(3===r)return a;if(pointEqual(a,n))return a;if(2===r){var o=-e.tangentAngle(1),h=-i.tangentAngle(0)+Math.PI,l=lineIntersection(a,polarOffset(a,o+Math.PI/2,100),n,polarOffset(n,o+Math.PI/2,100)),p=l?pointDistance(l,a):pointDistance(a,n)/2,f=polarOffset(a,o,2*p*roundCorner);return t.setXYAt(f[0],f[1],\"o\",t.length()-1),f=polarOffset(n,h,2*p*roundCorner),t.setTripleAt(n[0],n[1],n[0],n[1],f[0],f[1],t.length()),n}var m=lineIntersection(pointEqual(a,e.points[2])?e.points[0]:e.points[2],a,n,pointEqual(n,i.points[1])?i.points[3]:i.points[1]);return m&&pointDistance(m,a)<s?(t.setTripleAt(m[0],m[1],m[0],m[1],m[0],m[1],t.length()),m):a}function getIntersection(t,e){var i=t.intersections(e);return i.length&&floatEqual(i[0][0],1)&&i.shift(),i.length?i[0]:null}function pruneSegmentIntersection(t,e){var i=t.slice(),r=e.slice(),s=getIntersection(t[t.length-1],e[0]);return s&&(i[t.length-1]=t[t.length-1].split(s[0])[0],r[0]=e[0].split(s[1])[1]),t.length>1&&e.length>1&&(s=getIntersection(t[0],e[e.length-1]))?[[t[0].split(s[0])[0]],[e[e.length-1].split(s[1])[1]]]:[i,r]}function pruneIntersections(t){for(var e,i=1;i<t.length;i+=1)e=pruneSegmentIntersection(t[i-1],t[i]),t[i-1]=e[0],t[i]=e[1];return t.length>1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var i,r,s,a,n=t.inflectionPoints();if(0===n.length)return[offsetSegment(t,e)];if(1===n.length||floatEqual(n[1],1))return i=(s=t.split(n[0]))[0],r=s[1],[offsetSegment(i,e),offsetSegment(r,e)];i=(s=t.split(n[0]))[0];var o=(n[1]-n[0])/(1-n[0]);return a=(s=s[1].split(o))[0],r=s[1],[offsetSegment(i,e),offsetSegment(a,e),offsetSegment(r,e)]}function OffsetPathModifier(){}function getFontProperties(t){for(var e=t.fStyle?t.fStyle.split(\" \"):[],i=\"normal\",r=\"normal\",s=e.length,a=0;a<s;a+=1)switch(e[a].toLowerCase()){case\"italic\":r=\"italic\";break;case\"bold\":i=\"700\";break;case\"black\":i=\"900\";break;case\"medium\":i=\"500\";break;case\"regular\":case\"normal\":i=\"400\";break;case\"light\":case\"thin\":i=\"200\"}return{style:r,weight:t.fWeight||i}}extendPrototype([ShapeModifier],RepeaterModifier),RepeaterModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.c=PropertyFactory.getProp(t,e.c,0,null,this),this.o=PropertyFactory.getProp(t,e.o,0,null,this),this.tr=TransformPropertyFactory.getTransformProperty(t,e.tr,this),this.so=PropertyFactory.getProp(t,e.tr.so,0,.01,this),this.eo=PropertyFactory.getProp(t,e.tr.eo,0,.01,this),this.data=e,this.dynamicProperties.length||this.getValue(!0),this._isAnimated=!!this.dynamicProperties.length,this.pMatrix=new Matrix,this.rMatrix=new Matrix,this.sMatrix=new Matrix,this.tMatrix=new Matrix,this.matrix=new Matrix},RepeaterModifier.prototype.applyTransforms=function(t,e,i,r,s,a){var n=a?-1:1,o=r.s.v[0]+(1-r.s.v[0])*(1-s),h=r.s.v[1]+(1-r.s.v[1])*(1-s);t.translate(r.p.v[0]*n*s,r.p.v[1]*n*s,r.p.v[2]),e.translate(-r.a.v[0],-r.a.v[1],r.a.v[2]),e.rotate(-r.r.v*n*s),e.translate(r.a.v[0],r.a.v[1],r.a.v[2]),i.translate(-r.a.v[0],-r.a.v[1],r.a.v[2]),i.scale(a?1/o:o,a?1/h:h),i.translate(r.a.v[0],r.a.v[1],r.a.v[2])},RepeaterModifier.prototype.init=function(t,e,i,r){for(this.elem=t,this.arr=e,this.pos=i,this.elemsData=r,this._currentCopies=0,this._elements=[],this._groups=[],this.frameId=-1,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e[i]);i>0;)i-=1,this._elements.unshift(e[i]);this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e<i;e+=1)t[e]._processed=!1,\"gr\"===t[e].ty&&this.resetElements(t[e].it)},RepeaterModifier.prototype.cloneElements=function(t){var e=JSON.parse(JSON.stringify(t));return this.resetElements(e),e},RepeaterModifier.prototype.changeGroupRender=function(t,e){var i,r=t.length;for(i=0;i<r;i+=1)t[i]._render=e,\"gr\"===t[i].ty&&this.changeGroupRender(t[i].it,e)},RepeaterModifier.prototype.processShapes=function(t){var e,i,r,s,a,n=!1;if(this._mdf||t){var o,h=Math.ceil(this.c.v);if(this._groups.length<h){for(;this._groups.length<h;){var l={it:this.cloneElements(this._elements),ty:\"gr\"};l.it.push({a:{a:0,ix:1,k:[0,0]},nm:\"Transform\",o:{a:0,ix:7,k:100},p:{a:0,ix:2,k:[0,0]},r:{a:1,ix:6,k:[{s:0,e:0,t:0},{s:0,e:0,t:1}]},s:{a:0,ix:3,k:[100,100]},sa:{a:0,ix:5,k:0},sk:{a:0,ix:4,k:0},ty:\"tr\"}),this.arr.splice(0,0,l),this._groups.splice(0,0,l),this._currentCopies+=1}this.elem.reloadShapes(),n=!0}for(a=0,r=0;r<=this._groups.length-1;r+=1){if(o=a<h,this._groups[r]._render=o,this.changeGroupRender(this._groups[r].it,o),!o){var p=this.elemsData[r].it,f=p[p.length-1];0!==f.transform.op.v?(f.transform.op._mdf=!0,f.transform.op.v=0):f.transform.op._mdf=!1}a+=1}this._currentCopies=h;var m=this.o.v,c=m%1,d=m>0?Math.floor(m):Math.ceil(m),u=this.pMatrix.props,y=this.rMatrix.props,g=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var v,b,x=0;if(m>0){for(;x<d;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),x+=1;c&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,c,!1),x+=c)}else if(m<0){for(;x>d;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),x-=1;c&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-c,!0),x-=c)}for(r=1===this.data.m?0:this._currentCopies-1,s=1===this.data.m?1:-1,a=this._currentCopies;a;){if(b=(i=(e=this.elemsData[r].it)[e.length-1].transform.mProps.v.props).length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=1===this._currentCopies?this.so.v:this.so.v+(this.eo.v-this.so.v)*(r/(this._currentCopies-1)),0!==x){for((0!==r&&1===s||r!==this._currentCopies-1&&-1===s)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],y[8],y[9],y[10],y[11],y[12],y[13],y[14],y[15]),this.matrix.transform(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15]),this.matrix.transform(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]),v=0;v<b;v+=1)i[v]=this.matrix.props[v];this.matrix.reset()}else for(this.matrix.reset(),v=0;v<b;v+=1)i[v]=this.matrix.props[v];x+=1,a-=1,r+=s}}else for(a=this._currentCopies,r=0,s=1;a;)i=(e=this.elemsData[r].it)[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,a-=1,r+=s;return n},RepeaterModifier.prototype.addShape=function(){},extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length},RoundCornersModifier.prototype.processPath=function(t,e){var i,r=shapePool.newElement();r.c=t.c;var s,a,n,o,h,l,p,f,m,c,d,u,y=t._length,g=0;for(i=0;i<y;i+=1)s=t.v[i],n=t.o[i],a=t.i[i],s[0]===n[0]&&s[1]===n[1]&&s[0]===a[0]&&s[1]===a[1]?0!==i&&i!==y-1||t.c?(o=0===i?t.v[y-1]:t.v[i-1],l=(h=Math.sqrt(Math.pow(s[0]-o[0],2)+Math.pow(s[1]-o[1],2)))?Math.min(h/2,e)/h:0,p=d=s[0]+(o[0]-s[0])*l,f=u=s[1]-(s[1]-o[1])*l,m=p-(p-s[0])*roundCorner,c=f-(f-s[1])*roundCorner,r.setTripleAt(p,f,m,c,d,u,g),g+=1,o=i===y-1?t.v[0]:t.v[i+1],l=(h=Math.sqrt(Math.pow(s[0]-o[0],2)+Math.pow(s[1]-o[1],2)))?Math.min(h/2,e)/h:0,p=m=s[0]+(o[0]-s[0])*l,f=c=s[1]+(o[1]-s[1])*l,d=p-(p-s[0])*roundCorner,u=f-(f-s[1])*roundCorner,r.setTripleAt(p,f,m,c,d,u,g),g+=1):(r.setTripleAt(s[0],s[1],n[0],n[1],a[0],a[1],g),g+=1):(r.setTripleAt(t.v[i][0],t.v[i][1],t.o[i][0],t.o[i][1],t.i[i][0],t.i[i][1],g),g+=1);return r},RoundCornersModifier.prototype.processShapes=function(t){var e,i,r,s,a,n,o=this.shapes.length,h=this.rd.v;if(0!==h)for(i=0;i<o;i+=1){if(n=(a=this.shapes[i]).localShapeCollection,a.shape._mdf||this._mdf||t)for(n.releaseShapes(),a.shape._mdf=!0,e=a.shape.paths.shapes,s=a.shape.paths._length,r=0;r<s;r+=1)n.addShape(this.processPath(e[r],h));a.shape.paths=a.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)},PolynomialBezier.prototype.point=function(t){return[((this.a[0]*t+this.b[0])*t+this.c[0])*t+this.d[0],((this.a[1]*t+this.b[1])*t+this.c[1])*t+this.d[1]]},PolynomialBezier.prototype.derivative=function(t){return[(3*t*this.a[0]+2*this.b[0])*t+this.c[0],(3*t*this.a[1]+2*this.b[1])*t+this.c[1]]},PolynomialBezier.prototype.tangentAngle=function(t){var e=this.derivative(t);return Math.atan2(e[1],e[0])},PolynomialBezier.prototype.normalAngle=function(t){var e=this.derivative(t);return Math.atan2(e[0],e[1])},PolynomialBezier.prototype.inflectionPoints=function(){var t=this.a[1]*this.b[0]-this.a[0]*this.b[1];if(floatZero(t))return[];var e=-.5*(this.a[1]*this.c[0]-this.a[0]*this.c[1])/t,i=e*e-1/3*(this.b[1]*this.c[0]-this.b[0]*this.c[1])/t;if(i<0)return[];var r=Math.sqrt(i);return floatZero(r)?r>0&&r<1?[e]:[]:[e-r,e+r].filter((function(t){return t>0&&t<1}))},PolynomialBezier.prototype.split=function(t){if(t<=0)return[singlePoint(this.points[0]),this];if(t>=1)return[this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),i=lerpPoint(this.points[1],this.points[2],t),r=lerpPoint(this.points[2],this.points[3],t),s=lerpPoint(e,i,t),a=lerpPoint(i,r,t),n=lerpPoint(s,a,t);return[new PolynomialBezier(this.points[0],e,s,n,!0),new PolynomialBezier(n,a,r,this.points[3],!0)]},PolynomialBezier.prototype.bounds=function(){return{x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return{left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}},PolynomialBezier.prototype.intersections=function(t,e,i){void 0===e&&(e=2),void 0===i&&(i=7);var r=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,r,i),r},PolynomialBezier.shapeSegment=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[i],t.v[i],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[i],t.i[i],t.o[e],t.v[e],!0)},extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=0!==this.amplitude.effectsSequence.length||0!==this.frequency.effectsSequence.length||0!==this.pointsType.effectsSequence.length},ZigZagModifier.prototype.processPath=function(t,e,i,r){var s=t._length,a=shapePool.newElement();if(a.c=t.c,t.c||(s-=1),0===s)return a;var n=-1,o=PolynomialBezier.shapeSegment(t,0);zigZagCorner(a,t,0,e,i,r,n);for(var h=0;h<s;h+=1)n=zigZagSegment(a,o,e,i,r,-n),o=h!==s-1||t.c?PolynomialBezier.shapeSegment(t,(h+1)%s):null,zigZagCorner(a,t,h+1,e,i,r,n);return a},ZigZagModifier.prototype.processShapes=function(t){var e,i,r,s,a,n,o=this.shapes.length,h=this.amplitude.v,l=Math.max(0,Math.round(this.frequency.v)),p=this.pointsType.v;if(0!==h)for(i=0;i<o;i+=1){if(n=(a=this.shapes[i]).localShapeCollection,a.shape._mdf||this._mdf||t)for(n.releaseShapes(),a.shape._mdf=!0,e=a.shape.paths.shapes,s=a.shape.paths._length,r=0;r<s;r+=1)n.addShape(this.processPath(e[r],h,l,p));a.shape.paths=a.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)},extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=0!==this.amount.effectsSequence.length},OffsetPathModifier.prototype.processPath=function(t,e,i,r){var s=shapePool.newElement();s.c=t.c;var a,n,o,h=t.length();t.c||(h-=1);var l=[];for(a=0;a<h;a+=1)o=PolynomialBezier.shapeSegment(t,a),l.push(offsetSegmentSplit(o,e));if(!t.c)for(a=h-1;a>=0;a-=1)o=PolynomialBezier.shapeSegmentInverted(t,a),l.push(offsetSegmentSplit(o,e));l=pruneIntersections(l);var p=null,f=null;for(a=0;a<l.length;a+=1){var m=l[a];for(f&&(p=joinLines(s,f,m[0],i,r)),f=m[m.length-1],n=0;n<m.length;n+=1)o=m[n],p&&pointEqual(o.points[0],p)?s.setXYAt(o.points[1][0],o.points[1][1],\"o\",s.length()-1):s.setTripleAt(o.points[0][0],o.points[0][1],o.points[1][0],o.points[1][1],o.points[0][0],o.points[0][1],s.length()),s.setTripleAt(o.points[3][0],o.points[3][1],o.points[3][0],o.points[3][1],o.points[2][0],o.points[2][1],s.length()),p=o.points[3]}return l.length&&joinLines(s,f,l[0][0],i,r),s},OffsetPathModifier.prototype.processShapes=function(t){var e,i,r,s,a,n,o=this.shapes.length,h=this.amount.v,l=this.miterLimit.v,p=this.lineJoin;if(0!==h)for(i=0;i<o;i+=1){if(n=(a=this.shapes[i]).localShapeCollection,a.shape._mdf||this._mdf||t)for(n.releaseShapes(),a.shape._mdf=!0,e=a.shape.paths.shapes,s=a.shape.paths._length,r=0;r<s;r+=1)n.addShape(this.processPath(e[r],h,p,l));a.shape.paths=a.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)};var FontManager=function(){var t={w:0,size:0,shapes:[],data:{shapes:[]}},e=[];e=e.concat([2304,2305,2306,2307,2362,2363,2364,2364,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2387,2388,2389,2390,2391,2402,2403]);var i=127988,r=[\"d83cdffb\",\"d83cdffc\",\"d83cdffd\",\"d83cdffe\",\"d83cdfff\"];function s(t,e){var i=createTag(\"span\");i.setAttribute(\"aria-hidden\",!0),i.style.fontFamily=e;var r=createTag(\"span\");r.innerText=\"giItT1WQy@!-/#\",i.style.position=\"absolute\",i.style.left=\"-10000px\",i.style.top=\"-10000px\",i.style.fontSize=\"300px\",i.style.fontVariant=\"normal\",i.style.fontStyle=\"normal\",i.style.fontWeight=\"normal\",i.style.letterSpacing=\"0\",i.appendChild(r),document.body.appendChild(i);var s=r.offsetWidth;return r.style.fontFamily=function(t){var e,i=t.split(\",\"),r=i.length,s=[];for(e=0;e<r;e+=1)\"sans-serif\"!==i[e]&&\"monospace\"!==i[e]&&s.push(i[e]);return s.join(\",\")}(t)+\", \"+e,{node:r,w:s,parent:i}}function a(t,e){var i,r=document.body&&e?\"svg\":\"canvas\",s=getFontProperties(t);if(\"svg\"===r){var a=createNS(\"text\");a.style.fontSize=\"100px\",a.setAttribute(\"font-family\",t.fFamily),a.setAttribute(\"font-style\",s.style),a.setAttribute(\"font-weight\",s.weight),a.textContent=\"1\",t.fClass?(a.style.fontFamily=\"inherit\",a.setAttribute(\"class\",t.fClass)):a.style.fontFamily=t.fFamily,e.appendChild(a),i=a}else{var n=new OffscreenCanvas(500,500).getContext(\"2d\");n.font=s.style+\" \"+s.weight+\" 100px \"+t.fFamily,i=n}return{measureText:function(t){return\"svg\"===r?(i.textContent=t,i.getComputedTextLength()):i.measureText(t).width}}}function n(t){var e=0,i=t.charCodeAt(0);if(i>=55296&&i<=56319){var r=t.charCodeAt(1);r>=56320&&r<=57343&&(e=1024*(i-55296)+r-56320+65536)}return e}function o(t){var e=n(t);return e>=127462&&e<=127487}var h=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this)};h.isModifier=function(t,e){var i=t.toString(16)+e.toString(16);return-1!==r.indexOf(i)},h.isZeroWidthJoiner=function(t){return 8205===t},h.isFlagEmoji=function(t){return o(t.substr(0,2))&&o(t.substr(2,2))},h.isRegionalCode=o,h.isCombinedCharacter=function(t){return-1!==e.indexOf(t)},h.isRegionalFlag=function(t,e){var r=n(t.substr(e,2));if(r!==i)return!1;var s=0;for(e+=2;s<5;){if((r=n(t.substr(e,2)))<917601||r>917626)return!1;s+=1,e+=2}return 917631===n(t.substr(e,2))},h.isVariationSelector=function(t){return 65039===t},h.BLACK_FLAG_CODE_POINT=i;var l={addChars:function(t){if(t){var e;this.chars||(this.chars=[]);var i,r,s=t.length,a=this.chars.length;for(e=0;e<s;e+=1){for(i=0,r=!1;i<a;)this.chars[i].style===t[e].style&&this.chars[i].fFamily===t[e].fFamily&&this.chars[i].ch===t[e].ch&&(r=!0),i+=1;r||(this.chars.push(t[e]),a+=1)}}},addFonts:function(t,e){if(t){if(this.chars)return this.isLoaded=!0,void(this.fonts=t.list);if(!document.body)return this.isLoaded=!0,t.list.forEach((function(t){t.helper=a(t),t.cache={}})),void(this.fonts=t.list);var i,r=t.list,n=r.length,o=n;for(i=0;i<n;i+=1){var h,l,p=!0;if(r[i].loaded=!1,r[i].monoCase=s(r[i].fFamily,\"monospace\"),r[i].sansCase=s(r[i].fFamily,\"sans-serif\"),r[i].fPath){if(\"p\"===r[i].fOrigin||3===r[i].origin){if((h=document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"'+r[i].fFamily+'\"], style[f-origin=\"3\"][f-family=\"'+r[i].fFamily+'\"]')).length>0&&(p=!1),p){var f=createTag(\"style\");f.setAttribute(\"f-forigin\",r[i].fOrigin),f.setAttribute(\"f-origin\",r[i].origin),f.setAttribute(\"f-family\",r[i].fFamily),f.type=\"text/css\",f.innerText=\"@font-face {font-family: \"+r[i].fFamily+\"; font-style: normal; src: url('\"+r[i].fPath+\"');}\",e.appendChild(f)}}else if(\"g\"===r[i].fOrigin||1===r[i].origin){for(h=document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]'),l=0;l<h.length;l+=1)-1!==h[l].href.indexOf(r[i].fPath)&&(p=!1);if(p){var m=createTag(\"link\");m.setAttribute(\"f-forigin\",r[i].fOrigin),m.setAttribute(\"f-origin\",r[i].origin),m.type=\"text/css\",m.rel=\"stylesheet\",m.href=r[i].fPath,document.body.appendChild(m)}}else if(\"t\"===r[i].fOrigin||2===r[i].origin){for(h=document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]'),l=0;l<h.length;l+=1)r[i].fPath===h[l].src&&(p=!1);if(p){var c=createTag(\"link\");c.setAttribute(\"f-forigin\",r[i].fOrigin),c.setAttribute(\"f-origin\",r[i].origin),c.setAttribute(\"rel\",\"stylesheet\"),c.setAttribute(\"href\",r[i].fPath),e.appendChild(c)}}}else r[i].loaded=!0,o-=1;r[i].helper=a(r[i],e),r[i].cache={},this.fonts.push(r[i])}0===o?this.isLoaded=!0:setTimeout(this.checkLoadedFonts.bind(this),100)}else this.isLoaded=!0},getCharData:function(e,i,r){for(var s=0,a=this.chars.length;s<a;){if(this.chars[s].ch===e&&this.chars[s].style===i&&this.chars[s].fFamily===r)return this.chars[s];s+=1}return(\"string\"==typeof e&&13!==e.charCodeAt(0)||!e)&&console&&console.warn&&!this._warned&&(this._warned=!0,console.warn(\"Missing character from exported characters list: \",e,i,r)),t},getFontByName:function(t){for(var e=0,i=this.fonts.length;e<i;){if(this.fonts[e].fName===t)return this.fonts[e];e+=1}return this.fonts[0]},measureText:function(t,e,i){var r=this.getFontByName(e),s=t;if(!r.cache[s]){var a=r.helper;if(\" \"===t){var n=a.measureText(\"|\"+t+\"|\"),o=a.measureText(\"||\");r.cache[s]=(n-o)/100}else r.cache[s]=a.measureText(t)/100}return r.cache[s]*i},checkLoadedFonts:function(){var t,e,i,r=this.fonts.length,s=r;for(t=0;t<r;t+=1)this.fonts[t].loaded?s-=1:\"n\"===this.fonts[t].fOrigin||0===this.fonts[t].origin?this.fonts[t].loaded=!0:(e=this.fonts[t].monoCase.node,i=this.fonts[t].monoCase.w,e.offsetWidth!==i?(s-=1,this.fonts[t].loaded=!0):(e=this.fonts[t].sansCase.node,i=this.fonts[t].sansCase.w,e.offsetWidth!==i&&(s-=1,this.fonts[t].loaded=!0)),this.fonts[t].loaded&&(this.fonts[t].sansCase.parent.parentNode.removeChild(this.fonts[t].sansCase.parent),this.fonts[t].monoCase.parent.parentNode.removeChild(this.fonts[t].monoCase.parent)));0!==s&&Date.now()-this.initTime<5e3?setTimeout(this.checkLoadedFontsBinded,20):setTimeout(this.setIsLoadedBinded,10)},setIsLoaded:function(){this.isLoaded=!0}};return h.prototype=l,h}();function SlotManager(t){this.animationData=t}function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t},RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[]},addRenderableComponent:function(t){-1===this.renderableComponents.indexOf(t)&&this.renderableComponents.push(t)},removeRenderableComponent:function(t){-1!==this.renderableComponents.indexOf(t)&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1)},prepareRenderableFrame:function(t){this.checkLayerLimits(t)},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show())},checkLayerLimits:function(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?!0!==this.isInRange&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):!1!==this.isInRange&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t<e;t+=1)this.renderableComponents[t].renderFrame(this._isFirstFrame)},sourceRectAtTime:function(){return{top:0,left:0,width:100,height:100}},getLayerSize:function(){return 5===this.data.ty?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}}};var getBlendMode=(blendModeEnums={0:\"source-over\",1:\"multiply\",2:\"screen\",3:\"overlay\",4:\"darken\",5:\"lighten\",6:\"color-dodge\",7:\"color-burn\",8:\"hard-light\",9:\"soft-light\",10:\"difference\",11:\"exclusion\",12:\"hue\",13:\"saturation\",14:\"color\",15:\"luminosity\"},function(t){return blendModeEnums[t]||\"\"}),blendModeEnums;function SliderEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}function AngleEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}function ColorEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,1,0,i)}function PointEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,1,0,i)}function LayerIndexEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}function MaskIndexEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}function CheckboxEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}function NoValueEffect(){this.p={}}function EffectsManager(t,e){var i,r=t.ef||[];this.effectElements=[];var s,a=r.length;for(i=0;i<a;i+=1)s=new GroupEffect(r[i],e),this.effectElements.push(s)}function GroupEffect(t,e){this.init(t,e)}function BaseElement(){}function FrameElement(){}function FootageElement(t,e,i){this.initFrame(),this.initRenderable(),this.assetData=e.getAssetData(t.refId),this.footageData=e.imageLoader.getAsset(this.assetData),this.initBaseData(t,e,i)}function AudioElement(t,e,i){this.initFrame(),this.initRenderable(),this.assetData=e.getAssetData(t.refId),this.initBaseData(t,e,i),this._isPlaying=!1,this._canPlay=!1;var r=this.globalData.getAssetsPath(this.assetData);this.audio=this.globalData.audioController.createAudio(r),this._currentTime=0,this.globalData.audioController.addAudio(this),this._volumeMultiplier=1,this._volume=1,this._previousVolume=null,this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0},this.lv=PropertyFactory.getProp(this,t.au&&t.au.lv?t.au.lv:{k:[100]},1,.01,this)}function BaseRenderer(){}extendPrototype([DynamicPropertyContainer],GroupEffect),GroupEffect.prototype.getValue=GroupEffect.prototype.iterateDynamicProperties,GroupEffect.prototype.init=function(t,e){var i;this.data=t,this.effectElements=[],this.initDynamicPropertyContainer(e);var r,s=this.data.ef.length,a=this.data.ef;for(i=0;i<s;i+=1){switch(r=null,a[i].ty){case 0:r=new SliderEffect(a[i],e,this);break;case 1:r=new AngleEffect(a[i],e,this);break;case 2:r=new ColorEffect(a[i],e,this);break;case 3:r=new PointEffect(a[i],e,this);break;case 4:case 7:r=new CheckboxEffect(a[i],e,this);break;case 10:r=new LayerIndexEffect(a[i],e,this);break;case 11:r=new MaskIndexEffect(a[i],e,this);break;case 5:r=new EffectsManager(a[i],e,this);break;default:r=new NoValueEffect(a[i],e,this)}r&&this.effectElements.push(r)}},BaseElement.prototype={checkMasks:function(){if(!this.data.hasMask)return!1;for(var t=0,e=this.data.masksProperties.length;t<e;){if(\"n\"!==this.data.masksProperties[t].mode&&!1!==this.data.masksProperties[t].cl)return!0;t+=1}return!1},initExpressions:function(){var t=getExpressionInterfaces();if(t){var e=t(\"layer\"),i=t(\"effects\"),r=t(\"shape\"),s=t(\"text\"),a=t(\"comp\");this.layerInterface=e(this),this.data.hasMask&&this.maskManager&&this.layerInterface.registerMaskInterface(this.maskManager);var n=i.createEffectsInterface(this,this.layerInterface);this.layerInterface.registerEffectsInterface(n),0===this.data.ty||this.data.xt?this.compInterface=a(this):4===this.data.ty?(this.layerInterface.shapeInterface=r(this.shapesData,this.itemsData,this.layerInterface),this.layerInterface.content=this.layerInterface.shapeInterface):5===this.data.ty&&(this.layerInterface.textInterface=s(this),this.layerInterface.text=this.layerInterface.textInterface)}},setBlendMode:function(){var t=getBlendMode(this.data.bm);(this.baseElement||this.layerElement).style[\"mix-blend-mode\"]=t},initBaseData:function(t,e,i){this.globalData=e,this.comp=i,this.data=t,this.layerId=createElementID(),this.data.sr||(this.data.sr=1),this.effectsManager=new EffectsManager(this.data,this,this.dynamicProperties)},getType:function(){return this.type},sourceRectAtTime:function(){}},FrameElement.prototype={initFrame:function(){this._isFirstFrame=!1,this.dynamicProperties=[],this._mdf=!1},prepareProperties:function(t,e){var i,r=this.dynamicProperties.length;for(i=0;i<r;i+=1)(e||this._isParent&&\"transform\"===this.dynamicProperties[i].propType)&&(this.dynamicProperties[i].getValue(),this.dynamicProperties[i]._mdf&&(this.globalData._mdf=!0,this._mdf=!0))},addDynamicProperty:function(t){-1===this.dynamicProperties.indexOf(t)&&this.dynamicProperties.push(t)}},FootageElement.prototype.prepareFrame=function(){},extendPrototype([RenderableElement,BaseElement,FrameElement],FootageElement),FootageElement.prototype.getBaseElement=function(){return null},FootageElement.prototype.renderFrame=function(){},FootageElement.prototype.destroy=function(){},FootageElement.prototype.initExpressions=function(){var t=getExpressionInterfaces();if(t){var e=t(\"footage\");this.layerInterface=e(this)}},FootageElement.prototype.getFootageData=function(){return this.footageData},AudioElement.prototype.prepareFrame=function(t){if(this.prepareRenderableFrame(t,!0),this.prepareProperties(t,!0),this.tm._placeholder)this._currentTime=t/this.data.sr;else{var e=this.tm.v;this._currentTime=e}this._volume=this.lv.v[0];var i=this._volume*this._volumeMultiplier;this._previousVolume!==i&&(this._previousVolume=i,this.audio.volume(i))},extendPrototype([RenderableElement,BaseElement,FrameElement],AudioElement),AudioElement.prototype.renderFrame=function(){this.isInRange&&this._canPlay&&(this._isPlaying?(!this.audio.playing()||Math.abs(this._currentTime/this.globalData.frameRate-this.audio.seek())>.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0))},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1},AudioElement.prototype.resume=function(){this._canPlay=!0},AudioElement.prototype.setRate=function(t){this.audio.rate(t)},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume)},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){},BaseRenderer.prototype.checkLayers=function(t){var e,i,r=this.layers.length;for(this.completeLayers=!0,e=r-1;e>=0;e-=1)this.elements[e]||(i=this.layers[e]).ip-i.st<=t-this.layers[e].st&&i.op-i.st>t-this.layers[e].st&&this.buildItem(e),this.completeLayers=!!this.elements[e]&&this.completeLayers;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:default:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error(\"You're using a 3d camera. Try the html renderer.\")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)this.buildItem(t);this.checkPendingElements()},BaseRenderer.prototype.includeLayers=function(t){var e;this.completeLayers=!1;var i,r=t.length,s=this.layers.length;for(e=0;e<r;e+=1)for(i=0;i<s;){if(this.layers[i].id===t[e].id){this.layers[i]=t[e];break}i+=1}},BaseRenderer.prototype.setProjectInterface=function(t){this.globalData.projectInterface=t},BaseRenderer.prototype.initItems=function(){this.globalData.progressiveLoad||this.buildAllItems()},BaseRenderer.prototype.buildElementParenting=function(t,e,i){for(var r=this.elements,s=this.layers,a=0,n=s.length;a<n;)s[a].ind==e&&(r[a]&&!0!==r[a]?(i.push(r[a]),r[a].setAsParent(),void 0!==s[a].parent?this.buildElementParenting(t,s[a].parent,i):t.setHierarchy(i)):(this.buildItem(a),this.addPendingElement(t))),a+=1},BaseRenderer.prototype.addPendingElement=function(t){this.pendingElements.push(t)},BaseRenderer.prototype.searchExtraCompositions=function(t){var e,i=t.length;for(e=0;e<i;e+=1)if(t[e].xt){var r=this.createComp(t[e]);r.initExpressions(),this.globalData.projectInterface.registerComposition(r)}},BaseRenderer.prototype.getElementById=function(t){var e,i=this.elements.length;for(e=0;e<i;e+=1)if(this.elements[e].data.ind===t)return this.elements[e];return null},BaseRenderer.prototype.getElementByPath=function(t){var e,i=t.shift();if(\"number\"==typeof i)e=this.elements[i];else{var r,s=this.elements.length;for(r=0;r<s;r+=1)if(this.elements[r].data.nm===i){e=this.elements[r];break}}return 0===t.length?e:e.getElementByPath(t)},BaseRenderer.prototype.setupGlobalData=function(t,e){this.globalData.fontManager=new FontManager,this.globalData.slotManager=slotFactory(t),this.globalData.fontManager.addChars(t.chars),this.globalData.fontManager.addFonts(t.fonts,e),this.globalData.getAssetData=this.animationItem.getAssetData.bind(this.animationItem),this.globalData.getAssetsPath=this.animationItem.getAssetsPath.bind(this.animationItem),this.globalData.imageLoader=this.animationItem.imagePreloader,this.globalData.audioController=this.animationItem.audioController,this.globalData.frameId=0,this.globalData.frameRate=t.fr,this.globalData.nm=t.nm,this.globalData.compSize={w:t.w,h:t.h}};var effectTypes={TRANSFORM_EFFECT:\"transformEFfect\"};function TransformElement(){}function MaskElement(t,e,i){this.data=t,this.element=e,this.globalData=i,this.storedData=[],this.masksProperties=this.data.masksProperties||[],this.maskElement=null;var r,s,a=this.globalData.defs,n=this.masksProperties?this.masksProperties.length:0;this.viewData=createSizedArray(n),this.solidPath=\"\";var o,h,l,p,f,m,c=this.masksProperties,d=0,u=[],y=createElementID(),g=\"clipPath\",v=\"clip-path\";for(r=0;r<n;r+=1)if((\"a\"!==c[r].mode&&\"n\"!==c[r].mode||c[r].inv||100!==c[r].o.k||c[r].o.x)&&(g=\"mask\",v=\"mask\"),\"s\"!==c[r].mode&&\"i\"!==c[r].mode||0!==d?l=null:((l=createNS(\"rect\")).setAttribute(\"fill\",\"#ffffff\"),l.setAttribute(\"width\",this.element.comp.data.w||0),l.setAttribute(\"height\",this.element.comp.data.h||0),u.push(l)),s=createNS(\"path\"),\"n\"===c[r].mode)this.viewData[r]={op:PropertyFactory.getProp(this.element,c[r].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,c[r],3),elem:s,lastPath:\"\"},a.appendChild(s);else{var b;if(d+=1,s.setAttribute(\"fill\",\"s\"===c[r].mode?\"#000000\":\"#ffffff\"),s.setAttribute(\"clip-rule\",\"nonzero\"),0!==c[r].x.k?(g=\"mask\",v=\"mask\",m=PropertyFactory.getProp(this.element,c[r].x,0,null,this.element),b=createElementID(),(p=createNS(\"filter\")).setAttribute(\"id\",b),(f=createNS(\"feMorphology\")).setAttribute(\"operator\",\"erode\"),f.setAttribute(\"in\",\"SourceGraphic\"),f.setAttribute(\"radius\",\"0\"),p.appendChild(f),a.appendChild(p),s.setAttribute(\"stroke\",\"s\"===c[r].mode?\"#000000\":\"#ffffff\")):(f=null,m=null),this.storedData[r]={elem:s,x:m,expan:f,lastPath:\"\",lastOperator:\"\",filterId:b,lastRadius:0},\"i\"===c[r].mode){h=u.length;var x=createNS(\"g\");for(o=0;o<h;o+=1)x.appendChild(u[o]);var P=createNS(\"mask\");P.setAttribute(\"mask-type\",\"alpha\"),P.setAttribute(\"id\",y+\"_\"+d),P.appendChild(s),a.appendChild(P),x.setAttribute(\"mask\",\"url(\"+getLocationHref()+\"#\"+y+\"_\"+d+\")\"),u.length=0,u.push(x)}else u.push(s);c[r].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),this.viewData[r]={elem:s,lastPath:\"\",op:PropertyFactory.getProp(this.element,c[r].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,c[r],3),invRect:l},this.viewData[r].prop.k||this.drawPath(c[r],this.viewData[r].prop.v,this.viewData[r])}for(this.maskElement=createNS(g),n=u.length,r=0;r<n;r+=1)this.maskElement.appendChild(u[r]);d>0&&(this.maskElement.setAttribute(\"id\",y),this.element.maskedElement.setAttribute(v,\"url(\"+getLocationHref()+\"#\"+y+\")\"),a.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}TransformElement.prototype={initTransform:function(){var t=new Matrix;this.finalTransform={mProp:this.data.ks?TransformPropertyFactory.getTransformProperty(this,this.data.ks,this):{o:0},_matMdf:!1,_localMatMdf:!1,_opMdf:!1,mat:t,localMat:t,localOpacity:1},this.data.ao&&(this.finalTransform.mProp.autoOriented=!0),this.data.ty},renderTransform:function(){if(this.finalTransform._opMdf=this.finalTransform.mProp.o._mdf||this._isFirstFrame,this.finalTransform._matMdf=this.finalTransform.mProp._mdf||this._isFirstFrame,this.hierarchy){var t,e=this.finalTransform.mat,i=0,r=this.hierarchy.length;if(!this.finalTransform._matMdf)for(;i<r;){if(this.hierarchy[i].finalTransform.mProp._mdf){this.finalTransform._matMdf=!0;break}i+=1}if(this.finalTransform._matMdf)for(t=this.finalTransform.mProp.v.props,e.cloneFromProps(t),i=0;i<r;i+=1)e.multiply(this.hierarchy[i].finalTransform.mProp.v)}this.finalTransform._matMdf&&(this.finalTransform._localMatMdf=this.finalTransform._matMdf),this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v)},renderLocalTransform:function(){if(this.localTransforms){var t=0,e=this.localTransforms.length;if(this.finalTransform._localMatMdf=this.finalTransform._matMdf,!this.finalTransform._localMatMdf||!this.finalTransform._opMdf)for(;t<e;)this.localTransforms[t]._mdf&&(this.finalTransform._localMatMdf=!0),this.localTransforms[t]._opMdf&&!this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v,this.finalTransform._opMdf=!0),t+=1;if(this.finalTransform._localMatMdf){var i=this.finalTransform.localMat;for(this.localTransforms[0].matrix.clone(i),t=1;t<e;t+=1){var r=this.localTransforms[t].matrix;i.multiply(r)}i.multiply(this.finalTransform.mat)}if(this.finalTransform._opMdf){var s=this.finalTransform.localOpacity;for(t=0;t<e;t+=1)s*=.01*this.localTransforms[t].opacity;this.finalTransform.localOpacity=s}}},searchEffectTransforms:function(){if(this.renderableEffectsManager){var t=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);if(t.length){this.localTransforms=[],this.finalTransform.localMat=new Matrix;var e=0,i=t.length;for(e=0;e<i;e+=1)this.localTransforms.push(t[e])}}},globalToLocal:function(t){var e=[];e.push(this.finalTransform);for(var i,r=!0,s=this.comp;r;)s.finalTransform?(s.data.hasMask&&e.splice(0,0,s.finalTransform),s=s.comp):r=!1;var a,n=e.length;for(i=0;i<n;i+=1)a=e[i].mat.applyToPointArray(0,0,0),t=[t[0]-a[0],t[1]-a[1],0];return t},mHelper:new Matrix},MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e,i=this.element.finalTransform.mat,r=this.masksProperties.length;for(e=0;e<r;e+=1)if((this.viewData[e].prop._mdf||t)&&this.drawPath(this.masksProperties[e],this.viewData[e].prop.v,this.viewData[e]),(this.viewData[e].op._mdf||t)&&this.viewData[e].elem.setAttribute(\"fill-opacity\",this.viewData[e].op.v),\"n\"!==this.masksProperties[e].mode&&(this.viewData[e].invRect&&(this.element.finalTransform.mProp._mdf||t)&&this.viewData[e].invRect.setAttribute(\"transform\",i.getInverseMatrix().to2dCSS()),this.storedData[e].x&&(this.storedData[e].x._mdf||t))){var s=this.storedData[e].expan;this.storedData[e].x.v<0?(\"erode\"!==this.storedData[e].lastOperator&&(this.storedData[e].lastOperator=\"erode\",this.storedData[e].elem.setAttribute(\"filter\",\"url(\"+getLocationHref()+\"#\"+this.storedData[e].filterId+\")\")),s.setAttribute(\"radius\",-this.storedData[e].x.v)):(\"dilate\"!==this.storedData[e].lastOperator&&(this.storedData[e].lastOperator=\"dilate\",this.storedData[e].elem.setAttribute(\"filter\",null)),this.storedData[e].elem.setAttribute(\"stroke-width\",2*this.storedData[e].x.v))}},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t=\"M0,0 \";return t+=\" h\"+this.globalData.compSize.w,t+=\" v\"+this.globalData.compSize.h,t+=\" h-\"+this.globalData.compSize.w,t+=\" v-\"+this.globalData.compSize.h+\" \"},MaskElement.prototype.drawPath=function(t,e,i){var r,s,a=\" M\"+e.v[0][0]+\",\"+e.v[0][1];for(s=e._length,r=1;r<s;r+=1)a+=\" C\"+e.o[r-1][0]+\",\"+e.o[r-1][1]+\" \"+e.i[r][0]+\",\"+e.i[r][1]+\" \"+e.v[r][0]+\",\"+e.v[r][1];if(e.c&&s>1&&(a+=\" C\"+e.o[r-1][0]+\",\"+e.o[r-1][1]+\" \"+e.i[0][0]+\",\"+e.i[0][1]+\" \"+e.v[0][0]+\",\"+e.v[0][1]),i.lastPath!==a){var n=\"\";i.elem&&(e.c&&(n=t.inv?this.solidPath+a:a),i.elem.setAttribute(\"d\",n)),i.lastPath=a}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null};var filtersFactory=function(){var t={};return t.createFilter=function(t,e){var i=createNS(\"filter\");i.setAttribute(\"id\",t),!0!==e&&(i.setAttribute(\"filterUnits\",\"objectBoundingBox\"),i.setAttribute(\"x\",\"0%\"),i.setAttribute(\"y\",\"0%\"),i.setAttribute(\"width\",\"100%\"),i.setAttribute(\"height\",\"100%\"));return i},t.createAlphaToLuminanceFilter=function(){var t=createNS(\"feColorMatrix\");return t.setAttribute(\"type\",\"matrix\"),t.setAttribute(\"color-interpolation-filters\",\"sRGB\"),t.setAttribute(\"values\",\"0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1\"),t},t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:\"undefined\"!=typeof OffscreenCanvas};return(/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\\/\\d./i.test(navigator.userAgent))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects$1={},idPrefix=\"filter_result_\";function SVGEffects(t){var e,i,r=\"SourceGraphic\",s=t.data.ef?t.data.ef.length:0,a=createElementID(),n=filtersFactory.createFilter(a,!0),o=0;for(this.filters=[],e=0;e<s;e+=1){i=null;var h=t.data.ef[e].ty;if(registeredEffects$1[h])i=new(0,registeredEffects$1[h].effect)(n,t.effectsManager.effectElements[e],t,idPrefix+o,r),r=idPrefix+o,registeredEffects$1[h].countsAsEffect&&(o+=1);i&&this.filters.push(i)}o&&(t.globalData.defs.appendChild(n),t.layerElement.setAttribute(\"filter\",\"url(\"+getLocationHref()+\"#\"+a+\")\")),this.filters.length&&t.addRenderableComponent(this)}function registerEffect$1(t,e,i){registeredEffects$1[t]={effect:e,countsAsEffect:i}}function SVGBaseElement(){}function HierarchyElement(){}function RenderableDOMElement(){}function IImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),this.assetData&&this.assetData.sid&&(this.assetData=e.slotManager.getProp(this.assetData)),this.initElement(t,e,i),this.sourceRect={top:0,left:0,width:this.assetData.w,height:this.assetData.h}}function ProcessedElement(t,e){this.elem=t,this.pos=e}function IShapeElement(){}SVGEffects.prototype.renderFrame=function(t){var e,i=this.filters.length;for(e=0;e<i;e+=1)this.filters[e].renderFrame(t)},SVGEffects.prototype.getEffects=function(t){var e,i=this.filters.length,r=[];for(e=0;e<i;e+=1)this.filters[e].type===t&&r.push(this.filters[e]);return r},SVGBaseElement.prototype={initRendererElement:function(){this.layerElement=createNS(\"g\")},createContainerElements:function(){this.matteElement=createNS(\"g\"),this.transformedElement=this.layerElement,this.maskedElement=this.layerElement,this._sizeChanged=!1;var t=null;if(this.data.td){this.matteMasks={};var e=createNS(\"g\");e.setAttribute(\"id\",this.layerId),e.appendChild(this.layerElement),t=e,this.globalData.defs.appendChild(e)}else this.data.tt?(this.matteElement.appendChild(this.layerElement),t=this.matteElement,this.baseElement=this.matteElement):this.baseElement=this.layerElement;if(this.data.ln&&this.layerElement.setAttribute(\"id\",this.data.ln),this.data.cl&&this.layerElement.setAttribute(\"class\",this.data.cl),0===this.data.ty&&!this.data.hd){var i=createNS(\"clipPath\"),r=createNS(\"path\");r.setAttribute(\"d\",\"M0,0 L\"+this.data.w+\",0 L\"+this.data.w+\",\"+this.data.h+\" L0,\"+this.data.h+\"z\");var s=createElementID();if(i.setAttribute(\"id\",s),i.appendChild(r),this.globalData.defs.appendChild(i),this.checkMasks()){var a=createNS(\"g\");a.setAttribute(\"clip-path\",\"url(\"+getLocationHref()+\"#\"+s+\")\"),a.appendChild(this.layerElement),this.transformedElement=a,t?t.appendChild(this.transformedElement):this.baseElement=this.transformedElement}else this.layerElement.setAttribute(\"clip-path\",\"url(\"+getLocationHref()+\"#\"+s+\")\")}0!==this.data.bm&&this.setBlendMode()},renderElement:function(){this.finalTransform._localMatMdf&&this.transformedElement.setAttribute(\"transform\",this.finalTransform.localMat.to2dCSS()),this.finalTransform._opMdf&&this.transformedElement.setAttribute(\"opacity\",this.finalTransform.localOpacity)},destroyBaseElement:function(){this.layerElement=null,this.matteElement=null,this.maskManager.destroy()},getBaseElement:function(){return this.data.hd?null:this.baseElement},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData),this.renderableEffectsManager=new SVGEffects(this),this.searchEffectTransforms()},getMatte:function(t){if(this.matteMasks||(this.matteMasks={}),!this.matteMasks[t]){var e,i,r,s,a=this.layerId+\"_\"+t;if(1===t||3===t){var n=createNS(\"mask\");n.setAttribute(\"id\",a),n.setAttribute(\"mask-type\",3===t?\"luminance\":\"alpha\"),(r=createNS(\"use\")).setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",\"#\"+this.layerId),n.appendChild(r),this.globalData.defs.appendChild(n),featureSupport.maskType||1!==t||(n.setAttribute(\"mask-type\",\"luminance\"),e=createElementID(),i=filtersFactory.createFilter(e),this.globalData.defs.appendChild(i),i.appendChild(filtersFactory.createAlphaToLuminanceFilter()),(s=createNS(\"g\")).appendChild(r),n.appendChild(s),s.setAttribute(\"filter\",\"url(\"+getLocationHref()+\"#\"+e+\")\"))}else if(2===t){var o=createNS(\"mask\");o.setAttribute(\"id\",a),o.setAttribute(\"mask-type\",\"alpha\");var h=createNS(\"g\");o.appendChild(h),e=createElementID(),i=filtersFactory.createFilter(e);var l=createNS(\"feComponentTransfer\");l.setAttribute(\"in\",\"SourceGraphic\"),i.appendChild(l);var p=createNS(\"feFuncA\");p.setAttribute(\"type\",\"table\"),p.setAttribute(\"tableValues\",\"1.0 0.0\"),l.appendChild(p),this.globalData.defs.appendChild(i);var f=createNS(\"rect\");f.setAttribute(\"width\",this.comp.data.w),f.setAttribute(\"height\",this.comp.data.h),f.setAttribute(\"x\",\"0\"),f.setAttribute(\"y\",\"0\"),f.setAttribute(\"fill\",\"#ffffff\"),f.setAttribute(\"opacity\",\"0\"),h.setAttribute(\"filter\",\"url(\"+getLocationHref()+\"#\"+e+\")\"),h.appendChild(f),(r=createNS(\"use\")).setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",\"#\"+this.layerId),h.appendChild(r),featureSupport.maskType||(o.setAttribute(\"mask-type\",\"luminance\"),i.appendChild(filtersFactory.createAlphaToLuminanceFilter()),s=createNS(\"g\"),h.appendChild(f),s.appendChild(this.layerElement),h.appendChild(s)),this.globalData.defs.appendChild(o)}this.matteMasks[t]=a}return this.matteMasks[t]},setMatte:function(t){this.matteElement&&this.matteElement.setAttribute(\"mask\",\"url(\"+getLocationHref()+\"#\"+t+\")\")}},HierarchyElement.prototype={initHierarchy:function(){this.hierarchy=[],this._isParent=!1,this.checkParenting()},setHierarchy:function(t){this.hierarchy=t},setAsParent:function(){this._isParent=!0},checkParenting:function(){void 0!==this.data.parent&&this.comp.buildElementParenting(this,this.data.parent,[])}},extendPrototype([RenderableElement,createProxyFunction({initElement:function(t,e,i){this.initFrame(),this.initBaseData(t,e,i),this.initTransform(t,e,i),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide()},hide:function(){this.hidden||this.isInRange&&!this.isTransparent||((this.baseElement||this.layerElement).style.display=\"none\",this.hidden=!0)},show:function(){this.isInRange&&!this.isTransparent&&(this.data.hd||((this.baseElement||this.layerElement).style.display=\"block\"),this.hidden=!1,this._isFirstFrame=!0)},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},renderInnerContent:function(){},prepareFrame:function(t){this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange),this.checkTransparency()},destroy:function(){this.innerElem=null,this.destroyBaseElement()}})],RenderableDOMElement),extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],IImageElement),IImageElement.prototype.createContent=function(){var t=this.globalData.getAssetsPath(this.assetData);this.innerElem=createNS(\"image\"),this.innerElem.setAttribute(\"width\",this.assetData.w+\"px\"),this.innerElem.setAttribute(\"height\",this.assetData.h+\"px\"),this.innerElem.setAttribute(\"preserveAspectRatio\",this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio),this.innerElem.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",t),this.layerElement.appendChild(this.innerElem)},IImageElement.prototype.sourceRectAtTime=function(){return this.sourceRect},IShapeElement.prototype={addShapeToModifiers:function(t){var e,i=this.shapeModifiers.length;for(e=0;e<i;e+=1)this.shapeModifiers[e].addShape(t)},isShapeInAnimatedModifiers:function(t){for(var e=this.shapeModifiers.length;0<e;)if(this.shapeModifiers[0].isAnimatedWithShape(t))return!0;return!1},renderModifiers:function(){if(this.shapeModifiers.length){var t,e=this.shapes.length;for(t=0;t<e;t+=1)this.shapes[t].sh.reset();for(t=(e=this.shapeModifiers.length)-1;t>=0&&!this.shapeModifiers[t].processShapes(this._isFirstFrame);t-=1);}},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,r=e.length;i<r;){if(e[i].elem===t)return e[i].pos;i+=1}return 0},addProcessedElement:function(t,e){for(var i=this.processedElements,r=i.length;r;)if(i[r-=1].elem===t)return void(i[r].pos=e);i.push(new ProcessedElement(t,e))},prepareFrame:function(t){this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange)}};var lineCapEnum={1:\"butt\",2:\"round\",3:\"square\"},lineJoinEnum={1:\"miter\",2:\"round\",3:\"bevel\"};function SVGShapeData(t,e,i){this.caches=[],this.styles=[],this.transformers=t,this.lStr=\"\",this.sh=i,this.lvl=e,this._isAnimated=!!i.k;for(var r=0,s=t.length;r<s;){if(t[r].mProps.dynamicProperties.length){this._isAnimated=!0;break}r+=1}}function SVGStyleData(t,e){this.data=t,this.type=t.ty,this.d=\"\",this.lvl=e,this._mdf=!1,this.closed=!0===t.hd,this.pElem=createNS(\"path\"),this.msElem=null}function DashProperty(t,e,i,r){var s;this.elem=t,this.frameId=-1,this.dataProps=createSizedArray(e.length),this.renderer=i,this.k=!1,this.dashStr=\"\",this.dashArray=createTypedArray(\"float32\",e.length?e.length-1:0),this.dashoffset=createTypedArray(\"float32\",1),this.initDynamicPropertyContainer(r);var a,n=e.length||0;for(s=0;s<n;s+=1)a=PropertyFactory.getProp(t,e[s].v,0,0,this),this.k=a.k||this.k,this.dataProps[s]={n:e[s].n,p:a};this.k||this.getValue(!0),this._isAnimated=this.k}function SVGStrokeStyleData(t,e,i){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.w=PropertyFactory.getProp(t,e.w,0,null,this),this.d=new DashProperty(t,e.d||{},\"svg\",this),this.c=PropertyFactory.getProp(t,e.c,1,255,this),this.style=i,this._isAnimated=!!this._isAnimated}function SVGFillStyleData(t,e,i){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.c=PropertyFactory.getProp(t,e.c,1,255,this),this.style=i}function SVGNoStyleData(t,e,i){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.style=i}function GradientProperty(t,e,i){this.data=e,this.c=createTypedArray(\"uint8c\",4*e.p);var r=e.k.k[0].s?e.k.k[0].s.length-4*e.p:e.k.k.length-4*e.p;this.o=createTypedArray(\"float32\",r),this._cmdf=!1,this._omdf=!1,this._collapsable=this.checkCollapsable(),this._hasOpacity=r,this.initDynamicPropertyContainer(i),this.prop=PropertyFactory.getProp(t,e.k,1,null,this),this.k=this.prop.k,this.getValue(!0)}function SVGGradientFillStyleData(t,e,i){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.initGradientData(t,e,i)}function SVGGradientStrokeStyleData(t,e,i){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.w=PropertyFactory.getProp(t,e.w,0,null,this),this.d=new DashProperty(t,e.d||{},\"svg\",this),this.initGradientData(t,e,i),this._isAnimated=!!this._isAnimated}function ShapeGroupData(){this.it=[],this.prevViewData=[],this.gr=createNS(\"g\")}function SVGTransformData(t,e,i){this.transform={mProps:t,op:e,container:i},this.elements=[],this._isAnimated=this.transform.mProps.dynamicProperties.length||this.transform.op.effectsSequence.length}SVGShapeData.prototype.setAsAnimated=function(){this._isAnimated=!0},SVGStyleData.prototype.reset=function(){this.d=\"\",this._mdf=!1},DashProperty.prototype.getValue=function(t){if((this.elem.globalData.frameId!==this.frameId||t)&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf=this._mdf||t,this._mdf)){var e=0,i=this.dataProps.length;for(\"svg\"===this.renderer&&(this.dashStr=\"\"),e=0;e<i;e+=1)\"o\"!==this.dataProps[e].n?\"svg\"===this.renderer?this.dashStr+=\" \"+this.dataProps[e].p.v:this.dashArray[e]=this.dataProps[e].p.v:this.dashoffset[0]=this.dataProps[e].p.v}},extendPrototype([DynamicPropertyContainer],DashProperty),extendPrototype([DynamicPropertyContainer],SVGStrokeStyleData),extendPrototype([DynamicPropertyContainer],SVGFillStyleData),extendPrototype([DynamicPropertyContainer],SVGNoStyleData),GradientProperty.prototype.comparePoints=function(t,e){for(var i=0,r=this.o.length/2;i<r;){if(Math.abs(t[4*i]-t[4*e+2*i])>.01)return!1;i+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!=this.c.length/4)return!1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t<e;){if(!this.comparePoints(this.data.k.k[t].s,this.data.p))return!1;t+=1}else if(!this.comparePoints(this.data.k.k,this.data.p))return!1;return!0},GradientProperty.prototype.getValue=function(t){if(this.prop.getValue(),this._mdf=!1,this._cmdf=!1,this._omdf=!1,this.prop._mdf||t){var e,i,r,s=4*this.data.p;for(e=0;e<s;e+=1)i=e%4==0?100:255,r=Math.round(this.prop.v[e]*i),this.c[e]!==r&&(this.c[e]=r,this._cmdf=!t);if(this.o.length)for(s=this.prop.v.length,e=4*this.data.p;e<s;e+=1)i=e%2==0?100:1,r=e%2==0?Math.round(100*this.prop.v[e]):this.prop.v[e],this.o[e-4*this.data.p]!==r&&(this.o[e-4*this.data.p]=r,this._omdf=!t);this._mdf=!t}},extendPrototype([DynamicPropertyContainer],GradientProperty),SVGGradientFillStyleData.prototype.initGradientData=function(t,e,i){this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.s=PropertyFactory.getProp(t,e.s,1,null,this),this.e=PropertyFactory.getProp(t,e.e,1,null,this),this.h=PropertyFactory.getProp(t,e.h||{k:0},0,.01,this),this.a=PropertyFactory.getProp(t,e.a||{k:0},0,degToRads,this),this.g=new GradientProperty(t,e.g,this),this.style=i,this.stops=[],this.setGradientData(i.pElem,e),this.setGradientOpacity(e,i),this._isAnimated=!!this._isAnimated},SVGGradientFillStyleData.prototype.setGradientData=function(t,e){var i=createElementID(),r=createNS(1===e.t?\"linearGradient\":\"radialGradient\");r.setAttribute(\"id\",i),r.setAttribute(\"spreadMethod\",\"pad\"),r.setAttribute(\"gradientUnits\",\"userSpaceOnUse\");var s,a,n,o=[];for(n=4*e.g.p,a=0;a<n;a+=4)s=createNS(\"stop\"),r.appendChild(s),o.push(s);t.setAttribute(\"gf\"===e.ty?\"fill\":\"stroke\",\"url(\"+getLocationHref()+\"#\"+i+\")\"),this.gf=r,this.cst=o},SVGGradientFillStyleData.prototype.setGradientOpacity=function(t,e){if(this.g._hasOpacity&&!this.g._collapsable){var i,r,s,a=createNS(\"mask\"),n=createNS(\"path\");a.appendChild(n);var o=createElementID(),h=createElementID();a.setAttribute(\"id\",h);var l=createNS(1===t.t?\"linearGradient\":\"radialGradient\");l.setAttribute(\"id\",o),l.setAttribute(\"spreadMethod\",\"pad\"),l.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"),s=t.g.k.k[0].s?t.g.k.k[0].s.length:t.g.k.k.length;var p=this.stops;for(r=4*t.g.p;r<s;r+=2)(i=createNS(\"stop\")).setAttribute(\"stop-color\",\"rgb(255,255,255)\"),l.appendChild(i),p.push(i);n.setAttribute(\"gf\"===t.ty?\"fill\":\"stroke\",\"url(\"+getLocationHref()+\"#\"+o+\")\"),\"gs\"===t.ty&&(n.setAttribute(\"stroke-linecap\",lineCapEnum[t.lc||2]),n.setAttribute(\"stroke-linejoin\",lineJoinEnum[t.lj||2]),1===t.lj&&n.setAttribute(\"stroke-miterlimit\",t.ml)),this.of=l,this.ms=a,this.ost=p,this.maskId=h,e.msElem=n}},extendPrototype([DynamicPropertyContainer],SVGGradientFillStyleData),extendPrototype([SVGGradientFillStyleData,DynamicPropertyContainer],SVGGradientStrokeStyleData);var buildShapeString=function(t,e,i,r){if(0===e)return\"\";var s,a=t.o,n=t.i,o=t.v,h=\" M\"+r.applyToPointStringified(o[0][0],o[0][1]);for(s=1;s<e;s+=1)h+=\" C\"+r.applyToPointStringified(a[s-1][0],a[s-1][1])+\" \"+r.applyToPointStringified(n[s][0],n[s][1])+\" \"+r.applyToPointStringified(o[s][0],o[s][1]);return i&&e&&(h+=\" C\"+r.applyToPointStringified(a[s-1][0],a[s-1][1])+\" \"+r.applyToPointStringified(n[0][0],n[0][1])+\" \"+r.applyToPointStringified(o[0][0],o[0][1]),h+=\"z\"),h},SVGElementsRenderer=function(){var t=new Matrix,e=new Matrix;function i(t,e,i){(i||e.transform.op._mdf)&&e.transform.container.setAttribute(\"opacity\",e.transform.op.v),(i||e.transform.mProps._mdf)&&e.transform.container.setAttribute(\"transform\",e.transform.mProps.v.to2dCSS())}function r(){}function s(i,r,s){var a,n,o,h,l,p,f,m,c,d,u=r.styles.length,y=r.lvl;for(p=0;p<u;p+=1){if(h=r.sh._mdf||s,r.styles[p].lvl<y){for(m=e.reset(),c=y-r.styles[p].lvl,d=r.transformers.length-1;!h&&c>0;)h=r.transformers[d].mProps._mdf||h,c-=1,d-=1;if(h)for(c=y-r.styles[p].lvl,d=r.transformers.length-1;c>0;)m.multiply(r.transformers[d].mProps.v),c-=1,d-=1}else m=t;if(n=(f=r.sh.paths)._length,h){for(o=\"\",a=0;a<n;a+=1)(l=f.shapes[a])&&l._length&&(o+=buildShapeString(l,l._length,l.c,m));r.caches[p]=o}else o=r.caches[p];r.styles[p].d+=!0===i.hd?\"\":o,r.styles[p]._mdf=h||r.styles[p]._mdf}}function a(t,e,i){var r=e.style;(e.c._mdf||i)&&r.pElem.setAttribute(\"fill\",\"rgb(\"+bmFloor(e.c.v[0])+\",\"+bmFloor(e.c.v[1])+\",\"+bmFloor(e.c.v[2])+\")\"),(e.o._mdf||i)&&r.pElem.setAttribute(\"fill-opacity\",e.o.v)}function n(t,e,i){o(t,e,i),h(t,e,i)}function o(t,e,i){var r,s,a,n,o,h=e.gf,l=e.g._hasOpacity,p=e.s.v,f=e.e.v;if(e.o._mdf||i){var m=\"gf\"===t.ty?\"fill-opacity\":\"stroke-opacity\";e.style.pElem.setAttribute(m,e.o.v)}if(e.s._mdf||i){var c=1===t.t?\"x1\":\"cx\",d=\"x1\"===c?\"y1\":\"cy\";h.setAttribute(c,p[0]),h.setAttribute(d,p[1]),l&&!e.g._collapsable&&(e.of.setAttribute(c,p[0]),e.of.setAttribute(d,p[1]))}if(e.g._cmdf||i){r=e.cst;var u=e.g.c;for(a=r.length,s=0;s<a;s+=1)(n=r[s]).setAttribute(\"offset\",u[4*s]+\"%\"),n.setAttribute(\"stop-color\",\"rgb(\"+u[4*s+1]+\",\"+u[4*s+2]+\",\"+u[4*s+3]+\")\")}if(l&&(e.g._omdf||i)){var y=e.g.o;for(a=(r=e.g._collapsable?e.cst:e.ost).length,s=0;s<a;s+=1)n=r[s],e.g._collapsable||n.setAttribute(\"offset\",y[2*s]+\"%\"),n.setAttribute(\"stop-opacity\",y[2*s+1])}if(1===t.t)(e.e._mdf||i)&&(h.setAttribute(\"x2\",f[0]),h.setAttribute(\"y2\",f[1]),l&&!e.g._collapsable&&(e.of.setAttribute(\"x2\",f[0]),e.of.setAttribute(\"y2\",f[1])));else if((e.s._mdf||e.e._mdf||i)&&(o=Math.sqrt(Math.pow(p[0]-f[0],2)+Math.pow(p[1]-f[1],2)),h.setAttribute(\"r\",o),l&&!e.g._collapsable&&e.of.setAttribute(\"r\",o)),e.e._mdf||e.h._mdf||e.a._mdf||i){o||(o=Math.sqrt(Math.pow(p[0]-f[0],2)+Math.pow(p[1]-f[1],2)));var g=Math.atan2(f[1]-p[1],f[0]-p[0]),v=e.h.v;v>=1?v=.99:v<=-1&&(v=-.99);var b=o*v,x=Math.cos(g+e.a.v)*b+p[0],P=Math.sin(g+e.a.v)*b+p[1];h.setAttribute(\"fx\",x),h.setAttribute(\"fy\",P),l&&!e.g._collapsable&&(e.of.setAttribute(\"fx\",x),e.of.setAttribute(\"fy\",P))}}function h(t,e,i){var r=e.style,s=e.d;s&&(s._mdf||i)&&s.dashStr&&(r.pElem.setAttribute(\"stroke-dasharray\",s.dashStr),r.pElem.setAttribute(\"stroke-dashoffset\",s.dashoffset[0])),e.c&&(e.c._mdf||i)&&r.pElem.setAttribute(\"stroke\",\"rgb(\"+bmFloor(e.c.v[0])+\",\"+bmFloor(e.c.v[1])+\",\"+bmFloor(e.c.v[2])+\")\"),(e.o._mdf||i)&&r.pElem.setAttribute(\"stroke-opacity\",e.o.v),(e.w._mdf||i)&&(r.pElem.setAttribute(\"stroke-width\",e.w.v),r.msElem&&r.msElem.setAttribute(\"stroke-width\",e.w.v))}return{createRenderFunction:function(t){switch(t.ty){case\"fl\":return a;case\"gf\":return o;case\"gs\":return n;case\"st\":return h;case\"sh\":case\"el\":case\"rc\":case\"sr\":return s;case\"tr\":return i;case\"no\":return r;default:return null}}}}();function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,i),this.prevViewData=[]}function LetterProps(t,e,i,r,s,a){this.o=t,this.sw=e,this.sc=i,this.fc=r,this.m=s,this.p=a,this._mdf={o:!0,sw:!!e,sc:!!i,fc:!!r,m:!0,p:!0}}function TextProperty(t,e){this._frameId=initialDefaultFrame,this.pv=\"\",this.v=\"\",this.kf=!1,this._isFirstFrame=!0,this._mdf=!1,e.d&&e.d.sid&&(e.d=t.globalData.slotManager.getProp(e.d)),this.data=e,this.elem=t,this.comp=this.elem.comp,this.keysIndex=0,this.canResize=!1,this.minimumFontSize=1,this.effectsSequence=[],this.currentData={ascent:0,boxWidth:this.defaultBoxWidth,f:\"\",fStyle:\"\",fWeight:\"\",fc:\"\",j:\"\",justifyOffset:\"\",l:[],lh:0,lineWidths:[],ls:\"\",of:\"\",s:\"\",sc:\"\",sw:0,t:0,tr:0,sz:0,ps:null,fillColorAnim:!1,strokeColorAnim:!1,strokeWidthAnim:!1,yOffset:0,finalSize:0,finalText:[],finalLineHeight:0,__complete:!1},this.copyData(this.currentData,this.data.d.k[0].s),this.searchProperty()||this.completeTextData(this.currentData)}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes()},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e,i,r,s=this.shapes.length,a=this.stylesList.length,n=[],o=!1;for(i=0;i<a;i+=1){for(r=this.stylesList[i],o=!1,n.length=0,t=0;t<s;t+=1)-1!==(e=this.shapes[t]).styles.indexOf(r)&&(n.push(e),o=e._isAnimated||o);n.length>1&&o&&this.setShapesAsAnimated(n)}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e<i;e+=1)t[e].setAsAnimated()},SVGShapeElement.prototype.createStyleElement=function(t,e){var i,r=new SVGStyleData(t,e),s=r.pElem;if(\"st\"===t.ty)i=new SVGStrokeStyleData(this,t,r);else if(\"fl\"===t.ty)i=new SVGFillStyleData(this,t,r);else if(\"gf\"===t.ty||\"gs\"===t.ty){i=new(\"gf\"===t.ty?SVGGradientFillStyleData:SVGGradientStrokeStyleData)(this,t,r),this.globalData.defs.appendChild(i.gf),i.maskId&&(this.globalData.defs.appendChild(i.ms),this.globalData.defs.appendChild(i.of),s.setAttribute(\"mask\",\"url(\"+getLocationHref()+\"#\"+i.maskId+\")\"))}else\"no\"===t.ty&&(i=new SVGNoStyleData(this,t,r));return\"st\"!==t.ty&&\"gs\"!==t.ty||(s.setAttribute(\"stroke-linecap\",lineCapEnum[t.lc||2]),s.setAttribute(\"stroke-linejoin\",lineJoinEnum[t.lj||2]),s.setAttribute(\"fill-opacity\",\"0\"),1===t.lj&&s.setAttribute(\"stroke-miterlimit\",t.ml)),2===t.r&&s.setAttribute(\"fill-rule\",\"evenodd\"),t.ln&&s.setAttribute(\"id\",t.ln),t.cl&&s.setAttribute(\"class\",t.cl),t.bm&&(s.style[\"mix-blend-mode\"]=getBlendMode(t.bm)),this.stylesList.push(r),this.addToAnimatedContents(t,i),i},SVGShapeElement.prototype.createGroupElement=function(t){var e=new ShapeGroupData;return t.ln&&e.gr.setAttribute(\"id\",t.ln),t.cl&&e.gr.setAttribute(\"class\",t.cl),t.bm&&(e.gr.style[\"mix-blend-mode\"]=getBlendMode(t.bm)),e},SVGShapeElement.prototype.createTransformElement=function(t,e){var i=TransformPropertyFactory.getTransformProperty(this,t,this),r=new SVGTransformData(i,i.o,e);return this.addToAnimatedContents(t,r),r},SVGShapeElement.prototype.createShapeElement=function(t,e,i){var r=4;\"rc\"===t.ty?r=5:\"el\"===t.ty?r=6:\"sr\"===t.ty&&(r=7);var s=new SVGShapeData(e,i,ShapePropertyFactory.getShapeProp(this,t,r,this));return this.shapes.push(s),this.addShapeToModifiers(s),this.addToAnimatedContents(t,s),s},SVGShapeElement.prototype.addToAnimatedContents=function(t,e){for(var i=0,r=this.animatedContents.length;i<r;){if(this.animatedContents[i].element===e)return;i+=1}this.animatedContents.push({fn:SVGElementsRenderer.createRenderFunction(t),element:e,data:t})},SVGShapeElement.prototype.setElementStyles=function(t){var e,i=t.styles,r=this.stylesList.length;for(e=0;e<r;e+=1)this.stylesList[e].closed||i.push(this.stylesList[e])},SVGShapeElement.prototype.reloadShapes=function(){var t;this._isFirstFrame=!0;var e=this.itemsData.length;for(t=0;t<e;t+=1)this.prevViewData[t]=this.itemsData[t];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes(),e=this.dynamicProperties.length,t=0;t<e;t+=1)this.dynamicProperties[t].getValue();this.renderModifiers()},SVGShapeElement.prototype.searchShapes=function(t,e,i,r,s,a,n){var o,h,l,p,f,m,c=[].concat(a),d=t.length-1,u=[],y=[];for(o=d;o>=0;o-=1){if((m=this.searchProcessedElement(t[o]))?e[o]=i[m-1]:t[o]._render=n,\"fl\"===t[o].ty||\"st\"===t[o].ty||\"gf\"===t[o].ty||\"gs\"===t[o].ty||\"no\"===t[o].ty)m?e[o].style.closed=!1:e[o]=this.createStyleElement(t[o],s),t[o]._render&&e[o].style.pElem.parentNode!==r&&r.appendChild(e[o].style.pElem),u.push(e[o].style);else if(\"gr\"===t[o].ty){if(m)for(l=e[o].it.length,h=0;h<l;h+=1)e[o].prevViewData[h]=e[o].it[h];else e[o]=this.createGroupElement(t[o]);this.searchShapes(t[o].it,e[o].it,e[o].prevViewData,e[o].gr,s+1,c,n),t[o]._render&&e[o].gr.parentNode!==r&&r.appendChild(e[o].gr)}else\"tr\"===t[o].ty?(m||(e[o]=this.createTransformElement(t[o],r)),p=e[o].transform,c.push(p)):\"sh\"===t[o].ty||\"rc\"===t[o].ty||\"el\"===t[o].ty||\"sr\"===t[o].ty?(m||(e[o]=this.createShapeElement(t[o],c,s)),this.setElementStyles(e[o])):\"tm\"===t[o].ty||\"rd\"===t[o].ty||\"ms\"===t[o].ty||\"pb\"===t[o].ty||\"zz\"===t[o].ty||\"op\"===t[o].ty?(m?(f=e[o]).closed=!1:((f=ShapeModifiers.getModifier(t[o].ty)).init(this,t[o]),e[o]=f,this.shapeModifiers.push(f)),y.push(f)):\"rp\"===t[o].ty&&(m?(f=e[o]).closed=!0:(f=ShapeModifiers.getModifier(t[o].ty),e[o]=f,f.init(this,t,o,e),this.shapeModifiers.push(f),n=!1),y.push(f));this.addProcessedElement(t[o],o+1)}for(d=u.length,o=0;o<d;o+=1)u[o].closed=!0;for(d=y.length,o=0;o<d;o+=1)y[o].closed=!0},SVGShapeElement.prototype.renderInnerContent=function(){var t;this.renderModifiers();var e=this.stylesList.length;for(t=0;t<e;t+=1)this.stylesList[t].reset();for(this.renderShape(),t=0;t<e;t+=1)(this.stylesList[t]._mdf||this._isFirstFrame)&&(this.stylesList[t].msElem&&(this.stylesList[t].msElem.setAttribute(\"d\",this.stylesList[t].d),this.stylesList[t].d=\"M0 0\"+this.stylesList[t].d),this.stylesList[t].pElem.setAttribute(\"d\",this.stylesList[t].d||\"M0 0\"))},SVGShapeElement.prototype.renderShape=function(){var t,e,i=this.animatedContents.length;for(t=0;t<i;t+=1)e=this.animatedContents[t],(this._isFirstFrame||e.element._isAnimated)&&!0!==e.data&&e.fn(e.data,e.element,this._isFirstFrame)},SVGShapeElement.prototype.destroy=function(){this.destroyBaseElement(),this.shapesData=null,this.itemsData=null},LetterProps.prototype.update=function(t,e,i,r,s,a){this._mdf.o=!1,this._mdf.sw=!1,this._mdf.sc=!1,this._mdf.fc=!1,this._mdf.m=!1,this._mdf.p=!1;var n=!1;return this.o!==t&&(this.o=t,this._mdf.o=!0,n=!0),this.sw!==e&&(this.sw=e,this._mdf.sw=!0,n=!0),this.sc!==i&&(this.sc=i,this._mdf.sc=!0,n=!0),this.fc!==r&&(this.fc=r,this._mdf.fc=!0,n=!0),this.m!==s&&(this.m=s,this._mdf.m=!0,n=!0),!a.length||this.p[0]===a[0]&&this.p[1]===a[1]&&this.p[4]===a[4]&&this.p[5]===a[5]&&this.p[12]===a[12]&&this.p[13]===a[13]||(this.p=a,this._mdf.p=!0,n=!0),n},TextProperty.prototype.defaultBoxWidth=[0,0],TextProperty.prototype.copyData=function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},TextProperty.prototype.setCurrentData=function(t){t.__complete||this.completeTextData(t),this.currentData=t,this.currentData.boxWidth=this.currentData.boxWidth||this.defaultBoxWidth,this._mdf=!0},TextProperty.prototype.searchProperty=function(){return this.searchKeyframes()},TextProperty.prototype.searchKeyframes=function(){return this.kf=this.data.d.k.length>1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(t){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length||t){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,i=this.keysIndex;if(this.lock)this.setCurrentData(this.currentData);else{var r;this.lock=!0,this._mdf=!1;var s=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(r=0;r<s;r+=1)a=i!==this.keysIndex?this.effectsSequence[r](a,a.t):this.effectsSequence[r](this.currentData,a.t);e!==a&&this.setCurrentData(a),this.v=this.currentData,this.pv=this.v,this.lock=!1,this.frameId=this.elem.globalData.frameId}}},TextProperty.prototype.getKeyframeValue=function(){for(var t=this.data.d.k,e=this.elem.comp.renderedFrame,i=0,r=t.length;i<=r-1&&!(i===r-1||t[i+1].t>e);)i+=1;return this.keysIndex!==i&&(this.keysIndex=i),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e,i,r=[],s=0,a=t.length,n=!1,o=!1,h=\"\";s<a;)n=o,o=!1,e=t.charCodeAt(s),h=t.charAt(s),FontManager.isCombinedCharacter(e)?n=!0:e>=55296&&e<=56319?FontManager.isRegionalFlag(t,s)?h=t.substr(s,14):(i=t.charCodeAt(s+1))>=56320&&i<=57343&&(FontManager.isModifier(e,i)?(h=t.substr(s,2),n=!0):h=FontManager.isFlagEmoji(t.substr(s,4))?t.substr(s,4):t.substr(s,2)):e>56319?(i=t.charCodeAt(s+1),FontManager.isVariationSelector(e)&&(n=!0)):FontManager.isZeroWidthJoiner(e)&&(n=!0,o=!0),n?(r[r.length-1]+=h,n=!1):r.push(h),s+=h.length;return r},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e,i,r,s,a,n,o,h=this.elem.globalData.fontManager,l=this.data,p=[],f=0,m=l.m.g,c=0,d=0,u=0,y=[],g=0,v=0,b=h.getFontByName(t.f),x=0,P=getFontProperties(b);t.fWeight=P.weight,t.fStyle=P.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),i=t.finalText.length,t.finalLineHeight=t.lh;var E,S=t.tr/1e3*t.finalSize;if(t.sz)for(var C,_,A=!0,T=t.sz[0],M=t.sz[1];A;){C=0,g=0,i=(_=this.buildFinalText(t.t)).length,S=t.tr/1e3*t.finalSize;var k=-1;for(e=0;e<i;e+=1)E=_[e].charCodeAt(0),r=!1,\" \"===_[e]?k=e:13!==E&&3!==E||(g=0,r=!0,C+=t.finalLineHeight||1.2*t.finalSize),h.chars?(o=h.getCharData(_[e],b.fStyle,b.fFamily),x=r?0:o.w*t.finalSize/100):x=h.measureText(_[e],t.f,t.finalSize),g+x>T&&\" \"!==_[e]?(-1===k?i+=1:e=k,C+=t.finalLineHeight||1.2*t.finalSize,_.splice(e,k===e?1:0,\"\\r\"),k=-1,g=0):(g+=x,g+=S);C+=b.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&M<C?(t.finalSize-=1,t.finalLineHeight=t.finalSize*t.lh/t.s):(t.finalText=_,i=t.finalText.length,A=!1)}g=-S,x=0;var D,F=0;for(e=0;e<i;e+=1)if(r=!1,13===(E=(D=t.finalText[e]).charCodeAt(0))||3===E?(F=0,y.push(g),v=g>v?g:v,g=-2*S,s=\"\",r=!0,u+=1):s=D,h.chars?(o=h.getCharData(D,b.fStyle,h.getFontByName(t.f).fFamily),x=r?0:o.w*t.finalSize/100):x=h.measureText(s,t.f,t.finalSize),\" \"===D?F+=x+S:(g+=x+S+F,F=0),p.push({l:x,an:x,add:c,n:r,anIndexes:[],val:s,line:u,animatorJustifyOffset:0}),2==m){if(c+=x,\"\"===s||\" \"===s||e===i-1){for(\"\"!==s&&\" \"!==s||(c-=x);d<=e;)p[d].an=c,p[d].ind=f,p[d].extra=x,d+=1;f+=1,c=0}}else if(3==m){if(c+=x,\"\"===s||e===i-1){for(\"\"===s&&(c-=x);d<=e;)p[d].an=c,p[d].ind=f,p[d].extra=x,d+=1;c=0,f+=1}}else p[f].ind=f,p[f].extra=0,f+=1;if(t.l=p,v=g>v?g:v,y.push(g),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0}t.lineWidths=y;var w,I,V,B,R=l.a;n=R.length;var L=[];for(a=0;a<n;a+=1){for((w=R[a]).a.sc&&(t.strokeColorAnim=!0),w.a.sw&&(t.strokeWidthAnim=!0),(w.a.fc||w.a.fh||w.a.fs||w.a.fb)&&(t.fillColorAnim=!0),B=0,V=w.s.b,e=0;e<i;e+=1)(I=p[e]).anIndexes[a]=B,(1==V&&\"\"!==I.val||2==V&&\"\"!==I.val&&\" \"!==I.val||3==V&&(I.n||\" \"==I.val||e==i-1)||4==V&&(I.n||e==i-1))&&(1===w.s.rn&&L.push(B),B+=1);l.a[a].s.totalChars=B;var G,z=-1;if(1===w.s.rn)for(e=0;e<i;e+=1)z!=(I=p[e]).anIndexes[a]&&(z=I.anIndexes[a],G=L.splice(Math.floor(Math.random()*L.length),1)[0]),I.anIndexes[a]=G}t.yOffset=t.finalLineHeight||1.2*t.finalSize,t.ls=t.ls||0,t.ascent=b.ascent*t.finalSize/100},TextProperty.prototype.updateDocumentData=function(t,e){e=void 0===e?this.keysIndex:e;var i=this.copyData({},this.data.d.k[e].s);i=this.copyData(i,t),this.data.d.k[e].s=i,this.recalculate(e),this.setCurrentData(i),this.elem.addDynamicProperty(this)},TextProperty.prototype.recalculate=function(t){var e=this.data.d.k[t].s;e.__complete=!1,this.keysIndex=0,this._isFirstFrame=!0,this.getValue(e)},TextProperty.prototype.canResizeFont=function(t){this.canResize=t,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)},TextProperty.prototype.setMinimumFontSize=function(t){this.minimumFontSize=Math.floor(t)||1,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)};var TextSelectorProp=function(){var t=Math.max,e=Math.min,i=Math.floor;function r(t,e){this._currentTextLength=-1,this.k=!1,this.data=e,this.elem=t,this.comp=t.comp,this.finalS=0,this.finalE=0,this.initDynamicPropertyContainer(t),this.s=PropertyFactory.getProp(t,e.s||{k:0},0,0,this),this.e=\"e\"in e?PropertyFactory.getProp(t,e.e,0,0,this):{v:100},this.o=PropertyFactory.getProp(t,e.o||{k:0},0,0,this),this.xe=PropertyFactory.getProp(t,e.xe||{k:0},0,0,this),this.ne=PropertyFactory.getProp(t,e.ne||{k:0},0,0,this),this.sm=PropertyFactory.getProp(t,e.sm||{k:100},0,0,this),this.a=PropertyFactory.getProp(t,e.a,0,.01,this),this.dynamicProperties.length||this.getValue()}return r.prototype={getMult:function(r){this._currentTextLength!==this.elem.textProperty.currentData.l.length&&this.getValue();var s=0,a=0,n=1,o=1;this.ne.v>0?s=this.ne.v/100:a=-this.ne.v/100,this.xe.v>0?n=1-this.xe.v/100:o=1+this.xe.v/100;var h=BezierFactory.getBezierEasing(s,a,n,o).get,l=0,p=this.finalS,f=this.finalE,m=this.data.sh;if(2===m)l=h(l=f===p?r>=f?1:0:t(0,e(.5/(f-p)+(r-p)/(f-p),1)));else if(3===m)l=h(l=f===p?r>=f?0:1:1-t(0,e(.5/(f-p)+(r-p)/(f-p),1)));else if(4===m)f===p?l=0:(l=t(0,e(.5/(f-p)+(r-p)/(f-p),1)))<.5?l*=2:l=1-2*(l-.5),l=h(l);else if(5===m){if(f===p)l=0;else{var c=f-p,d=-c/2+(r=e(t(0,r+.5-p),f-p)),u=c/2;l=Math.sqrt(1-d*d/(u*u))}l=h(l)}else 6===m?(f===p?l=0:(r=e(t(0,r+.5-p),f-p),l=(1+Math.cos(Math.PI+2*Math.PI*r/(f-p)))/2),l=h(l)):(r>=i(p)&&(l=t(0,e(r-p<0?e(f,1)-(p-r):f-r,1))),l=h(l));if(100!==this.sm.v){var y=.01*this.sm.v;0===y&&(y=1e-8);var g=.5-.5*y;l<g?l=0:(l=(l-g)/y)>1&&(l=1)}return l*this.a.v},getValue:function(t){this.iterateDynamicProperties(),this._mdf=t||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,t&&2===this.data.r&&(this.e.v=this._currentTextLength);var e=2===this.data.r?1:100/this.data.totalChars,i=this.o.v/e,r=this.s.v/e+i,s=this.e.v/e+i;if(r>s){var a=r;r=s,s=a}this.finalS=r,this.finalE=s}},extendPrototype([DynamicPropertyContainer],r),{getTextSelectorProp:function(t,e,i){return new r(t,e,i)}}}();function TextAnimatorDataProperty(t,e,i){var r={propType:!1},s=PropertyFactory.getProp,a=e.a;this.a={r:a.r?s(t,a.r,0,degToRads,i):r,rx:a.rx?s(t,a.rx,0,degToRads,i):r,ry:a.ry?s(t,a.ry,0,degToRads,i):r,sk:a.sk?s(t,a.sk,0,degToRads,i):r,sa:a.sa?s(t,a.sa,0,degToRads,i):r,s:a.s?s(t,a.s,1,.01,i):r,a:a.a?s(t,a.a,1,0,i):r,o:a.o?s(t,a.o,0,.01,i):r,p:a.p?s(t,a.p,1,0,i):r,sw:a.sw?s(t,a.sw,0,0,i):r,sc:a.sc?s(t,a.sc,1,0,i):r,fc:a.fc?s(t,a.fc,1,0,i):r,fh:a.fh?s(t,a.fh,0,0,i):r,fs:a.fs?s(t,a.fs,0,.01,i):r,fb:a.fb?s(t,a.fb,0,.01,i):r,t:a.t?s(t,a.t,0,0,i):r},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,i),this.s.t=e.s.t}function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=i,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(i)}function ITextElement(){}TextAnimatorProperty.prototype.searchProperties=function(){var t,e,i=this._textData.a.length,r=PropertyFactory.getProp;for(t=0;t<i;t+=1)e=this._textData.a[t],this._animatorsData[t]=new TextAnimatorDataProperty(this._elem,e,this);this._textData.p&&\"m\"in this._textData.p?(this._pathData={a:r(this._elem,this._textData.p.a,0,0,this),f:r(this._elem,this._textData.p.f,0,0,this),l:r(this._elem,this._textData.p.l,0,0,this),r:r(this._elem,this._textData.p.r,0,0,this),p:r(this._elem,this._textData.p.p,0,0,this),m:this._elem.maskManager.getMaskProperty(this._textData.p.m)},this._hasMaskedPath=!0):this._hasMaskedPath=!1,this._moreOptions.alignment=r(this._elem,this._textData.m.a,1,0,this)},TextAnimatorProperty.prototype.getMeasures=function(t,e){if(this.lettersChangedFlag=e,this._mdf||this._isFirstFrame||e||this._hasMaskedPath&&this._pathData.m._mdf){this._isFirstFrame=!1;var i,r,s,a,n,o,h,l,p,f,m,c,d,u,y,g,v,b,x,P=this._moreOptions.alignment.v,E=this._animatorsData,S=this._textData,C=this.mHelper,_=this._renderType,A=this.renderedLetters.length,T=t.l;if(this._hasMaskedPath){if(x=this._pathData.m,!this._pathData.n||this._pathData._mdf){var M,k=x.v;for(this._pathData.r.v&&(k=k.reverse()),n={tLength:0,segments:[]},a=k._length-1,g=0,s=0;s<a;s+=1)M=bez.buildBezierData(k.v[s],k.v[s+1],[k.o[s][0]-k.v[s][0],k.o[s][1]-k.v[s][1]],[k.i[s+1][0]-k.v[s+1][0],k.i[s+1][1]-k.v[s+1][1]]),n.tLength+=M.segmentLength,n.segments.push(M),g+=M.segmentLength;s=a,x.v.c&&(M=bez.buildBezierData(k.v[s],k.v[0],[k.o[s][0]-k.v[s][0],k.o[s][1]-k.v[s][1]],[k.i[0][0]-k.v[0][0],k.i[0][1]-k.v[0][1]]),n.tLength+=M.segmentLength,n.segments.push(M),g+=M.segmentLength),this._pathData.pi=n}if(n=this._pathData.pi,o=this._pathData.f.v,m=0,f=1,l=0,p=!0,u=n.segments,o<0&&x.v.c)for(n.tLength<Math.abs(o)&&(o=-Math.abs(o)%n.tLength),f=(d=u[m=u.length-1].points).length-1;o<0;)o+=d[f].partialLength,(f-=1)<0&&(f=(d=u[m-=1].points).length-1);c=(d=u[m].points)[f-1],y=(h=d[f]).partialLength}a=T.length,i=0,r=0;var D,F,w,I,V,B=1.2*t.finalSize*.714,R=!0;w=E.length;var L,G,z,O,N,H,q,j,W,$,Y,J,X=-1,Z=o,K=m,U=f,Q=-1,tt=\"\",et=this.defaultPropsArray;if(2===t.j||1===t.j){var it=0,rt=0,st=2===t.j?-.5:-1,at=0,nt=!0;for(s=0;s<a;s+=1)if(T[s].n){for(it&&(it+=rt);at<s;)T[at].animatorJustifyOffset=it,at+=1;it=0,nt=!0}else{for(F=0;F<w;F+=1)(D=E[F].a).t.propType&&(nt&&2===t.j&&(rt+=D.t.v*st),(V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars)).length?it+=D.t.v*V[0]*st:it+=D.t.v*V*st);nt=!1}for(it&&(it+=rt);at<s;)T[at].animatorJustifyOffset=it,at+=1}for(s=0;s<a;s+=1){if(C.reset(),O=1,T[s].n)i=0,r+=t.yOffset,r+=R?1:0,o=Z,R=!1,this._hasMaskedPath&&(f=U,c=(d=u[m=K].points)[f-1],y=(h=d[f]).partialLength,l=0),tt=\"\",Y=\"\",W=\"\",J=\"\",et=this.defaultPropsArray;else{if(this._hasMaskedPath){if(Q!==T[s].line){switch(t.j){case 1:o+=g-t.lineWidths[T[s].line];break;case 2:o+=(g-t.lineWidths[T[s].line])/2}Q=T[s].line}X!==T[s].ind&&(T[X]&&(o+=T[X].extra),o+=T[s].an/2,X=T[s].ind),o+=P[0]*T[s].an*.005;var ot=0;for(F=0;F<w;F+=1)(D=E[F].a).p.propType&&((V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars)).length?ot+=D.p.v[0]*V[0]:ot+=D.p.v[0]*V),D.a.propType&&((V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars)).length?ot+=D.a.v[0]*V[0]:ot+=D.a.v[0]*V);for(p=!0,this._pathData.a.v&&(o=.5*T[0].an+(g-this._pathData.f.v-.5*T[0].an-.5*T[T.length-1].an)*X/(a-1),o+=this._pathData.f.v);p;)l+y>=o+ot||!d?(v=(o+ot-l)/h.partialLength,G=c.point[0]+(h.point[0]-c.point[0])*v,z=c.point[1]+(h.point[1]-c.point[1])*v,C.translate(-P[0]*T[s].an*.005,-P[1]*B*.01),p=!1):d&&(l+=h.partialLength,(f+=1)>=d.length&&(f=0,u[m+=1]?d=u[m].points:x.v.c?(f=0,d=u[m=0].points):(l-=h.partialLength,d=null)),d&&(c=h,y=(h=d[f]).partialLength));L=T[s].an/2-T[s].add,C.translate(-L,0,0)}else L=T[s].an/2-T[s].add,C.translate(-L,0,0),C.translate(-P[0]*T[s].an*.005,-P[1]*B*.01,0);for(F=0;F<w;F+=1)(D=E[F].a).t.propType&&(V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars),0===i&&0===t.j||(this._hasMaskedPath?V.length?o+=D.t.v*V[0]:o+=D.t.v*V:V.length?i+=D.t.v*V[0]:i+=D.t.v*V));for(t.strokeWidthAnim&&(H=t.sw||0),t.strokeColorAnim&&(N=t.sc?[t.sc[0],t.sc[1],t.sc[2]]:[0,0,0]),t.fillColorAnim&&t.fc&&(q=[t.fc[0],t.fc[1],t.fc[2]]),F=0;F<w;F+=1)(D=E[F].a).a.propType&&((V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars)).length?C.translate(-D.a.v[0]*V[0],-D.a.v[1]*V[1],D.a.v[2]*V[2]):C.translate(-D.a.v[0]*V,-D.a.v[1]*V,D.a.v[2]*V));for(F=0;F<w;F+=1)(D=E[F].a).s.propType&&((V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars)).length?C.scale(1+(D.s.v[0]-1)*V[0],1+(D.s.v[1]-1)*V[1],1):C.scale(1+(D.s.v[0]-1)*V,1+(D.s.v[1]-1)*V,1));for(F=0;F<w;F+=1){if(D=E[F].a,V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars),D.sk.propType&&(V.length?C.skewFromAxis(-D.sk.v*V[0],D.sa.v*V[1]):C.skewFromAxis(-D.sk.v*V,D.sa.v*V)),D.r.propType&&(V.length?C.rotateZ(-D.r.v*V[2]):C.rotateZ(-D.r.v*V)),D.ry.propType&&(V.length?C.rotateY(D.ry.v*V[1]):C.rotateY(D.ry.v*V)),D.rx.propType&&(V.length?C.rotateX(D.rx.v*V[0]):C.rotateX(D.rx.v*V)),D.o.propType&&(V.length?O+=(D.o.v*V[0]-O)*V[0]:O+=(D.o.v*V-O)*V),t.strokeWidthAnim&&D.sw.propType&&(V.length?H+=D.sw.v*V[0]:H+=D.sw.v*V),t.strokeColorAnim&&D.sc.propType)for(j=0;j<3;j+=1)V.length?N[j]+=(D.sc.v[j]-N[j])*V[0]:N[j]+=(D.sc.v[j]-N[j])*V;if(t.fillColorAnim&&t.fc){if(D.fc.propType)for(j=0;j<3;j+=1)V.length?q[j]+=(D.fc.v[j]-q[j])*V[0]:q[j]+=(D.fc.v[j]-q[j])*V;D.fh.propType&&(q=V.length?addHueToRGB(q,D.fh.v*V[0]):addHueToRGB(q,D.fh.v*V)),D.fs.propType&&(q=V.length?addSaturationToRGB(q,D.fs.v*V[0]):addSaturationToRGB(q,D.fs.v*V)),D.fb.propType&&(q=V.length?addBrightnessToRGB(q,D.fb.v*V[0]):addBrightnessToRGB(q,D.fb.v*V))}}for(F=0;F<w;F+=1)(D=E[F].a).p.propType&&(V=E[F].s.getMult(T[s].anIndexes[F],S.a[F].s.totalChars),this._hasMaskedPath?V.length?C.translate(0,D.p.v[1]*V[0],-D.p.v[2]*V[1]):C.translate(0,D.p.v[1]*V,-D.p.v[2]*V):V.length?C.translate(D.p.v[0]*V[0],D.p.v[1]*V[1],-D.p.v[2]*V[2]):C.translate(D.p.v[0]*V,D.p.v[1]*V,-D.p.v[2]*V));if(t.strokeWidthAnim&&(W=H<0?0:H),t.strokeColorAnim&&($=\"rgb(\"+Math.round(255*N[0])+\",\"+Math.round(255*N[1])+\",\"+Math.round(255*N[2])+\")\"),t.fillColorAnim&&t.fc&&(Y=\"rgb(\"+Math.round(255*q[0])+\",\"+Math.round(255*q[1])+\",\"+Math.round(255*q[2])+\")\"),this._hasMaskedPath){if(C.translate(0,-t.ls),C.translate(0,P[1]*B*.01+r,0),this._pathData.p.v){b=(h.point[1]-c.point[1])/(h.point[0]-c.point[0]);var ht=180*Math.atan(b)/Math.PI;h.point[0]<c.point[0]&&(ht+=180),C.rotate(-ht*Math.PI/180)}C.translate(G,z,0),o-=P[0]*T[s].an*.005,T[s+1]&&X!==T[s+1].ind&&(o+=T[s].an/2,o+=.001*t.tr*t.finalSize)}else{switch(C.translate(i,r,0),t.ps&&C.translate(t.ps[0],t.ps[1]+t.ascent,0),t.j){case 1:C.translate(T[s].animatorJustifyOffset+t.justifyOffset+(t.boxWidth-t.lineWidths[T[s].line]),0,0);break;case 2:C.translate(T[s].animatorJustifyOffset+t.justifyOffset+(t.boxWidth-t.lineWidths[T[s].line])/2,0,0)}C.translate(0,-t.ls),C.translate(L,0,0),C.translate(P[0]*T[s].an*.005,P[1]*B*.01,0),i+=T[s].l+.001*t.tr*t.finalSize}\"html\"===_?tt=C.toCSS():\"svg\"===_?tt=C.to2dCSS():et=[C.props[0],C.props[1],C.props[2],C.props[3],C.props[4],C.props[5],C.props[6],C.props[7],C.props[8],C.props[9],C.props[10],C.props[11],C.props[12],C.props[13],C.props[14],C.props[15]],J=O}A<=s?(I=new LetterProps(J,W,$,Y,tt,et),this.renderedLetters.push(I),A+=1,this.lettersChangedFlag=!0):(I=this.renderedLetters[s],this.lettersChangedFlag=I.update(J,W,$,Y,tt,et)||this.lettersChangedFlag)}}},TextAnimatorProperty.prototype.getValue=function(){this._elem.globalData.frameId!==this._frameId&&(this._frameId=this._elem.globalData.frameId,this.iterateDynamicProperties())},TextAnimatorProperty.prototype.mHelper=new Matrix,TextAnimatorProperty.prototype.defaultPropsArray=[],extendPrototype([DynamicPropertyContainer],TextAnimatorProperty),ITextElement.prototype.initElement=function(t,e,i){this.lettersChangedFlag=!0,this.initFrame(),this.initBaseData(t,e,i),this.textProperty=new TextProperty(this,t.t,this.dynamicProperties),this.textAnimator=new TextAnimatorProperty(t.t,this.renderType,this),this.initTransform(t,e,i),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide(),this.textAnimator.searchProperties(this.dynamicProperties)},ITextElement.prototype.prepareFrame=function(t){this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange)},ITextElement.prototype.createPathShape=function(t,e){var i,r,s=e.length,a=\"\";for(i=0;i<s;i+=1)\"sh\"===e[i].ty&&(r=e[i].ks.k,a+=buildShapeString(r,r.i.length,!0,t));return a},ITextElement.prototype.updateDocumentData=function(t,e){this.textProperty.updateDocumentData(t,e)},ITextElement.prototype.canResizeFont=function(t){this.textProperty.canResizeFont(t)},ITextElement.prototype.setMinimumFontSize=function(t){this.textProperty.setMinimumFontSize(t)},ITextElement.prototype.applyTextPropertiesToMatrix=function(t,e,i,r,s){switch(t.ps&&e.translate(t.ps[0],t.ps[1]+t.ascent,0),e.translate(0,-t.ls,0),t.j){case 1:e.translate(t.justifyOffset+(t.boxWidth-t.lineWidths[i]),0,0);break;case 2:e.translate(t.justifyOffset+(t.boxWidth-t.lineWidths[i])/2,0,0)}e.translate(r,s,0)},ITextElement.prototype.buildColor=function(t){return\"rgb(\"+Math.round(255*t[0])+\",\"+Math.round(255*t[1])+\",\"+Math.round(255*t[2])+\")\"},ITextElement.prototype.emptyProp=new LetterProps,ITextElement.prototype.destroy=function(){},ITextElement.prototype.validateText=function(){(this.textProperty._mdf||this.textProperty._isFirstFrame)&&(this.buildNewText(),this.textProperty._isFirstFrame=!1,this.textProperty._mdf=!1)};var emptyShapeData={shapes:[]};function SVGTextLottieElement(t,e,i){this.textSpans=[],this.renderType=\"svg\",this.initElement(t,e,i)}function ISolidElement(t,e,i){this.initElement(t,e,i)}function NullElement(t,e,i){this.initFrame(),this.initBaseData(t,e,i),this.initFrame(),this.initTransform(t,e,i),this.initHierarchy()}function SVGRendererBase(){}function ICompElement(){}function SVGCompElement(t,e,i){this.layers=t.layers,this.supports3d=!0,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(t,e,i),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function SVGRenderer(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.svgElement=createNS(\"svg\");var i=\"\";if(e&&e.title){var r=createNS(\"title\"),s=createElementID();r.setAttribute(\"id\",s),r.textContent=e.title,this.svgElement.appendChild(r),i+=s}if(e&&e.description){var a=createNS(\"desc\"),n=createElementID();a.setAttribute(\"id\",n),a.textContent=e.description,this.svgElement.appendChild(a),i+=\" \"+n}i&&this.svgElement.setAttribute(\"aria-labelledby\",i);var o=createNS(\"defs\");this.svgElement.appendChild(o);var h=createNS(\"g\");this.svgElement.appendChild(h),this.layerElement=h,this.renderConfig={preserveAspectRatio:e&&e.preserveAspectRatio||\"xMidYMid meet\",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||\"xMidYMid slice\",contentVisibility:e&&e.contentVisibility||\"visible\",progressiveLoad:e&&e.progressiveLoad||!1,hideOnTransparent:!(e&&!1===e.hideOnTransparent),viewBoxOnly:e&&e.viewBoxOnly||!1,viewBoxSize:e&&e.viewBoxSize||!1,className:e&&e.className||\"\",id:e&&e.id||\"\",focusable:e&&e.focusable,filterSize:{width:e&&e.filterSize&&e.filterSize.width||\"100%\",height:e&&e.filterSize&&e.filterSize.height||\"100%\",x:e&&e.filterSize&&e.filterSize.x||\"0%\",y:e&&e.filterSize&&e.filterSize.y||\"0%\"},width:e&&e.width,height:e&&e.height,runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.globalData={_mdf:!1,frameNum:-1,defs:o,renderConfig:this.renderConfig},this.elements=[],this.pendingElements=[],this.destroyed=!1,this.rendererType=\"svg\"}function ShapeTransformManager(){this.sequences={},this.sequenceList=[],this.transform_key_count=0}extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],SVGTextLottieElement),SVGTextLottieElement.prototype.createContent=function(){this.data.singleShape&&!this.globalData.fontManager.chars&&(this.textContainer=createNS(\"text\"))},SVGTextLottieElement.prototype.buildTextContents=function(t){for(var e=0,i=t.length,r=[],s=\"\";e<i;)t[e]===String.fromCharCode(13)||t[e]===String.fromCharCode(3)?(r.push(s),s=\"\"):s+=t[e],e+=1;return r.push(s),r},SVGTextLottieElement.prototype.buildShapeData=function(t,e){if(t.shapes&&t.shapes.length){var i=t.shapes[0];if(i.it){var r=i.it[i.it.length-1];r.s&&(r.s.k[0]=e,r.s.k[1]=e)}}return t},SVGTextLottieElement.prototype.buildNewText=function(){var t,e;this.addDynamicProperty(this);var i=this.textProperty.currentData;this.renderedLetters=createSizedArray(i?i.l.length:0),i.fc?this.layerElement.setAttribute(\"fill\",this.buildColor(i.fc)):this.layerElement.setAttribute(\"fill\",\"rgba(0,0,0,0)\"),i.sc&&(this.layerElement.setAttribute(\"stroke\",this.buildColor(i.sc)),this.layerElement.setAttribute(\"stroke-width\",i.sw)),this.layerElement.setAttribute(\"font-size\",i.finalSize);var r=this.globalData.fontManager.getFontByName(i.f);if(r.fClass)this.layerElement.setAttribute(\"class\",r.fClass);else{this.layerElement.setAttribute(\"font-family\",r.fFamily);var s=i.fWeight,a=i.fStyle;this.layerElement.setAttribute(\"font-style\",a),this.layerElement.setAttribute(\"font-weight\",s)}this.layerElement.setAttribute(\"aria-label\",i.t);var n,o=i.l||[],h=!!this.globalData.fontManager.chars;e=o.length;var l=this.mHelper,p=this.data.singleShape,f=0,m=0,c=!0,d=.001*i.tr*i.finalSize;if(!p||h||i.sz){var u,y=this.textSpans.length;for(t=0;t<e;t+=1){if(this.textSpans[t]||(this.textSpans[t]={span:null,childSpan:null,glyph:null}),!h||!p||0===t){if(n=y>t?this.textSpans[t].span:createNS(h?\"g\":\"text\"),y<=t){if(n.setAttribute(\"stroke-linecap\",\"butt\"),n.setAttribute(\"stroke-linejoin\",\"round\"),n.setAttribute(\"stroke-miterlimit\",\"4\"),this.textSpans[t].span=n,h){var g=createNS(\"g\");n.appendChild(g),this.textSpans[t].childSpan=g}this.textSpans[t].span=n,this.layerElement.appendChild(n)}n.style.display=\"inherit\"}if(l.reset(),p&&(o[t].n&&(f=-d,m+=i.yOffset,m+=c?1:0,c=!1),this.applyTextPropertiesToMatrix(i,l,o[t].line,f,m),f+=o[t].l||0,f+=d),h){var v;if(1===(u=this.globalData.fontManager.getCharData(i.finalText[t],r.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily)).t)v=new SVGCompElement(u.data,this.globalData,this);else{var b=emptyShapeData;u.data&&u.data.shapes&&(b=this.buildShapeData(u.data,i.finalSize)),v=new SVGShapeElement(b,this.globalData,this)}if(this.textSpans[t].glyph){var x=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(x.layerElement),x.destroy()}this.textSpans[t].glyph=v,v._debug=!0,v.prepareFrame(0),v.renderFrame(),this.textSpans[t].childSpan.appendChild(v.layerElement),1===u.t&&this.textSpans[t].childSpan.setAttribute(\"transform\",\"scale(\"+i.finalSize/100+\",\"+i.finalSize/100+\")\")}else p&&n.setAttribute(\"transform\",\"translate(\"+l.props[12]+\",\"+l.props[13]+\")\"),n.textContent=o[t].val,n.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",\"preserve\")}p&&n&&n.setAttribute(\"d\",\"\")}else{var P=this.textContainer,E=\"start\";switch(i.j){case 1:E=\"end\";break;case 2:E=\"middle\";break;default:E=\"start\"}P.setAttribute(\"text-anchor\",E),P.setAttribute(\"letter-spacing\",d);var S=this.buildTextContents(i.finalText);for(e=S.length,m=i.ps?i.ps[1]+i.ascent:0,t=0;t<e;t+=1)(n=this.textSpans[t].span||createNS(\"tspan\")).textContent=S[t],n.setAttribute(\"x\",0),n.setAttribute(\"y\",m),n.style.display=\"inherit\",P.appendChild(n),this.textSpans[t]||(this.textSpans[t]={span:null,glyph:null}),this.textSpans[t].span=n,m+=i.finalLineHeight;this.layerElement.appendChild(P)}for(;t<this.textSpans.length;)this.textSpans[t].span.style.display=\"none\",t+=1;this._sizeChanged=!0},SVGTextLottieElement.prototype.sourceRectAtTime=function(){if(this.prepareFrame(this.comp.renderedFrame-this.data.st),this.renderInnerContent(),this._sizeChanged){this._sizeChanged=!1;var t=this.layerElement.getBBox();this.bbox={top:t.y,left:t.x,width:t.width,height:t.height}}return this.bbox},SVGTextLottieElement.prototype.getValue=function(){var t,e,i=this.textSpans.length;for(this.renderedFrame=this.comp.renderedFrame,t=0;t<i;t+=1)(e=this.textSpans[t].glyph)&&(e.prepareFrame(this.comp.renderedFrame-this.data.st),e._mdf&&(this._mdf=!0))},SVGTextLottieElement.prototype.renderInnerContent=function(){if(this.validateText(),(!this.data.singleShape||this._mdf)&&(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),this.lettersChangedFlag||this.textAnimator.lettersChangedFlag)){var t,e;this._sizeChanged=!0;var i,r,s,a=this.textAnimator.renderedLetters,n=this.textProperty.currentData.l;for(e=n.length,t=0;t<e;t+=1)n[t].n||(i=a[t],r=this.textSpans[t].span,(s=this.textSpans[t].glyph)&&s.renderFrame(),i._mdf.m&&r.setAttribute(\"transform\",i.m),i._mdf.o&&r.setAttribute(\"opacity\",i.o),i._mdf.sw&&r.setAttribute(\"stroke-width\",i.sw),i._mdf.sc&&r.setAttribute(\"stroke\",i.sc),i._mdf.fc&&r.setAttribute(\"fill\",i.fc))}},extendPrototype([IImageElement],ISolidElement),ISolidElement.prototype.createContent=function(){var t=createNS(\"rect\");t.setAttribute(\"width\",this.data.sw),t.setAttribute(\"height\",this.data.sh),t.setAttribute(\"fill\",this.data.sc),this.layerElement.appendChild(t)},NullElement.prototype.prepareFrame=function(t){this.prepareProperties(t,!0)},NullElement.prototype.renderFrame=function(){},NullElement.prototype.getBaseElement=function(){return null},NullElement.prototype.destroy=function(){},NullElement.prototype.sourceRectAtTime=function(){},NullElement.prototype.hide=function(){},extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement],NullElement),extendPrototype([BaseRenderer],SVGRendererBase),SVGRendererBase.prototype.createNull=function(t){return new NullElement(t,this.globalData,this)},SVGRendererBase.prototype.createShape=function(t){return new SVGShapeElement(t,this.globalData,this)},SVGRendererBase.prototype.createText=function(t){return new SVGTextLottieElement(t,this.globalData,this)},SVGRendererBase.prototype.createImage=function(t){return new IImageElement(t,this.globalData,this)},SVGRendererBase.prototype.createSolid=function(t){return new ISolidElement(t,this.globalData,this)},SVGRendererBase.prototype.configAnimation=function(t){this.svgElement.setAttribute(\"xmlns\",\"http://www.w3.org/2000/svg\"),this.svgElement.setAttribute(\"xmlns:xlink\",\"http://www.w3.org/1999/xlink\"),this.renderConfig.viewBoxSize?this.svgElement.setAttribute(\"viewBox\",this.renderConfig.viewBoxSize):this.svgElement.setAttribute(\"viewBox\",\"0 0 \"+t.w+\" \"+t.h),this.renderConfig.viewBoxOnly||(this.svgElement.setAttribute(\"width\",t.w),this.svgElement.setAttribute(\"height\",t.h),this.svgElement.style.width=\"100%\",this.svgElement.style.height=\"100%\",this.svgElement.style.transform=\"translate3d(0,0,0)\",this.svgElement.style.contentVisibility=this.renderConfig.contentVisibility),this.renderConfig.width&&this.svgElement.setAttribute(\"width\",this.renderConfig.width),this.renderConfig.height&&this.svgElement.setAttribute(\"height\",this.renderConfig.height),this.renderConfig.className&&this.svgElement.setAttribute(\"class\",this.renderConfig.className),this.renderConfig.id&&this.svgElement.setAttribute(\"id\",this.renderConfig.id),void 0!==this.renderConfig.focusable&&this.svgElement.setAttribute(\"focusable\",this.renderConfig.focusable),this.svgElement.setAttribute(\"preserveAspectRatio\",this.renderConfig.preserveAspectRatio),this.animationItem.wrapper.appendChild(this.svgElement);var e=this.globalData.defs;this.setupGlobalData(t,e),this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.data=t;var i=createNS(\"clipPath\"),r=createNS(\"rect\");r.setAttribute(\"width\",t.w),r.setAttribute(\"height\",t.h),r.setAttribute(\"x\",0),r.setAttribute(\"y\",0);var s=createElementID();i.setAttribute(\"id\",s),i.appendChild(r),this.layerElement.setAttribute(\"clip-path\",\"url(\"+getLocationHref()+\"#\"+s+\")\"),e.appendChild(i),this.layers=t.layers,this.elements=createSizedArray(t.layers.length)},SVGRendererBase.prototype.destroy=function(){var t;this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=\"\"),this.layerElement=null,this.globalData.defs=null;var e=this.layers?this.layers.length:0;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},SVGRendererBase.prototype.updateContainerSize=function(){},SVGRendererBase.prototype.findIndexByInd=function(t){var e=0,i=this.layers.length;for(e=0;e<i;e+=1)if(this.layers[e].ind===t)return e;return-1},SVGRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!==this.layers[t].ty){e[t]=!0;var i=this.createItem(this.layers[t]);if(e[t]=i,getExpressionsPlugin()&&(0===this.layers[t].ty&&this.globalData.projectInterface.registerComposition(i),i.initExpressions()),this.appendElementInPos(i,t),this.layers[t].tt){var r=\"tp\"in this.layers[t]?this.findIndexByInd(this.layers[t].tp):t-1;if(-1===r)return;if(this.elements[r]&&!0!==this.elements[r]){var s=e[r].getMatte(this.layers[t].tt);i.setMatte(s)}else this.buildItem(r),this.addPendingElement(i)}}},SVGRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();if(t.checkParenting(),t.data.tt)for(var e=0,i=this.elements.length;e<i;){if(this.elements[e]===t){var r=\"tp\"in t.data?this.findIndexByInd(t.data.tp):e-1,s=this.elements[r].getMatte(this.layers[e].tt);t.setMatte(s);break}e+=1}}},SVGRendererBase.prototype.renderFrame=function(t){if(this.renderedFrame!==t&&!this.destroyed){var e;null===t?t=this.renderedFrame:this.renderedFrame=t,this.globalData.frameNum=t,this.globalData.frameId+=1,this.globalData.projectInterface.currentFrame=t,this.globalData._mdf=!1;var i=this.layers.length;for(this.completeLayers||this.checkLayers(t),e=i-1;e>=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e<i;e+=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame()}},SVGRendererBase.prototype.appendElementInPos=function(t,e){var i=t.getBaseElement();if(i){for(var r,s=0;s<e;)this.elements[s]&&!0!==this.elements[s]&&this.elements[s].getBaseElement()&&(r=this.elements[s].getBaseElement()),s+=1;r?this.layerElement.insertBefore(i,r):this.layerElement.appendChild(i)}},SVGRendererBase.prototype.hide=function(){this.layerElement.style.display=\"none\"},SVGRendererBase.prototype.show=function(){this.layerElement.style.display=\"block\"},extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement,RenderableDOMElement],ICompElement),ICompElement.prototype.initElement=function(t,e,i){this.initFrame(),this.initBaseData(t,e,i),this.initTransform(t,e,i),this.initRenderable(),this.initHierarchy(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),!this.data.xt&&e.progressiveLoad||this.buildAllItems(),this.hide()},ICompElement.prototype.prepareFrame=function(t){if(this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange),this.isInRange||this.data.xt){if(this.tm._placeholder)this.renderedFrame=t/this.data.sr;else{var e=this.tm.v;e===this.data.op&&(e=this.data.op-1),this.renderedFrame=e}var i,r=this.elements.length;for(this.completeLayers||this.checkLayers(this.renderedFrame),i=r-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},ICompElement.prototype.setElements=function(t){this.elements=t},ICompElement.prototype.getElements=function(){return this.elements},ICompElement.prototype.destroyElements=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy()},ICompElement.prototype.destroy=function(){this.destroyElements(),this.destroyBaseElement()},extendPrototype([SVGRendererBase,ICompElement,SVGBaseElement],SVGCompElement),SVGCompElement.prototype.createComp=function(t){return new SVGCompElement(t,this.globalData,this)},extendPrototype([SVGRendererBase],SVGRenderer),SVGRenderer.prototype.createComp=function(t){return new SVGCompElement(t,this.globalData,this)},ShapeTransformManager.prototype={addTransformSequence:function(t){var e,i=t.length,r=\"_\";for(e=0;e<i;e+=1)r+=t[e].transform.key+\"_\";var s=this.sequences[r];return s||(s={transforms:[].concat(t),finalTransform:new Matrix,_mdf:!1},this.sequences[r]=s,this.sequenceList.push(s)),s},processSequence:function(t,e){for(var i=0,r=t.transforms.length,s=e;i<r&&!e;){if(t.transforms[i].transform.mProps._mdf){s=!0;break}i+=1}if(s)for(t.finalTransform.reset(),i=r-1;i>=0;i-=1)t.finalTransform.multiply(t.transforms[i].transform.mProps.v);t._mdf=s},processSequences:function(t){var e,i=this.sequenceList.length;for(e=0;e<i;e+=1)this.processSequence(this.sequenceList[e],t)},getNewKey:function(){return this.transform_key_count+=1,\"_\"+this.transform_key_count}};var lumaLoader=function(){var t=\"__lottie_element_luma_buffer\",e=null,i=null,r=null;function s(){var s,a,n;e||(s=createNS(\"svg\"),a=createNS(\"filter\"),n=createNS(\"feColorMatrix\"),a.setAttribute(\"id\",t),n.setAttribute(\"type\",\"matrix\"),n.setAttribute(\"color-interpolation-filters\",\"sRGB\"),n.setAttribute(\"values\",\"0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0\"),a.appendChild(n),s.appendChild(a),s.setAttribute(\"id\",t+\"_svg\"),featureSupport.svgLumaHidden&&(s.style.display=\"none\"),r=s,document.body.appendChild(r),e=createTag(\"canvas\"),(i=e.getContext(\"2d\")).filter=\"url(#\"+t+\")\",i.fillStyle=\"rgba(0,0,0,0)\",i.fillRect(0,0,1,1))}return{load:s,get:function(r){return e||s(),e.width=r.width,e.height=r.height,i.filter=\"url(#\"+t+\")\",e}}};function createCanvas(t,e){if(featureSupport.offscreenCanvas)return new OffscreenCanvas(t,e);var i=createTag(\"canvas\");return i.width=t,i.height=e,i}var assetLoader={loadLumaCanvas:lumaLoader.load,getLumaCanvas:lumaLoader.get,createCanvas:createCanvas},registeredEffects={};function CVEffects(t){var e,i,r=t.data.ef?t.data.ef.length:0;for(this.filters=[],e=0;e<r;e+=1){i=null;var s=t.data.ef[e].ty;if(registeredEffects[s])i=new(0,registeredEffects[s].effect)(t.effectsManager.effectElements[e],t);i&&this.filters.push(i)}this.filters.length&&t.addRenderableComponent(this)}function registerEffect(t,e){registeredEffects[t]={effect:e}}function CVMaskElement(t,e){var i;this.data=t,this.element=e,this.masksProperties=this.data.masksProperties||[],this.viewData=createSizedArray(this.masksProperties.length);var r=this.masksProperties.length,s=!1;for(i=0;i<r;i+=1)\"n\"!==this.masksProperties[i].mode&&(s=!0),this.viewData[i]=ShapePropertyFactory.getShapeProp(this.element,this.masksProperties[i],3);this.hasMasks=s,s&&this.element.addRenderableComponent(this)}function CVBaseElement(){}CVEffects.prototype.renderFrame=function(t){var e,i=this.filters.length;for(e=0;e<i;e+=1)this.filters[e].renderFrame(t)},CVEffects.prototype.getEffects=function(t){var e,i=this.filters.length,r=[];for(e=0;e<i;e+=1)this.filters[e].type===t&&r.push(this.filters[e]);return r},CVMaskElement.prototype.renderFrame=function(){if(this.hasMasks){var t,e,i,r,s=this.element.finalTransform.mat,a=this.element.canvasContext,n=this.masksProperties.length;for(a.beginPath(),t=0;t<n;t+=1)if(\"n\"!==this.masksProperties[t].mode){var o;this.masksProperties[t].inv&&(a.moveTo(0,0),a.lineTo(this.element.globalData.compSize.w,0),a.lineTo(this.element.globalData.compSize.w,this.element.globalData.compSize.h),a.lineTo(0,this.element.globalData.compSize.h),a.lineTo(0,0)),r=this.viewData[t].v,e=s.applyToPointArray(r.v[0][0],r.v[0][1],0),a.moveTo(e[0],e[1]);var h=r._length;for(o=1;o<h;o+=1)i=s.applyToTriplePoints(r.o[o-1],r.i[o],r.v[o]),a.bezierCurveTo(i[0],i[1],i[2],i[3],i[4],i[5]);i=s.applyToTriplePoints(r.o[o-1],r.i[0],r.v[0]),a.bezierCurveTo(i[0],i[1],i[2],i[3],i[4],i[5])}this.element.globalData.renderer.save(!0),a.clip()}},CVMaskElement.prototype.getMaskProperty=MaskElement.prototype.getMaskProperty,CVMaskElement.prototype.destroy=function(){this.element=null};var operationsMap={1:\"source-in\",2:\"source-out\",3:\"source-in\",4:\"source-out\"};function CVShapeData(t,e,i,r){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var s,a=4;\"rc\"===e.ty?a=5:\"el\"===e.ty?a=6:\"sr\"===e.ty&&(a=7),this.sh=ShapePropertyFactory.getShapeProp(t,e,a,t);var n,o=i.length;for(s=0;s<o;s+=1)i[s].closed||(n={transforms:r.addTransformSequence(i[s].transforms),trNodes:[]},this.styledShapes.push(n),i[s].elements.push(n))}function CVShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.itemsData=[],this.prevViewData=[],this.shapeModifiers=[],this.processedElements=[],this.transformsManager=new ShapeTransformManager,this.initElement(t,e,i)}function CVTextElement(t,e,i){this.textSpans=[],this.yOffset=0,this.fillColorAnim=!1,this.strokeColorAnim=!1,this.strokeWidthAnim=!1,this.stroke=!1,this.fill=!1,this.justifyOffset=0,this.currentRender=null,this.renderType=\"canvas\",this.values={fill:\"rgba(0,0,0,0)\",stroke:\"rgba(0,0,0,0)\",sWidth:0,fValue:\"\"},this.initElement(t,e,i)}function CVImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),this.img=e.imageLoader.getAsset(this.assetData),this.initElement(t,e,i)}function CVSolidElement(t,e,i){this.initElement(t,e,i)}function CanvasRendererBase(){}function CanvasContext(){this.opacity=-1,this.transform=createTypedArray(\"float32\",16),this.fillStyle=\"\",this.strokeStyle=\"\",this.lineWidth=\"\",this.lineCap=\"\",this.lineJoin=\"\",this.miterLimit=\"\",this.id=Math.random()}function CVContextData(){var t;this.stack=[],this.cArrPos=0,this.cTr=new Matrix;for(t=0;t<15;t+=1){var e=new CanvasContext;this.stack[t]=e}this._length=15,this.nativeContext=null,this.transformMat=new Matrix,this.currentOpacity=1,this.currentFillStyle=\"\",this.appliedFillStyle=\"\",this.currentStrokeStyle=\"\",this.appliedStrokeStyle=\"\",this.currentLineWidth=\"\",this.appliedLineWidth=\"\",this.currentLineCap=\"\",this.appliedLineCap=\"\",this.currentLineJoin=\"\",this.appliedLineJoin=\"\",this.appliedMiterLimit=\"\",this.currentMiterLimit=\"\"}function CVCompElement(t,e,i){this.completeLayers=!1,this.layers=t.layers,this.pendingElements=[],this.elements=createSizedArray(this.layers.length),this.initElement(t,e,i),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig={clearCanvas:!e||void 0===e.clearCanvas||e.clearCanvas,context:e&&e.context||null,progressiveLoad:e&&e.progressiveLoad||!1,preserveAspectRatio:e&&e.preserveAspectRatio||\"xMidYMid meet\",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||\"xMidYMid slice\",contentVisibility:e&&e.contentVisibility||\"visible\",className:e&&e.className||\"\",id:e&&e.id||\"\",runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.renderConfig.dpr=e&&e.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=e&&e.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new CVContextData,this.elements=[],this.pendingElements=[],this.transformMat=new Matrix,this.completeLayers=!1,this.rendererType=\"canvas\",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData))}function HBaseElement(){}function HSolidElement(t,e,i){this.initElement(t,e,i)}function HShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.shapesContainer=createNS(\"g\"),this.initElement(t,e,i),this.prevViewData=[],this.currentBBox={x:999999,y:-999999,h:0,w:0}}function HTextElement(t,e,i){this.textSpans=[],this.textPaths=[],this.currentBBox={x:999999,y:-999999,h:0,w:0},this.renderType=\"svg\",this.isMasked=!1,this.initElement(t,e,i)}function HCameraElement(t,e,i){this.initFrame(),this.initBaseData(t,e,i),this.initHierarchy();var r=PropertyFactory.getProp;if(this.pe=r(this,t.pe,0,0,this),t.ks.p.s?(this.px=r(this,t.ks.p.x,1,0,this),this.py=r(this,t.ks.p.y,1,0,this),this.pz=r(this,t.ks.p.z,1,0,this)):this.p=r(this,t.ks.p,1,0,this),t.ks.a&&(this.a=r(this,t.ks.a,1,0,this)),t.ks.or.k.length&&t.ks.or.k[0].to){var s,a=t.ks.or.k.length;for(s=0;s<a;s+=1)t.ks.or.k[s].to=null,t.ks.or.k[s].ti=null}this.or=r(this,t.ks.or,1,degToRads,this),this.or.sh=!0,this.rx=r(this,t.ks.rx,0,degToRads,this),this.ry=r(this,t.ks.ry,0,degToRads,this),this.rz=r(this,t.ks.rz,0,degToRads,this),this.mat=new Matrix,this._prevMat=new Matrix,this._isFirstFrame=!0,this.finalTransform={mProp:this}}function HImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),this.initElement(t,e,i)}function HybridRendererBase(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:e&&e.className||\"\",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||\"xMidYMid slice\",hideOnTransparent:!(e&&!1===e.hideOnTransparent),filterSize:{width:e&&e.filterSize&&e.filterSize.width||\"400%\",height:e&&e.filterSize&&e.filterSize.height||\"400%\",x:e&&e.filterSize&&e.filterSize.x||\"-100%\",y:e&&e.filterSize&&e.filterSize.y||\"-100%\"}},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType=\"html\"}function HCompElement(t,e,i){this.layers=t.layers,this.supports3d=!t.hasMask,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(t,e,i),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function HybridRenderer(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:e&&e.className||\"\",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||\"xMidYMid slice\",hideOnTransparent:!(e&&!1===e.hideOnTransparent),filterSize:{width:e&&e.filterSize&&e.filterSize.width||\"400%\",height:e&&e.filterSize&&e.filterSize.height||\"400%\",x:e&&e.filterSize&&e.filterSize.x||\"-100%\",y:e&&e.filterSize&&e.filterSize.y||\"-100%\"},runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType=\"html\"}CVBaseElement.prototype={createElements:function(){},initRendererElement:function(){},createContainerElements:function(){if(this.data.tt>=1){this.buffers=[];var t=this.globalData.canvasContext,e=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(e);var i=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(i),this.data.tt>=3&&!document._isProxy&&assetLoader.loadLumaCanvas()}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new CVEffects(this),this.searchEffectTransforms()},createContent:function(){},setBlendMode:function(){var t=this.globalData;if(t.blendMode!==this.data.bm){t.blendMode=this.data.bm;var e=getBlendMode(this.data.bm);t.canvasContext.globalCompositeOperation=e}},createRenderableComponents:function(){this.maskManager=new CVMaskElement(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT)},hideElement:function(){this.hidden||this.isInRange&&!this.isTransparent||(this.hidden=!0)},showElement:function(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0)},clearCanvas:function(t){t.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy)},prepareLayer:function(){if(this.data.tt>=1){var t=this.buffers[0].getContext(\"2d\");this.clearCanvas(t),t.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform)}},exitLayer:function(){if(this.data.tt>=1){var t=this.buffers[1],e=t.getContext(\"2d\");if(this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform),this.comp.getElementById(\"tp\"in this.data?this.data.tp:this.data.ind-1).renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var i=assetLoader.getLumaCanvas(this.canvasContext.canvas);i.getContext(\"2d\").drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(i,0,0)}this.canvasContext.globalCompositeOperation=operationsMap[this.data.tt],this.canvasContext.drawImage(t,0,0),this.canvasContext.globalCompositeOperation=\"destination-over\",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation=\"source-over\"}},renderFrame:function(t){if(!this.hidden&&!this.data.hd&&(1!==this.data.td||t)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var e=0===this.data.ty;this.prepareLayer(),this.globalData.renderer.save(e),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(e),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1)}},destroy:function(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy()},mHelper:new Matrix},CVBaseElement.prototype.hide=CVBaseElement.prototype.hideElement,CVBaseElement.prototype.show=CVBaseElement.prototype.showElement,CVShapeData.prototype.setAsAnimated=SVGShapeData.prototype.setAsAnimated,extendPrototype([BaseElement,TransformElement,CVBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableElement],CVShapeElement),CVShapeElement.prototype.initElement=RenderableDOMElement.prototype.initElement,CVShapeElement.prototype.transformHelper={opacity:1,_opMdf:!1},CVShapeElement.prototype.dashResetter=[],CVShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[])},CVShapeElement.prototype.createStyleElement=function(t,e){var i={data:t,type:t.ty,preTransforms:this.transformsManager.addTransformSequence(e),transforms:[],elements:[],closed:!0===t.hd},r={};if(\"fl\"===t.ty||\"st\"===t.ty?(r.c=PropertyFactory.getProp(this,t.c,1,255,this),r.c.k||(i.co=\"rgb(\"+bmFloor(r.c.v[0])+\",\"+bmFloor(r.c.v[1])+\",\"+bmFloor(r.c.v[2])+\")\")):\"gf\"!==t.ty&&\"gs\"!==t.ty||(r.s=PropertyFactory.getProp(this,t.s,1,null,this),r.e=PropertyFactory.getProp(this,t.e,1,null,this),r.h=PropertyFactory.getProp(this,t.h||{k:0},0,.01,this),r.a=PropertyFactory.getProp(this,t.a||{k:0},0,degToRads,this),r.g=new GradientProperty(this,t.g,this)),r.o=PropertyFactory.getProp(this,t.o,0,.01,this),\"st\"===t.ty||\"gs\"===t.ty){if(i.lc=lineCapEnum[t.lc||2],i.lj=lineJoinEnum[t.lj||2],1==t.lj&&(i.ml=t.ml),r.w=PropertyFactory.getProp(this,t.w,0,null,this),r.w.k||(i.wi=r.w.v),t.d){var s=new DashProperty(this,t.d,\"canvas\",this);r.d=s,r.d.k||(i.da=r.d.dashArray,i.do=r.d.dashoffset[0])}}else i.r=2===t.r?\"evenodd\":\"nonzero\";return this.stylesList.push(i),r.style=i,r},CVShapeElement.prototype.createGroupElement=function(){return{it:[],prevViewData:[]}},CVShapeElement.prototype.createTransformElement=function(t){return{transform:{opacity:1,_opMdf:!1,key:this.transformsManager.getNewKey(),op:PropertyFactory.getProp(this,t.o,0,.01,this),mProps:TransformPropertyFactory.getTransformProperty(this,t,this)}}},CVShapeElement.prototype.createShapeElement=function(t){var e=new CVShapeData(this,t,this.stylesList,this.transformsManager);return this.shapes.push(e),this.addShapeToModifiers(e),e},CVShapeElement.prototype.reloadShapes=function(){var t;this._isFirstFrame=!0;var e=this.itemsData.length;for(t=0;t<e;t+=1)this.prevViewData[t]=this.itemsData[t];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[]),e=this.dynamicProperties.length,t=0;t<e;t+=1)this.dynamicProperties[t].getValue();this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame)},CVShapeElement.prototype.addTransformToStyleList=function(t){var e,i=this.stylesList.length;for(e=0;e<i;e+=1)this.stylesList[e].closed||this.stylesList[e].transforms.push(t)},CVShapeElement.prototype.removeTransformFromStyleList=function(){var t,e=this.stylesList.length;for(t=0;t<e;t+=1)this.stylesList[t].closed||this.stylesList[t].transforms.pop()},CVShapeElement.prototype.closeStyles=function(t){var e,i=t.length;for(e=0;e<i;e+=1)t[e].closed=!0},CVShapeElement.prototype.searchShapes=function(t,e,i,r,s){var a,n,o,h,l,p,f=t.length-1,m=[],c=[],d=[].concat(s);for(a=f;a>=0;a-=1){if((h=this.searchProcessedElement(t[a]))?e[a]=i[h-1]:t[a]._shouldRender=r,\"fl\"===t[a].ty||\"st\"===t[a].ty||\"gf\"===t[a].ty||\"gs\"===t[a].ty)h?e[a].style.closed=!1:e[a]=this.createStyleElement(t[a],d),m.push(e[a].style);else if(\"gr\"===t[a].ty){if(h)for(o=e[a].it.length,n=0;n<o;n+=1)e[a].prevViewData[n]=e[a].it[n];else e[a]=this.createGroupElement(t[a]);this.searchShapes(t[a].it,e[a].it,e[a].prevViewData,r,d)}else\"tr\"===t[a].ty?(h||(p=this.createTransformElement(t[a]),e[a]=p),d.push(e[a]),this.addTransformToStyleList(e[a])):\"sh\"===t[a].ty||\"rc\"===t[a].ty||\"el\"===t[a].ty||\"sr\"===t[a].ty?h||(e[a]=this.createShapeElement(t[a])):\"tm\"===t[a].ty||\"rd\"===t[a].ty||\"pb\"===t[a].ty||\"zz\"===t[a].ty||\"op\"===t[a].ty?(h?(l=e[a]).closed=!1:((l=ShapeModifiers.getModifier(t[a].ty)).init(this,t[a]),e[a]=l,this.shapeModifiers.push(l)),c.push(l)):\"rp\"===t[a].ty&&(h?(l=e[a]).closed=!0:(l=ShapeModifiers.getModifier(t[a].ty),e[a]=l,l.init(this,t,a,e),this.shapeModifiers.push(l),r=!1),c.push(l));this.addProcessedElement(t[a],a+1)}for(this.removeTransformFromStyleList(),this.closeStyles(m),f=c.length,a=0;a<f;a+=1)c[a].closed=!0},CVShapeElement.prototype.renderInnerContent=function(){this.transformHelper.opacity=1,this.transformHelper._opMdf=!1,this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame),this.renderShape(this.transformHelper,this.shapesData,this.itemsData,!0)},CVShapeElement.prototype.renderShapeTransform=function(t,e){(t._opMdf||e.op._mdf||this._isFirstFrame)&&(e.opacity=t.opacity,e.opacity*=e.op.v,e._opMdf=!0)},CVShapeElement.prototype.drawLayer=function(){var t,e,i,r,s,a,n,o,h,l=this.stylesList.length,p=this.globalData.renderer,f=this.globalData.canvasContext;for(t=0;t<l;t+=1)if((\"st\"!==(o=(h=this.stylesList[t]).type)&&\"gs\"!==o||0!==h.wi)&&h.data._shouldRender&&0!==h.coOp&&0!==this.globalData.currentGlobalAlpha){for(p.save(),a=h.elements,\"st\"===o||\"gs\"===o?(p.ctxStrokeStyle(\"st\"===o?h.co:h.grd),p.ctxLineWidth(h.wi),p.ctxLineCap(h.lc),p.ctxLineJoin(h.lj),p.ctxMiterLimit(h.ml||0)):p.ctxFillStyle(\"fl\"===o?h.co:h.grd),p.ctxOpacity(h.coOp),\"st\"!==o&&\"gs\"!==o&&f.beginPath(),p.ctxTransform(h.preTransforms.finalTransform.props),i=a.length,e=0;e<i;e+=1){for(\"st\"!==o&&\"gs\"!==o||(f.beginPath(),h.da&&(f.setLineDash(h.da),f.lineDashOffset=h.do)),s=(n=a[e].trNodes).length,r=0;r<s;r+=1)\"m\"===n[r].t?f.moveTo(n[r].p[0],n[r].p[1]):\"c\"===n[r].t?f.bezierCurveTo(n[r].pts[0],n[r].pts[1],n[r].pts[2],n[r].pts[3],n[r].pts[4],n[r].pts[5]):f.closePath();\"st\"!==o&&\"gs\"!==o||(p.ctxStroke(),h.da&&f.setLineDash(this.dashResetter))}\"st\"!==o&&\"gs\"!==o&&this.globalData.renderer.ctxFill(h.r),p.restore()}},CVShapeElement.prototype.renderShape=function(t,e,i,r){var s,a;for(a=t,s=e.length-1;s>=0;s-=1)\"tr\"===e[s].ty?(a=i[s].transform,this.renderShapeTransform(t,a)):\"sh\"===e[s].ty||\"el\"===e[s].ty||\"rc\"===e[s].ty||\"sr\"===e[s].ty?this.renderPath(e[s],i[s]):\"fl\"===e[s].ty?this.renderFill(e[s],i[s],a):\"st\"===e[s].ty?this.renderStroke(e[s],i[s],a):\"gf\"===e[s].ty||\"gs\"===e[s].ty?this.renderGradientFill(e[s],i[s],a):\"gr\"===e[s].ty?this.renderShape(a,e[s].it,i[s].it):e[s].ty;r&&this.drawLayer()},CVShapeElement.prototype.renderStyledShape=function(t,e){if(this._isFirstFrame||e._mdf||t.transforms._mdf){var i,r,s,a=t.trNodes,n=e.paths,o=n._length;a.length=0;var h=t.transforms.finalTransform;for(s=0;s<o;s+=1){var l=n.shapes[s];if(l&&l.v){for(r=l._length,i=1;i<r;i+=1)1===i&&a.push({t:\"m\",p:h.applyToPointArray(l.v[0][0],l.v[0][1],0)}),a.push({t:\"c\",pts:h.applyToTriplePoints(l.o[i-1],l.i[i],l.v[i])});1===r&&a.push({t:\"m\",p:h.applyToPointArray(l.v[0][0],l.v[0][1],0)}),l.c&&r&&(a.push({t:\"c\",pts:h.applyToTriplePoints(l.o[i-1],l.i[0],l.v[0])}),a.push({t:\"z\"}))}}t.trNodes=a}},CVShapeElement.prototype.renderPath=function(t,e){if(!0!==t.hd&&t._shouldRender){var i,r=e.styledShapes.length;for(i=0;i<r;i+=1)this.renderStyledShape(e.styledShapes[i],e.sh)}},CVShapeElement.prototype.renderFill=function(t,e,i){var r=e.style;(e.c._mdf||this._isFirstFrame)&&(r.co=\"rgb(\"+bmFloor(e.c.v[0])+\",\"+bmFloor(e.c.v[1])+\",\"+bmFloor(e.c.v[2])+\")\"),(e.o._mdf||i._opMdf||this._isFirstFrame)&&(r.coOp=e.o.v*i.opacity)},CVShapeElement.prototype.renderGradientFill=function(t,e,i){var r,s=e.style;if(!s.grd||e.g._mdf||e.s._mdf||e.e._mdf||1!==t.t&&(e.h._mdf||e.a._mdf)){var a,n=this.globalData.canvasContext,o=e.s.v,h=e.e.v;if(1===t.t)r=n.createLinearGradient(o[0],o[1],h[0],h[1]);else{var l=Math.sqrt(Math.pow(o[0]-h[0],2)+Math.pow(o[1]-h[1],2)),p=Math.atan2(h[1]-o[1],h[0]-o[0]),f=e.h.v;f>=1?f=.99:f<=-1&&(f=-.99);var m=l*f,c=Math.cos(p+e.a.v)*m+o[0],d=Math.sin(p+e.a.v)*m+o[1];r=n.createRadialGradient(c,d,0,o[0],o[1],l)}var u=t.g.p,y=e.g.c,g=1;for(a=0;a<u;a+=1)e.g._hasOpacity&&e.g._collapsable&&(g=e.g.o[2*a+1]),r.addColorStop(y[4*a]/100,\"rgba(\"+y[4*a+1]+\",\"+y[4*a+2]+\",\"+y[4*a+3]+\",\"+g+\")\");s.grd=r}s.coOp=e.o.v*i.opacity},CVShapeElement.prototype.renderStroke=function(t,e,i){var r=e.style,s=e.d;s&&(s._mdf||this._isFirstFrame)&&(r.da=s.dashArray,r.do=s.dashoffset[0]),(e.c._mdf||this._isFirstFrame)&&(r.co=\"rgb(\"+bmFloor(e.c.v[0])+\",\"+bmFloor(e.c.v[1])+\",\"+bmFloor(e.c.v[2])+\")\"),(e.o._mdf||i._opMdf||this._isFirstFrame)&&(r.coOp=e.o.v*i.opacity),(e.w._mdf||this._isFirstFrame)&&(r.wi=e.w.v)},CVShapeElement.prototype.destroy=function(){this.shapesData=null,this.globalData=null,this.canvasContext=null,this.stylesList.length=0,this.itemsData.length=0},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement,ITextElement],CVTextElement),CVTextElement.prototype.tHelper=createTag(\"canvas\").getContext(\"2d\"),CVTextElement.prototype.buildNewText=function(){var t=this.textProperty.currentData;this.renderedLetters=createSizedArray(t.l?t.l.length:0);var e=!1;t.fc?(e=!0,this.values.fill=this.buildColor(t.fc)):this.values.fill=\"rgba(0,0,0,0)\",this.fill=e;var i=!1;t.sc&&(i=!0,this.values.stroke=this.buildColor(t.sc),this.values.sWidth=t.sw);var r,s,a,n,o,h,l,p,f,m,c,d,u=this.globalData.fontManager.getFontByName(t.f),y=t.l,g=this.mHelper;this.stroke=i,this.values.fValue=t.finalSize+\"px \"+this.globalData.fontManager.getFontByName(t.f).fFamily,s=t.finalText.length;var v=this.data.singleShape,b=.001*t.tr*t.finalSize,x=0,P=0,E=!0,S=0;for(r=0;r<s;r+=1){n=(a=this.globalData.fontManager.getCharData(t.finalText[r],u.fStyle,this.globalData.fontManager.getFontByName(t.f).fFamily))&&a.data||{},g.reset(),v&&y[r].n&&(x=-b,P+=t.yOffset,P+=E?1:0,E=!1),f=(l=n.shapes?n.shapes[0].it:[]).length,g.scale(t.finalSize/100,t.finalSize/100),v&&this.applyTextPropertiesToMatrix(t,g,y[r].line,x,P),c=createSizedArray(f-1);var C=0;for(p=0;p<f;p+=1)if(\"sh\"===l[p].ty){for(h=l[p].ks.k.i.length,m=l[p].ks.k,d=[],o=1;o<h;o+=1)1===o&&d.push(g.applyToX(m.v[0][0],m.v[0][1],0),g.applyToY(m.v[0][0],m.v[0][1],0)),d.push(g.applyToX(m.o[o-1][0],m.o[o-1][1],0),g.applyToY(m.o[o-1][0],m.o[o-1][1],0),g.applyToX(m.i[o][0],m.i[o][1],0),g.applyToY(m.i[o][0],m.i[o][1],0),g.applyToX(m.v[o][0],m.v[o][1],0),g.applyToY(m.v[o][0],m.v[o][1],0));d.push(g.applyToX(m.o[o-1][0],m.o[o-1][1],0),g.applyToY(m.o[o-1][0],m.o[o-1][1],0),g.applyToX(m.i[0][0],m.i[0][1],0),g.applyToY(m.i[0][0],m.i[0][1],0),g.applyToX(m.v[0][0],m.v[0][1],0),g.applyToY(m.v[0][0],m.v[0][1],0)),c[C]=d,C+=1}v&&(x+=y[r].l,x+=b),this.textSpans[S]?this.textSpans[S].elem=c:this.textSpans[S]={elem:c},S+=1}},CVTextElement.prototype.renderInnerContent=function(){var t,e,i,r,s,a;this.validateText(),this.canvasContext.font=this.values.fValue,this.globalData.renderer.ctxLineCap(\"butt\"),this.globalData.renderer.ctxLineJoin(\"miter\"),this.globalData.renderer.ctxMiterLimit(4),this.data.singleShape||this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag);var n,o=this.textAnimator.renderedLetters,h=this.textProperty.currentData.l;e=h.length;var l,p,f=null,m=null,c=null,d=this.globalData.renderer;for(t=0;t<e;t+=1)if(!h[t].n){if((n=o[t])&&(d.save(),d.ctxTransform(n.p),d.ctxOpacity(n.o)),this.fill){for(n&&n.fc?f!==n.fc&&(d.ctxFillStyle(n.fc),f=n.fc):f!==this.values.fill&&(f=this.values.fill,d.ctxFillStyle(this.values.fill)),r=(l=this.textSpans[t].elem).length,this.globalData.canvasContext.beginPath(),i=0;i<r;i+=1)for(a=(p=l[i]).length,this.globalData.canvasContext.moveTo(p[0],p[1]),s=2;s<a;s+=6)this.globalData.canvasContext.bezierCurveTo(p[s],p[s+1],p[s+2],p[s+3],p[s+4],p[s+5]);this.globalData.canvasContext.closePath(),d.ctxFill()}if(this.stroke){for(n&&n.sw?c!==n.sw&&(c=n.sw,d.ctxLineWidth(n.sw)):c!==this.values.sWidth&&(c=this.values.sWidth,d.ctxLineWidth(this.values.sWidth)),n&&n.sc?m!==n.sc&&(m=n.sc,d.ctxStrokeStyle(n.sc)):m!==this.values.stroke&&(m=this.values.stroke,d.ctxStrokeStyle(this.values.stroke)),r=(l=this.textSpans[t].elem).length,this.globalData.canvasContext.beginPath(),i=0;i<r;i+=1)for(a=(p=l[i]).length,this.globalData.canvasContext.moveTo(p[0],p[1]),s=2;s<a;s+=6)this.globalData.canvasContext.bezierCurveTo(p[s],p[s+1],p[s+2],p[s+3],p[s+4],p[s+5]);this.globalData.canvasContext.closePath(),d.ctxStroke()}n&&this.globalData.renderer.restore()}},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVImageElement),CVImageElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVImageElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVImageElement.prototype.createContent=function(){if(this.img.width&&(this.assetData.w!==this.img.width||this.assetData.h!==this.img.height)){var t=createTag(\"canvas\");t.width=this.assetData.w,t.height=this.assetData.h;var e,i,r=t.getContext(\"2d\"),s=this.img.width,a=this.img.height,n=s/a,o=this.assetData.w/this.assetData.h,h=this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio;n>o&&\"xMidYMid slice\"===h||n<o&&\"xMidYMid slice\"!==h?e=(i=a)*o:i=(e=s)/o,r.drawImage(this.img,(s-e)/2,(a-i)/2,e,i,0,0,this.assetData.w,this.assetData.h),this.img=t}},CVImageElement.prototype.renderInnerContent=function(){this.canvasContext.drawImage(this.img,0,0)},CVImageElement.prototype.destroy=function(){this.img=null},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVSolidElement),CVSolidElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVSolidElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVSolidElement.prototype.renderInnerContent=function(){this.globalData.renderer.ctxFillStyle(this.data.sc),this.globalData.renderer.ctxFillRect(0,0,this.data.sw,this.data.sh)},extendPrototype([BaseRenderer],CanvasRendererBase),CanvasRendererBase.prototype.createShape=function(t){return new CVShapeElement(t,this.globalData,this)},CanvasRendererBase.prototype.createText=function(t){return new CVTextElement(t,this.globalData,this)},CanvasRendererBase.prototype.createImage=function(t){return new CVImageElement(t,this.globalData,this)},CanvasRendererBase.prototype.createSolid=function(t){return new CVSolidElement(t,this.globalData,this)},CanvasRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,CanvasRendererBase.prototype.ctxTransform=function(t){1===t[0]&&0===t[1]&&0===t[4]&&1===t[5]&&0===t[12]&&0===t[13]||this.canvasContext.transform(t[0],t[1],t[4],t[5],t[12],t[13])},CanvasRendererBase.prototype.ctxOpacity=function(t){this.canvasContext.globalAlpha*=t<0?0:t},CanvasRendererBase.prototype.ctxFillStyle=function(t){this.canvasContext.fillStyle=t},CanvasRendererBase.prototype.ctxStrokeStyle=function(t){this.canvasContext.strokeStyle=t},CanvasRendererBase.prototype.ctxLineWidth=function(t){this.canvasContext.lineWidth=t},CanvasRendererBase.prototype.ctxLineCap=function(t){this.canvasContext.lineCap=t},CanvasRendererBase.prototype.ctxLineJoin=function(t){this.canvasContext.lineJoin=t},CanvasRendererBase.prototype.ctxMiterLimit=function(t){this.canvasContext.miterLimit=t},CanvasRendererBase.prototype.ctxFill=function(t){this.canvasContext.fill(t)},CanvasRendererBase.prototype.ctxFillRect=function(t,e,i,r){this.canvasContext.fillRect(t,e,i,r)},CanvasRendererBase.prototype.ctxStroke=function(){this.canvasContext.stroke()},CanvasRendererBase.prototype.reset=function(){this.renderConfig.clearCanvas?this.contextData.reset():this.canvasContext.restore()},CanvasRendererBase.prototype.save=function(){this.canvasContext.save()},CanvasRendererBase.prototype.restore=function(t){this.renderConfig.clearCanvas?(t&&(this.globalData.blendMode=\"source-over\"),this.contextData.restore(t)):this.canvasContext.restore()},CanvasRendererBase.prototype.configAnimation=function(t){if(this.animationItem.wrapper){this.animationItem.container=createTag(\"canvas\");var e=this.animationItem.container.style;e.width=\"100%\",e.height=\"100%\";var i=\"0px 0px 0px\";e.transformOrigin=i,e.mozTransformOrigin=i,e.webkitTransformOrigin=i,e[\"-webkit-transform\"]=i,e.contentVisibility=this.renderConfig.contentVisibility,this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext(\"2d\"),this.renderConfig.className&&this.animationItem.container.setAttribute(\"class\",this.renderConfig.className),this.renderConfig.id&&this.animationItem.container.setAttribute(\"id\",this.renderConfig.id)}else this.canvasContext=this.renderConfig.context;this.contextData.setContext(this.canvasContext),this.data=t,this.layers=t.layers,this.transformCanvas={w:t.w,h:t.h,sx:0,sy:0,tx:0,ty:0},this.setupGlobalData(t,document.body),this.globalData.canvasContext=this.canvasContext,this.globalData.renderer=this,this.globalData.isDashed=!1,this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.globalData.transformCanvas=this.transformCanvas,this.elements=createSizedArray(t.layers.length),this.updateContainerSize()},CanvasRendererBase.prototype.updateContainerSize=function(t,e){var i,r,s,a;if(this.reset(),t?(i=t,r=e,this.canvasContext.canvas.width=i,this.canvasContext.canvas.height=r):(this.animationItem.wrapper&&this.animationItem.container?(i=this.animationItem.wrapper.offsetWidth,r=this.animationItem.wrapper.offsetHeight):(i=this.canvasContext.canvas.width,r=this.canvasContext.canvas.height),this.canvasContext.canvas.width=i*this.renderConfig.dpr,this.canvasContext.canvas.height=r*this.renderConfig.dpr),-1!==this.renderConfig.preserveAspectRatio.indexOf(\"meet\")||-1!==this.renderConfig.preserveAspectRatio.indexOf(\"slice\")){var n=this.renderConfig.preserveAspectRatio.split(\" \"),o=n[1]||\"meet\",h=n[0]||\"xMidYMid\",l=h.substr(0,4),p=h.substr(4);s=i/r,(a=this.transformCanvas.w/this.transformCanvas.h)>s&&\"meet\"===o||a<s&&\"slice\"===o?(this.transformCanvas.sx=i/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=i/(this.transformCanvas.w/this.renderConfig.dpr)):(this.transformCanvas.sx=r/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.sy=r/(this.transformCanvas.h/this.renderConfig.dpr)),this.transformCanvas.tx=\"xMid\"===l&&(a<s&&\"meet\"===o||a>s&&\"slice\"===o)?(i-this.transformCanvas.w*(r/this.transformCanvas.h))/2*this.renderConfig.dpr:\"xMax\"===l&&(a<s&&\"meet\"===o||a>s&&\"slice\"===o)?(i-this.transformCanvas.w*(r/this.transformCanvas.h))*this.renderConfig.dpr:0,this.transformCanvas.ty=\"YMid\"===p&&(a>s&&\"meet\"===o||a<s&&\"slice\"===o)?(r-this.transformCanvas.h*(i/this.transformCanvas.w))/2*this.renderConfig.dpr:\"YMax\"===p&&(a>s&&\"meet\"===o||a<s&&\"slice\"===o)?(r-this.transformCanvas.h*(i/this.transformCanvas.w))*this.renderConfig.dpr:0}else\"none\"===this.renderConfig.preserveAspectRatio?(this.transformCanvas.sx=i/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=r/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.tx=0,this.transformCanvas.ty=0):(this.transformCanvas.sx=this.renderConfig.dpr,this.transformCanvas.sy=this.renderConfig.dpr,this.transformCanvas.tx=0,this.transformCanvas.ty=0);this.transformCanvas.props=[this.transformCanvas.sx,0,0,0,0,this.transformCanvas.sy,0,0,0,0,1,0,this.transformCanvas.tx,this.transformCanvas.ty,0,1],this.ctxTransform(this.transformCanvas.props),this.canvasContext.beginPath(),this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h),this.canvasContext.closePath(),this.canvasContext.clip(),this.renderFrame(this.renderedFrame,!0)},CanvasRendererBase.prototype.destroy=function(){var t;for(this.renderConfig.clearCanvas&&this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=\"\"),t=(this.layers?this.layers.length:0)-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRendererBase.prototype.renderFrame=function(t,e){if((this.renderedFrame!==t||!0!==this.renderConfig.clearCanvas||e)&&!this.destroyed&&-1!==t){var i;this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||e,this.globalData.projectInterface.currentFrame=t;var r=this.layers.length;for(this.completeLayers||this.checkLayers(t),i=r-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].prepareFrame(t-this.layers[i].st);if(this.globalData._mdf){for(!0===this.renderConfig.clearCanvas?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),i=r-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].renderFrame();!0!==this.renderConfig.clearCanvas&&this.restore()}}},CanvasRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!==this.layers[t].ty){var i=this.createItem(this.layers[t],this,this.globalData);e[t]=i,i.initExpressions()}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){this.pendingElements.pop().checkParenting()}},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display=\"none\"},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display=\"block\"},CVContextData.prototype.duplicate=function(){var t=2*this._length,e=0;for(e=this._length;e<t;e+=1)this.stack[e]=new CanvasContext;this._length=t},CVContextData.prototype.reset=function(){this.cArrPos=0,this.cTr.reset(),this.stack[this.cArrPos].opacity=1},CVContextData.prototype.restore=function(t){this.cArrPos-=1;var e,i=this.stack[this.cArrPos],r=i.transform,s=this.cTr.props;for(e=0;e<16;e+=1)s[e]=r[e];if(t){this.nativeContext.restore();var a=this.stack[this.cArrPos+1];this.appliedFillStyle=a.fillStyle,this.appliedStrokeStyle=a.strokeStyle,this.appliedLineWidth=a.lineWidth,this.appliedLineCap=a.lineCap,this.appliedLineJoin=a.lineJoin,this.appliedMiterLimit=a.miterLimit}this.nativeContext.setTransform(r[0],r[1],r[4],r[5],r[12],r[13]),(t||-1!==i.opacity&&this.currentOpacity!==i.opacity)&&(this.nativeContext.globalAlpha=i.opacity,this.currentOpacity=i.opacity),this.currentFillStyle=i.fillStyle,this.currentStrokeStyle=i.strokeStyle,this.currentLineWidth=i.lineWidth,this.currentLineCap=i.lineCap,this.currentLineJoin=i.lineJoin,this.currentMiterLimit=i.miterLimit},CVContextData.prototype.save=function(t){t&&this.nativeContext.save();var e=this.cTr.props;this._length<=this.cArrPos&&this.duplicate();var i,r=this.stack[this.cArrPos];for(i=0;i<16;i+=1)r.transform[i]=e[i];this.cArrPos+=1;var s=this.stack[this.cArrPos];s.opacity=r.opacity,s.fillStyle=r.fillStyle,s.strokeStyle=r.strokeStyle,s.lineWidth=r.lineWidth,s.lineCap=r.lineCap,s.lineJoin=r.lineJoin,s.miterLimit=r.miterLimit},CVContextData.prototype.setOpacity=function(t){this.stack[this.cArrPos].opacity=t},CVContextData.prototype.setContext=function(t){this.nativeContext=t},CVContextData.prototype.fillStyle=function(t){this.stack[this.cArrPos].fillStyle!==t&&(this.currentFillStyle=t,this.stack[this.cArrPos].fillStyle=t)},CVContextData.prototype.strokeStyle=function(t){this.stack[this.cArrPos].strokeStyle!==t&&(this.currentStrokeStyle=t,this.stack[this.cArrPos].strokeStyle=t)},CVContextData.prototype.lineWidth=function(t){this.stack[this.cArrPos].lineWidth!==t&&(this.currentLineWidth=t,this.stack[this.cArrPos].lineWidth=t)},CVContextData.prototype.lineCap=function(t){this.stack[this.cArrPos].lineCap!==t&&(this.currentLineCap=t,this.stack[this.cArrPos].lineCap=t)},CVContextData.prototype.lineJoin=function(t){this.stack[this.cArrPos].lineJoin!==t&&(this.currentLineJoin=t,this.stack[this.cArrPos].lineJoin=t)},CVContextData.prototype.miterLimit=function(t){this.stack[this.cArrPos].miterLimit!==t&&(this.currentMiterLimit=t,this.stack[this.cArrPos].miterLimit=t)},CVContextData.prototype.transform=function(t){this.transformMat.cloneFromProps(t);var e=this.cTr;this.transformMat.multiply(e),e.cloneFromProps(this.transformMat.props);var i=e.props;this.nativeContext.setTransform(i[0],i[1],i[4],i[5],i[12],i[13])},CVContextData.prototype.opacity=function(t){var e=this.stack[this.cArrPos].opacity;e*=t<0?0:t,this.stack[this.cArrPos].opacity!==e&&(this.currentOpacity!==t&&(this.nativeContext.globalAlpha=t,this.currentOpacity=t),this.stack[this.cArrPos].opacity=e)},CVContextData.prototype.fill=function(t){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fill(t)},CVContextData.prototype.fillRect=function(t,e,i,r){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fillRect(t,e,i,r)},CVContextData.prototype.stroke=function(){this.appliedStrokeStyle!==this.currentStrokeStyle&&(this.appliedStrokeStyle=this.currentStrokeStyle,this.nativeContext.strokeStyle=this.appliedStrokeStyle),this.appliedLineWidth!==this.currentLineWidth&&(this.appliedLineWidth=this.currentLineWidth,this.nativeContext.lineWidth=this.appliedLineWidth),this.appliedLineCap!==this.currentLineCap&&(this.appliedLineCap=this.currentLineCap,this.nativeContext.lineCap=this.appliedLineCap),this.appliedLineJoin!==this.currentLineJoin&&(this.appliedLineJoin=this.currentLineJoin,this.nativeContext.lineJoin=this.appliedLineJoin),this.appliedMiterLimit!==this.currentMiterLimit&&(this.appliedMiterLimit=this.currentMiterLimit,this.nativeContext.miterLimit=this.appliedMiterLimit),this.nativeContext.stroke()},extendPrototype([CanvasRendererBase,ICompElement,CVBaseElement],CVCompElement),CVCompElement.prototype.renderInnerContent=function(){var t,e=this.canvasContext;for(e.beginPath(),e.moveTo(0,0),e.lineTo(this.data.w,0),e.lineTo(this.data.w,this.data.h),e.lineTo(0,this.data.h),e.lineTo(0,0),e.clip(),t=this.layers.length-1;t>=0;t-=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},CVCompElement.prototype.destroy=function(){var t;for(t=this.layers.length-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null},CVCompElement.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)},extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)},HBaseElement.prototype={checkBlendMode:function(){},initRendererElement:function(){this.baseElement=createTag(this.data.tg||\"div\"),this.data.hasMask?(this.svgElement=createNS(\"svg\"),this.layerElement=createNS(\"g\"),this.maskedElement=this.layerElement,this.svgElement.appendChild(this.layerElement),this.baseElement.appendChild(this.svgElement)):this.layerElement=this.baseElement,styleDiv(this.baseElement)},createContainerElements:function(){this.renderableEffectsManager=new CVEffects(this),this.transformedElement=this.baseElement,this.maskedElement=this.layerElement,this.data.ln&&this.layerElement.setAttribute(\"id\",this.data.ln),this.data.cl&&this.layerElement.setAttribute(\"class\",this.data.cl),0!==this.data.bm&&this.setBlendMode()},renderElement:function(){var t=this.transformedElement?this.transformedElement.style:{};if(this.finalTransform._matMdf){var e=this.finalTransform.mat.toCSS();t.transform=e,t.webkitTransform=e}this.finalTransform._opMdf&&(t.opacity=this.finalTransform.mProp.o.v)},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},destroy:function(){this.layerElement=null,this.transformedElement=null,this.matteElement&&(this.matteElement=null),this.maskManager&&(this.maskManager.destroy(),this.maskManager=null)},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData)},addEffects:function(){},setMatte:function(){}},HBaseElement.prototype.getBaseElement=SVGBaseElement.prototype.getBaseElement,HBaseElement.prototype.destroyBaseElement=HBaseElement.prototype.destroy,HBaseElement.prototype.buildElementParenting=BaseRenderer.prototype.buildElementParenting,extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],HSolidElement),HSolidElement.prototype.createContent=function(){var t;this.data.hasMask?((t=createNS(\"rect\")).setAttribute(\"width\",this.data.sw),t.setAttribute(\"height\",this.data.sh),t.setAttribute(\"fill\",this.data.sc),this.svgElement.setAttribute(\"width\",this.data.sw),this.svgElement.setAttribute(\"height\",this.data.sh)):((t=createTag(\"div\")).style.width=this.data.sw+\"px\",t.style.height=this.data.sh+\"px\",t.style.backgroundColor=this.data.sc),this.layerElement.appendChild(t)},extendPrototype([BaseElement,TransformElement,HSolidElement,SVGShapeElement,HBaseElement,HierarchyElement,FrameElement,RenderableElement],HShapeElement),HShapeElement.prototype._renderShapeFrame=HShapeElement.prototype.renderInnerContent,HShapeElement.prototype.createContent=function(){var t;if(this.baseElement.style.fontSize=0,this.data.hasMask)this.layerElement.appendChild(this.shapesContainer),t=this.svgElement;else{t=createNS(\"svg\");var e=this.comp.data?this.comp.data:this.globalData.compSize;t.setAttribute(\"width\",e.w),t.setAttribute(\"height\",e.h),t.appendChild(this.shapesContainer),this.layerElement.appendChild(t)}this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.shapesContainer,0,[],!0),this.filterUniqueShapes(),this.shapeCont=t},HShapeElement.prototype.getTransformedPoint=function(t,e){var i,r=t.length;for(i=0;i<r;i+=1)e=t[i].mProps.v.applyToPointArray(e[0],e[1],0);return e},HShapeElement.prototype.calculateShapeBoundingBox=function(t,e){var i,r,s,a,n,o=t.sh.v,h=t.transformers,l=o._length;if(!(l<=1)){for(i=0;i<l-1;i+=1)r=this.getTransformedPoint(h,o.v[i]),s=this.getTransformedPoint(h,o.o[i]),a=this.getTransformedPoint(h,o.i[i+1]),n=this.getTransformedPoint(h,o.v[i+1]),this.checkBounds(r,s,a,n,e);o.c&&(r=this.getTransformedPoint(h,o.v[i]),s=this.getTransformedPoint(h,o.o[i]),a=this.getTransformedPoint(h,o.i[0]),n=this.getTransformedPoint(h,o.v[0]),this.checkBounds(r,s,a,n,e))}},HShapeElement.prototype.checkBounds=function(t,e,i,r,s){this.getBoundsOfCurve(t,e,i,r);var a=this.shapeBoundingBox;s.x=bmMin(a.left,s.x),s.xMax=bmMax(a.right,s.xMax),s.y=bmMin(a.top,s.y),s.yMax=bmMax(a.bottom,s.yMax)},HShapeElement.prototype.shapeBoundingBox={left:0,right:0,top:0,bottom:0},HShapeElement.prototype.tempBoundingBox={x:0,xMax:0,y:0,yMax:0,width:0,height:0},HShapeElement.prototype.getBoundsOfCurve=function(t,e,i,r){for(var s,a,n,o,h,l,p,f=[[t[0],r[0]],[t[1],r[1]]],m=0;m<2;++m)a=6*t[m]-12*e[m]+6*i[m],s=-3*t[m]+9*e[m]-9*i[m]+3*r[m],n=3*e[m]-3*t[m],a|=0,n|=0,0===(s|=0)&&0===a||(0===s?(o=-n/a)>0&&o<1&&f[m].push(this.calculateF(o,t,e,i,r,m)):(h=a*a-4*n*s)>=0&&((l=(-a+bmSqrt(h))/(2*s))>0&&l<1&&f[m].push(this.calculateF(l,t,e,i,r,m)),(p=(-a-bmSqrt(h))/(2*s))>0&&p<1&&f[m].push(this.calculateF(p,t,e,i,r,m))));this.shapeBoundingBox.left=bmMin.apply(null,f[0]),this.shapeBoundingBox.top=bmMin.apply(null,f[1]),this.shapeBoundingBox.right=bmMax.apply(null,f[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,f[1])},HShapeElement.prototype.calculateF=function(t,e,i,r,s,a){return bmPow(1-t,3)*e[a]+3*bmPow(1-t,2)*t*i[a]+3*(1-t)*bmPow(t,2)*r[a]+bmPow(t,3)*s[a]},HShapeElement.prototype.calculateBoundingBox=function(t,e){var i,r=t.length;for(i=0;i<r;i+=1)t[i]&&t[i].sh?this.calculateShapeBoundingBox(t[i],e):t[i]&&t[i].it?this.calculateBoundingBox(t[i].it,e):t[i]&&t[i].style&&t[i].w&&this.expandStrokeBoundingBox(t[i].w,e)},HShapeElement.prototype.expandStrokeBoundingBox=function(t,e){var i=0;if(t.keyframes){for(var r=0;r<t.keyframes.length;r+=1){var s=t.keyframes[r].s;s>i&&(i=s)}i*=t.mult}else i=t.v*t.mult;e.x-=i,e.xMax+=i,e.y-=i,e.yMax+=i},HShapeElement.prototype.currentBoxContains=function(t){return this.currentBBox.x<=t.x&&this.currentBBox.y<=t.y&&this.currentBBox.width+this.currentBBox.x>=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax<t.x?0:t.xMax-t.x,t.height=t.yMax<t.y?0:t.yMax-t.y,this.currentBoxContains(t))return;var i=!1;if(this.currentBBox.w!==t.width&&(this.currentBBox.w=t.width,this.shapeCont.setAttribute(\"width\",t.width),i=!0),this.currentBBox.h!==t.height&&(this.currentBBox.h=t.height,this.shapeCont.setAttribute(\"height\",t.height),i=!0),i||this.currentBBox.x!==t.x||this.currentBBox.y!==t.y){this.currentBBox.w=t.width,this.currentBBox.h=t.height,this.currentBBox.x=t.x,this.currentBBox.y=t.y,this.shapeCont.setAttribute(\"viewBox\",this.currentBBox.x+\" \"+this.currentBBox.y+\" \"+this.currentBBox.w+\" \"+this.currentBBox.h);var r=this.shapeCont.style,s=\"translate(\"+this.currentBBox.x+\"px,\"+this.currentBBox.y+\"px)\";r.transform=s,r.webkitTransform=s}}},extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],HTextElement),HTextElement.prototype.createContent=function(){if(this.isMasked=this.checkMasks(),this.isMasked){this.renderType=\"svg\",this.compW=this.comp.data.w,this.compH=this.comp.data.h,this.svgElement.setAttribute(\"width\",this.compW),this.svgElement.setAttribute(\"height\",this.compH);var t=createNS(\"g\");this.maskedElement.appendChild(t),this.innerElem=t}else this.renderType=\"html\",this.innerElem=this.layerElement;this.checkParenting()},HTextElement.prototype.buildNewText=function(){var t=this.textProperty.currentData;this.renderedLetters=createSizedArray(t.l?t.l.length:0);var e=this.innerElem.style,i=t.fc?this.buildColor(t.fc):\"rgba(0,0,0,0)\";e.fill=i,e.color=i,t.sc&&(e.stroke=this.buildColor(t.sc),e.strokeWidth=t.sw+\"px\");var r,s,a=this.globalData.fontManager.getFontByName(t.f);if(!this.globalData.fontManager.chars)if(e.fontSize=t.finalSize+\"px\",e.lineHeight=t.finalSize+\"px\",a.fClass)this.innerElem.className=a.fClass;else{e.fontFamily=a.fFamily;var n=t.fWeight,o=t.fStyle;e.fontStyle=o,e.fontWeight=n}var h,l,p,f=t.l;s=f.length;var m,c=this.mHelper,d=\"\",u=0;for(r=0;r<s;r+=1){if(this.globalData.fontManager.chars?(this.textPaths[u]?h=this.textPaths[u]:((h=createNS(\"path\")).setAttribute(\"stroke-linecap\",lineCapEnum[1]),h.setAttribute(\"stroke-linejoin\",lineJoinEnum[2]),h.setAttribute(\"stroke-miterlimit\",\"4\")),this.isMasked||(this.textSpans[u]?p=(l=this.textSpans[u]).children[0]:((l=createTag(\"div\")).style.lineHeight=0,(p=createNS(\"svg\")).appendChild(h),styleDiv(l)))):this.isMasked?h=this.textPaths[u]?this.textPaths[u]:createNS(\"text\"):this.textSpans[u]?(l=this.textSpans[u],h=this.textPaths[u]):(styleDiv(l=createTag(\"span\")),styleDiv(h=createTag(\"span\")),l.appendChild(h)),this.globalData.fontManager.chars){var y,g=this.globalData.fontManager.getCharData(t.finalText[r],a.fStyle,this.globalData.fontManager.getFontByName(t.f).fFamily);if(y=g?g.data:null,c.reset(),y&&y.shapes&&y.shapes.length&&(m=y.shapes[0].it,c.scale(t.finalSize/100,t.finalSize/100),d=this.createPathShape(c,m),h.setAttribute(\"d\",d)),this.isMasked)this.innerElem.appendChild(h);else{if(this.innerElem.appendChild(l),y&&y.shapes){document.body.appendChild(p);var v=p.getBBox();p.setAttribute(\"width\",v.width+2),p.setAttribute(\"height\",v.height+2),p.setAttribute(\"viewBox\",v.x-1+\" \"+(v.y-1)+\" \"+(v.width+2)+\" \"+(v.height+2));var b=p.style,x=\"translate(\"+(v.x-1)+\"px,\"+(v.y-1)+\"px)\";b.transform=x,b.webkitTransform=x,f[r].yOffset=v.y-1}else p.setAttribute(\"width\",1),p.setAttribute(\"height\",1);l.appendChild(p)}}else if(h.textContent=f[r].val,h.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",\"preserve\"),this.isMasked)this.innerElem.appendChild(h);else{this.innerElem.appendChild(l);var P=h.style,E=\"translate3d(0,\"+-t.finalSize/1.2+\"px,0)\";P.transform=E,P.webkitTransform=E}this.isMasked?this.textSpans[u]=h:this.textSpans[u]=l,this.textSpans[u].style.display=\"block\",this.textPaths[u]=h,u+=1}for(;u<this.textSpans.length;)this.textSpans[u].style.display=\"none\",u+=1},HTextElement.prototype.renderInnerContent=function(){var t;if(this.validateText(),this.data.singleShape){if(!this._isFirstFrame&&!this.lettersChangedFlag)return;if(this.isMasked&&this.finalTransform._matMdf){this.svgElement.setAttribute(\"viewBox\",-this.finalTransform.mProp.p.v[0]+\" \"+-this.finalTransform.mProp.p.v[1]+\" \"+this.compW+\" \"+this.compH),t=this.svgElement.style;var e=\"translate(\"+-this.finalTransform.mProp.p.v[0]+\"px,\"+-this.finalTransform.mProp.p.v[1]+\"px)\";t.transform=e,t.webkitTransform=e}}if(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),this.lettersChangedFlag||this.textAnimator.lettersChangedFlag){var i,r,s,a,n,o=0,h=this.textAnimator.renderedLetters,l=this.textProperty.currentData.l;for(r=l.length,i=0;i<r;i+=1)l[i].n?o+=1:(a=this.textSpans[i],n=this.textPaths[i],s=h[o],o+=1,s._mdf.m&&(this.isMasked?a.setAttribute(\"transform\",s.m):(a.style.webkitTransform=s.m,a.style.transform=s.m)),a.style.opacity=s.o,s.sw&&s._mdf.sw&&n.setAttribute(\"stroke-width\",s.sw),s.sc&&s._mdf.sc&&n.setAttribute(\"stroke\",s.sc),s.fc&&s._mdf.fc&&(n.setAttribute(\"fill\",s.fc),n.style.color=s.fc));if(this.innerElem.getBBox&&!this.hidden&&(this._isFirstFrame||this._mdf)){var p=this.innerElem.getBBox();this.currentBBox.w!==p.width&&(this.currentBBox.w=p.width,this.svgElement.setAttribute(\"width\",p.width)),this.currentBBox.h!==p.height&&(this.currentBBox.h=p.height,this.svgElement.setAttribute(\"height\",p.height));if(this.currentBBox.w!==p.width+2||this.currentBBox.h!==p.height+2||this.currentBBox.x!==p.x-1||this.currentBBox.y!==p.y-1){this.currentBBox.w=p.width+2,this.currentBBox.h=p.height+2,this.currentBBox.x=p.x-1,this.currentBBox.y=p.y-1,this.svgElement.setAttribute(\"viewBox\",this.currentBBox.x+\" \"+this.currentBBox.y+\" \"+this.currentBBox.w+\" \"+this.currentBBox.h),t=this.svgElement.style;var f=\"translate(\"+this.currentBBox.x+\"px,\"+this.currentBBox.y+\"px)\";t.transform=f,t.webkitTransform=f}}}},extendPrototype([BaseElement,FrameElement,HierarchyElement],HCameraElement),HCameraElement.prototype.setup=function(){var t,e,i,r,s=this.comp.threeDElements.length;for(t=0;t<s;t+=1)if(\"3d\"===(e=this.comp.threeDElements[t]).type){i=e.perspectiveElem.style,r=e.container.style;var a=this.pe.v+\"px\",n=\"0px 0px 0px\",o=\"matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)\";i.perspective=a,i.webkitPerspective=a,r.transformOrigin=n,r.mozTransformOrigin=n,r.webkitTransformOrigin=n,i.transform=o,i.webkitTransform=o}},HCameraElement.prototype.createElements=function(){},HCameraElement.prototype.hide=function(){},HCameraElement.prototype.renderFrame=function(){var t,e,i=this._isFirstFrame;if(this.hierarchy)for(e=this.hierarchy.length,t=0;t<e;t+=1)i=this.hierarchy[t].finalTransform.mProp._mdf||i;if(i||this.pe._mdf||this.p&&this.p._mdf||this.px&&(this.px._mdf||this.py._mdf||this.pz._mdf)||this.rx._mdf||this.ry._mdf||this.rz._mdf||this.or._mdf||this.a&&this.a._mdf){if(this.mat.reset(),this.hierarchy)for(t=e=this.hierarchy.length-1;t>=0;t-=1){var r=this.hierarchy[t].finalTransform.mProp;this.mat.translate(-r.p.v[0],-r.p.v[1],r.p.v[2]),this.mat.rotateX(-r.or.v[0]).rotateY(-r.or.v[1]).rotateZ(r.or.v[2]),this.mat.rotateX(-r.rx.v).rotateY(-r.ry.v).rotateZ(r.rz.v),this.mat.scale(1/r.s.v[0],1/r.s.v[1],1/r.s.v[2]),this.mat.translate(r.a.v[0],r.a.v[1],r.a.v[2])}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var s;s=this.p?[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var a=Math.sqrt(Math.pow(s[0],2)+Math.pow(s[1],2)+Math.pow(s[2],2)),n=[s[0]/a,s[1]/a,s[2]/a],o=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],o),l=Math.atan2(n[0],-n[2]);this.mat.rotateY(l).rotateX(-h)}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var p=!this._prevMat.equals(this.mat);if((p||this.pe._mdf)&&this.comp.threeDElements){var f,m,c;for(e=this.comp.threeDElements.length,t=0;t<e;t+=1)if(\"3d\"===(f=this.comp.threeDElements[t]).type){if(p){var d=this.mat.toCSS();(c=f.container.style).transform=d,c.webkitTransform=d}this.pe._mdf&&((m=f.perspectiveElem.style).perspective=this.pe.v+\"px\",m.webkitPerspective=this.pe.v+\"px\")}this.mat.clone(this._prevMat)}}this._isFirstFrame=!1},HCameraElement.prototype.prepareFrame=function(t){this.prepareProperties(t,!0)},HCameraElement.prototype.destroy=function(){},HCameraElement.prototype.getBaseElement=function(){return null},extendPrototype([BaseElement,TransformElement,HBaseElement,HSolidElement,HierarchyElement,FrameElement,RenderableElement],HImageElement),HImageElement.prototype.createContent=function(){var t=this.globalData.getAssetsPath(this.assetData),e=new Image;this.data.hasMask?(this.imageElem=createNS(\"image\"),this.imageElem.setAttribute(\"width\",this.assetData.w+\"px\"),this.imageElem.setAttribute(\"height\",this.assetData.h+\"px\"),this.imageElem.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",t),this.layerElement.appendChild(this.imageElem),this.baseElement.setAttribute(\"width\",this.assetData.w),this.baseElement.setAttribute(\"height\",this.assetData.h)):this.layerElement.appendChild(e),e.crossOrigin=\"anonymous\",e.src=t,this.data.ln&&this.baseElement.setAttribute(\"id\",this.data.ln)},extendPrototype([BaseRenderer],HybridRendererBase),HybridRendererBase.prototype.buildItem=SVGRenderer.prototype.buildItem,HybridRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){this.pendingElements.pop().checkParenting()}},HybridRendererBase.prototype.appendElementInPos=function(t,e){var i=t.getBaseElement();if(i){var r=this.layers[e];if(r.ddd&&this.supports3d)this.addTo3dContainer(i,e);else if(this.threeDElements)this.addTo3dContainer(i,e);else{for(var s,a,n=0;n<e;)this.elements[n]&&!0!==this.elements[n]&&this.elements[n].getBaseElement&&(a=this.elements[n],s=(this.layers[n].ddd?this.getThreeDContainerByPos(n):a.getBaseElement())||s),n+=1;s?r.ddd&&this.supports3d||this.layerElement.insertBefore(i,s):r.ddd&&this.supports3d||this.layerElement.appendChild(i)}}},HybridRendererBase.prototype.createShape=function(t){return this.supports3d?new HShapeElement(t,this.globalData,this):new SVGShapeElement(t,this.globalData,this)},HybridRendererBase.prototype.createText=function(t){return this.supports3d?new HTextElement(t,this.globalData,this):new SVGTextLottieElement(t,this.globalData,this)},HybridRendererBase.prototype.createCamera=function(t){return this.camera=new HCameraElement(t,this.globalData,this),this.camera},HybridRendererBase.prototype.createImage=function(t){return this.supports3d?new HImageElement(t,this.globalData,this):new IImageElement(t,this.globalData,this)},HybridRendererBase.prototype.createSolid=function(t){return this.supports3d?new HSolidElement(t,this.globalData,this):new ISolidElement(t,this.globalData,this)},HybridRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,HybridRendererBase.prototype.getThreeDContainerByPos=function(t){for(var e=0,i=this.threeDElements.length;e<i;){if(this.threeDElements[e].startPos<=t&&this.threeDElements[e].endPos>=t)return this.threeDElements[e].perspectiveElem;e+=1}return null},HybridRendererBase.prototype.createThreeDContainer=function(t,e){var i,r,s=createTag(\"div\");styleDiv(s);var a=createTag(\"div\");if(styleDiv(a),\"3d\"===e){(i=s.style).width=this.globalData.compSize.w+\"px\",i.height=this.globalData.compSize.h+\"px\";var n=\"50% 50%\";i.webkitTransformOrigin=n,i.mozTransformOrigin=n,i.transformOrigin=n;var o=\"matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)\";(r=a.style).transform=o,r.webkitTransform=o}s.appendChild(a);var h={container:a,perspectiveElem:s,startPos:t,endPos:t,type:e};return this.threeDElements.push(h),h},HybridRendererBase.prototype.build3dContainers=function(){var t,e,i=this.layers.length,r=\"\";for(t=0;t<i;t+=1)this.layers[t].ddd&&3!==this.layers[t].ty?(\"3d\"!==r&&(r=\"3d\",e=this.createThreeDContainer(t,\"3d\")),e.endPos=Math.max(e.endPos,t)):(\"2d\"!==r&&(r=\"2d\",e=this.createThreeDContainer(t,\"2d\")),e.endPos=Math.max(e.endPos,t));for(t=(i=this.threeDElements.length)-1;t>=0;t-=1)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem)},HybridRendererBase.prototype.addTo3dContainer=function(t,e){for(var i=0,r=this.threeDElements.length;i<r;){if(e<=this.threeDElements[i].endPos){for(var s,a=this.threeDElements[i].startPos;a<e;)this.elements[a]&&this.elements[a].getBaseElement&&(s=this.elements[a].getBaseElement()),a+=1;s?this.threeDElements[i].container.insertBefore(t,s):this.threeDElements[i].container.appendChild(t);break}i+=1}},HybridRendererBase.prototype.configAnimation=function(t){var e=createTag(\"div\"),i=this.animationItem.wrapper,r=e.style;r.width=t.w+\"px\",r.height=t.h+\"px\",this.resizerElem=e,styleDiv(e),r.transformStyle=\"flat\",r.mozTransformStyle=\"flat\",r.webkitTransformStyle=\"flat\",this.renderConfig.className&&e.setAttribute(\"class\",this.renderConfig.className),i.appendChild(e),r.overflow=\"hidden\";var s=createNS(\"svg\");s.setAttribute(\"width\",\"1\"),s.setAttribute(\"height\",\"1\"),styleDiv(s),this.resizerElem.appendChild(s);var a=createNS(\"defs\");s.appendChild(a),this.data=t,this.setupGlobalData(t,s),this.globalData.defs=a,this.layers=t.layers,this.layerElement=this.resizerElem,this.build3dContainers(),this.updateContainerSize()},HybridRendererBase.prototype.destroy=function(){var t;this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=\"\"),this.animationItem.container=null,this.globalData.defs=null;var e=this.layers?this.layers.length:0;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},HybridRendererBase.prototype.updateContainerSize=function(){var t,e,i,r,s=this.animationItem.wrapper.offsetWidth,a=this.animationItem.wrapper.offsetHeight,n=s/a;this.globalData.compSize.w/this.globalData.compSize.h>n?(t=s/this.globalData.compSize.w,e=s/this.globalData.compSize.w,i=0,r=(a-this.globalData.compSize.h*(s/this.globalData.compSize.w))/2):(t=a/this.globalData.compSize.h,e=a/this.globalData.compSize.h,i=(s-this.globalData.compSize.w*(a/this.globalData.compSize.h))/2,r=0);var o=this.resizerElem.style;o.webkitTransform=\"matrix3d(\"+t+\",0,0,0,0,\"+e+\",0,0,0,0,1,0,\"+i+\",\"+r+\",0,1)\",o.transform=o.webkitTransform},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display=\"none\"},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display=\"block\"},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var t,e=this.globalData.compSize.w,i=this.globalData.compSize.h,r=this.threeDElements.length;for(t=0;t<r;t+=1){var s=this.threeDElements[t].perspectiveElem.style;s.webkitPerspective=Math.sqrt(Math.pow(e,2)+Math.pow(i,2))+\"px\",s.perspective=s.webkitPerspective}}},HybridRendererBase.prototype.searchExtraCompositions=function(t){var e,i=t.length,r=createTag(\"div\");for(e=0;e<i;e+=1)if(t[e].xt){var s=this.createComp(t[e],r,this.globalData.comp,null);s.initExpressions(),this.globalData.projectInterface.registerComposition(s)}},extendPrototype([HybridRendererBase,ICompElement,HBaseElement],HCompElement),HCompElement.prototype._createBaseContainerElements=HCompElement.prototype.createContainerElements,HCompElement.prototype.createContainerElements=function(){this._createBaseContainerElements(),this.data.hasMask?(this.svgElement.setAttribute(\"width\",this.data.w),this.svgElement.setAttribute(\"height\",this.data.h),this.transformedElement=this.baseElement):this.transformedElement=this.layerElement},HCompElement.prototype.addTo3dContainer=function(t,e){for(var i,r=0;r<e;)this.elements[r]&&this.elements[r].getBaseElement&&(i=this.elements[r].getBaseElement()),r+=1;i?this.layerElement.insertBefore(t,i):this.layerElement.appendChild(t)},HCompElement.prototype.createComp=function(t){return this.supports3d?new HCompElement(t,this.globalData,this):new SVGCompElement(t,this.globalData,this)},extendPrototype([HybridRendererBase],HybridRenderer),HybridRenderer.prototype.createComp=function(t){return this.supports3d?new HCompElement(t,this.globalData,this):new SVGCompElement(t,this.globalData,this)};var CompExpressionInterface=function(t){function e(e){for(var i=0,r=t.layers.length;i<r;){if(t.layers[i].nm===e||t.layers[i].ind===e)return t.elements[i].layerInterface;i+=1}return null}return Object.defineProperty(e,\"_name\",{value:t.data.nm}),e.layer=e,e.pixelAspect=1,e.height=t.data.h||t.globalData.compSize.h,e.width=t.data.w||t.globalData.compSize.w,e.pixelAspect=1,e.frameDuration=1/t.globalData.frameRate,e.displayStartTime=0,e.numLayers=t.layers.length,e};function _typeof$2(t){return _typeof$2=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$2(t)}function seedRandom(t,e){var i,r=this,s=256,a=e.pow(s,6),n=e.pow(2,52),o=2*n,h=255;function l(t){var e,i=t.length,r=this,a=0,n=r.i=r.j=0,o=r.S=[];for(i||(t=[i++]);a<s;)o[a]=a++;for(a=0;a<s;a++)o[a]=o[n=h&n+t[a%i]+(e=o[a])],o[n]=e;r.g=function(t){for(var e,i=0,a=r.i,n=r.j,o=r.S;t--;)e=o[a=h&a+1],i=i*s+o[h&(o[a]=o[n=h&n+e])+(o[n]=e)];return r.i=a,r.j=n,i}}function p(t,e){return e.i=t.i,e.j=t.j,e.S=t.S.slice(),e}function f(t,e){var i,r=[],s=_typeof$2(t);if(e&&\"object\"==s)for(i in t)try{r.push(f(t[i],e-1))}catch(t){}return r.length?r:\"string\"==s?t:t+\"\\0\"}function m(t,e){for(var i,r=t+\"\",s=0;s<r.length;)e[h&s]=h&(i^=19*e[h&s])+r.charCodeAt(s++);return c(e)}function c(t){return String.fromCharCode.apply(0,t)}e.seedrandom=function(h,d,u){var y=[],g=m(f((d=!0===d?{entropy:!0}:d||{}).entropy?[h,c(t)]:null===h?function(){try{i;var e=new Uint8Array(s);return(r.crypto||r.msCrypto).getRandomValues(e),c(e)}catch(e){var a=r.navigator,n=a&&a.plugins;return[+new Date,r,n,r.screen,c(t)]}}():h,3),y),v=new l(y),b=function(){for(var t=v.g(6),e=a,i=0;t<n;)t=(t+i)*s,e*=s,i=v.g(1);for(;t>=o;)t/=2,e/=2,i>>>=1;return(t+i)/e};return b.int32=function(){return 0|v.g(4)},b.quick=function(){return v.g(4)/4294967296},b.double=b,m(c(v.S),t),(d.pass||u||function(t,i,r,s){return s&&(s.S&&p(s,v),t.state=function(){return p(v,{})}),r?(e.random=t,i):t})(b,g,\"global\"in d?d.global:this==e,d.state)},m(e.random(),t)}function initialize$2(t){seedRandom([],t)}var propTypes={SHAPE:\"shape\"};function _typeof$1(t){return _typeof$1=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof$1(t)}var ExpressionManager=function(){var ob={},Math=BMMath,window=null,document=null,XMLHttpRequest=null,fetch=null,frames=null,_lottieGlobal={};function resetFrame(){_lottieGlobal={}}function $bm_isInstanceOfArray(t){return t.constructor===Array||t.constructor===Float32Array}function isNumerable(t,e){return\"number\"===t||e instanceof Number||\"boolean\"===t||\"string\"===t}function $bm_neg(t){var e=_typeof$1(t);if(\"number\"===e||t instanceof Number||\"boolean\"===e)return-t;if($bm_isInstanceOfArray(t)){var i,r=t.length,s=[];for(i=0;i<r;i+=1)s[i]=-t[i];return s}return t.propType?t.v:-t}initialize$2(BMMath);var easeInBez=BezierFactory.getBezierEasing(.333,0,.833,.833,\"easeIn\").get,easeOutBez=BezierFactory.getBezierEasing(.167,.167,.667,1,\"easeOut\").get,easeInOutBez=BezierFactory.getBezierEasing(.33,0,.667,1,\"easeInOut\").get;function sum(t,e){var i=_typeof$1(t),r=_typeof$1(e);if(isNumerable(i,t)&&isNumerable(r,e)||\"string\"===i||\"string\"===r)return t+e;if($bm_isInstanceOfArray(t)&&isNumerable(r,e))return(t=t.slice(0))[0]+=e,t;if(isNumerable(i,t)&&$bm_isInstanceOfArray(e))return(e=e.slice(0))[0]=t+e[0],e;if($bm_isInstanceOfArray(t)&&$bm_isInstanceOfArray(e)){for(var s=0,a=t.length,n=e.length,o=[];s<a||s<n;)(\"number\"==typeof t[s]||t[s]instanceof Number)&&(\"number\"==typeof e[s]||e[s]instanceof Number)?o[s]=t[s]+e[s]:o[s]=void 0===e[s]?t[s]:t[s]||e[s],s+=1;return o}return 0}var add=sum;function sub(t,e){var i=_typeof$1(t),r=_typeof$1(e);if(isNumerable(i,t)&&isNumerable(r,e))return\"string\"===i&&(t=parseInt(t,10)),\"string\"===r&&(e=parseInt(e,10)),t-e;if($bm_isInstanceOfArray(t)&&isNumerable(r,e))return(t=t.slice(0))[0]-=e,t;if(isNumerable(i,t)&&$bm_isInstanceOfArray(e))return(e=e.slice(0))[0]=t-e[0],e;if($bm_isInstanceOfArray(t)&&$bm_isInstanceOfArray(e)){for(var s=0,a=t.length,n=e.length,o=[];s<a||s<n;)(\"number\"==typeof t[s]||t[s]instanceof Number)&&(\"number\"==typeof e[s]||e[s]instanceof Number)?o[s]=t[s]-e[s]:o[s]=void 0===e[s]?t[s]:t[s]||e[s],s+=1;return o}return 0}function mul(t,e){var i,r,s,a=_typeof$1(t),n=_typeof$1(e);if(isNumerable(a,t)&&isNumerable(n,e))return t*e;if($bm_isInstanceOfArray(t)&&isNumerable(n,e)){for(s=t.length,i=createTypedArray(\"float32\",s),r=0;r<s;r+=1)i[r]=t[r]*e;return i}if(isNumerable(a,t)&&$bm_isInstanceOfArray(e)){for(s=e.length,i=createTypedArray(\"float32\",s),r=0;r<s;r+=1)i[r]=t*e[r];return i}return 0}function div(t,e){var i,r,s,a=_typeof$1(t),n=_typeof$1(e);if(isNumerable(a,t)&&isNumerable(n,e))return t/e;if($bm_isInstanceOfArray(t)&&isNumerable(n,e)){for(s=t.length,i=createTypedArray(\"float32\",s),r=0;r<s;r+=1)i[r]=t[r]/e;return i}if(isNumerable(a,t)&&$bm_isInstanceOfArray(e)){for(s=e.length,i=createTypedArray(\"float32\",s),r=0;r<s;r+=1)i[r]=t/e[r];return i}return 0}function mod(t,e){return\"string\"==typeof t&&(t=parseInt(t,10)),\"string\"==typeof e&&(e=parseInt(e,10)),t%e}var $bm_sum=sum,$bm_sub=sub,$bm_mul=mul,$bm_div=div,$bm_mod=mod;function clamp(t,e,i){if(e>i){var r=i;i=e,e=r}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if(\"number\"==typeof t||t instanceof Number)return e=e||0,Math.abs(t-e);var i;e||(e=helperLengthArray);var r=Math.min(t.length,e.length),s=0;for(i=0;i<r;i+=1)s+=Math.pow(e[i]-t[i],2);return Math.sqrt(s)}function normalize(t){return div(t,length(t))}function rgbToHsl(t){var e,i,r=t[0],s=t[1],a=t[2],n=Math.max(r,s,a),o=Math.min(r,s,a),h=(n+o)/2;if(n===o)e=0,i=0;else{var l=n-o;switch(i=h>.5?l/(2-n-o):l/(n+o),n){case r:e=(s-a)/l+(s<a?6:0);break;case s:e=(a-r)/l+2;break;case a:e=(r-s)/l+4}e/=6}return[e,i,h,t[3]]}function hue2rgb(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e,i,r,s=t[0],a=t[1],n=t[2];if(0===a)e=n,r=n,i=n;else{var o=n<.5?n*(1+a):n+a-n*a,h=2*n-o;e=hue2rgb(h,o,s+1/3),i=hue2rgb(h,o,s),r=hue2rgb(h,o,s-1/3)}return[e,i,r,t[3]]}function linear(t,e,i,r,s){if(void 0!==r&&void 0!==s||(r=e,s=i,e=0,i=1),i<e){var a=i;i=e,e=a}if(t<=e)return r;if(t>=i)return s;var n,o=i===e?0:(t-e)/(i-e);if(!r.length)return r+(s-r)*o;var h=r.length,l=createTypedArray(\"float32\",h);for(n=0;n<h;n+=1)l[n]=r[n]+(s[n]-r[n])*o;return l}function random(t,e){if(void 0===e&&(void 0===t?(t=0,e=1):(e=t,t=void 0)),e.length){var i,r=e.length;t||(t=createTypedArray(\"float32\",r));var s=createTypedArray(\"float32\",r),a=BMMath.random();for(i=0;i<r;i+=1)s[i]=t[i]+a*(e[i]-t[i]);return s}return void 0===t&&(t=0),t+BMMath.random()*(e-t)}function createPath(t,e,i,r){var s,a=t.length,n=shapePool.newElement();n.setPathData(!!r,a);var o,h,l=[0,0];for(s=0;s<a;s+=1)o=e&&e[s]?e[s]:l,h=i&&i[s]?i[s]:l,n.setTripleAt(t[s][0],t[s][1],h[0]+t[s][0],h[1]+t[s][1],o[0]+t[s][0],o[1]+t[s][1],s,!0);return n}function initiateExpression(elem,data,property){function noOp(t){return t}if(!elem.globalData.renderConfig.runExpressions)return noOp;var val=data.x,needsVelocity=/velocity(?![\\w\\d])/.test(val),_needsRandom=-1!==val.indexOf(\"random\"),elemType=elem.data.ty,transform,$bm_transform,content,effect,thisProperty=property;thisProperty.valueAtTime=thisProperty.getValueAtTime,Object.defineProperty(thisProperty,\"value\",{get:function(){return thisProperty.v}}),elem.comp.frameDuration=1/elem.comp.globalData.frameRate,elem.comp.displayStartTime=0;var inPoint=elem.data.ip/elem.comp.globalData.frameRate,outPoint=elem.data.op/elem.comp.globalData.frameRate,width=elem.data.sw?elem.data.sw:0,height=elem.data.sh?elem.data.sh:0,name=elem.data.nm,loopIn,loop_in,loopOut,loop_out,smooth,toWorld,fromWorld,fromComp,toComp,fromCompToSurface,position,rotation,anchorPoint,scale,thisLayer,thisComp,mask,valueAtTime,velocityAtTime,scoped_bm_rt,expression_function=eval(\"[function _expression_function(){\"+val+\";scoped_bm_rt=$bm_rt}]\")[0],numKeys=property.kf?data.k.length:0,active=!this.data||!0!==this.data.hd,wiggle=function(t,e){var i,r,s=this.pv.length?this.pv.length:1,a=createTypedArray(\"float32\",s);var n=Math.floor(5*time);for(i=0,r=0;i<n;){for(r=0;r<s;r+=1)a[r]+=-e+2*e*BMMath.random();i+=1}var o=5*time,h=o-Math.floor(o),l=createTypedArray(\"float32\",s);if(s>1){for(r=0;r<s;r+=1)l[r]=this.pv[r]+a[r]+(-e+2*e*BMMath.random())*h;return l}return this.pv+a[0]+(-e+2*e*BMMath.random())*h}.bind(this);function loopInDuration(t,e){return loopIn(t,e,!0)}function loopOutDuration(t,e){return loopOut(t,e,!0)}thisProperty.loopIn&&(loopIn=thisProperty.loopIn.bind(thisProperty),loop_in=loopIn),thisProperty.loopOut&&(loopOut=thisProperty.loopOut.bind(thisProperty),loop_out=loopOut),thisProperty.smooth&&(smooth=thisProperty.smooth.bind(thisProperty)),this.getValueAtTime&&(valueAtTime=this.getValueAtTime.bind(this)),this.getVelocityAtTime&&(velocityAtTime=this.getVelocityAtTime.bind(this));var comp=elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface),time,velocity,value,text,textIndex,textTotal,selectorValue;function lookAt(t,e){var i=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],r=Math.atan2(i[0],Math.sqrt(i[1]*i[1]+i[2]*i[2]))/degToRads;return[-Math.atan2(i[1],i[2])/degToRads,r,0]}function easeOut(t,e,i,r,s){return applyEase(easeOutBez,t,e,i,r,s)}function easeIn(t,e,i,r,s){return applyEase(easeInBez,t,e,i,r,s)}function ease(t,e,i,r,s){return applyEase(easeInOutBez,t,e,i,r,s)}function applyEase(t,e,i,r,s,a){void 0===s?(s=i,a=r):e=(e-i)/(r-i),e>1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(s)){var o,h=s.length,l=createTypedArray(\"float32\",h);for(o=0;o<h;o+=1)l[o]=(a[o]-s[o])*n+s[o];return l}return(a-s)*n+s}function nearestKey(t){var e,i,r,s=data.k.length;if(data.k.length&&\"number\"!=typeof data.k[0])if(i=-1,(t*=elem.comp.globalData.frameRate)<data.k[0].t)i=1,r=data.k[0].t;else{for(e=0;e<s-1;e+=1){if(t===data.k[e].t){i=e+1,r=data.k[e].t;break}if(t>data.k[e].t&&t<data.k[e+1].t){t-data.k[e].t>data.k[e+1].t-t?(i=e+2,r=data.k[e+1].t):(i=e+1,r=data.k[e].t);break}}-1===i&&(i=e+1,r=data.k[e].t)}else i=0,r=0;var a={};return a.index=i,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,r;if(!data.k.length||\"number\"==typeof data.k[0])throw new Error(\"The property has no keyframe at index \"+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var s=Object.prototype.hasOwnProperty.call(data.k[t],\"s\")?data.k[t].s:data.k[t-1].e;for(r=s.length,i=0;i<r;i+=1)e[i]=s[i],e.value[i]=s[i];return e}function framesToTime(t,e){return e||(e=elem.comp.globalData.frameRate),t/e}function timeToFrames(t,e){return t||0===t||(t=time),e||(e=elem.comp.globalData.frameRate),t*e}function seedRandom(t){BMMath.seedrandom(randSeed+t)}function sourceRectAtTime(){return elem.sourceRectAtTime()}function substring(t,e){return\"string\"==typeof value?void 0===e?value.substring(t):value.substring(t,e):\"\"}function substr(t,e){return\"string\"==typeof value?void 0===e?value.substr(t):value.substr(t,e):\"\"}function posterizeTime(t){time=0===t?0:Math.floor(time*t)/t,value=valueAtTime(time)}var index=elem.data.ind,hasParent=!(!elem.hierarchy||!elem.hierarchy.length),parent,randSeed=Math.floor(1e6*Math.random()),globalData=elem.globalData;function executeExpression(t){return value=t,this.frameExpressionId===elem.globalData.frameId&&\"textSelector\"!==this.propType?value:(\"textSelector\"===this.propType&&(textIndex=this.textIndex,textTotal=this.textTotal,selectorValue=this.selectorValue),thisLayer||(text=elem.layerInterface.text,thisLayer=elem.layerInterface,thisComp=elem.comp.compInterface,toWorld=thisLayer.toWorld.bind(thisLayer),fromWorld=thisLayer.fromWorld.bind(thisLayer),fromComp=thisLayer.fromComp.bind(thisLayer),toComp=thisLayer.toComp.bind(thisLayer),mask=thisLayer.mask?thisLayer.mask.bind(thisLayer):null,fromCompToSurface=fromComp),transform||(transform=elem.layerInterface(\"ADBE Transform Group\"),$bm_transform=transform,transform&&(anchorPoint=transform.anchorPoint)),4!==elemType||content||(content=thisLayer(\"ADBE Root Vectors Group\")),effect||(effect=thisLayer(4)),(hasParent=!(!elem.hierarchy||!elem.hierarchy.length))&&!parent&&(parent=elem.hierarchy[0].layerInterface),time=this.comp.renderedFrame/this.comp.globalData.frameRate,_needsRandom&&seedRandom(randSeed+time),needsVelocity&&(velocity=velocityAtTime(time)),expression_function(),this.frameExpressionId=elem.globalData.frameId,scoped_bm_rt=scoped_bm_rt.propType===propTypes.SHAPE?scoped_bm_rt.v:scoped_bm_rt)}return executeExpression.__preventDeadCodeRemoval=[$bm_transform,anchorPoint,time,velocity,inPoint,outPoint,width,height,name,loop_in,loop_out,smooth,toComp,fromCompToSurface,toWorld,fromWorld,mask,position,rotation,scale,thisComp,numKeys,active,wiggle,loopInDuration,loopOutDuration,comp,lookAt,easeOut,easeIn,ease,nearestKey,key,text,textIndex,textTotal,selectorValue,framesToTime,timeToFrames,sourceRectAtTime,substring,substr,posterizeTime,index,globalData],executeExpression}return ob.initiateExpression=initiateExpression,ob.__preventDeadCodeRemoval=[window,document,XMLHttpRequest,fetch,frames,$bm_neg,add,$bm_sum,$bm_sub,$bm_mul,$bm_div,$bm_mod,clamp,radians_to_degrees,degreesToRadians,degrees_to_radians,normalize,rgbToHsl,hslToRgb,linear,random,createPath,_lottieGlobal],ob.resetFrame=resetFrame,ob}(),Expressions=function(){var t={};return t.initExpressions=function(t){var e=0,i=[];t.renderer.compInterface=CompExpressionInterface(t.renderer),t.renderer.globalData.projectInterface.registerComposition(t.renderer),t.renderer.globalData.pushExpression=function(){e+=1},t.renderer.globalData.popExpression=function(){0==(e-=1)&&function(){var t,e=i.length;for(t=0;t<e;t+=1)i[t].release();i.length=0}()},t.renderer.globalData.registerExpressionProperty=function(t){-1===i.indexOf(t)&&i.push(t)}},t.resetFrame=ExpressionManager.resetFrame,t}(),MaskManagerInterface=function(){function t(t,e){this._mask=t,this._data=e}Object.defineProperty(t.prototype,\"maskPath\",{get:function(){return this._mask.prop.k&&this._mask.prop.getValue(),this._mask.prop}}),Object.defineProperty(t.prototype,\"maskOpacity\",{get:function(){return this._mask.op.k&&this._mask.op.getValue(),100*this._mask.op.v}});return function(e){var i,r=createSizedArray(e.viewData.length),s=e.viewData.length;for(i=0;i<s;i+=1)r[i]=new t(e.viewData[i],e.masksProperties[i]);return function(t){for(i=0;i<s;){if(e.masksProperties[i].nm===t)return r[i];i+=1}return null}}}(),ExpressionPropertyInterface=function(){var t={pv:0,v:0,mult:1},e={pv:[0,0,0],v:[0,0,0],mult:1};function i(t,e,i){Object.defineProperty(t,\"velocity\",{get:function(){return e.getVelocityAtTime(e.comp.currentFrame)}}),t.numKeys=e.keyframes?e.keyframes.length:0,t.key=function(r){if(!t.numKeys)return 0;var s=\"\";s=\"s\"in e.keyframes[r-1]?e.keyframes[r-1].s:\"e\"in e.keyframes[r-2]?e.keyframes[r-2].e:e.keyframes[r-2].s;var a=\"unidimensional\"===i?new Number(s):Object.assign({},s);return a.time=e.keyframes[r-1].t/e.elem.comp.globalData.frameRate,a.value=\"unidimensional\"===i?s[0]:s,a},t.valueAtTime=e.getValueAtTime,t.speedAtTime=e.getSpeedAtTime,t.velocityAtTime=e.getVelocityAtTime,t.propertyGroup=e.propertyGroup}function r(){return t}return function(s){return s?\"unidimensional\"===s.propType?function(e){e&&\"pv\"in e||(e=t);var r=1/e.mult,s=e.pv*r,a=new Number(s);return a.value=s,i(a,e,\"unidimensional\"),function(){return e.k&&e.getValue(),s=e.v*r,a.value!==s&&((a=new Number(s)).value=s,i(a,e,\"unidimensional\")),a}}(s):function(t){t&&\"pv\"in t||(t=e);var r=1/t.mult,s=t.data&&t.data.l||t.pv.length,a=createTypedArray(\"float32\",s),n=createTypedArray(\"float32\",s);return a.value=n,i(a,t,\"multidimensional\"),function(){t.k&&t.getValue();for(var e=0;e<s;e+=1)n[e]=t.v[e]*r,a[e]=n[e];return a}}(s):r}}(),TransformExpressionInterface=function(t){function e(t){switch(t){case\"scale\":case\"Scale\":case\"ADBE Scale\":case 6:return e.scale;case\"rotation\":case\"Rotation\":case\"ADBE Rotation\":case\"ADBE Rotate Z\":case 10:return e.rotation;case\"ADBE Rotate X\":return e.xRotation;case\"ADBE Rotate Y\":return e.yRotation;case\"position\":case\"Position\":case\"ADBE Position\":case 2:return e.position;case\"ADBE Position_0\":return e.xPosition;case\"ADBE Position_1\":return e.yPosition;case\"ADBE Position_2\":return e.zPosition;case\"anchorPoint\":case\"AnchorPoint\":case\"Anchor Point\":case\"ADBE AnchorPoint\":case 1:return e.anchorPoint;case\"opacity\":case\"Opacity\":case 11:return e.opacity;default:return null}}var i,r,s,a;return Object.defineProperty(e,\"rotation\",{get:ExpressionPropertyInterface(t.r||t.rz)}),Object.defineProperty(e,\"zRotation\",{get:ExpressionPropertyInterface(t.rz||t.r)}),Object.defineProperty(e,\"xRotation\",{get:ExpressionPropertyInterface(t.rx)}),Object.defineProperty(e,\"yRotation\",{get:ExpressionPropertyInterface(t.ry)}),Object.defineProperty(e,\"scale\",{get:ExpressionPropertyInterface(t.s)}),t.p?a=ExpressionPropertyInterface(t.p):(i=ExpressionPropertyInterface(t.px),r=ExpressionPropertyInterface(t.py),t.pz&&(s=ExpressionPropertyInterface(t.pz))),Object.defineProperty(e,\"position\",{get:function(){return t.p?a():[i(),r(),s?s():0]}}),Object.defineProperty(e,\"xPosition\",{get:ExpressionPropertyInterface(t.px)}),Object.defineProperty(e,\"yPosition\",{get:ExpressionPropertyInterface(t.py)}),Object.defineProperty(e,\"zPosition\",{get:ExpressionPropertyInterface(t.pz)}),Object.defineProperty(e,\"anchorPoint\",{get:ExpressionPropertyInterface(t.a)}),Object.defineProperty(e,\"opacity\",{get:ExpressionPropertyInterface(t.o)}),Object.defineProperty(e,\"skew\",{get:ExpressionPropertyInterface(t.sk)}),Object.defineProperty(e,\"skewAxis\",{get:ExpressionPropertyInterface(t.sa)}),Object.defineProperty(e,\"orientation\",{get:ExpressionPropertyInterface(t.or)}),e},LayerExpressionInterface=function(){function t(t){var e=new Matrix;void 0!==t?this._elem.finalTransform.mProp.getValueAtTime(t).clone(e):this._elem.finalTransform.mProp.applyToMatrix(e);return e}function e(t,e){var i=this.getMatrix(e);return i.props[12]=0,i.props[13]=0,i.props[14]=0,this.applyPoint(i,t)}function i(t,e){var i=this.getMatrix(e);return this.applyPoint(i,t)}function r(t,e){var i=this.getMatrix(e);return i.props[12]=0,i.props[13]=0,i.props[14]=0,this.invertPoint(i,t)}function s(t,e){var i=this.getMatrix(e);return this.invertPoint(i,t)}function a(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){var i,r=this._elem.hierarchy.length;for(i=0;i<r;i+=1)this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(t)}return t.applyToPointArray(e[0],e[1],e[2]||0)}function n(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){var i,r=this._elem.hierarchy.length;for(i=0;i<r;i+=1)this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(t)}return t.inversePoint(e)}function o(t){var e=new Matrix;if(e.reset(),this._elem.finalTransform.mProp.applyToMatrix(e),this._elem.hierarchy&&this._elem.hierarchy.length){var i,r=this._elem.hierarchy.length;for(i=0;i<r;i+=1)this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(e);return e.inversePoint(t)}return e.inversePoint(t)}function h(){return[1,1,1,1]}return function(l){var p;function f(t){switch(t){case\"ADBE Root Vectors Group\":case\"Contents\":case 2:return f.shapeInterface;case 1:case 6:case\"Transform\":case\"transform\":case\"ADBE Transform Group\":return p;case 4:case\"ADBE Effect Parade\":case\"effects\":case\"Effects\":return f.effect;case\"ADBE Text Properties\":return f.textInterface;default:return null}}f.getMatrix=t,f.invertPoint=n,f.applyPoint=a,f.toWorld=i,f.toWorldVec=e,f.fromWorld=s,f.fromWorldVec=r,f.toComp=i,f.fromComp=o,f.sampleImage=h,f.sourceRectAtTime=l.sourceRectAtTime.bind(l),f._elem=l;var m=getDescriptor(p=TransformExpressionInterface(l.finalTransform.mProp),\"anchorPoint\");return Object.defineProperties(f,{hasParent:{get:function(){return l.hierarchy.length}},parent:{get:function(){return l.hierarchy[0].layerInterface}},rotation:getDescriptor(p,\"rotation\"),scale:getDescriptor(p,\"scale\"),position:getDescriptor(p,\"position\"),opacity:getDescriptor(p,\"opacity\"),anchorPoint:m,anchor_point:m,transform:{get:function(){return p}},active:{get:function(){return l.isInRange}}}),f.startTime=l.data.st,f.index=l.data.ind,f.source=l.data.refId,f.height=0===l.data.ty?l.data.h:100,f.width=0===l.data.ty?l.data.w:100,f.inPoint=l.data.ip/l.comp.globalData.frameRate,f.outPoint=l.data.op/l.comp.globalData.frameRate,f._name=l.data.nm,f.registerMaskInterface=function(t){f.mask=new MaskManagerInterface(t,l)},f.registerEffectsInterface=function(t){f.effect=t},f}}(),propertyGroupFactory=function(t,e){return function(i){return(i=void 0===i?1:i)<=0?t:e(i-1)}},PropertyInterface=function(t,e){var i={_name:t};return function(t){return(t=void 0===t?1:t)<=0?i:e(t-1)}},EffectsExpressionInterface=function(){function t(i,r,s,a){function n(t){for(var e=i.ef,r=0,s=e.length;r<s;){if(t===e[r].nm||t===e[r].mn||t===e[r].ix)return 5===e[r].ty?l[r]:l[r]();r+=1}throw new Error}var o,h=propertyGroupFactory(n,s),l=[],p=i.ef.length;for(o=0;o<p;o+=1)5===i.ef[o].ty?l.push(t(i.ef[o],r.effectElements[o],r.effectElements[o].propertyGroup,a)):l.push(e(r.effectElements[o],i.ef[o].ty,a,h));return\"ADBE Color Control\"===i.mn&&Object.defineProperty(n,\"color\",{get:function(){return l[0]()}}),Object.defineProperties(n,{numProperties:{get:function(){return i.np}},_name:{value:i.nm},propertyGroup:{value:h}}),n.enabled=0!==i.en,n.active=n.enabled,n}function e(t,e,i,r){var s=ExpressionPropertyInterface(t.p);return t.p.setGroupProperty&&t.p.setGroupProperty(PropertyInterface(\"\",r)),function(){return 10===e?i.comp.compInterface(t.p.v):s()}}return{createEffectsInterface:function(e,i){if(e.effectsManager){var r,s=[],a=e.data.ef,n=e.effectsManager.effectElements.length;for(r=0;r<n;r+=1)s.push(t(a[r],e.effectsManager.effectElements[r],i,e));var o=e.data.ef||[],h=function(t){for(r=0,n=o.length;r<n;){if(t===o[r].nm||t===o[r].mn||t===o[r].ix)return s[r];r+=1}return null};return Object.defineProperty(h,\"numProperties\",{get:function(){return o.length}}),h}return null}}}(),ShapePathInterface=function(t,e,i){var r=e.sh;function s(t){return\"Shape\"===t||\"shape\"===t||\"Path\"===t||\"path\"===t||\"ADBE Vector Shape\"===t||2===t?s.path:null}var a=propertyGroupFactory(s,i);return r.setGroupProperty(PropertyInterface(\"Path\",a)),Object.defineProperties(s,{path:{get:function(){return r.k&&r.getValue(),r}},shape:{get:function(){return r.k&&r.getValue(),r}},_name:{value:t.nm},ix:{value:t.ix},propertyIndex:{value:t.ix},mn:{value:t.mn},propertyGroup:{value:i}}),s},ShapeExpressionInterface=function(){function t(t,o,c){var d,u=[],y=t?t.length:0;for(d=0;d<y;d+=1)\"gr\"===t[d].ty?u.push(e(t[d],o[d],c)):\"fl\"===t[d].ty?u.push(i(t[d],o[d],c)):\"st\"===t[d].ty?u.push(a(t[d],o[d],c)):\"tm\"===t[d].ty?u.push(n(t[d],o[d],c)):\"tr\"===t[d].ty||(\"el\"===t[d].ty?u.push(h(t[d],o[d],c)):\"sr\"===t[d].ty?u.push(l(t[d],o[d],c)):\"sh\"===t[d].ty?u.push(ShapePathInterface(t[d],o[d],c)):\"rc\"===t[d].ty?u.push(p(t[d],o[d],c)):\"rd\"===t[d].ty?u.push(f(t[d],o[d],c)):\"rp\"===t[d].ty?u.push(m(t[d],o[d],c)):\"gf\"===t[d].ty?u.push(r(t[d],o[d],c)):u.push(s(t[d],o[d])));return u}function e(e,i,r){var s=function(t){switch(t){case\"ADBE Vectors Group\":case\"Contents\":case 2:return s.content;default:return s.transform}};s.propertyGroup=propertyGroupFactory(s,r);var a=function(e,i,r){var s,a=function(t){for(var e=0,i=s.length;e<i;){if(s[e]._name===t||s[e].mn===t||s[e].propertyIndex===t||s[e].ix===t||s[e].ind===t)return s[e];e+=1}return\"number\"==typeof t?s[t-1]:null};a.propertyGroup=propertyGroupFactory(a,r),s=t(e.it,i.it,a.propertyGroup),a.numProperties=s.length;var n=o(e.it[e.it.length-1],i.it[i.it.length-1],a.propertyGroup);return a.transform=n,a.propertyIndex=e.cix,a._name=e.nm,a}(e,i,s.propertyGroup),n=o(e.it[e.it.length-1],i.it[i.it.length-1],s.propertyGroup);return s.content=a,s.transform=n,Object.defineProperty(s,\"_name\",{get:function(){return e.nm}}),s.numProperties=e.np,s.propertyIndex=e.ix,s.nm=e.nm,s.mn=e.mn,s}function i(t,e,i){function r(t){return\"Color\"===t||\"color\"===t?r.color:\"Opacity\"===t||\"opacity\"===t?r.opacity:null}return Object.defineProperties(r,{color:{get:ExpressionPropertyInterface(e.c)},opacity:{get:ExpressionPropertyInterface(e.o)},_name:{value:t.nm},mn:{value:t.mn}}),e.c.setGroupProperty(PropertyInterface(\"Color\",i)),e.o.setGroupProperty(PropertyInterface(\"Opacity\",i)),r}function r(t,e,i){function r(t){return\"Start Point\"===t||\"start point\"===t?r.startPoint:\"End Point\"===t||\"end point\"===t?r.endPoint:\"Opacity\"===t||\"opacity\"===t?r.opacity:null}return Object.defineProperties(r,{startPoint:{get:ExpressionPropertyInterface(e.s)},endPoint:{get:ExpressionPropertyInterface(e.e)},opacity:{get:ExpressionPropertyInterface(e.o)},type:{get:function(){return\"a\"}},_name:{value:t.nm},mn:{value:t.mn}}),e.s.setGroupProperty(PropertyInterface(\"Start Point\",i)),e.e.setGroupProperty(PropertyInterface(\"End Point\",i)),e.o.setGroupProperty(PropertyInterface(\"Opacity\",i)),r}function s(){return function(){return null}}function a(t,e,i){var r,s=propertyGroupFactory(l,i),a=propertyGroupFactory(h,s);function n(i){Object.defineProperty(h,t.d[i].nm,{get:ExpressionPropertyInterface(e.d.dataProps[i].p)})}var o=t.d?t.d.length:0,h={};for(r=0;r<o;r+=1)n(r),e.d.dataProps[r].p.setGroupProperty(a);function l(t){return\"Color\"===t||\"color\"===t?l.color:\"Opacity\"===t||\"opacity\"===t?l.opacity:\"Stroke Width\"===t||\"stroke width\"===t?l.strokeWidth:null}return Object.defineProperties(l,{color:{get:ExpressionPropertyInterface(e.c)},opacity:{get:ExpressionPropertyInterface(e.o)},strokeWidth:{get:ExpressionPropertyInterface(e.w)},dash:{get:function(){return h}},_name:{value:t.nm},mn:{value:t.mn}}),e.c.setGroupProperty(PropertyInterface(\"Color\",s)),e.o.setGroupProperty(PropertyInterface(\"Opacity\",s)),e.w.setGroupProperty(PropertyInterface(\"Stroke Width\",s)),l}function n(t,e,i){function r(e){return e===t.e.ix||\"End\"===e||\"end\"===e?r.end:e===t.s.ix?r.start:e===t.o.ix?r.offset:null}var s=propertyGroupFactory(r,i);return r.propertyIndex=t.ix,e.s.setGroupProperty(PropertyInterface(\"Start\",s)),e.e.setGroupProperty(PropertyInterface(\"End\",s)),e.o.setGroupProperty(PropertyInterface(\"Offset\",s)),r.propertyIndex=t.ix,r.propertyGroup=i,Object.defineProperties(r,{start:{get:ExpressionPropertyInterface(e.s)},end:{get:ExpressionPropertyInterface(e.e)},offset:{get:ExpressionPropertyInterface(e.o)},_name:{value:t.nm}}),r.mn=t.mn,r}function o(t,e,i){function r(e){return t.a.ix===e||\"Anchor Point\"===e?r.anchorPoint:t.o.ix===e||\"Opacity\"===e?r.opacity:t.p.ix===e||\"Position\"===e?r.position:t.r.ix===e||\"Rotation\"===e||\"ADBE Vector Rotation\"===e?r.rotation:t.s.ix===e||\"Scale\"===e?r.scale:t.sk&&t.sk.ix===e||\"Skew\"===e?r.skew:t.sa&&t.sa.ix===e||\"Skew Axis\"===e?r.skewAxis:null}var s=propertyGroupFactory(r,i);return e.transform.mProps.o.setGroupProperty(PropertyInterface(\"Opacity\",s)),e.transform.mProps.p.setGroupProperty(PropertyInterface(\"Position\",s)),e.transform.mProps.a.setGroupProperty(PropertyInterface(\"Anchor Point\",s)),e.transform.mProps.s.setGroupProperty(PropertyInterface(\"Scale\",s)),e.transform.mProps.r.setGroupProperty(PropertyInterface(\"Rotation\",s)),e.transform.mProps.sk&&(e.transform.mProps.sk.setGroupProperty(PropertyInterface(\"Skew\",s)),e.transform.mProps.sa.setGroupProperty(PropertyInterface(\"Skew Angle\",s))),e.transform.op.setGroupProperty(PropertyInterface(\"Opacity\",s)),Object.defineProperties(r,{opacity:{get:ExpressionPropertyInterface(e.transform.mProps.o)},position:{get:ExpressionPropertyInterface(e.transform.mProps.p)},anchorPoint:{get:ExpressionPropertyInterface(e.transform.mProps.a)},scale:{get:ExpressionPropertyInterface(e.transform.mProps.s)},rotation:{get:ExpressionPropertyInterface(e.transform.mProps.r)},skew:{get:ExpressionPropertyInterface(e.transform.mProps.sk)},skewAxis:{get:ExpressionPropertyInterface(e.transform.mProps.sa)},_name:{value:t.nm}}),r.ty=\"tr\",r.mn=t.mn,r.propertyGroup=i,r}function h(t,e,i){function r(e){return t.p.ix===e?r.position:t.s.ix===e?r.size:null}var s=propertyGroupFactory(r,i);r.propertyIndex=t.ix;var a=\"tm\"===e.sh.ty?e.sh.prop:e.sh;return a.s.setGroupProperty(PropertyInterface(\"Size\",s)),a.p.setGroupProperty(PropertyInterface(\"Position\",s)),Object.defineProperties(r,{size:{get:ExpressionPropertyInterface(a.s)},position:{get:ExpressionPropertyInterface(a.p)},_name:{value:t.nm}}),r.mn=t.mn,r}function l(t,e,i){function r(e){return t.p.ix===e?r.position:t.r.ix===e?r.rotation:t.pt.ix===e?r.points:t.or.ix===e||\"ADBE Vector Star Outer Radius\"===e?r.outerRadius:t.os.ix===e?r.outerRoundness:!t.ir||t.ir.ix!==e&&\"ADBE Vector Star Inner Radius\"!==e?t.is&&t.is.ix===e?r.innerRoundness:null:r.innerRadius}var s=propertyGroupFactory(r,i),a=\"tm\"===e.sh.ty?e.sh.prop:e.sh;return r.propertyIndex=t.ix,a.or.setGroupProperty(PropertyInterface(\"Outer Radius\",s)),a.os.setGroupProperty(PropertyInterface(\"Outer Roundness\",s)),a.pt.setGroupProperty(PropertyInterface(\"Points\",s)),a.p.setGroupProperty(PropertyInterface(\"Position\",s)),a.r.setGroupProperty(PropertyInterface(\"Rotation\",s)),t.ir&&(a.ir.setGroupProperty(PropertyInterface(\"Inner Radius\",s)),a.is.setGroupProperty(PropertyInterface(\"Inner Roundness\",s))),Object.defineProperties(r,{position:{get:ExpressionPropertyInterface(a.p)},rotation:{get:ExpressionPropertyInterface(a.r)},points:{get:ExpressionPropertyInterface(a.pt)},outerRadius:{get:ExpressionPropertyInterface(a.or)},outerRoundness:{get:ExpressionPropertyInterface(a.os)},innerRadius:{get:ExpressionPropertyInterface(a.ir)},innerRoundness:{get:ExpressionPropertyInterface(a.is)},_name:{value:t.nm}}),r.mn=t.mn,r}function p(t,e,i){function r(e){return t.p.ix===e?r.position:t.r.ix===e?r.roundness:t.s.ix===e||\"Size\"===e||\"ADBE Vector Rect Size\"===e?r.size:null}var s=propertyGroupFactory(r,i),a=\"tm\"===e.sh.ty?e.sh.prop:e.sh;return r.propertyIndex=t.ix,a.p.setGroupProperty(PropertyInterface(\"Position\",s)),a.s.setGroupProperty(PropertyInterface(\"Size\",s)),a.r.setGroupProperty(PropertyInterface(\"Rotation\",s)),Object.defineProperties(r,{position:{get:ExpressionPropertyInterface(a.p)},roundness:{get:ExpressionPropertyInterface(a.r)},size:{get:ExpressionPropertyInterface(a.s)},_name:{value:t.nm}}),r.mn=t.mn,r}function f(t,e,i){function r(e){return t.r.ix===e||\"Round Corners 1\"===e?r.radius:null}var s=propertyGroupFactory(r,i),a=e;return r.propertyIndex=t.ix,a.rd.setGroupProperty(PropertyInterface(\"Radius\",s)),Object.defineProperties(r,{radius:{get:ExpressionPropertyInterface(a.rd)},_name:{value:t.nm}}),r.mn=t.mn,r}function m(t,e,i){function r(e){return t.c.ix===e||\"Copies\"===e?r.copies:t.o.ix===e||\"Offset\"===e?r.offset:null}var s=propertyGroupFactory(r,i),a=e;return r.propertyIndex=t.ix,a.c.setGroupProperty(PropertyInterface(\"Copies\",s)),a.o.setGroupProperty(PropertyInterface(\"Offset\",s)),Object.defineProperties(r,{copies:{get:ExpressionPropertyInterface(a.c)},offset:{get:ExpressionPropertyInterface(a.o)},_name:{value:t.nm}}),r.mn=t.mn,r}return function(e,i,r){var s;function a(t){if(\"number\"==typeof t)return 0===(t=void 0===t?1:t)?r:s[t-1];for(var e=0,i=s.length;e<i;){if(s[e]._name===t)return s[e];e+=1}return null}return a.propertyGroup=propertyGroupFactory(a,(function(){return r})),s=t(e,i,a.propertyGroup),a.numProperties=s.length,a._name=\"Contents\",a}}(),TextExpressionInterface=function(t){var e;function i(t){return\"ADBE Text Document\"===t?i.sourceText:null}return Object.defineProperty(i,\"sourceText\",{get:function(){t.textProperty.getValue();var i=t.textProperty.currentData.t;return e&&i===e.value||((e=new String(i)).value=i||new String(i),Object.defineProperty(e,\"style\",{get:function(){return{fillColor:t.textProperty.currentData.fc}}})),e}}),i};function _typeof(t){return _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},_typeof(t)}var FootageInterface=(dataInterfaceFactory=function(t){function e(t){return\"Outline\"===t?e.outlineInterface():null}return e._name=\"Outline\",e.outlineInterface=function(t){var e=\"\",i=t.getFootageData();function r(t){if(i[t])return e=t,\"object\"===_typeof(i=i[t])?r:i;var s=t.indexOf(e);if(-1!==s){var a=parseInt(t.substr(s+e.length),10);return\"object\"===_typeof(i=i[a])?r:i}return\"\"}return function(){return e=\"\",i=t.getFootageData(),r}}(t),e},function(t){function e(t){return\"Data\"===t?e.dataInterface:null}return e._name=\"Data\",e.dataInterface=dataInterfaceFactory(t),e}),dataInterfaceFactory,interfaces={layer:LayerExpressionInterface,effects:EffectsExpressionInterface,comp:CompExpressionInterface,shape:ShapeExpressionInterface,text:TextExpressionInterface,footage:FootageInterface};function getInterface(t){return interfaces[t]||null}var expressionHelpers={searchExpressions:function(t,e,i){e.x&&(i.k=!0,i.x=!0,i.initiateExpression=ExpressionManager.initiateExpression,i.effectsSequence.push(i.initiateExpression(t,e,i).bind(i)))},getSpeedAtTime:function(t){var e=this.getValueAtTime(t),i=this.getValueAtTime(t+-.01),r=0;if(e.length){var s;for(s=0;s<e.length;s+=1)r+=Math.pow(i[s]-e[s],2);r=100*Math.sqrt(r)}else r=0;return r},getVelocityAtTime:function(t){if(void 0!==this.vel)return this.vel;var e,i,r=-.001,s=this.getValueAtTime(t),a=this.getValueAtTime(t+r);if(s.length)for(e=createTypedArray(\"float32\",s.length),i=0;i<s.length;i+=1)e[i]=(a[i]-s[i])/r;else e=(a-s)/r;return e},getValueAtTime:function(t){return t*=this.elem.globalData.frameRate,(t-=this.offsetTime)!==this._cachingAtTime.lastFrame&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastFrame<t?this._cachingAtTime.lastIndex:0,this._cachingAtTime.value=this.interpolateValue(t,this._cachingAtTime),this._cachingAtTime.lastFrame=t),this._cachingAtTime.value},getStaticValueAtTime:function(){return this.pv},setGroupProperty:function(t){this.propertyGroup=t}};function addPropertyDecorator(){function t(t,e,i){if(!this.k||!this.keyframes)return this.pv;t=t?t.toLowerCase():\"\";var r,s,a,n,o,h=this.comp.renderedFrame,l=this.keyframes,p=l[l.length-1].t;if(h<=p)return this.pv;if(i?s=p-(r=e?Math.abs(p-this.elem.comp.globalData.frameRate*e):Math.max(0,p-this.elem.data.ip)):((!e||e>l.length-1)&&(e=l.length-1),r=p-(s=l[l.length-1-e].t)),\"pingpong\"===t){if(Math.floor((h-s)/r)%2!=0)return this.getValueAtTime((r-(h-s)%r+s)/this.comp.globalData.frameRate,0)}else{if(\"offset\"===t){var f=this.getValueAtTime(s/this.comp.globalData.frameRate,0),m=this.getValueAtTime(p/this.comp.globalData.frameRate,0),c=this.getValueAtTime(((h-s)%r+s)/this.comp.globalData.frameRate,0),d=Math.floor((h-s)/r);if(this.pv.length){for(n=(o=new Array(f.length)).length,a=0;a<n;a+=1)o[a]=(m[a]-f[a])*d+c[a];return o}return(m-f)*d+c}if(\"continue\"===t){var u=this.getValueAtTime(p/this.comp.globalData.frameRate,0),y=this.getValueAtTime((p-.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(n=(o=new Array(u.length)).length,a=0;a<n;a+=1)o[a]=u[a]+(u[a]-y[a])*((h-p)/this.comp.globalData.frameRate)/5e-4;return o}return u+(h-p)/.001*(u-y)}}return this.getValueAtTime(((h-s)%r+s)/this.comp.globalData.frameRate,0)}function e(t,e,i){if(!this.k)return this.pv;t=t?t.toLowerCase():\"\";var r,s,a,n,o,h=this.comp.renderedFrame,l=this.keyframes,p=l[0].t;if(h>=p)return this.pv;if(i?s=p+(r=e?Math.abs(this.elem.comp.globalData.frameRate*e):Math.max(0,this.elem.data.op-p)):((!e||e>l.length-1)&&(e=l.length-1),r=(s=l[e].t)-p),\"pingpong\"===t){if(Math.floor((p-h)/r)%2==0)return this.getValueAtTime(((p-h)%r+p)/this.comp.globalData.frameRate,0)}else{if(\"offset\"===t){var f=this.getValueAtTime(p/this.comp.globalData.frameRate,0),m=this.getValueAtTime(s/this.comp.globalData.frameRate,0),c=this.getValueAtTime((r-(p-h)%r+p)/this.comp.globalData.frameRate,0),d=Math.floor((p-h)/r)+1;if(this.pv.length){for(n=(o=new Array(f.length)).length,a=0;a<n;a+=1)o[a]=c[a]-(m[a]-f[a])*d;return o}return c-(m-f)*d}if(\"continue\"===t){var u=this.getValueAtTime(p/this.comp.globalData.frameRate,0),y=this.getValueAtTime((p+.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(n=(o=new Array(u.length)).length,a=0;a<n;a+=1)o[a]=u[a]+(u[a]-y[a])*(p-h)/.001;return o}return u+(u-y)*(p-h)/.001}}return this.getValueAtTime((r-((p-h)%r+p))/this.comp.globalData.frameRate,0)}function i(t,e){if(!this.k)return this.pv;if(t=.5*(t||.4),(e=Math.floor(e||5))<=1)return this.pv;var i,r,s=this.comp.renderedFrame/this.comp.globalData.frameRate,a=s-t,n=e>1?(s+t-a)/(e-1):1,o=0,h=0;for(i=this.pv.length?createTypedArray(\"float32\",this.pv.length):0;o<e;){if(r=this.getValueAtTime(a+o*n),this.pv.length)for(h=0;h<this.pv.length;h+=1)i[h]+=r[h];else i+=r;o+=1}if(this.pv.length)for(h=0;h<this.pv.length;h+=1)i[h]/=e;else i/=e;return i}function r(t){this._transformCachingAtTime||(this._transformCachingAtTime={v:new Matrix});var e=this._transformCachingAtTime.v;if(e.cloneFromProps(this.pre.props),this.appliedTransformations<1){var i=this.a.getValueAtTime(t);e.translate(-i[0]*this.a.mult,-i[1]*this.a.mult,i[2]*this.a.mult)}if(this.appliedTransformations<2){var r=this.s.getValueAtTime(t);e.scale(r[0]*this.s.mult,r[1]*this.s.mult,r[2]*this.s.mult)}if(this.sk&&this.appliedTransformations<3){var s=this.sk.getValueAtTime(t),a=this.sa.getValueAtTime(t);e.skewFromAxis(-s*this.sk.mult,a*this.sa.mult)}if(this.r&&this.appliedTransformations<4){var n=this.r.getValueAtTime(t);e.rotate(-n*this.r.mult)}else if(!this.r&&this.appliedTransformations<4){var o=this.rz.getValueAtTime(t),h=this.ry.getValueAtTime(t),l=this.rx.getValueAtTime(t),p=this.or.getValueAtTime(t);e.rotateZ(-o*this.rz.mult).rotateY(h*this.ry.mult).rotateX(l*this.rx.mult).rotateZ(-p[2]*this.or.mult).rotateY(p[1]*this.or.mult).rotateX(p[0]*this.or.mult)}if(this.data.p&&this.data.p.s){var f=this.px.getValueAtTime(t),m=this.py.getValueAtTime(t);if(this.data.p.z){var c=this.pz.getValueAtTime(t);e.translate(f*this.px.mult,m*this.py.mult,-c*this.pz.mult)}else e.translate(f*this.px.mult,m*this.py.mult,0)}else{var d=this.p.getValueAtTime(t);e.translate(d[0]*this.p.mult,d[1]*this.p.mult,-d[2]*this.p.mult)}return e}function s(){return this.v.clone(new Matrix)}var a=TransformPropertyFactory.getTransformProperty;TransformPropertyFactory.getTransformProperty=function(t,e,i){var n=a(t,e,i);return n.dynamicProperties.length?n.getValueAtTime=r.bind(n):n.getValueAtTime=s.bind(n),n.setGroupProperty=expressionHelpers.setGroupProperty,n};var n=PropertyFactory.getProp;PropertyFactory.getProp=function(r,s,a,o,h){var l=n(r,s,a,o,h);l.kf?l.getValueAtTime=expressionHelpers.getValueAtTime.bind(l):l.getValueAtTime=expressionHelpers.getStaticValueAtTime.bind(l),l.setGroupProperty=expressionHelpers.setGroupProperty,l.loopOut=t,l.loopIn=e,l.smooth=i,l.getVelocityAtTime=expressionHelpers.getVelocityAtTime.bind(l),l.getSpeedAtTime=expressionHelpers.getSpeedAtTime.bind(l),l.numKeys=1===s.a?s.k.length:0,l.propertyIndex=s.ix;var p=0;return 0!==a&&(p=createTypedArray(\"float32\",1===s.a?s.k[0].s.length:s.k.length)),l._cachingAtTime={lastFrame:initialDefaultFrame,lastIndex:0,value:p},expressionHelpers.searchExpressions(r,s,l),l.k&&h.addDynamicProperty(l),l};var o=ShapePropertyFactory.getConstructorFunction(),h=ShapePropertyFactory.getKeyframedConstructorFunction();function l(){}l.prototype={vertices:function(t,e){this.k&&this.getValue();var i,r=this.v;void 0!==e&&(r=this.getValueAtTime(e,0));var s=r._length,a=r[t],n=r.v,o=createSizedArray(s);for(i=0;i<s;i+=1)o[i]=\"i\"===t||\"o\"===t?[a[i][0]-n[i][0],a[i][1]-n[i][1]]:[a[i][0],a[i][1]];return o},points:function(t){return this.vertices(\"v\",t)},inTangents:function(t){return this.vertices(\"i\",t)},outTangents:function(t){return this.vertices(\"o\",t)},isClosed:function(){return this.v.c},pointOnPath:function(t,e){var i=this.v;void 0!==e&&(i=this.getValueAtTime(e,0)),this._segmentsLength||(this._segmentsLength=bez.getSegmentsLength(i));for(var r,s=this._segmentsLength,a=s.lengths,n=s.totalLength*t,o=0,h=a.length,l=0;o<h;){if(l+a[o].addedLength>n){var p=o,f=i.c&&o===h-1?0:o+1,m=(n-l)/a[o].addedLength;r=bez.getPointInSegment(i.v[p],i.v[f],i.o[p],i.i[f],m,a[o]);break}l+=a[o].addedLength,o+=1}return r||(r=i.c?[i.v[0][0],i.v[0][1]]:[i.v[i._length-1][0],i.v[i._length-1][1]]),r},vectorOnPath:function(t,e,i){1==t?t=this.v.c:0==t&&(t=.999);var r=this.pointOnPath(t,e),s=this.pointOnPath(t+.001,e),a=s[0]-r[0],n=s[1]-r[1],o=Math.sqrt(Math.pow(a,2)+Math.pow(n,2));return 0===o?[0,0]:\"tangent\"===i?[a/o,n/o]:[-n/o,a/o]},tangentOnPath:function(t,e){return this.vectorOnPath(t,e,\"tangent\")},normalOnPath:function(t,e){return this.vectorOnPath(t,e,\"normal\")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([l],o),extendPrototype([l],h),h.prototype.getValueAtTime=function(t){return this._cachingAtTime||(this._cachingAtTime={shapeValue:shapePool.clone(this.pv),lastIndex:0,lastTime:initialDefaultFrame}),t*=this.elem.globalData.frameRate,(t-=this.offsetTime)!==this._cachingAtTime.lastTime&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastTime<t?this._caching.lastIndex:0,this._cachingAtTime.lastTime=t,this.interpolateShape(t,this._cachingAtTime.shapeValue,this._cachingAtTime)),this._cachingAtTime.shapeValue},h.prototype.initiateExpression=ExpressionManager.initiateExpression;var p=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(t,e,i,r,s){var a=p(t,e,i,r,s);return a.propertyIndex=e.ix,a.lock=!1,3===i?expressionHelpers.searchExpressions(t,e.pt,a):4===i&&expressionHelpers.searchExpressions(t,e.ks,a),a.k&&t.addDynamicProperty(a),a}}function initialize$1(){addPropertyDecorator()}function addDecorator(){TextProperty.prototype.getExpressionValue=function(t,e){var i=this.calculateExpression(e);if(t.t!==i){var r={};return this.copyData(r,t),r.t=i.toString(),r.__complete=!1,r}return t},TextProperty.prototype.searchProperty=function(){var t=this.searchKeyframes(),e=this.searchExpressions();return this.kf=t||e,this.kf},TextProperty.prototype.searchExpressions=function(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}}function initialize(){addDecorator()}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function(t,e){var i,r,s=createNS(\"feMerge\");for(s.setAttribute(\"result\",t),r=0;r<e.length;r+=1)(i=createNS(\"feMergeNode\")).setAttribute(\"in\",e[r]),s.appendChild(i),s.appendChild(i);return s}};var linearFilterValue=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0\";function SVGTintFilter(t,e,i,r,s){this.filterManager=e;var a=createNS(\"feColorMatrix\");a.setAttribute(\"type\",\"matrix\"),a.setAttribute(\"color-interpolation-filters\",\"linearRGB\"),a.setAttribute(\"values\",linearFilterValue+\" 1 0\"),this.linearFilter=a,a.setAttribute(\"result\",r+\"_tint_1\"),t.appendChild(a),(a=createNS(\"feColorMatrix\")).setAttribute(\"type\",\"matrix\"),a.setAttribute(\"color-interpolation-filters\",\"sRGB\"),a.setAttribute(\"values\",\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\"),a.setAttribute(\"result\",r+\"_tint_2\"),t.appendChild(a),this.matrixFilter=a;var n=this.createMergeNode(r,[s,r+\"_tint_1\",r+\"_tint_2\"]);t.appendChild(n)}function SVGFillFilter(t,e,i,r){this.filterManager=e;var s=createNS(\"feColorMatrix\");s.setAttribute(\"type\",\"matrix\"),s.setAttribute(\"color-interpolation-filters\",\"sRGB\"),s.setAttribute(\"values\",\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\"),s.setAttribute(\"result\",r),t.appendChild(s),this.matrixFilter=s}function SVGStrokeEffect(t,e,i){this.initialized=!1,this.filterManager=e,this.elem=i,this.paths=[]}function SVGTritoneFilter(t,e,i,r){this.filterManager=e;var s=createNS(\"feColorMatrix\");s.setAttribute(\"type\",\"matrix\"),s.setAttribute(\"color-interpolation-filters\",\"linearRGB\"),s.setAttribute(\"values\",\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"),t.appendChild(s);var a=createNS(\"feComponentTransfer\");a.setAttribute(\"color-interpolation-filters\",\"sRGB\"),a.setAttribute(\"result\",r),this.matrixFilter=a;var n=createNS(\"feFuncR\");n.setAttribute(\"type\",\"table\"),a.appendChild(n),this.feFuncR=n;var o=createNS(\"feFuncG\");o.setAttribute(\"type\",\"table\"),a.appendChild(o),this.feFuncG=o;var h=createNS(\"feFuncB\");h.setAttribute(\"type\",\"table\"),a.appendChild(h),this.feFuncB=h,t.appendChild(a)}function SVGProLevelsFilter(t,e,i,r){this.filterManager=e;var s=this.filterManager.effectElements,a=createNS(\"feComponentTransfer\");(s[10].p.k||0!==s[10].p.v||s[11].p.k||1!==s[11].p.v||s[12].p.k||1!==s[12].p.v||s[13].p.k||0!==s[13].p.v||s[14].p.k||1!==s[14].p.v)&&(this.feFuncR=this.createFeFunc(\"feFuncR\",a)),(s[17].p.k||0!==s[17].p.v||s[18].p.k||1!==s[18].p.v||s[19].p.k||1!==s[19].p.v||s[20].p.k||0!==s[20].p.v||s[21].p.k||1!==s[21].p.v)&&(this.feFuncG=this.createFeFunc(\"feFuncG\",a)),(s[24].p.k||0!==s[24].p.v||s[25].p.k||1!==s[25].p.v||s[26].p.k||1!==s[26].p.v||s[27].p.k||0!==s[27].p.v||s[28].p.k||1!==s[28].p.v)&&(this.feFuncB=this.createFeFunc(\"feFuncB\",a)),(s[31].p.k||0!==s[31].p.v||s[32].p.k||1!==s[32].p.v||s[33].p.k||1!==s[33].p.v||s[34].p.k||0!==s[34].p.v||s[35].p.k||1!==s[35].p.v)&&(this.feFuncA=this.createFeFunc(\"feFuncA\",a)),(this.feFuncR||this.feFuncG||this.feFuncB||this.feFuncA)&&(a.setAttribute(\"color-interpolation-filters\",\"sRGB\"),t.appendChild(a)),(s[3].p.k||0!==s[3].p.v||s[4].p.k||1!==s[4].p.v||s[5].p.k||1!==s[5].p.v||s[6].p.k||0!==s[6].p.v||s[7].p.k||1!==s[7].p.v)&&((a=createNS(\"feComponentTransfer\")).setAttribute(\"color-interpolation-filters\",\"sRGB\"),a.setAttribute(\"result\",r),t.appendChild(a),this.feFuncRComposed=this.createFeFunc(\"feFuncR\",a),this.feFuncGComposed=this.createFeFunc(\"feFuncG\",a),this.feFuncBComposed=this.createFeFunc(\"feFuncB\",a))}function SVGDropShadowEffect(t,e,i,r,s){var a=e.container.globalData.renderConfig.filterSize,n=e.data.fs||a;t.setAttribute(\"x\",n.x||a.x),t.setAttribute(\"y\",n.y||a.y),t.setAttribute(\"width\",n.width||a.width),t.setAttribute(\"height\",n.height||a.height),this.filterManager=e;var o=createNS(\"feGaussianBlur\");o.setAttribute(\"in\",\"SourceAlpha\"),o.setAttribute(\"result\",r+\"_drop_shadow_1\"),o.setAttribute(\"stdDeviation\",\"0\"),this.feGaussianBlur=o,t.appendChild(o);var h=createNS(\"feOffset\");h.setAttribute(\"dx\",\"25\"),h.setAttribute(\"dy\",\"0\"),h.setAttribute(\"in\",r+\"_drop_shadow_1\"),h.setAttribute(\"result\",r+\"_drop_shadow_2\"),this.feOffset=h,t.appendChild(h);var l=createNS(\"feFlood\");l.setAttribute(\"flood-color\",\"#00ff00\"),l.setAttribute(\"flood-opacity\",\"1\"),l.setAttribute(\"result\",r+\"_drop_shadow_3\"),this.feFlood=l,t.appendChild(l);var p=createNS(\"feComposite\");p.setAttribute(\"in\",r+\"_drop_shadow_3\"),p.setAttribute(\"in2\",r+\"_drop_shadow_2\"),p.setAttribute(\"operator\",\"in\"),p.setAttribute(\"result\",r+\"_drop_shadow_4\"),t.appendChild(p);var f=this.createMergeNode(r,[r+\"_drop_shadow_4\",s]);t.appendChild(f)}extendPrototype([SVGComposableEffect],SVGTintFilter),SVGTintFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[0].p.v,i=this.filterManager.effectElements[1].p.v,r=this.filterManager.effectElements[2].p.v/100;this.linearFilter.setAttribute(\"values\",linearFilterValue+\" \"+r+\" 0\"),this.matrixFilter.setAttribute(\"values\",i[0]-e[0]+\" 0 0 0 \"+e[0]+\" \"+(i[1]-e[1])+\" 0 0 0 \"+e[1]+\" \"+(i[2]-e[2])+\" 0 0 0 \"+e[2]+\" 0 0 0 1 0\")}},SVGFillFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[2].p.v,i=this.filterManager.effectElements[6].p.v;this.matrixFilter.setAttribute(\"values\",\"0 0 0 0 \"+e[0]+\" 0 0 0 0 \"+e[1]+\" 0 0 0 0 \"+e[2]+\" 0 0 0 \"+i+\" 0\")}},SVGStrokeEffect.prototype.initialize=function(){var t,e,i,r,s=this.elem.layerElement.children||this.elem.layerElement.childNodes;for(1===this.filterManager.effectElements[1].p.v?(r=this.elem.maskManager.masksProperties.length,i=0):r=(i=this.filterManager.effectElements[0].p.v-1)+1,(e=createNS(\"g\")).setAttribute(\"fill\",\"none\"),e.setAttribute(\"stroke-linecap\",\"round\"),e.setAttribute(\"stroke-dashoffset\",1);i<r;i+=1)t=createNS(\"path\"),e.appendChild(t),this.paths.push({p:t,m:i});if(3===this.filterManager.effectElements[10].p.v){var a=createNS(\"mask\"),n=createElementID();a.setAttribute(\"id\",n),a.setAttribute(\"mask-type\",\"alpha\"),a.appendChild(e),this.elem.globalData.defs.appendChild(a);var o=createNS(\"g\");for(o.setAttribute(\"mask\",\"url(\"+getLocationHref()+\"#\"+n+\")\");s[0];)o.appendChild(s[0]);this.elem.layerElement.appendChild(o),this.masker=a,e.setAttribute(\"stroke\",\"#fff\")}else if(1===this.filterManager.effectElements[10].p.v||2===this.filterManager.effectElements[10].p.v){if(2===this.filterManager.effectElements[10].p.v)for(s=this.elem.layerElement.children||this.elem.layerElement.childNodes;s.length;)this.elem.layerElement.removeChild(s[0]);this.elem.layerElement.appendChild(e),this.elem.layerElement.removeAttribute(\"mask\"),e.setAttribute(\"stroke\",\"#fff\")}this.initialized=!0,this.pathMasker=e},SVGStrokeEffect.prototype.renderFrame=function(t){var e;this.initialized||this.initialize();var i,r,s=this.paths.length;for(e=0;e<s;e+=1)if(-1!==this.paths[e].m&&(i=this.elem.maskManager.viewData[this.paths[e].m],r=this.paths[e].p,(t||this.filterManager._mdf||i.prop._mdf)&&r.setAttribute(\"d\",i.lastPath),t||this.filterManager.effectElements[9].p._mdf||this.filterManager.effectElements[4].p._mdf||this.filterManager.effectElements[7].p._mdf||this.filterManager.effectElements[8].p._mdf||i.prop._mdf)){var a;if(0!==this.filterManager.effectElements[7].p.v||100!==this.filterManager.effectElements[8].p.v){var n=.01*Math.min(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v),o=.01*Math.max(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v),h=r.getTotalLength();a=\"0 0 0 \"+h*n+\" \";var l,p=h*(o-n),f=1+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01,m=Math.floor(p/f);for(l=0;l<m;l+=1)a+=\"1 \"+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01+\" \";a+=\"0 \"+10*h+\" 0 0\"}else a=\"1 \"+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01;r.setAttribute(\"stroke-dasharray\",a)}if((t||this.filterManager.effectElements[4].p._mdf)&&this.pathMasker.setAttribute(\"stroke-width\",2*this.filterManager.effectElements[4].p.v),(t||this.filterManager.effectElements[6].p._mdf)&&this.pathMasker.setAttribute(\"opacity\",this.filterManager.effectElements[6].p.v),(1===this.filterManager.effectElements[10].p.v||2===this.filterManager.effectElements[10].p.v)&&(t||this.filterManager.effectElements[3].p._mdf)){var c=this.filterManager.effectElements[3].p.v;this.pathMasker.setAttribute(\"stroke\",\"rgb(\"+bmFloor(255*c[0])+\",\"+bmFloor(255*c[1])+\",\"+bmFloor(255*c[2])+\")\")}},SVGTritoneFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[0].p.v,i=this.filterManager.effectElements[1].p.v,r=this.filterManager.effectElements[2].p.v,s=r[0]+\" \"+i[0]+\" \"+e[0],a=r[1]+\" \"+i[1]+\" \"+e[1],n=r[2]+\" \"+i[2]+\" \"+e[2];this.feFuncR.setAttribute(\"tableValues\",s),this.feFuncG.setAttribute(\"tableValues\",a),this.feFuncB.setAttribute(\"tableValues\",n)}},SVGProLevelsFilter.prototype.createFeFunc=function(t,e){var i=createNS(t);return i.setAttribute(\"type\",\"table\"),e.appendChild(i),i},SVGProLevelsFilter.prototype.getTableValue=function(t,e,i,r,s){for(var a,n,o=0,h=Math.min(t,e),l=Math.max(t,e),p=Array.call(null,{length:256}),f=0,m=s-r,c=e-t;o<=256;)n=(a=o/256)<=h?c<0?s:r:a>=l?c<0?r:s:r+m*Math.pow((a-t)/c,1/i),p[f]=n,f+=1,o+=256/255;return p.join(\" \")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,i=this.filterManager.effectElements;this.feFuncRComposed&&(t||i[3].p._mdf||i[4].p._mdf||i[5].p._mdf||i[6].p._mdf||i[7].p._mdf)&&(e=this.getTableValue(i[3].p.v,i[4].p.v,i[5].p.v,i[6].p.v,i[7].p.v),this.feFuncRComposed.setAttribute(\"tableValues\",e),this.feFuncGComposed.setAttribute(\"tableValues\",e),this.feFuncBComposed.setAttribute(\"tableValues\",e)),this.feFuncR&&(t||i[10].p._mdf||i[11].p._mdf||i[12].p._mdf||i[13].p._mdf||i[14].p._mdf)&&(e=this.getTableValue(i[10].p.v,i[11].p.v,i[12].p.v,i[13].p.v,i[14].p.v),this.feFuncR.setAttribute(\"tableValues\",e)),this.feFuncG&&(t||i[17].p._mdf||i[18].p._mdf||i[19].p._mdf||i[20].p._mdf||i[21].p._mdf)&&(e=this.getTableValue(i[17].p.v,i[18].p.v,i[19].p.v,i[20].p.v,i[21].p.v),this.feFuncG.setAttribute(\"tableValues\",e)),this.feFuncB&&(t||i[24].p._mdf||i[25].p._mdf||i[26].p._mdf||i[27].p._mdf||i[28].p._mdf)&&(e=this.getTableValue(i[24].p.v,i[25].p.v,i[26].p.v,i[27].p.v,i[28].p.v),this.feFuncB.setAttribute(\"tableValues\",e)),this.feFuncA&&(t||i[31].p._mdf||i[32].p._mdf||i[33].p._mdf||i[34].p._mdf||i[35].p._mdf)&&(e=this.getTableValue(i[31].p.v,i[32].p.v,i[33].p.v,i[34].p.v,i[35].p.v),this.feFuncA.setAttribute(\"tableValues\",e))}},extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute(\"stdDeviation\",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute(\"flood-color\",rgbToHex(Math.round(255*e[0]),Math.round(255*e[1]),Math.round(255*e[2])))}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute(\"flood-opacity\",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var i=this.filterManager.effectElements[3].p.v,r=(this.filterManager.effectElements[2].p.v-90)*degToRads,s=i*Math.cos(r),a=i*Math.sin(r);this.feOffset.setAttribute(\"dx\",s),this.feOffset.setAttribute(\"dy\",a)}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,i){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=i,i.matteElement=createNS(\"g\"),i.matteElement.appendChild(i.layerElement),i.matteElement.appendChild(i.transformedElement),i.baseElement=i.matteElement}function SVGGaussianBlurEffect(t,e,i,r){t.setAttribute(\"x\",\"-100%\"),t.setAttribute(\"y\",\"-100%\"),t.setAttribute(\"width\",\"300%\"),t.setAttribute(\"height\",\"300%\"),this.filterManager=e;var s=createNS(\"feGaussianBlur\");s.setAttribute(\"result\",r),t.appendChild(s),this.feGaussianBlur=s}function TransformEffect(){}function SVGTransformEffect(t,e){this.init(e)}function CVTransformEffect(t){this.init(t)}return SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,i=_svgMatteSymbols.length;e<i;){if(_svgMatteSymbols[e]===t)return _svgMatteSymbols[e];e+=1}return null},SVGMatte3Effect.prototype.replaceInParent=function(t,e){var i=t.layerElement.parentNode;if(i){for(var r,s=i.children,a=0,n=s.length;a<n&&s[a]!==t.layerElement;)a+=1;a<=n-2&&(r=s[a+1]);var o=createNS(\"use\");o.setAttribute(\"href\",\"#\"+e),r?i.insertBefore(o,r):i.appendChild(o)}},SVGMatte3Effect.prototype.setElementAsMask=function(t,e){if(!this.findSymbol(e)){var i=createElementID(),r=createNS(\"mask\");r.setAttribute(\"id\",e.layerId),r.setAttribute(\"mask-type\",\"alpha\"),_svgMatteSymbols.push(e);var s=t.globalData.defs;s.appendChild(r);var a=createNS(\"symbol\");a.setAttribute(\"id\",i),this.replaceInParent(e,i),a.appendChild(e.layerElement),s.appendChild(a);var n=createNS(\"use\");n.setAttribute(\"href\",\"#\"+i),r.appendChild(n),e.data.hd=!1,e.show()}t.setMatte(e.layerId)},SVGMatte3Effect.prototype.initialize=function(){for(var t=this.filterManager.effectElements[0].p.v,e=this.elem.comp.elements,i=0,r=e.length;i<r;)e[i]&&e[i].data.ind===t&&this.setElementAsMask(this.elem,e[i]),i+=1;this.initialized=!0},SVGMatte3Effect.prototype.renderFrame=function(){this.initialized||this.initialize()},SVGGaussianBlurEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=.3*this.filterManager.effectElements[0].p.v,i=this.filterManager.effectElements[1].p.v,r=3==i?0:e,s=2==i?0:e;this.feGaussianBlur.setAttribute(\"stdDeviation\",r+\" \"+s);var a=1==this.filterManager.effectElements[2].p.v?\"wrap\":\"duplicate\";this.feGaussianBlur.setAttribute(\"edgeMode\",a)}},TransformEffect.prototype.init=function(t){this.effectsManager=t,this.type=effectTypes.TRANSFORM_EFFECT,this.matrix=new Matrix,this.opacity=-1,this._mdf=!1,this._opMdf=!1},TransformEffect.prototype.renderFrame=function(t){if(this._opMdf=!1,this._mdf=!1,t||this.effectsManager._mdf){var e=this.effectsManager.effectElements,i=e[0].p.v,r=e[1].p.v,s=1===e[2].p.v,a=e[3].p.v,n=s?a:e[4].p.v,o=e[5].p.v,h=e[6].p.v,l=e[7].p.v;this.matrix.reset(),this.matrix.translate(-i[0],-i[1],i[2]),this.matrix.scale(.01*n,.01*a,1),this.matrix.rotate(-l*degToRads),this.matrix.skewFromAxis(-o*degToRads,(h+90)*degToRads),this.matrix.translate(r[0],r[1],0),this._mdf=!0,this.opacity!==e[8].p.v&&(this.opacity=e[8].p.v,this._opMdf=!0)}},extendPrototype([TransformEffect],SVGTransformEffect),extendPrototype([TransformEffect],CVTransformEffect),registerRenderer(\"canvas\",CanvasRenderer),registerRenderer(\"html\",HybridRenderer),registerRenderer(\"svg\",SVGRenderer),ShapeModifiers.registerModifier(\"tm\",TrimModifier),ShapeModifiers.registerModifier(\"pb\",PuckerAndBloatModifier),ShapeModifiers.registerModifier(\"rp\",RepeaterModifier),ShapeModifiers.registerModifier(\"rd\",RoundCornersModifier),ShapeModifiers.registerModifier(\"zz\",ZigZagModifier),ShapeModifiers.registerModifier(\"op\",OffsetPathModifier),setExpressionsPlugin(Expressions),setExpressionInterfaces(getInterface),initialize$1(),initialize(),registerEffect$1(20,SVGTintFilter,!0),registerEffect$1(21,SVGFillFilter,!0),registerEffect$1(22,SVGStrokeEffect,!1),registerEffect$1(23,SVGTritoneFilter,!0),registerEffect$1(24,SVGProLevelsFilter,!0),registerEffect$1(25,SVGDropShadowEffect,!0),registerEffect$1(28,SVGMatte3Effect,!1),registerEffect$1(29,SVGGaussianBlurEffect,!0),registerEffect$1(35,SVGTransformEffect,!1),registerEffect(35,CVTransformEffect),lottie}));\n"
  },
  {
    "path": "web/manifest.json",
    "content": "{\n    \"name\": \"ahl\",\n    \"short_name\": \"ahl\",\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#0175C2\",\n    \"theme_color\": \"#0175C2\",\n    \"description\": \"A new Flutter project.\",\n    \"orientation\": \"portrait-primary\",\n    \"prefer_related_applications\": false,\n    \"icons\": [\n        {\n            \"src\": \"icons/Icon-192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"icons/Icon-512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"icons/Icon-maskable-192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\",\n            \"purpose\": \"maskable\"\n        },\n        {\n            \"src\": \"icons/Icon-maskable-512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\",\n            \"purpose\": \"maskable\"\n        }\n    ]\n}\n"
  },
  {
    "path": "web/package.json",
    "content": "{\n  \"dependencies\": {\n    \"lottie-web\": \"^5.12.2\"\n  }\n}\n"
  },
  {
    "path": "web/site.webmanifest",
    "content": "{\n  \"name\": \"aujourdhuilavenir.org\",\n  \"short_name\": \"ahl\",\n  \"icons\": [\n    {\n      \"src\": \"/android-chrome-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/android-chrome-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ],\n  \"theme_color\": \"#ffffff\",\n  \"background_color\": \"#ffffff\",\n  \"display\": \"standalone\"\n}\n"
  },
  {
    "path": "web/sitemap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"https://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url>\n    <loc>https://ajourdhuilavenir.org</loc>\n    <lastmod>2024-11-03T14:38:00+02:00</lastmod>\n    <priority>1.0</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/projects/cantine</loc>\n    <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n    <priority>1.0</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/articles/construction_cantine</loc>\n    <lastmod>2024-11-03T14:38:00+02:00</lastmod>\n    <priority>1.0</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/articles/qui_est_laure_sabes</loc>\n    <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n    <priority>0.8</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/novena/saint_dominic_day_1</loc>\n    <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n    <priority>1</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/novena/saint_dominic_de_guzman</loc>\n    <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n    <priority>1</priority>\n  </url>\n  <url>\n    <loc>https://aujourdhuilavenir.org/novena/saint_dominic_day_2</loc>\n    <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n    <priority>0.8</priority>\n  </url>\n  <url>\n  <loc>https://aujourdhuilavenir.org/novena/saint_dominic_day_3</loc>\n  <lastmod>2024-07-31T18:22:00+02:00</lastmod>\n  <priority>0.8</priority>\n</url>\n</urlset>"
  },
  {
    "path": "web/style.css",
    "content": ".loader-div {\n  width: 100px;\n  height: 100px;\n  margin: 3em;\n}\n"
  }
]